![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/app/code/Soon/CsBlock/Block/ |
<?php /** * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @author Hervé Guétin <[email protected]> <@herveguetin> * @copyright Copyright (c) 2017 Agence Soon (http://www.agence-soon.fr) */ namespace Soon\CsBlock\Block; use Magento\Cms\Model\Template\FilterProvider; use Magento\Email\Model\Template\Filter; use Magento\Framework\View\Element\Template; use Soon\CsBlock\Model\Block; use Soon\CsBlock\Model\BlockInterface; class ContentBlock extends Template { /** * @var Block */ private $block; /** * @var FilterProvider */ private $filterProvider; /** * @var Template */ private $renderer; public function __construct( Template\Context $context, BlockInterface $block, FilterProvider $filterProvider, $blockId, array $data = [] ) { parent::__construct($context, $data); /** @var Block $block */ $block->getResource()->load($block, $blockId); $this->block = $block; $this->filterProvider = $filterProvider; } /** * @return string */ protected function _toHtml() { if (!$this->block->hasData()) { return ''; } $this->prepareRenderer(); return $this->renderer->toHtml(); } private function prepareRenderer() { $rendererClassName = $this->block->getRendererClassName(); $rendererTemplate = $this->block->getRendererTemplate(); /** @var Template $renderer */ $renderer = $this->getLayout()->createBlock($rendererClassName); $renderer->setTemplate($rendererTemplate); $renderer->setData($this->prepareRendererData()); $this->renderer = $renderer; } /** * @return array */ private function prepareRendererData(): array { $rendererData = []; array_map(function ($v, $k) use (&$rendererData) { $rendererDataItem = $this->prepareRendererDataItem($k, $v); if (!empty($rendererDataItem)) { $rendererData[$rendererDataItem[0]] = $rendererDataItem[1]; } }, $this->block->getContent(), array_keys($this->block->getContent())); return array_merge(['block_id' => $this->block->getData('block_id')], $rendererData); } /** * @param string $k * @param mixed $v * @return array */ private function prepareRendererDataItem($k, $v) { $keyGlue = sprintf('soon_csblock__%s__', $this->block->getType()); if (strpos($k, $keyGlue) !== false) { return [str_replace($keyGlue, '', $k), $this->parseDirectives($v)]; } return []; } /** * @param mixed $v * @return mixed */ private function parseDirectives($v) { if (!is_string($v)) { return $v; } $storeId = $this->_storeManager->getStore()->getId(); /** @var Filter $filter */ $filter = $this->filterProvider->getBlockFilter(); return $filter->setStoreId($storeId)->filter($v); } }