Skip to content

Commit 5560a1c

Browse files
author
Natalia Momotenko
committed
Merge remote-tracking branch 'origin/develop' into MAGETWO-35059
2 parents 7315c47 + 882be01 commit 5560a1c

File tree

14 files changed

+546
-55
lines changed

14 files changed

+546
-55
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/**
2+
* Copyright © 2015 Magento. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
define([
6+
'underscore',
7+
'mage/translate',
8+
'./multiselect',
9+
'uiRegistry'
10+
], function (_, $t, Column, registry) {
11+
'use strict';
12+
13+
return Column.extend({
14+
defaults: {
15+
headerTmpl: 'ui/grid/columns/onoff',
16+
bodyTmpl: 'ui/grid/cells/onoff',
17+
imports: {
18+
selectedData: '${ $.provider }:data.selectedData'
19+
},
20+
listens: {
21+
'${ $.provider }:reloaded': 'setDefaultSelections'
22+
}
23+
},
24+
25+
/**
26+
* @param {Integer} id
27+
* @returns {*}
28+
*/
29+
getLabel: function (id) {
30+
return this.selected.indexOf(id) !== -1 ? $t('On') : $t('Off');
31+
},
32+
33+
/**
34+
* Initializes components' static properties.
35+
*
36+
* @returns {Column} Chainable.
37+
*/
38+
initProperties: function () {
39+
this.actions = [{
40+
value: 'selectPage',
41+
label: $t('Select all on this page')
42+
}, {
43+
value: 'deselectPage',
44+
label: $t('Deselect all on this page')
45+
}];
46+
47+
return this._super();
48+
},
49+
50+
/**
51+
* Sets the ids for preselected elements
52+
* @returns void
53+
*/
54+
setDefaultSelections: function () {
55+
var positionCacheValid = registry.get('position_cache_valid'),
56+
key,
57+
i;
58+
59+
registry.set('position_cache_valid', true);
60+
61+
if (this.selected().length === this.selectedData.length || positionCacheValid) {
62+
return;
63+
}
64+
// Check selected data
65+
for (key in this.selectedData) {
66+
if (this.selectedData.hasOwnProperty(key) && this.selected().indexOf(key) === -1) {
67+
this.selected.push(key);
68+
}
69+
}
70+
// Uncheck unselected data
71+
for (i = 0; i < this.selected().length; i++) {
72+
key = this.selected()[i];
73+
this.selectedData.hasOwnProperty(key) || this.selected.splice(this.selected().indexOf(key), 1);
74+
}
75+
},
76+
77+
/**
78+
* Show/hide action in the massaction menu
79+
* @param {Integer} actionId
80+
* @returns {Boolean}
81+
*/
82+
isActionRelevant: function (actionId) {
83+
var relevant = true;
84+
85+
switch (actionId) {
86+
case 'selectPage':
87+
relevant = !this.isPageSelected(true);
88+
break;
89+
90+
case 'deselectPage':
91+
relevant = this.isPageSelected();
92+
break;
93+
}
94+
95+
return relevant;
96+
},
97+
98+
/**
99+
* Updates values of the 'allSelected'
100+
* and 'indetermine' properties.
101+
*
102+
* @returns {Multiselect} Chainable.
103+
*/
104+
updateState: function () {
105+
var totalRecords = this.totalRecords(),
106+
selected = this.selected().length,
107+
excluded = this.excluded().length,
108+
totalSelected = this.totalSelected(),
109+
allSelected;
110+
111+
// When filters are enabled then totalRecords is unknown
112+
if (this.getFiltering()) {
113+
if (this.getFiltering().search !== '') {
114+
totalRecords = -1;
115+
}
116+
}
117+
118+
allSelected = totalRecords && totalSelected === totalRecords;
119+
120+
if (this.excludeMode()) {
121+
if (excluded === totalRecords) {
122+
this.deselectAll();
123+
}
124+
} else if (totalRecords && selected === totalRecords) {
125+
this.selectAll();
126+
}
127+
128+
this.allSelected(allSelected);
129+
this.indetermine(totalSelected && !allSelected);
130+
131+
return this;
132+
}
133+
});
134+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!--
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
-->
7+
8+
<td class="data-grid-onoff-cell admin__scope-old">
9+
<div class="switcher">
10+
<input
11+
class="admin__control-onoff"
12+
type="checkbox"
13+
data-bind="checked: selected,
14+
value: row[indexField],
15+
attr: {id: 'check' + row[indexField]}">
16+
<label class="switcher-label" data-bind="attr: {for: 'check' + row[indexField]}, text: getLabel(row[indexField])"></label>
17+
</div>
18+
</td>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<!--
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
-->
7+
8+
<th class="data-grid-multicheck-cell">
9+
<label data-bind="i18n: 'Assign'"></label>
10+
<div
11+
class="action-multicheck-wrap"
12+
style="width: 3.3rem"
13+
data-bind="css: { '_active': menuVisible, '_disabled': !totalRecords()},
14+
outerClick: hideMenu">
15+
<input
16+
id="mass-select-checkbox"
17+
class="admin__control-checkbox"
18+
type="checkbox"
19+
data-bind="checked: allSelected,
20+
event: { change: toggleSelectAll },
21+
css: { '_indeterminate': indetermine },
22+
enable: totalRecords">
23+
<label for="mass-select-checkbox" class="data-grid-onoff-label">
24+
<span data-bind="i18n: 'Select all'"></span>
25+
</label>
26+
<button
27+
class="action-multicheck-toggle"
28+
data-toggle="dropdown"
29+
data-bind="css: { '_active': menuVisible },
30+
click: toggleMenu,
31+
enable: totalRecords">
32+
<span data-bind="i18n: 'Options'"></span>
33+
</button>
34+
<ul
35+
class="action-menu"
36+
data-bind="click: hideMenu, foreach: actions">
37+
<li data-bind="click: $parent[value].bind($parent),
38+
visible: $parent.isActionRelevant(value)">
39+
<span class="action-menu-item" data-bind="text: label"></span>
40+
</li>
41+
</ul>
42+
</div>
43+
</th>

app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,11 @@ body._in-resize {
313313
text-align: center;
314314
vertical-align: middle;
315315
}
316+
.data-grid-onoff-label {
317+
> span {
318+
.lib-visually-hidden();
319+
}
320+
}
316321
.data-grid-actions-cell {
317322
padding-left: @data-grid-cell__padding-horizontal * 2;
318323
padding-right: @data-grid-cell__padding-horizontal * 2;

dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract
2727
*/
2828
public function testSave($productLink, $productId, $productPosition = 0)
2929
{
30+
$this->checkIfTestable();
31+
3032
$serviceInfo = [
3133
'rest' => [
3234
'resourcePath' => self::RESOURCE_PATH_SUFFIX
@@ -69,6 +71,8 @@ public function saveDataProvider()
6971
*/
7072
public function testUpdateProduct($productLink, $productId, $productPosition = 0)
7173
{
74+
$this->checkIfTestable();
75+
7276
$serviceInfo = [
7377
'rest' => [
7478
'resourcePath' => self::RESOURCE_PATH_SUFFIX
@@ -107,6 +111,8 @@ public function updateProductProvider()
107111
*/
108112
public function testDelete()
109113
{
114+
$this->checkIfTestable();
115+
110116
$serviceInfo = [
111117
'rest' => [
112118
'resourcePath' => self::RESOURCE_PATH_SUFFIX . '/' . $this->categoryId .
@@ -146,4 +152,20 @@ private function isProductInCategory($categoryId, $productId, $productPosition)
146152
return false;
147153
}
148154
}
155+
156+
/**
157+
* MAGETWO-41737: Skip tests when the flag 'custom_categories_sort' is up
158+
* @return void
159+
*/
160+
private function checkIfTestable()
161+
{
162+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
163+
164+
/** @var \Magento\Framework\App\Config\ScopeConfigInterface $config */
165+
$config = $objectManager->get('Magento\Framework\App\Config\ScopeConfigInterface');
166+
167+
if ($config->getValue('catalog/custom_categories_sort') == 1) {
168+
$this->markTestSkipped('Will be fixed after MAGETWO-41737');
169+
}
170+
}
149171
}

dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@
6464
true
6565
)->setPosition(
6666
$position
67+
)->setUrlKey(
68+
'category_' . $categoryId
6769
)->save();
6870

6971
foreach ($testCase[0] as $price) {

lib/internal/Magento/Framework/Composer/ComposerInformation.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,4 +275,15 @@ public function getPackagesTypes()
275275
{
276276
return self::$packageTypes;
277277
}
278+
279+
/**
280+
* @param string $name
281+
* @param string $version
282+
* @return array
283+
*/
284+
public function getPackageRequirements($name, $version)
285+
{
286+
$package = $this->composer->getRepositoryManager()->findPackage($name, $version);
287+
return $package->getRequires();
288+
}
278289
}

lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<xs:element ref="referenceBlock" minOccurs="0" maxOccurs="unbounded"/>
1717
<xs:element ref="update" minOccurs="0" maxOccurs="unbounded"/>
1818
<xs:element ref="move" minOccurs="0" maxOccurs="unbounded"/>
19+
<xs:element ref="uiComponent" minOccurs="0" maxOccurs="unbounded"/>
1920
</xs:sequence>
2021
</xs:complexType>
2122

setup/pub/magento/setup/select-version.js

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,29 @@ angular.module('select-version', ['ngStorage'])
2727
$http.get('index.php/select-version/systemPackage', {'responseType' : 'json'})
2828
.success(function (data) {
2929
if (data.responseType != 'error') {
30-
$scope.versions = data.package.versions;
31-
$scope.packages[0].name = data.package.package;
32-
$scope.packages[0].version = $scope.versions[0].id;
33-
$scope.selectedOption = $scope.versions[0].id;
30+
$scope.selectedOption = [];
31+
$scope.versions = [];
32+
for (var i = 0; i < data.packages.length; i++) {
33+
angular.forEach(data.packages[i].versions, function (value, key) {
34+
$scope.versions.push({
35+
'versionInfo': angular.toJson({
36+
'package': data.packages[i].package,
37+
'version': value
38+
}), 'version': value
39+
});
40+
});
41+
}
42+
43+
$scope.versions = $scope.versions.sort(function (a, b) {
44+
if (a.version.id < b.version.id) {
45+
return 1;
46+
}
47+
if (a.version.id > b.version.id) {
48+
return -1;
49+
}
50+
return 0;
51+
});
52+
$scope.selectedOption = $scope.versions[0].versionInfo;
3453
$scope.upgradeReadyForNext = true;
3554

3655
} else {
@@ -135,7 +154,9 @@ angular.module('select-version', ['ngStorage'])
135154
};
136155

137156
$scope.update = function() {
138-
$scope.packages[0].version = $scope.selectedOption;
157+
var selectedVersionInfo = angular.fromJson($scope.selectedOption);
158+
$scope.packages[0]['name'] = selectedVersionInfo.package;
159+
$scope.packages[0].version = selectedVersionInfo.version.id;
139160
if (angular.equals($scope.updateComponents.no, true)) {
140161
if ($scope.totalForGrid > 0) {
141162
$scope.packages.splice(1, $scope.totalForGrid);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function systemPackageAction()
5151
{
5252
$data = [];
5353
try {
54-
$data['package'] = $this->systemPackage->getPackageVersions();
54+
$data['packages'] = $this->systemPackage->getPackageVersions();
5555
$responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
5656
} catch (\Exception $e) {
5757
$responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;

0 commit comments

Comments
 (0)