123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\View\Asset;
- use Magento\Framework\App\Filesystem\DirectoryList;
- /**
- * Service model responsible for making a decision of whether to use the merged asset in place of original ones
- */
- class MergeService
- {
- /**
- * Object Manager
- *
- * @var \Magento\Framework\ObjectManagerInterface
- */
- protected $objectManager;
- /**
- * Config
- *
- * @var ConfigInterface
- */
- protected $config;
- /**
- * Filesystem
- *
- * @var \Magento\Framework\Filesystem
- */
- protected $filesystem;
- /**
- * State
- *
- * @var \Magento\Framework\App\State
- */
- protected $state;
- /**
- * Constructor
- *
- * @param \Magento\Framework\ObjectManagerInterface $objectManager
- * @param ConfigInterface $config
- * @param \Magento\Framework\Filesystem $filesystem
- * @param \Magento\Framework\App\State $state
- */
- public function __construct(
- \Magento\Framework\ObjectManagerInterface $objectManager,
- ConfigInterface $config,
- \Magento\Framework\Filesystem $filesystem,
- \Magento\Framework\App\State $state
- ) {
- $this->objectManager = $objectManager;
- $this->config = $config;
- $this->filesystem = $filesystem;
- $this->state = $state;
- }
- /**
- * Return merged assets, if merging is enabled for a given content type
- *
- * @param MergeableInterface[] $assets
- * @param string $contentType
- * @return array|\Iterator
- * @throws \InvalidArgumentException
- */
- public function getMergedAssets(array $assets, $contentType)
- {
- $isCss = $contentType == 'css';
- $isJs = $contentType == 'js';
- if (!$isCss && !$isJs) {
- throw new \InvalidArgumentException("Merge for content type '{$contentType}' is not supported.");
- }
- $isCssMergeEnabled = $this->config->isMergeCssFiles();
- $isJsMergeEnabled = $this->config->isMergeJsFiles();
- if (($isCss && $isCssMergeEnabled) || ($isJs && $isJsMergeEnabled)) {
- $mergeStrategyClass = \Magento\Framework\View\Asset\MergeStrategy\FileExists::class;
- if ($this->state->getMode() === \Magento\Framework\App\State::MODE_DEVELOPER) {
- $mergeStrategyClass = \Magento\Framework\View\Asset\MergeStrategy\Checksum::class;
- }
- $mergeStrategy = $this->objectManager->get($mergeStrategyClass);
- $assets = $this->objectManager->create(
- \Magento\Framework\View\Asset\Merged::class,
- ['assets' => $assets, 'mergeStrategy' => $mergeStrategy]
- );
- }
- return $assets;
- }
- /**
- * Remove all merged js/css files
- *
- * @return void
- */
- public function cleanMergedJsCss()
- {
- $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW)
- ->delete(Merged::getRelativeDir());
- }
- }
|