![]() 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/vendor/amasty/base/Plugin/Backend/Model/Config/ |
<?php /** * @author Amasty Team * @copyright Copyright (c) Amasty (https://www.amasty.com) * @package Magento 2 Base Package */ namespace Amasty\Base\Plugin\Backend\Model\Config; use Amasty\Base\Block\Adminhtml\System\Config\Advertise; use Amasty\Base\Model\Feed\AdsProvider; use Amasty\Base\Model\Config; use Amasty\Base\Model\LinkValidator; use Magento\Config\Model\Config\ScopeDefiner; use Magento\Config\Model\Config\Structure; use Magento\Config\Model\Config\Structure\Element\Section; /** * Class StructurePlugin add advertising modules */ class StructurePlugin { /** * Fieldset for each tab in configuration us modules */ public const AMASTY_ADVERTISE = [ 'amasty_advertise' => [ 'id' => 'amasty_base_advertise', 'type' => 'text', 'label' => '', 'children' => [ [ 'id' => '', 'label' => '', 'type' => 'label', 'showInDefault' => '1', 'showInWebsite' => '1', 'showInStore' => '1', 'comment' => '', 'frontend_model' => Advertise::class, '_elementType' => 'field' ] ], 'showInDefault' => '1', 'showInWebsite' => '1', 'showInStore' => '1' ] ]; /** * Tab name */ public const AMASTY_TAB_NAME = 'amasty'; /** * @var AdsProvider */ private $adsProvider; /** * @var Config */ private $config; /** * @var ScopeDefiner */ private $scopeDefiner; /** * @var LinkValidator */ private $linkValidator; public function __construct( AdsProvider $adsProvider, Config $config, ScopeDefiner $scopeDefiner, LinkValidator $linkValidator ) { $this->adsProvider = $adsProvider; $this->config = $config; $this->scopeDefiner = $scopeDefiner; $this->linkValidator = $linkValidator; } /** * @param Structure $subject * @param Section $result * * @return Section */ public function afterGetElementByPathParts( Structure $subject, $result ) { if (!$this->config->isAdsEnabled()) { return $result; } $displayedAdvertise = []; $moduleSection = $result->getData(); if (isset($moduleSection['tab']) && $moduleSection['tab'] === self::AMASTY_TAB_NAME) { $moduleChilds = $moduleSection['children']; } else { return $result; } if ($moduleChilds) { if (isset($moduleSection['resource'])) { $moduleCode = strtok($moduleSection['resource'], '::'); $displayedAdvertise = $this->adsProvider->getDisplayAdvertise($moduleCode); if ($displayedAdvertise) { $advertiseSection = $this->getSectionAdvertise($displayedAdvertise); } } } if ($displayedAdvertise) { if (!empty($advertiseSection)) { $moduleSection['children'] = array_merge($moduleChilds, $advertiseSection); } $result->setData($moduleSection, $this->scopeDefiner->getScope()); } return $result; } /** * @param array $displayedAdvertise * * @return array */ private function getSectionAdvertise($displayedAdvertise) { $advertiseSection = self::AMASTY_ADVERTISE; if (!isset($displayedAdvertise['text']) || !isset($displayedAdvertise['tab_name'])) { return []; } $displayedAdvertise['text'] = $this->validateComment($displayedAdvertise['text']); $advertiseSection['amasty_advertise']['label'] = __('Also recommended for your store'); $advertiseSection['amasty_advertise']['data'] = $displayedAdvertise; return $advertiseSection; } /** * @param string $textField * * @return string */ private function validateComment($textField) { if (!empty($textField)) { preg_match('/\[(.*)\]/', $textField, $explodedArray); if (isset($explodedArray[0], $explodedArray[1])) { $linkArray = explode('|', $explodedArray[1]); if (isset($linkArray[0], $linkArray[1]) && $this->linkValidator->validate($linkArray[0])) { $format = '<a href="%s"' . strip_tags('title="%s"') . '>%s</a>'; $link = sprintf($format, $linkArray[0], $linkArray[1], $linkArray[1]); $text = strip_tags(str_replace($explodedArray[0], $link, $textField), '<a>'); return $text; } } return strip_tags($textField); } return ''; } }