ApplyThemeCustomizationObserver.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Observer;
  7. use Magento\Framework\Event\Observer as EventObserver;
  8. use Magento\Framework\Event\ObserverInterface;
  9. use Magento\Theme\Model\Theme;
  10. use Magento\Framework\App\Filesystem\DirectoryList;
  11. /**
  12. * Theme Observer model
  13. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  14. */
  15. class ApplyThemeCustomizationObserver implements ObserverInterface
  16. {
  17. /**
  18. * @var Theme
  19. */
  20. private $currentTheme;
  21. /**
  22. * @var \Magento\Framework\View\Asset\GroupedCollection
  23. */
  24. private $pageAssets;
  25. /**
  26. * @var \Magento\Framework\View\Asset\Repository
  27. */
  28. protected $assetRepo;
  29. /**
  30. * @var \Psr\Log\LoggerInterface
  31. */
  32. protected $logger;
  33. /**
  34. * @param \Magento\Framework\View\DesignInterface $design
  35. * @param \Magento\Framework\View\Asset\GroupedCollection $assets
  36. * @param \Magento\Framework\View\Asset\Repository $assetRepo
  37. * @param \Psr\Log\LoggerInterface $logger
  38. */
  39. public function __construct(
  40. \Magento\Framework\View\DesignInterface $design,
  41. \Magento\Framework\View\Asset\GroupedCollection $assets,
  42. \Magento\Framework\View\Asset\Repository $assetRepo,
  43. \Psr\Log\LoggerInterface $logger
  44. ) {
  45. $this->currentTheme = $design->getDesignTheme();
  46. $this->pageAssets = $assets;
  47. $this->assetRepo = $assetRepo;
  48. $this->logger = $logger;
  49. }
  50. /**
  51. * Apply customized static files to frontend
  52. *
  53. * @param \Magento\Framework\Event\Observer $observer
  54. * @return void
  55. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  56. */
  57. public function execute(\Magento\Framework\Event\Observer $observer)
  58. {
  59. /** @var $themeFile \Magento\Theme\Model\Theme\File */
  60. foreach ($this->currentTheme->getCustomization()->getFiles() as $themeFile) {
  61. try {
  62. $service = $themeFile->getCustomizationService();
  63. if ($service instanceof \Magento\Framework\View\Design\Theme\Customization\FileAssetInterface) {
  64. $identifier = $themeFile->getData('file_path');
  65. $dirPath = \Magento\Framework\View\Design\Theme\Customization\Path::DIR_NAME
  66. . '/' . $this->currentTheme->getId();
  67. $asset = $this->assetRepo->createArbitrary(
  68. $identifier,
  69. $dirPath,
  70. DirectoryList::MEDIA,
  71. \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
  72. );
  73. $this->pageAssets->add($identifier, $asset);
  74. }
  75. } catch (\InvalidArgumentException $e) {
  76. $this->logger->critical($e);
  77. }
  78. }
  79. }
  80. }