vendor/pimcore/pimcore/models/Document/Editable/Wysiwyg.php line 82

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\Tool\DomCrawler;
  17. use Pimcore\Tool\Text;
  18. /**
  19.  * @method \Pimcore\Model\Document\Editable\Dao getDao()
  20.  */
  21. class Wysiwyg extends Model\Document\Editable implements IdRewriterInterfaceEditmodeDataInterface
  22. {
  23.     /**
  24.      * Contains the text
  25.      *
  26.      * @internal
  27.      *
  28.      * @var string
  29.      */
  30.     protected $text;
  31.     /**
  32.      * {@inheritdoc}
  33.      */
  34.     public function getType()
  35.     {
  36.         return 'wysiwyg';
  37.     }
  38.     /**
  39.      * {@inheritdoc}
  40.      */
  41.     public function getData()
  42.     {
  43.         return $this->text;
  44.     }
  45.     /**
  46.      * @return string
  47.      */
  48.     public function getText()
  49.     {
  50.         return $this->getData();
  51.     }
  52.     /**
  53.      * {@inheritdoc}
  54.      */
  55.     public function getDataEditmode() /** : mixed */
  56.     {
  57.         $document $this->getDocument();
  58.         return Text::wysiwygText($this->text, [
  59.             'document' => $document,
  60.             'context' => $this,
  61.         ]);
  62.     }
  63.     /**
  64.      * {@inheritdoc}
  65.      */
  66.     public function frontend()
  67.     {
  68.         $document $this->getDocument();
  69.         return Text::wysiwygText($this->text, [
  70.                 'document' => $document,
  71.                 'context' => $this,
  72.             ]);
  73.     }
  74.     /**
  75.      * {@inheritdoc}
  76.      */
  77.     public function setDataFromResource($data)
  78.     {
  79.         $this->text $data;
  80.         return $this;
  81.     }
  82.     /**
  83.      * {@inheritdoc}
  84.      */
  85.     public function setDataFromEditmode($data)
  86.     {
  87.         $this->text $data;
  88.         return $this;
  89.     }
  90.     /**
  91.      * {@inheritdoc}
  92.      */
  93.     public function isEmpty()
  94.     {
  95.         return empty($this->text);
  96.     }
  97.     /**
  98.      * {@inheritdoc}
  99.      */
  100.     public function resolveDependencies()
  101.     {
  102.         return Text::getDependenciesOfWysiwygText($this->text);
  103.     }
  104.     /**
  105.      * {@inheritdoc}
  106.      */
  107.     public function getCacheTags(Model\Document\PageSnippet $ownerDocument, array $tags = []): array
  108.     {
  109.         return Text::getCacheTagsOfWysiwygText($this->text$tags);
  110.     }
  111.     /**
  112.      * { @inheritdoc }
  113.      */
  114.     public function rewriteIds($idMapping/** : void */
  115.     {
  116.         $html = new DomCrawler($this->text);
  117.         $elements $html->filter('a[pimcore_id], img[pimcore_id]');
  118.         /** @var \DOMElement $el */
  119.         foreach ($elements as $el) {
  120.             if ($el->hasAttribute('href') || $el->hasAttribute('src')) {
  121.                 $type $el->getAttribute('pimcore_type');
  122.                 $id = (int)$el->getAttribute('pimcore_id');
  123.                 if ($idMapping[$type][$id] ?? false) {
  124.                     $el->setAttribute('pimcore_id'strtr($el->getAttribute('pimcore_id'), $idMapping[$type]));
  125.                 }
  126.             }
  127.         }
  128.         $this->text $html->html();
  129.         $html->clear();
  130.         unset($html);
  131.     }
  132. }