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