vendor/pimcore/pimcore/models/Document/Editable/Relations.php line 27

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\Document\Editable;
  15. use Pimcore\Model;
  16. use Pimcore\Model\Asset;
  17. use Pimcore\Model\DataObject;
  18. use Pimcore\Model\Document;
  19. use Pimcore\Model\Element;
  20. /**
  21.  * @method \Pimcore\Model\Document\Editable\Dao getDao()
  22.  */
  23. class Relations extends Model\Document\Editable implements \IteratorIdRewriterInterfaceEditmodeDataInterfaceLazyLoadingInterface
  24. {
  25.     /**
  26.      * @internal
  27.      *
  28.      * @var Element\ElementInterface[]
  29.      */
  30.     protected $elements = [];
  31.     /**
  32.      * @internal
  33.      *
  34.      * @var array
  35.      */
  36.     protected $elementIds = [];
  37.     /**
  38.      * {@inheritdoc}
  39.      */
  40.     public function getType()
  41.     {
  42.         return 'relations';
  43.     }
  44.     /**
  45.      * @return $this
  46.      */
  47.     public function setElements()
  48.     {
  49.         if (empty($this->elements)) {
  50.             $this->elements = [];
  51.             foreach ($this->elementIds as $elementId) {
  52.                 $el Element\Service::getElementById($elementId['type'], $elementId['id']);
  53.                 if ($el instanceof Element\ElementInterface) {
  54.                     $this->elements[] = $el;
  55.                 }
  56.             }
  57.         }
  58.         return $this;
  59.     }
  60.     /**
  61.      * @return array
  62.      */
  63.     public function getElementIds()
  64.     {
  65.         return $this->elementIds;
  66.     }
  67.     /**
  68.      * {@inheritdoc}
  69.      */
  70.     public function getData()
  71.     {
  72.         $this->setElements();
  73.         return $this->elements;
  74.     }
  75.     /**
  76.      * {@inheritdoc}
  77.      */
  78.     public function getDataForResource()
  79.     {
  80.         return $this->elementIds;
  81.     }
  82.     /**
  83.      * {@inheritdoc}
  84.      */
  85.     public function getDataEditmode() /** : mixed */
  86.     {
  87.         $this->setElements();
  88.         $return = [];
  89.         if (is_array($this->elements) && count($this->elements) > 0) {
  90.             foreach ($this->elements as $element) {
  91.                 if ($element instanceof DataObject\Concrete) {
  92.                     $return[] = [$element->getId(), $element->getRealFullPath(), DataObject::OBJECT_TYPE_OBJECT$element->getClassName()];
  93.                 } elseif ($element instanceof DataObject\AbstractObject) {
  94.                     $return[] = [$element->getId(), $element->getRealFullPath(), DataObject::OBJECT_TYPE_OBJECTDataObject::OBJECT_TYPE_FOLDER];
  95.                 } elseif ($element instanceof Asset) {
  96.                     $return[] = [$element->getId(), $element->getRealFullPath(), 'asset'$element->getType()];
  97.                 } elseif ($element instanceof Document) {
  98.                     $return[] = [$element->getId(), $element->getRealFullPath(), 'document'$element->getType()];
  99.                 }
  100.             }
  101.         }
  102.         return $return;
  103.     }
  104.     /**
  105.      * {@inheritdoc}
  106.      */
  107.     public function frontend()
  108.     {
  109.         $this->setElements();
  110.         $return '';
  111.         foreach ($this->getElements() as $element) {
  112.             if ($element instanceof Element\ElementInterface) {
  113.                 $return .= Element\Service::getElementType($element) . ': ' $element->getFullPath() . '<br />';
  114.             }
  115.         }
  116.         return $return;
  117.     }
  118.     /**
  119.      * {@inheritdoc}
  120.      */
  121.     public function setDataFromResource($data)
  122.     {
  123.         if ($data \Pimcore\Tool\Serialize::unserialize($data)) {
  124.             $this->setDataFromEditmode($data);
  125.         }
  126.         return $this;
  127.     }
  128.     /**
  129.      * {@inheritdoc}
  130.      */
  131.     public function setDataFromEditmode($data)
  132.     {
  133.         if (is_array($data)) {
  134.             $this->elementIds $data;
  135.             $this->elements = [];
  136.         }
  137.         return $this;
  138.     }
  139.     /**
  140.      * @return Element\ElementInterface[]
  141.      */
  142.     public function getElements()
  143.     {
  144.         $this->setElements();
  145.         $elements = [];
  146.         foreach ($this->elements as $element) {
  147.             if (Element\Service::doHideUnpublished($element)) {
  148.                 if (Element\Service::isPublished($element)) {
  149.                     $elements[] = $element;
  150.                 }
  151.             } else {
  152.                 $elements[] = $element;
  153.             }
  154.         }
  155.         return $elements;
  156.     }
  157.     /**
  158.      * {@inheritdoc}
  159.      */
  160.     public function isEmpty()
  161.     {
  162.         $this->setElements();
  163.         return count($this->elements) > false true;
  164.     }
  165.     /**
  166.      * {@inheritdoc}
  167.      */
  168.     public function resolveDependencies()
  169.     {
  170.         $this->setElements();
  171.         $dependencies = [];
  172.         if (is_array($this->elements) && count($this->elements) > 0) {
  173.             foreach ($this->elements as $element) {
  174.                 if ($element instanceof Element\ElementInterface) {
  175.                     $elementType Element\Service::getElementType($element);
  176.                     $key $elementType '_' $element->getId();
  177.                     $dependencies[$key] = [
  178.                         'id' => $element->getId(),
  179.                         'type' => $elementType,
  180.                     ];
  181.                 }
  182.             }
  183.         }
  184.         return $dependencies;
  185.     }
  186.     /**
  187.      * { @inheritdoc }
  188.      */
  189.     public function rewriteIds($idMapping/** : void */
  190.     {
  191.         // reset existing elements store
  192.         $this->elements = [];
  193.         foreach ($this->elementIds as &$elementId) {
  194.             $type $elementId['type'];
  195.             $id $elementId['id'];
  196.             if (array_key_exists($type$idMapping) && array_key_exists((int) $id$idMapping[$type])) {
  197.                 $elementId['id'] = $idMapping[$type][$id];
  198.             }
  199.         }
  200.         $this->setElements();
  201.     }
  202.     /**
  203.      * {@inheritdoc}
  204.      */
  205.     public function __sleep()
  206.     {
  207.         $finalVars = [];
  208.         $parentVars parent::__sleep();
  209.         $blockedVars = ['elements'];
  210.         foreach ($parentVars as $key) {
  211.             if (!in_array($key$blockedVars)) {
  212.                 $finalVars[] = $key;
  213.             }
  214.         }
  215.         return $finalVars;
  216.     }
  217.     /**
  218.      * {@inheritdoc}
  219.      */
  220.     public function load() /** : void */
  221.     {
  222.         $this->setElements();
  223.     }
  224.     /**
  225.      * Methods for Iterator
  226.      */
  227.     /**
  228.      * @return void
  229.      */
  230.     #[\ReturnTypeWillChange]
  231.     public function rewind()// : void
  232.     {
  233.         $this->setElements();
  234.         reset($this->elements);
  235.     }
  236.     /**
  237.      * @return Element\ElementInterface|false
  238.      */
  239.     #[\ReturnTypeWillChange]
  240.     public function current()// : Element\ElementInterface|false
  241.     {
  242.         $this->setElements();
  243.         return current($this->elements);
  244.     }
  245.     /**
  246.      * @return int|null
  247.      */
  248.     #[\ReturnTypeWillChange]
  249.     public function key()// : int|null
  250.     {
  251.         $this->setElements();
  252.         return key($this->elements);
  253.     }
  254.     /**
  255.      * @return void
  256.      */
  257.     #[\ReturnTypeWillChange]
  258.     public function next()// : void
  259.     {
  260.         $this->setElements();
  261.         next($this->elements);
  262.     }
  263.     /**
  264.      * @return bool
  265.      */
  266.     #[\ReturnTypeWillChange]
  267.     public function valid()// : bool
  268.     {
  269.         $this->setElements();
  270.         $el $this->current();
  271.         if (Element\Service::doHideUnpublished($el)) {
  272.             if (!Element\Service::isPublished($el)) {
  273.                 $this->next();
  274.             }
  275.         }
  276.         return $this->current() !== false;
  277.     }
  278. }