vendor/pimcore/pimcore/models/Property.php line 26

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Commercial License (PCL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  14.  */
  15. namespace Pimcore\Model;
  16. use Pimcore\Model\Element\ElementInterface;
  17. use Pimcore\Model\Element\Service;
  18. /**
  19.  * @method \Pimcore\Model\Property\Dao getDao()
  20.  * @method void save()
  21.  */
  22. final class Property extends AbstractModel
  23. {
  24.     protected ?string $name null;
  25.     protected mixed $data null;
  26.     protected ?string $type null;
  27.     protected ?string $ctype null;
  28.     protected ?string $cpath null;
  29.     protected ?int $cid null;
  30.     protected bool $inheritable false;
  31.     protected bool $inherited false;
  32.     /**
  33.      * @internal
  34.      *
  35.      * @param mixed $data
  36.      *
  37.      * @return $this
  38.      */
  39.     public function setDataFromEditmode(mixed $data): static
  40.     {
  41.         // IMPORTANT: if you use this method be sure that the type of the property is already set
  42.         if (in_array($this->getType(), ['document''asset''object'])) {
  43.             $el Element\Service::getElementByPath($this->getType(), (string)$data);
  44.             $this->data null;
  45.             if ($el) {
  46.                 $this->data $el->getId();
  47.             }
  48.         } elseif ($this->type == 'bool') {
  49.             $this->data false;
  50.             if (!empty($data)) {
  51.                 $this->data true;
  52.             }
  53.         } else {
  54.             // plain text
  55.             $this->data $data;
  56.         }
  57.         return $this;
  58.     }
  59.     /**
  60.      * @internal
  61.      *
  62.      * @param mixed $data
  63.      *
  64.      * @return $this
  65.      */
  66.     public function setDataFromResource(mixed $data): static
  67.     {
  68.         // IMPORTANT: if you use this method be sure that the type of the property is already set
  69.         // do not set data for object, asset and document here, this is loaded dynamically when calling $this->getData();
  70.         if ($this->type == 'date') {
  71.             $this->data \Pimcore\Tool\Serialize::unserialize($data);
  72.         } elseif ($this->type == 'bool') {
  73.             $this->data false;
  74.             if (!empty($data)) {
  75.                 $this->data true;
  76.             }
  77.         } else {
  78.             // plain text
  79.             $this->data $data;
  80.         }
  81.         return $this;
  82.     }
  83.     public function getCid(): ?int
  84.     {
  85.         return $this->cid;
  86.     }
  87.     /**
  88.      * enum('document','asset','object')
  89.      */
  90.     public function getCtype(): ?string
  91.     {
  92.         return $this->ctype;
  93.     }
  94.     public function getData(): mixed
  95.     {
  96.         // lazy-load data of type asset, document, object
  97.         if (in_array($this->getType(), ['document''asset''object']) && !$this->data instanceof ElementInterface && is_numeric($this->data)) {
  98.             return Element\Service::getElementById($this->getType(), (int) $this->data);
  99.         }
  100.         return $this->data;
  101.     }
  102.     public function getName(): ?string
  103.     {
  104.         return $this->name;
  105.     }
  106.     /**
  107.      * enum('text','document','asset','object','bool','select')
  108.      */
  109.     public function getType(): ?string
  110.     {
  111.         return $this->type;
  112.     }
  113.     /**
  114.      * @return $this
  115.      */
  116.     public function setCid(int $cid): static
  117.     {
  118.         $this->cid $cid;
  119.         return $this;
  120.     }
  121.     /**
  122.      * enum('document','asset','object')
  123.      *
  124.      * @param string $ctype
  125.      *
  126.      * @return $this
  127.      */
  128.     public function setCtype(string $ctype): static
  129.     {
  130.         $this->ctype $ctype;
  131.         return $this;
  132.     }
  133.     /**
  134.      * @return $this
  135.      */
  136.     public function setData(mixed $data): static
  137.     {
  138.         if ($data instanceof ElementInterface) {
  139.             $this->setType(Service::getElementType($data));
  140.             $data $data->getId();
  141.         }
  142.         $this->data $data;
  143.         return $this;
  144.     }
  145.     /**
  146.      * @return $this
  147.      */
  148.     public function setName(string $name): static
  149.     {
  150.         $this->name $name;
  151.         return $this;
  152.     }
  153.     /**
  154.      * enum('text','document','asset','object','bool','select')
  155.      *
  156.      * @param string $type
  157.      *
  158.      * @return $this
  159.      */
  160.     public function setType(string $type): static
  161.     {
  162.         $this->type $type;
  163.         return $this;
  164.     }
  165.     public function getCpath(): ?string
  166.     {
  167.         return $this->cpath;
  168.     }
  169.     public function getInherited(): bool
  170.     {
  171.         return $this->inherited;
  172.     }
  173.     /**
  174.      * Alias for getInherited()
  175.      *
  176.      * @return bool
  177.      */
  178.     public function isInherited(): bool
  179.     {
  180.         return $this->getInherited();
  181.     }
  182.     /**
  183.      * @return $this
  184.      */
  185.     public function setCpath(?string $cpath): static
  186.     {
  187.         $this->cpath $cpath;
  188.         return $this;
  189.     }
  190.     /**
  191.      * @return $this
  192.      */
  193.     public function setInherited(bool $inherited): static
  194.     {
  195.         $this->inherited $inherited;
  196.         return $this;
  197.     }
  198.     public function getInheritable(): bool
  199.     {
  200.         return $this->inheritable;
  201.     }
  202.     /**
  203.      * @return $this
  204.      */
  205.     public function setInheritable(bool $inheritable): static
  206.     {
  207.         $this->inheritable $inheritable;
  208.         return $this;
  209.     }
  210.     /**
  211.      * @internal
  212.      *
  213.      * @return array
  214.      */
  215.     public function resolveDependencies(): array
  216.     {
  217.         $dependencies = [];
  218.         if ($this->getData() instanceof ElementInterface) {
  219.             $elementType Element\Service::getElementType($this->getData());
  220.             $key $elementType '_' $this->getData()->getId();
  221.             $dependencies[$key] = [
  222.                 'id' => $this->getData()->getId(),
  223.                 'type' => $elementType,
  224.             ];
  225.         }
  226.         return $dependencies;
  227.     }
  228.     /**
  229.      * Rewrites id from source to target, $idMapping contains
  230.      * array(
  231.      *  "document" => array(
  232.      *      SOURCE_ID => TARGET_ID,
  233.      *      SOURCE_ID => TARGET_ID
  234.      *  ),
  235.      *  "object" => array(...),
  236.      *  "asset" => array(...)
  237.      * )
  238.      *
  239.      * @param array $idMapping
  240.      *
  241.      * @internal
  242.      */
  243.     public function rewriteIds(array $idMapping): void
  244.     {
  245.         if (!$this->isInherited()) {
  246.             if (array_key_exists($this->getType(), $idMapping)) {
  247.                 if ($this->getData() instanceof ElementInterface) {
  248.                     if (array_key_exists((int) $this->getData()->getId(), $idMapping[$this->getType()])) {
  249.                         $this->setData(Element\Service::getElementById($this->getType(), $idMapping[$this->getType()][$this->getData()->getId()]));
  250.                     }
  251.                 }
  252.             }
  253.         }
  254.     }
  255.     /**
  256.      * @internal
  257.      *
  258.      * @return array
  259.      */
  260.     public function serialize(): array
  261.     {
  262.         return [
  263.           'name' => $this->getName(),
  264.           'type' => $this->getType(),
  265.           'data' => $this->getData(),
  266.         ];
  267.     }
  268. }