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
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Setup\Model\Grid;
use Magento\Framework\Composer\ComposerInformation;
use Magento\Setup\Model\PackagesData;
/**
* Extension Grid
*/
class Extension
{
/**
* @var ComposerInformation
*/
private $composerInformation;
/**
* @var PackagesData
*/
private $packagesData;
/**
* @param ComposerInformation $composerInformation
* @param PackagesData $packagesData
*/
public function __construct(
ComposerInformation $composerInformation,
PackagesData $packagesData
) {
$this->composerInformation = $composerInformation;
$this->packagesData = $packagesData;
}
/**
* Get formatted list of installed extensions
*
* @return array
*/
public function getList()
{
$extensions = $this->packagesData->getInstalledPackages();
$packagesForUpdate = $this->packagesData->getPackagesForUpdate();
foreach ($extensions as &$extension) {
$extension['update'] = array_key_exists($extension['name'], $packagesForUpdate);
$extension['uninstall'] = true;
if ($extension['type'] === ComposerInformation::METAPACKAGE_PACKAGE_TYPE
|| !$this->composerInformation->isPackageInComposerJson($extension['name'])
) {
$extension['uninstall'] = false;
}
}
return $this->formatExtensions($extensions);
}
/**
* Get formatted list of extensions that have new version
*
* @return array
*/
public function getListForUpdate()
{
$extensions = $this->packagesData->getPackagesForUpdate();
return $this->formatExtensions($extensions);
}
/**
* Format given array of extensions, add vendor and format extension type
*
* @param array $extensions
* @return array
*/
private function formatExtensions(array $extensions)
{
foreach ($extensions as &$extension) {
$extension['vendor'] = ucfirst(current(explode('/', $extension['name'])));
}
return array_values($extensions);
}
}