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

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 Enterprise License (PEL)
  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 PEL
  13.  */
  14. namespace Pimcore\Templating\Renderer;
  15. use Pimcore\Http\Request\Resolver\EditmodeResolver;
  16. use Pimcore\Model\Document\Editable;
  17. use Pimcore\Model\Document\Editable\Loader\EditableLoaderInterface;
  18. use Pimcore\Model\Document\PageSnippet;
  19. use Pimcore\Templating\Model\ViewModel;
  20. use Psr\Log\LoggerAwareInterface;
  21. use Psr\Log\LoggerAwareTrait;
  22. class EditableRenderer implements LoggerAwareInterface
  23. {
  24.     use LoggerAwareTrait;
  25.     /**
  26.      * @var EditableLoaderInterface
  27.      *
  28.      * @deprecated since v6.8 and will be removed in 7. Use $editableLoader instead.
  29.      */
  30.     protected $tagLoader;
  31.     /**
  32.      * @var Editable\Loader\EditableLoader
  33.      */
  34.     protected $editableLoader;
  35.     /**
  36.      * @var EditmodeResolver
  37.      */
  38.     protected $editmodeResolver;
  39.     /**
  40.      * @param EditableLoaderInterface $editableLoader
  41.      * @param EditmodeResolver $editmodeResolver
  42.      */
  43.     public function __construct(EditableLoaderInterface $editableLoaderEditmodeResolver $editmodeResolver)
  44.     {
  45.         $this->editableLoader $editableLoader;
  46.         $this->tagLoader = & $this->editableLoader;
  47.         $this->editmodeResolver $editmodeResolver;
  48.     }
  49.     /**
  50.      * @param string $type
  51.      *
  52.      * @return bool
  53.      *
  54.      * @deprecated since v6.8 and will be removed in 7. Use editableExists() instead.
  55.      */
  56.     public function tagExists($type)
  57.     {
  58.         return $this->editableExists($type);
  59.     }
  60.     /**
  61.      * @param string $type
  62.      *
  63.      * @return bool
  64.      */
  65.     public function editableExists($type)
  66.     {
  67.         return $this->editableLoader->supports($type);
  68.     }
  69.     /**
  70.      * Loads a document tag
  71.      *
  72.      * @param PageSnippet $document
  73.      * @param string $type
  74.      * @param string $inputName
  75.      * @param array $options
  76.      * @param bool|null $editmode
  77.      *
  78.      * @return Editable|null
  79.      *
  80.      * @deprecated since v6.8 and will be removed in 7. Use editableExists() instead.
  81.      */
  82.     public function getTag(PageSnippet $document$type$inputName, array $options = [], bool $editmode null)
  83.     {
  84.         return $this->getEditable($document$type$inputName$options$editmode);
  85.     }
  86.     /**
  87.      * Loads a document tag
  88.      *
  89.      * @param PageSnippet $document
  90.      * @param string $type
  91.      * @param string $inputName
  92.      * @param array $config
  93.      * @param bool|null $editmode
  94.      *
  95.      * @throws \Exception
  96.      *
  97.      * @return Editable|null
  98.      */
  99.     public function getEditable(PageSnippet $document$type$inputName, array $config = [], bool $editmode null)
  100.     {
  101.         $type strtolower($type);
  102.         $name Editable::buildEditableName($type$inputName$document);
  103.         $realName Editable::buildEditableRealName($inputName$document);
  104.         if (null === $editmode) {
  105.             $editmode $this->editmodeResolver->isEditmode();
  106.         }
  107.         try {
  108.             $editable null;
  109.             if ($document instanceof PageSnippet) {
  110.                 $view = new ViewModel([
  111.                     'editmode' => $editmode,
  112.                     'document' => $document,
  113.                 ]);
  114.                 $editable $document->getEditable($name);
  115.                 // @TODO: BC layer, to be removed in v7.0
  116.                 $aliases = [
  117.                     'href' => 'relation',
  118.                     'multihref' => 'relations',
  119.                 ];
  120.                 if (isset($aliases[$type])) {
  121.                     $type $aliases[$type];
  122.                 }
  123.                 if ($editable instanceof Editable && $editable->getType() === $type) {
  124.                     // call the load() method if it exists to reinitialize the data (eg. from serializing, ...)
  125.                     if (method_exists($editable'load')) {
  126.                         $editable->load();
  127.                     }
  128.                     $editable->setView($view);
  129.                     $editable->setEditmode($editmode);
  130.                     $editable->setConfig($config);
  131.                     $editable->setDocument($document);
  132.                 } else {
  133.                     $editable Editable::factory($type$name$document->getId(), $confignull$view$editmode);
  134.                     $document->setEditable($name$editable);
  135.                 }
  136.                 // set the real name of this editable, without the prefixes and suffixes from blocks and areablocks
  137.                 $editable->setRealName($realName);
  138.             }
  139.             return $editable;
  140.         } catch (\Exception $e) {
  141.             $this->logger->warning($e);
  142.             return null;
  143.         }
  144.     }
  145.     /**
  146.      * Renders an editable
  147.      *
  148.      * @param PageSnippet $document
  149.      * @param string $type
  150.      * @param string $inputName
  151.      * @param array $options
  152.      * @param bool|null $editmode
  153.      *
  154.      * @return Editable|string
  155.      */
  156.     public function render(PageSnippet $document$type$inputName, array $options = [], bool $editmode null)
  157.     {
  158.         $editable $this->getEditable($document$type$inputName$options$editmode);
  159.         if ($editable) {
  160.             return $editable;
  161.         }
  162.         return '';
  163.     }
  164. }
  165. class_alias(EditableRenderer::class, 'Pimcore\Templating\Renderer\TagRenderer');