Collector.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Deploy\Collector;
  7. use Magento\Deploy\Source\SourcePool;
  8. use Magento\Deploy\Package\Package;
  9. use Magento\Deploy\Package\PackageFactory;
  10. use Magento\Deploy\Package\PackageFile;
  11. use Magento\Framework\Module\Manager;
  12. use Magento\Framework\View\Asset\PreProcessor\FileNameResolver;
  13. /**
  14. * Deployable files collector
  15. *
  16. * Default implementation uses Source Pool object (@see SourcePool)
  17. */
  18. class Collector implements CollectorInterface
  19. {
  20. /**
  21. * Source Pool object
  22. *
  23. * Provides the list of source objects
  24. *
  25. * @var SourcePool
  26. */
  27. private $sourcePool;
  28. /**
  29. * Resolver for deployed static file name
  30. *
  31. * A given file could be an alternative source for the real static file which needs to be deployed. In such case
  32. * resolver provides the final static file name
  33. *
  34. * @var FileNameResolver
  35. */
  36. private $fileNameResolver;
  37. /**
  38. * Factory class for Package object
  39. *
  40. * @see Package
  41. * @var PackageFactory
  42. */
  43. private $packageFactory;
  44. /** @var \Magento\Framework\Module\Manager */
  45. private $moduleManager;
  46. /**
  47. * Default values for package primary identifiers
  48. *
  49. * @var array
  50. */
  51. private $packageDefaultValues = [
  52. 'area' => Package::BASE_AREA,
  53. 'theme' => Package::BASE_THEME,
  54. 'locale' => Package::BASE_LOCALE
  55. ];
  56. /**
  57. * Collector constructor
  58. *
  59. * @param SourcePool $sourcePool
  60. * @param FileNameResolver $fileNameResolver
  61. * @param PackageFactory $packageFactory
  62. * @param Manager|null $moduleManager
  63. */
  64. public function __construct(
  65. SourcePool $sourcePool,
  66. FileNameResolver $fileNameResolver,
  67. PackageFactory $packageFactory,
  68. Manager $moduleManager = null
  69. ) {
  70. $this->sourcePool = $sourcePool;
  71. $this->fileNameResolver = $fileNameResolver;
  72. $this->packageFactory = $packageFactory;
  73. $this->moduleManager = $moduleManager ?: \Magento\Framework\App\ObjectManager::getInstance()
  74. ->get(\Magento\Framework\Module\Manager::class);
  75. }
  76. /**
  77. * @inheritdoc
  78. */
  79. public function collect()
  80. {
  81. $packages = [];
  82. foreach ($this->sourcePool->getAll() as $source) {
  83. $files = $source->get();
  84. foreach ($files as $file) {
  85. if ($file->getModule() && !$this->moduleManager->isEnabled($file->getModule())) {
  86. continue;
  87. }
  88. $file->setDeployedFileName($this->fileNameResolver->resolve($file->getFileName()));
  89. $params = $this->getParams($file);
  90. $packagePath = "{$params['area']}/{$params['theme']}/{$params['locale']}";
  91. if (!isset($packages[$packagePath])) {
  92. $packages[$packagePath] = $this->packageFactory->create($params);
  93. }
  94. if ($file->getFilePath()) {
  95. $file->setPackage($packages[$packagePath]);
  96. }
  97. }
  98. }
  99. return $packages;
  100. }
  101. /**
  102. * Retrieve package params
  103. *
  104. * @param PackageFile $file
  105. * @return array
  106. */
  107. private function getParams(PackageFile $file)
  108. {
  109. $params = [
  110. 'area' => $file->getArea(),
  111. 'theme' => $file->getTheme(),
  112. 'locale' => $file->getLocale(),
  113. 'module' => $file->getModule(),
  114. 'isVirtual' => (!$file->getLocale() || !$file->getTheme() || !$file->getArea())
  115. ];
  116. foreach ($this->packageDefaultValues as $name => $value) {
  117. if (!isset($params[$name])) {
  118. $params[$name] = $value;
  119. }
  120. }
  121. return $params;
  122. }
  123. }