![]() 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/magento/framework/Css/PreProcessor/Instruction/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Css\PreProcessor\Instruction; use Magento\Framework\App\ObjectManager; use Magento\Framework\Css\PreProcessor\ErrorHandlerInterface; use Magento\Framework\View\Asset\File\FallbackContext; use Magento\Framework\View\Asset\LocalInterface; use Magento\Framework\View\Asset\PreProcessorInterface; use Magento\Framework\View\Design\Theme\ThemeProviderInterface; use Magento\Framework\View\DesignInterface; use Magento\Framework\View\File\CollectorInterface; /** * @magento_import instruction preprocessor * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Must be deleted after moving themeProvider to construct */ class MagentoImport implements PreProcessorInterface { /** * PCRE pattern that matches @magento_import instruction */ const REPLACE_PATTERN = '#//@magento_import(?P<reference>\s+\(reference\))?\s+[\'\"](?P<path>(?![/\\\]|\w:[/\\\])[^\"\']+)[\'\"]\s*?;#'; /** * @var DesignInterface */ protected $design; /** * @var CollectorInterface */ protected $fileSource; /** * @var ErrorHandlerInterface */ protected $errorHandler; /** * @var \Magento\Framework\View\Asset\Repository */ protected $assetRepo; /** * @var \Magento\Framework\View\Design\Theme\ListInterface * @deprecated 100.0.2 */ protected $themeList; /** * @var ThemeProviderInterface */ private $themeProvider; /** * @param DesignInterface $design * @param CollectorInterface $fileSource * @param ErrorHandlerInterface $errorHandler * @param \Magento\Framework\View\Asset\Repository $assetRepo * @param \Magento\Framework\View\Design\Theme\ListInterface $themeList */ public function __construct( DesignInterface $design, CollectorInterface $fileSource, ErrorHandlerInterface $errorHandler, \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\View\Design\Theme\ListInterface $themeList ) { $this->design = $design; $this->fileSource = $fileSource; $this->errorHandler = $errorHandler; $this->assetRepo = $assetRepo; $this->themeList = $themeList; } /** * {@inheritdoc} */ public function process(\Magento\Framework\View\Asset\PreProcessor\Chain $chain) { $asset = $chain->getAsset(); $replaceCallback = function ($matchContent) use ($asset) { return $this->replace($matchContent, $asset); }; $chain->setContent(preg_replace_callback(self::REPLACE_PATTERN, $replaceCallback, $chain->getContent())); } /** * Replace @magento_import to @import instructions * * @param array $matchedContent * @param LocalInterface $asset * @return string */ protected function replace(array $matchedContent, LocalInterface $asset) { $importsContent = ''; try { $matchedFileId = $matchedContent['path']; $isReference = !empty($matchedContent['reference']); $relatedAsset = $this->assetRepo->createRelated($matchedFileId, $asset); $resolvedPath = $relatedAsset->getFilePath(); $importFiles = $this->fileSource->getFiles($this->getTheme($relatedAsset), $resolvedPath); /** @var $importFile \Magento\Framework\View\File */ foreach ($importFiles as $importFile) { $referenceString = $isReference ? '(reference) ' : ''; $importsContent .= $importFile->getModule() ? "@import $referenceString'{$importFile->getModule()}::{$resolvedPath}';\n" : "@import $referenceString'{$matchedFileId}';\n"; } } catch (\LogicException $e) { $this->errorHandler->processException($e); } return $importsContent; } /** * Get theme model based on the information from asset * * @param LocalInterface $asset * @return \Magento\Framework\View\Design\ThemeInterface */ protected function getTheme(LocalInterface $asset) { $context = $asset->getContext(); if ($context instanceof FallbackContext) { return $this->getThemeProvider()->getThemeByFullPath( $context->getAreaCode() . '/' . $context->getThemePath() ); } return $this->design->getDesignTheme(); } /** * @return ThemeProviderInterface * @deprecated 100.1.1 */ private function getThemeProvider() { if (null === $this->themeProvider) { $this->themeProvider = ObjectManager::getInstance()->get(ThemeProviderInterface::class); } return $this->themeProvider; } }