vendor/pimcore/pimcore/models/DataObject/Data/ObjectMetadata.php line 26

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Model\DataObject\Data;
  15. use Pimcore\Logger;
  16. use Pimcore\Model;
  17. use Pimcore\Model\DataObject;
  18. use Pimcore\Model\DataObject\Concrete;
  19. /**
  20.  * @method \Pimcore\Model\DataObject\Data\ObjectMetadata\Dao getDao()
  21.  */
  22. class ObjectMetadata extends Model\AbstractModel implements DataObject\OwnerAwareFieldInterface
  23. {
  24.     use DataObject\Traits\OwnerAwareFieldTrait;
  25.     /**
  26.      * @var DataObject\AbstractObject|null
  27.      */
  28.     protected $object;
  29.     /**
  30.      * @var int|null
  31.      */
  32.     protected $objectId;
  33.     /**
  34.      * @var string|null
  35.      */
  36.     protected $fieldname;
  37.     /**
  38.      * @var array
  39.      */
  40.     protected $columns = [];
  41.     /**
  42.      * @var array
  43.      */
  44.     protected $data = [];
  45.     /**
  46.      * @param string|null $fieldname
  47.      * @param array $columns
  48.      * @param Concrete|null $object
  49.      */
  50.     public function __construct($fieldname$columns = [], $object null)
  51.     {
  52.         $this->fieldname $fieldname;
  53.         $this->columns $columns;
  54.         $this->setObject($object);
  55.     }
  56.     /**
  57.      * @param Concrete|null $object
  58.      *
  59.      * @return $this
  60.      */
  61.     public function setObject(?Concrete $object)
  62.     {
  63.         $this->markMeDirty();
  64.         if (!$object) {
  65.             $this->setObjectId(null);
  66.             return $this;
  67.         }
  68.         $this->objectId $object->getId();
  69.         return $this;
  70.     }
  71.     /**
  72.      * @param string $name
  73.      * @param array $arguments
  74.      *
  75.      * @return mixed|void
  76.      *
  77.      * @throws \Exception
  78.      */
  79.     public function __call($name$arguments)
  80.     {
  81.         if (substr($name03) == 'get') {
  82.             $key substr($name3strlen($name) - 3);
  83.             $idx array_searchi($key$this->columns);
  84.             if ($idx !== false) {
  85.                 $correctedKey $this->columns[$idx];
  86.                 return isset($this->data[$correctedKey]) ? $this->data[$correctedKey] : null;
  87.             }
  88.             throw new \Exception("Requested data $key not available");
  89.         }
  90.         if (substr($name03) == 'set') {
  91.             $key substr($name3strlen($name) - 3);
  92.             $idx array_searchi($key$this->columns);
  93.             if ($idx !== false) {
  94.                 $correctedKey $this->columns[$idx];
  95.                 $this->data[$correctedKey] = $arguments[0];
  96.                 $this->markMeDirty();
  97.             } else {
  98.                 throw new \Exception("Requested data $key not available");
  99.             }
  100.         }
  101.     }
  102.     /**
  103.      * @param Concrete $object
  104.      * @param string $ownertype
  105.      * @param string $ownername
  106.      * @param string $position
  107.      * @param int $index
  108.      */
  109.     public function save($object$ownertype$ownername$position$index)
  110.     {
  111.         $this->getDao()->save($object$ownertype$ownername$position$index);
  112.     }
  113.     /**
  114.      * @param Concrete $source
  115.      * @param int $destinationId
  116.      * @param string $fieldname
  117.      * @param string $ownertype
  118.      * @param string $ownername
  119.      * @param string $position
  120.      * @param int $index
  121.      *
  122.      * @return ObjectMetadata|null
  123.      */
  124.     public function load(Concrete $source$destinationId$fieldname$ownertype$ownername$position$index)
  125.     {
  126.         $return $this->getDao()->load($source$destinationId$fieldname$ownertype$ownername$position$index);
  127.         $this->markMeDirty(false);
  128.         return $return;
  129.     }
  130.     /**
  131.      * @param string $fieldname
  132.      *
  133.      * @return $this
  134.      */
  135.     public function setFieldname($fieldname)
  136.     {
  137.         $this->fieldname $fieldname;
  138.         $this->markMeDirty();
  139.         return $this;
  140.     }
  141.     /**
  142.      * @return string|null
  143.      */
  144.     public function getFieldname()
  145.     {
  146.         return $this->fieldname;
  147.     }
  148.     /**
  149.      * @return Concrete|null
  150.      */
  151.     public function getObject()
  152.     {
  153.         if ($this->getObjectId()) {
  154.             $object Concrete::getById($this->getObjectId());
  155.             if (!$object) {
  156.                 Logger::info('object ' $this->getObjectId() . ' does not exist anymore');
  157.             }
  158.             return $object;
  159.         }
  160.         return null;
  161.     }
  162.     /**
  163.      * @param Concrete $element
  164.      *
  165.      * @return $this
  166.      */
  167.     public function setElement($element)
  168.     {
  169.         $this->markMeDirty();
  170.         return $this->setObject($element);
  171.     }
  172.     /**
  173.      * @return Concrete|null
  174.      */
  175.     public function getElement()
  176.     {
  177.         return $this->getObject();
  178.     }
  179.     /**
  180.      * @param array $columns
  181.      *
  182.      * @return $this
  183.      */
  184.     public function setColumns($columns)
  185.     {
  186.         $this->columns $columns;
  187.         $this->markMeDirty();
  188.         return $this;
  189.     }
  190.     /**
  191.      * @return array
  192.      */
  193.     public function getColumns()
  194.     {
  195.         return $this->columns;
  196.     }
  197.     /**
  198.      * @return array
  199.      */
  200.     public function getData(): array
  201.     {
  202.         return $this->data;
  203.     }
  204.     /**
  205.      * @param array $data
  206.      */
  207.     public function setData(array $data): void
  208.     {
  209.         $this->data $data;
  210.         $this->markMeDirty();
  211.     }
  212.     /**
  213.      * @return string
  214.      */
  215.     public function __toString()
  216.     {
  217.         return $this->getObject()->__toString();
  218.     }
  219.     /**
  220.      * @return int
  221.      */
  222.     public function getObjectId()
  223.     {
  224.         return (int) $this->objectId;
  225.     }
  226.     /**
  227.      * @param int|null $objectId
  228.      */
  229.     public function setObjectId($objectId)
  230.     {
  231.         $this->objectId $objectId;
  232.     }
  233.     public function __wakeup()
  234.     {
  235.         if ($this->object) {
  236.             $this->objectId $this->object->getId();
  237.         }
  238.     }
  239.     /**
  240.      * @return array
  241.      */
  242.     public function __sleep()
  243.     {
  244.         $finalVars = [];
  245.         $blockedVars = ['object'];
  246.         $vars parent::__sleep();
  247.         foreach ($vars as $value) {
  248.             if (!in_array($value$blockedVars)) {
  249.                 $finalVars[] = $value;
  250.             }
  251.         }
  252.         return $finalVars;
  253.     }
  254. }