vendor/pimcore/pimcore/lib/Twig/Extension/DocumentEditableExtension.php line 106

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\Twig\Extension;
  15. use Pimcore\Model\Document\Editable\BlockInterface;
  16. use Pimcore\Model\Document\PageSnippet;
  17. use Pimcore\Templating\Renderer\EditableRenderer;
  18. use Twig\Extension\AbstractExtension;
  19. use Twig\TwigFunction;
  20. class DocumentEditableExtension extends AbstractExtension
  21. {
  22.     /**
  23.      * @var EditableRenderer
  24.      */
  25.     protected $editableRenderer;
  26.     /**
  27.      * @param EditableRenderer $editableRenderer
  28.      */
  29.     public function __construct(EditableRenderer $editableRenderer)
  30.     {
  31.         $this->editableRenderer $editableRenderer;
  32.     }
  33.     /**
  34.      * {@inheritdoc}
  35.      */
  36.     public function getFunctions()
  37.     {
  38.         return [
  39.             new TwigFunction('pimcore_*', [$this'renderEditable'], [
  40.                 'needs_context' => true,
  41.                 'is_safe' => ['html'],
  42.             ]),
  43.             new TwigFunction('pimcore_iterate_block', [$this'getBlockIterator']),
  44.         ];
  45.         // those are just for auto-complete, not nice, but works ;-)
  46.         new TwigFunction('pimcore_area');
  47.         new TwigFunction('pimcore_areablock');
  48.         new TwigFunction('pimcore_block');
  49.         new TwigFunction('pimcore_checkbox');
  50.         new TwigFunction('pimcore_date');
  51.         new TwigFunction('pimcore_embed');
  52.         new TwigFunction('pimcore_image');
  53.         new TwigFunction('pimcore_input');
  54.         new TwigFunction('pimcore_link');
  55.         new TwigFunction('pimcore_multiselect');
  56.         new TwigFunction('pimcore_numeric');
  57.         new TwigFunction('pimcore_pdf');
  58.         new TwigFunction('pimcore_relation');
  59.         new TwigFunction('pimcore_relations');
  60.         new TwigFunction('pimcore_renderlet');
  61.         new TwigFunction('pimcore_scheduledblock');
  62.         new TwigFunction('pimcore_select');
  63.         new TwigFunction('pimcore_snippet');
  64.         new TwigFunction('pimcore_textarea');
  65.         new TwigFunction('pimcore_video');
  66.         new TwigFunction('pimcore_wysiwyg');
  67.     }
  68.     /**
  69.      * @param array $context
  70.      * @param string $name
  71.      * @param string $inputName
  72.      * @param array $options
  73.      *
  74.      * @return \Pimcore\Model\Document\Editable|string
  75.      *
  76.      * @deprecated since v6.8 and will be removed in 7. use renderEditable instead.
  77.      */
  78.     public function renderTag($context$name$inputName, array $options = [])
  79.     {
  80.         return $this->renderEditable($context$name$inputName$options);
  81.     }
  82.     /**
  83.      * @param array $context
  84.      * @param string $name
  85.      * @param string $inputName
  86.      * @param array $options
  87.      *
  88.      * @return \Pimcore\Model\Document\Editable|string
  89.      */
  90.     public function renderEditable($context$name$inputName, array $options = [])
  91.     {
  92.         $document $context['document'];
  93.         $editmode $context['editmode'];
  94.         if (!($document instanceof PageSnippet)) {
  95.             return '';
  96.         }
  97.         return $this->editableRenderer->render($document$name$inputName$options$editmode);
  98.     }
  99.     /**
  100.      * Returns an iterator which can be used instead of while($block->loop())
  101.      *
  102.      * @param BlockInterface $block
  103.      *
  104.      * @return \Generator|int[]
  105.      */
  106.     public function getBlockIterator(BlockInterface $block): \Generator
  107.     {
  108.         while ($block->loop()) {
  109.             yield $block->getCurrentIndex();
  110.         }
  111.     }
  112. }
  113. class_alias(DocumentEditableExtension::class, 'Pimcore\Twig\Extension\DocumentTagExtension');