Skip to content

Commit 6bfc6c9

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-55193' into MAGETWO-55193
2 parents 9a789ac + 53f2780 commit 6bfc6c9

File tree

15 files changed

+205
-62
lines changed

15 files changed

+205
-62
lines changed

app/design/adminhtml/Magento/backend/web/app/setup/styles/less/_setup.less

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
// Updater pages
9999
//@import '../../../updater/styles/less/pages/_common.less';
100100
//@import '../../../updater/styles/less/pages/_home.less';
101-
//@import '../../../updater/styles/less/pages/_component-manager.less';
101+
//@import '../../../updater/styles/less/pages/_extension-manager.less';
102102
//@import '../../../updater/styles/less/pages/_login.less';
103103

104104
//

app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_data-grid.less

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,26 @@
112112
}
113113
}
114114
}
115+
116+
&._tooltip {
117+
background: transparent;
118+
margin: 0px 0px 8px 5px;
119+
120+
a {
121+
width: 21px;
122+
123+
&:hover {
124+
text-decoration: none;
125+
}
126+
127+
&:before {
128+
color: @color-tertiary;
129+
content: @icon-help__content;
130+
font-family: @icons__font-family;
131+
font-size: @component-indicator__size;
132+
}
133+
}
134+
}
115135
}
116136

117137
.col-manager-item-name {

setup/pub/styles/setup.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

setup/src/Magento/Setup/Controller/InstallExtensionGrid.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ public function extensionsAction()
6262
$packages = isset($extensions['packages']) ? $extensions['packages'] : [];
6363
array_walk($packages, function (&$package) {
6464
$package['vendor'] = ucfirst($package['vendor']);
65-
$package['type'] = $this->typeMapper->map($package['name'], $package['type']);
65+
$package['link'] = isset($package['extra']['x-magento-ext-package-link']) ?
66+
$package['extra']['x-magento-ext-package-link'] : '';
67+
$package['product_name'] = isset($package['extra']['x-magento-ext-title']) ?
68+
$package['extra']['x-magento-ext-title'] : $package['name'];
69+
$package['type'] = isset($package['extra']['x-magento-ext-type']) ?
70+
$package['extra']['x-magento-ext-type'] : $this->typeMapper->map($package['name'], $package['type']);
6671
});
6772

6873
return new JsonModel(

setup/src/Magento/Setup/Model/Grid/Extension.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,14 @@ public function getListForUpdate()
8888
private function formatExtensions(array $extensions)
8989
{
9090
foreach ($extensions as &$extension) {
91+
$extraInfo = $this->packagesData->getPackageExtraInfo($extension['name'], $extension['version']);
9192
$extension['vendor'] = ucfirst(current(explode('/', $extension['name'])));
92-
$extension['type'] = $this->typeMapper->map($extension['name'], $extension['type']);
93+
$extension['product_name'] = isset($extraInfo['x-magento-ext-title']) ?
94+
$extraInfo['x-magento-ext-title'] : $extension['name'];
95+
$extension['type'] = isset($extraInfo['x-magento-ext-type']) ?
96+
$extraInfo['x-magento-ext-type'] : $this->typeMapper->map($extension['name'], $extension['type']);
97+
$extension['link'] = isset($extraInfo['x-magento-ext-package-link']) ?
98+
$extraInfo['x-magento-ext-package-link'] : '';
9399
}
94100
return array_values($extensions);
95101
}

setup/src/Magento/Setup/Model/Grid/Module.php

Lines changed: 90 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
* Copyright © 2016 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
76
namespace Magento\Setup\Model\Grid;
87

98
use Magento\Framework\Composer\ComposerInformation;
9+
use Magento\Framework\Module\FullModuleList;
10+
use Magento\Framework\Module\ModuleList;
11+
use Magento\Framework\Module\PackageInfoFactory;
12+
use Magento\Setup\Model\ObjectManagerProvider;
13+
use Magento\Setup\Model\PackagesData;
1014

1115
/**
1216
* Module grid
@@ -32,21 +36,21 @@ class Module
3236
private $packageInfo;
3337

3438
/**
35-
* @var \Magento\Setup\Model\ObjectManagerProvider
39+
* @var ObjectManagerProvider
3640
*/
3741
private $objectManagerProvider;
3842

3943
/**
4044
* Full Module info
4145
*
42-
* @var \Magento\Framework\Module\FullModuleList
46+
* @var FullModuleList
4347
*/
4448
private $fullModuleList;
4549

4650
/**
4751
* Module info
4852
*
49-
* @var \Magento\Framework\Module\ModuleList
53+
* @var ModuleList
5054
*/
5155
private $moduleList;
5256

@@ -56,25 +60,25 @@ class Module
5660
private $typeMapper;
5761

5862
/**
59-
* @var \Magento\Setup\Model\PackagesData
63+
* @var PackagesData
6064
*/
6165
private $packagesData;
6266

6367
/**
6468
* @param ComposerInformation $composerInformation
65-
* @param \Magento\Framework\Module\FullModuleList $fullModuleList
66-
* @param \Magento\Framework\Module\ModuleList $moduleList
67-
* @param \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
69+
* @param FullModuleList $fullModuleList
70+
* @param ModuleList $moduleList
71+
* @param ObjectManagerProvider $objectManagerProvider
6872
* @param TypeMapper $typeMapper
69-
* @param \Magento\Setup\Model\PackagesData $packagesData
73+
* @param PackagesData $packagesData
7074
*/
7175
public function __construct(
7276
ComposerInformation $composerInformation,
73-
\Magento\Framework\Module\FullModuleList $fullModuleList,
74-
\Magento\Framework\Module\ModuleList $moduleList,
75-
\Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider,
77+
FullModuleList $fullModuleList,
78+
ModuleList $moduleList,
79+
ObjectManagerProvider $objectManagerProvider,
7680
TypeMapper $typeMapper,
77-
\Magento\Setup\Model\PackagesData $packagesData
81+
PackagesData $packagesData
7882
) {
7983
$this->composerInformation = $composerInformation;
8084
$this->fullModuleList = $fullModuleList;
@@ -92,46 +96,81 @@ public function __construct(
9296
public function getList()
9397
{
9498
$this->packageInfo = $this->objectManagerProvider->get()
95-
->get(\Magento\Framework\Module\PackageInfoFactory::class)
99+
->get(PackageInfoFactory::class)
96100
->create();
97101

98102
$items = array_replace_recursive(
103+
$this->getModuleListFromComposer(),
104+
$this->getFullModuleList()
105+
);
106+
107+
$items = $this->addRequiredBy($this->addGeneralInfo($items));
108+
109+
return $items;
110+
}
111+
112+
/**
113+
* Get module list from composer
114+
*
115+
* @return array
116+
*/
117+
private function getModuleListFromComposer()
118+
{
119+
return array_filter(
99120
$this->composerInformation->getInstalledMagentoPackages(),
100-
$this->getInstalledModules()
121+
function ($item) {
122+
return $item['type'] === ComposerInformation::MODULE_PACKAGE_TYPE;
123+
}
101124
);
125+
}
102126

103-
$items = array_filter($items, function ($item) {
104-
return $item['type'] === ComposerInformation::MODULE_PACKAGE_TYPE;
105-
});
127+
/**
128+
* Get full module list
129+
*
130+
* @return array
131+
*/
132+
private function getFullModuleList()
133+
{
134+
return $this->getModulesInfo(
135+
$this->fullModuleList->getNames()
136+
);
137+
}
106138

107-
array_walk($items, function (&$module, $name) {
108-
$module['moduleName'] = $module['moduleName'] ?: $this->packageInfo->getModuleName($name);
109-
$module['enable'] = $this->moduleList->has($module['moduleName']);
110-
$module['vendor'] = ucfirst(current(preg_split('%[/_]%', $name)));
111-
$module['type'] = $this->typeMapper->map($name, $module['type']);
112-
$module['requiredBy'] = $this->getModuleRequiredBy($name);
113-
});
139+
/**
140+
* Add all modules, extensions, metapackages a module required by
141+
*
142+
* @param array $items
143+
* @return array
144+
*/
145+
private function addRequiredBy(array $items)
146+
{
147+
foreach ($items as $key => $item) {
148+
$items[$key]['requiredBy'] = $item['name'] != self::UNKNOWN_PACKAGE_NAME ?
149+
$this->addGeneralInfo(
150+
$this->getModulesInfo(
151+
$this->packageInfo->getRequiredBy($item['name'])
152+
)
153+
) : [];
154+
}
114155

115-
return array_values($items);
156+
return $items;
116157
}
117158

118159
/**
119-
* Get all modules, extensions, metapackages a module required by
120-
*
121-
* @param string $name Module name
160+
* Get modules info
161+
*
162+
* @param array $moduleList
122163
* @return array
123164
*/
124-
private function getModuleRequiredBy($name)
165+
private function getModulesInfo(array $moduleList)
125166
{
126167
$result = [];
127-
$modules = $this->packageInfo->getRequiredBy($name);
128-
foreach ($modules as $moduleName) {
168+
foreach ($moduleList as $moduleName) {
129169
$packageName = $this->packageInfo->getPackageName($moduleName);
130-
$result[] = [
170+
$key = $packageName ?: $moduleName;
171+
$result[$key] = [
131172
'name' => $packageName ?: self::UNKNOWN_PACKAGE_NAME,
132173
'moduleName' => $moduleName,
133-
'type' => $this->typeMapper->map($packageName, ComposerInformation::MODULE_PACKAGE_TYPE),
134-
'enable' => $this->moduleList->has($moduleName),
135174
'version' => $this->packageInfo->getVersion($moduleName) ?: self::UNKNOWN_VERSION,
136175
];
137176
}
@@ -140,23 +179,27 @@ private function getModuleRequiredBy($name)
140179
}
141180

142181
/**
143-
* Get full list of installed modules
182+
* Add general info to result array
144183
*
184+
* @param array $items
145185
* @return array
146186
*/
147-
private function getInstalledModules()
187+
private function addGeneralInfo(array $items)
148188
{
149-
$modules = [];
150-
$allModules = $this->fullModuleList->getNames();
151-
foreach ($allModules as $module) {
152-
$packageName = $this->packageInfo->getPackageName($module);
153-
$name = $packageName ?: $module;
154-
$modules[$name]['name'] = $packageName ?: self::UNKNOWN_PACKAGE_NAME;
155-
$modules[$name]['moduleName'] = $module;
156-
$modules[$name]['type'] = ComposerInformation::MODULE_PACKAGE_TYPE;
157-
$modules[$name]['version'] = $this->packageInfo->getVersion($module) ?: self::UNKNOWN_VERSION;
189+
foreach ($items as &$item) {
190+
$item['moduleName'] = $item['moduleName'] ?: $this->packageInfo->getModuleName($item['name']);
191+
$item['enable'] = $this->moduleList->has($item['moduleName']);
192+
193+
$vendorSource = $item['name'] == self::UNKNOWN_PACKAGE_NAME ? $item['moduleName'] : $item['name'];
194+
$item['vendor'] = ucfirst(current(preg_split('%[/_]%', $vendorSource)));
195+
196+
$extraInfo = $this->packagesData->getPackageExtraInfo($item['name'], $item['version']);
197+
$item['product_name'] = isset($extraInfo['x-magento-ext-title']) ?
198+
$extraInfo['x-magento-ext-title'] : $item['name'];
199+
$item['type'] = isset($extraInfo['x-magento-ext-type']) ? $extraInfo['x-magento-ext-type'] :
200+
$this->typeMapper->map($item['name'], ComposerInformation::MODULE_PACKAGE_TYPE);
158201
}
159202

160-
return $modules;
203+
return array_values($items);
161204
}
162205
}

setup/src/Magento/Setup/Model/PackagesData.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,21 @@ private function syncPackagesForInstall()
289289
}
290290
}
291291

292+
/**
293+
* Get package extra info
294+
*
295+
* @param string $packageName
296+
* @param string $packageVersion
297+
* @return array
298+
*/
299+
public function getPackageExtraInfo($packageName, $packageVersion)
300+
{
301+
$packagesJson = $this->getPackagesJson();
302+
303+
return isset($packagesJson[$packageName][$packageVersion]['extra']) ?
304+
$packagesJson[$packageName][$packageVersion]['extra'] : [] ;
305+
}
306+
292307
/**
293308
* Check if this new user package
294309
*

setup/src/Magento/Setup/Test/Unit/Controller/UpdateExtensionGridTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public function testExtensionsAction()
5050
$extensionData = [
5151
[
5252
'name' => 'magento-package-1',
53+
'product_name' => 'magento/package-1',
5354
'type' => 'magento2-module',
5455
'version' => '1.0.0',
5556
'latestVersion' => '2.0.5',

setup/src/Magento/Setup/Test/Unit/Model/Grid/ExtensionTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,22 +90,39 @@ public function testGetList()
9090
]
9191
);
9292

93+
$this->packagesDataMock->expects($this->exactly(2))
94+
->method('getPackageExtraInfo')
95+
->willReturnMap(
96+
[
97+
['magento/package-1', '1.0.0', []],
98+
[
99+
'magento/package-2',
100+
'1.0.1',
101+
['x-magento-ext-title'=> 'Package2 title', 'x-magento-ext-package-link' => 'http://example.com']
102+
],
103+
]
104+
);
105+
93106
$expected = [
94107
[
95108
'name' => 'magento/package-1',
109+
'product_name' => 'magento/package-1',
96110
'type' => 'Extension',
97111
'version' => '1.0.0',
98112
'update' => true,
99113
'uninstall' => true,
100114
'vendor' => 'Magento',
115+
'link' => '',
101116
],
102117
[
103118
'name' => 'magento/package-2',
119+
'product_name' => 'Package2 title',
104120
'type' => 'Extension',
105121
'version' => '1.0.1',
106122
'update' => false,
107123
'uninstall' => true,
108124
'vendor' => 'Magento',
125+
'link' => 'http://example.com',
109126
],
110127
];
111128

0 commit comments

Comments
 (0)