vendor/pimcore/pimcore/lib/Templating/Renderer/EditableRenderer.php line 133

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\Templating\Renderer;
  15. use Pimcore\Document\Editable\EditmodeEditableDefinitionCollector;
  16. use Pimcore\Http\Request\Resolver\EditmodeResolver;
  17. use Pimcore\Model\Document\Editable;
  18. use Pimcore\Model\Document\Editable\Loader\EditableLoaderInterface;
  19. use Pimcore\Model\Document\PageSnippet;
  20. use Psr\Log\LoggerAwareInterface;
  21. use Psr\Log\LoggerAwareTrait;
  22. /**
  23.  * @internal
  24.  */
  25. class EditableRenderer implements LoggerAwareInterface
  26. {
  27.     use LoggerAwareTrait;
  28.     /**
  29.      * @var EditableLoaderInterface
  30.      */
  31.     protected $editableLoader;
  32.     /**
  33.      * @var EditmodeResolver
  34.      */
  35.     protected $editmodeResolver;
  36.     protected ?EditmodeEditableDefinitionCollector $configCollector;
  37.     /**
  38.      * @param EditableLoaderInterface $editableLoader
  39.      * @param EditmodeResolver $editmodeResolver
  40.      * @param EditmodeEditableDefinitionCollector $configCollector
  41.      */
  42.     public function __construct(EditableLoaderInterface $editableLoaderEditmodeResolver $editmodeResolverEditmodeEditableDefinitionCollector $configCollector)
  43.     {
  44.         $this->editableLoader $editableLoader;
  45.         $this->editmodeResolver $editmodeResolver;
  46.         $this->configCollector $configCollector;
  47.     }
  48.     /**
  49.      * @param string $type
  50.      *
  51.      * @return bool
  52.      */
  53.     public function editableExists($type)
  54.     {
  55.         return $this->editableLoader->supports($type);
  56.     }
  57.     /**
  58.      * @param PageSnippet $document
  59.      * @param string $type
  60.      * @param string $name
  61.      * @param array $config
  62.      * @param bool|null $editmode
  63.      *
  64.      * @return Editable\EditableInterface
  65.      *
  66.      * @throws \Exception
  67.      */
  68.     public function getEditable(PageSnippet $documentstring $typestring $name, array $config = [], bool $editmode null): Editable\EditableInterface
  69.     {
  70.         $type strtolower($type);
  71.         $originalName $name;
  72.         $name Editable::buildEditableName($type$originalName$document);
  73.         $realName Editable::buildEditableRealName($originalName$document);
  74.         if (null === $editmode) {
  75.             $editmode $this->editmodeResolver->isEditmode();
  76.         }
  77.         $editable $document->getEditable($name);
  78.         if ($editable instanceof Editable\EditableInterface && $editable->getType() === $type) {
  79.             // call the load() method if it exists to reinitialize the data (eg. from serializing, ...)
  80.             if (method_exists($editable'load')) {
  81.                 $editable->load();
  82.             }
  83.         } else {
  84.             $editable $this->editableLoader->build($type);
  85.             $editable->setName($name);
  86.             $document->setEditable($editable);
  87.             //set default value on initial build
  88.             if (isset($config['defaultValue'])) {
  89.                 $editable->setDataFromResource($config['defaultValue']);
  90.             }
  91.         }
  92.         $editable->setDocument($document);
  93.         $editable->setEditmode($editmode);
  94.         // set the real name of this editable, without the prefixes and suffixes from blocks and areablocks
  95.         $editable->setRealName($realName);
  96.         $editable->setConfig($config);
  97.         if ($editmode) {
  98.             $editable->setEditableDefinitionCollector($this->configCollector);
  99.         }
  100.         return $editable;
  101.     }
  102.     /**
  103.      * Renders an editable
  104.      *
  105.      * @param PageSnippet $document
  106.      * @param string $type
  107.      * @param string $name
  108.      * @param array $options
  109.      * @param bool|null $editmode
  110.      *
  111.      * @return mixed
  112.      *
  113.      * @throws \Exception
  114.      */
  115.     public function render(PageSnippet $documentstring $typestring $name, array $options = [], bool $editmode null)
  116.     {
  117.         return $this->getEditable($document$type$name$options$editmode);
  118.     }
  119. }