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

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