1 | <?php |
||
20 | class ModuleManager |
||
21 | { |
||
22 | /** |
||
23 | * @var InstalledPackageRepositoryInterface |
||
24 | */ |
||
25 | protected $installedPackageRepository; |
||
26 | |||
27 | /** |
||
28 | * @var EventManager |
||
29 | */ |
||
30 | protected $eventManager; |
||
31 | |||
32 | /** |
||
33 | * @var ProjectConfig |
||
34 | */ |
||
35 | protected $config; |
||
36 | |||
37 | /** |
||
38 | * @var UnInstallStrategyInterface |
||
39 | */ |
||
40 | protected $unInstallStrategy; |
||
41 | |||
42 | /** |
||
43 | * @var InstallStrategyFactory |
||
44 | */ |
||
45 | protected $installStrategyFactory; |
||
46 | |||
47 | /** |
||
48 | * @param InstalledPackageRepositoryInterface $installedRepository |
||
49 | * @param EventManager $eventManager |
||
50 | * @param ProjectConfig $config |
||
51 | * @param UnInstallStrategyInterface $unInstallStrategy |
||
52 | * @param InstallStrategyFactory $installStrategyFactory |
||
53 | */ |
||
54 | 7 | public function __construct( |
|
55 | InstalledPackageRepositoryInterface $installedRepository, |
||
56 | EventManager $eventManager, |
||
57 | ProjectConfig $config, |
||
58 | UnInstallStrategyInterface $unInstallStrategy, |
||
59 | InstallStrategyFactory $installStrategyFactory |
||
60 | ) { |
||
61 | 7 | $this->installedPackageRepository = $installedRepository; |
|
62 | 7 | $this->eventManager = $eventManager; |
|
63 | 7 | $this->config = $config; |
|
64 | 7 | $this->unInstallStrategy = $unInstallStrategy; |
|
65 | 7 | $this->installStrategyFactory = $installStrategyFactory; |
|
66 | 7 | } |
|
67 | |||
68 | /** |
||
69 | * @param array $currentComposerInstalledPackages |
||
70 | * @return array |
||
71 | */ |
||
72 | 7 | public function updateInstalledPackages(array $currentComposerInstalledPackages) |
|
89 | |||
90 | /** |
||
91 | * @param PackageInterface[] $packagesToInstall |
||
92 | */ |
||
93 | 7 | public function doInstalls(array $packagesToInstall) |
|
118 | |||
119 | /** |
||
120 | * @param InstalledPackage[] $packagesToRemove |
||
121 | */ |
||
122 | 7 | public function doRemoves(array $packagesToRemove) |
|
123 | { |
||
124 | 7 | foreach ($packagesToRemove as $remove) { |
|
125 | 5 | $this->eventManager->dispatch(new PackageUnInstallEvent('pre-package-uninstall', $remove)); |
|
126 | 5 | $this->unInstallStrategy->unInstall($remove->getInstalledFiles()); |
|
127 | 5 | $this->eventManager->dispatch(new PackageUnInstallEvent('post-package-uninstall', $remove)); |
|
128 | 5 | $this->installedPackageRepository->remove($remove); |
|
129 | } |
||
130 | 7 | } |
|
131 | |||
132 | /** |
||
133 | * @param PackageInterface[] $currentComposerInstalledPackages |
||
134 | * @param InstalledPackage[] $magentoInstalledPackages |
||
135 | * @return InstalledPackage[] |
||
136 | */ |
||
137 | 7 | public function getRemoves(array $currentComposerInstalledPackages, array $magentoInstalledPackages) |
|
163 | |||
164 | /** |
||
165 | * @param PackageInterface[] $currentComposerInstalledPackages |
||
166 | * @return PackageInterface[] |
||
167 | */ |
||
168 | 7 | public function getInstalls(array $currentComposerInstalledPackages) |
|
169 | { |
||
170 | 7 | $repo = $this->installedPackageRepository; |
|
171 | $packages = array_filter($currentComposerInstalledPackages, function (PackageInterface $package) use ($repo) { |
||
172 | 6 | return !$repo->has($package->getName(), $this->createVersion($package)); |
|
173 | 7 | }); |
|
174 | |||
175 | 7 | $config = $this->config; |
|
176 | 7 | usort($packages, function (PackageInterface $aObject, PackageInterface $bObject) use ($config) { |
|
177 | 1 | $a = $config->getModuleSpecificSortValue($aObject->getName()); |
|
178 | 1 | $b = $config->getModuleSpecificSortValue($bObject->getName()); |
|
179 | 1 | if ($a == $b) { |
|
180 | 1 | return strcmp($aObject->getName(), $bObject->getName()); |
|
181 | /** |
||
182 | * still changes sort order and breaks a test, so for now strcmp as workaround |
||
183 | * to keep the test working. |
||
184 | */ |
||
185 | // return 0; |
||
186 | } |
||
187 | return ($a < $b) ? -1 : 1; |
||
188 | 7 | }); |
|
189 | |||
190 | 7 | return $packages; |
|
191 | } |
||
192 | |||
193 | /** |
||
194 | * @param PackageInterface $package |
||
195 | * @return string |
||
196 | */ |
||
197 | 5 | private function getPackageSourceDirectory(PackageInterface $package) |
|
214 | |||
215 | /** |
||
216 | * Create a version string which is unique. dev-master |
||
217 | * packages report a version of 9999999-dev. We need a unique version |
||
218 | * so we can detect changes. here we use the source reference which |
||
219 | * in the case of git is the commit hash |
||
220 | * |
||
221 | * @param PackageInterface $package |
||
222 | * |
||
223 | * @return string |
||
224 | */ |
||
225 | 6 | private function createVersion(PackageInterface $package) |
|
235 | } |
||
236 |