Skip to content

Commit 2bd532f

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-62467' into 2.0.16-develop-pr16
# Conflicts: # dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/ConfigurableAttributesData.xml
2 parents 2e30d81 + 6481cf7 commit 2bd532f

File tree

24 files changed

+388
-61
lines changed

24 files changed

+388
-61
lines changed

app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<div data-role="tabs" id="product-edit-form-tabs"></div> <?php /* @TODO: remove id after elimination of setDestElementId('product-edit-form-tabs') */?>
5454
<?php echo $block->getChildHtml('product-type-tabs') ?>
5555
<input type="hidden" id="product_type_id" value="<?php /* @escapeNotVerified */ echo $block->getProduct()->getTypeId()?>"/>
56-
<input type="hidden" id="attribute_set_id" value="<?php /* @escapeNotVerified */ echo $block->getProduct()->getAttributeSetId()?>"/>
56+
<input type="hidden" id="attribute_set_id" name="set" value="<?php /* @escapeNotVerified */ echo $block->getProduct()->getAttributeSetId()?>"/>
5757
<button type="submit" class="hidden"></button>
5858
<?php if ($block->getUseContainer()): ?>
5959
</form>

app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Configurable.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ public function afterInitialize(
5151
$attributes = $this->request->getParam('attributes');
5252
if ($product->getTypeId() == ConfigurableProduct::TYPE_CODE && !empty($attributes)) {
5353
$setId = $this->request->getPost('new-variations-attribute-set-id');
54+
55+
if (!$setId) {
56+
$setId = $this->request->getPost('set');
57+
}
5458
$product->setAttributeSetId($setId);
59+
$product->getResource()->getSortedAttributes($setId);
5560
$this->productType->setUsedProductAttributeIds($attributes, $product);
5661

5762
$product->setNewVariationsAttributeSetId($setId);

app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Initialization/Helper/Plugin/UpdateConfigurations.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,25 @@ public function afterInitialize(
5151
$configurations = json_decode($this->request->getParam('configurations_serialized'), true);
5252
}
5353
$configurations = $this->variationHandler->duplicateImagesForVariations($configurations);
54+
$productsAttributeSets = [];
55+
5456
foreach ($configurations as $productId => $productData) {
5557
/** @var \Magento\Catalog\Model\Product $product */
5658
$product = $this->productRepository->getById($productId, false, $this->request->getParam('store', 0));
5759
$productData = $this->variationHandler->processMediaGallery($product, $productData);
60+
$productAttributeSetId = $product->getAttributeSetId();
61+
62+
if (!array_key_exists($productAttributeSetId, $productsAttributeSets)) {
63+
$product->getResource()->getSortedAttributes($productAttributeSetId);
64+
$productsAttributeSets[$productAttributeSetId] = 1;
65+
}
66+
5867
$product->addData($productData);
5968
if ($product->hasDataChanges()) {
6069
$product->save();
6170
}
6271
}
72+
6373
return $configurableProduct;
6474
}
6575
}

app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Initialization/Helper/Plugin/ConfigurableTest.php

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\ConfigurableProduct\Test\Unit\Controller\Adminhtml\Product\Initialization\Helper\Plugin;
77

8+
use Magento\Catalog\Model\ResourceModel\Product;
89
use \Magento\ConfigurableProduct\Controller\Adminhtml\Product\Initialization\Helper\Plugin\Configurable;
910
use Magento\ConfigurableProduct\Model\Product\Type\Configurable as ConfigurableProduct;
1011

@@ -43,30 +44,31 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
4344
protected function setUp()
4445
{
4546
$this->productTypeMock = $this->getMock(
46-
'Magento\ConfigurableProduct\Model\Product\Type\Configurable',
47+
\Magento\ConfigurableProduct\Model\Product\Type\Configurable::class,
4748
[],
4849
[],
4950
'',
5051
false
5152
);
5253
$this->variationHandler = $this->getMock(
53-
'Magento\ConfigurableProduct\Model\Product\VariationHandler',
54+
\Magento\ConfigurableProduct\Model\Product\VariationHandler::class,
5455
[],
5556
[],
5657
'',
5758
false
5859
);
59-
$this->requestMock = $this->getMock('\Magento\Framework\App\Request\Http', [], [], '', false);
60+
$this->requestMock = $this->getMock(\Magento\Framework\App\Request\Http::class, [], [], '', false);
6061
$methods = [
6162
'setNewVariationsAttributeSetId',
6263
'setAssociatedProductIds',
6364
'setCanSaveConfigurableAttributes',
6465
'getTypeId',
66+
'getResource',
6567
'__wakeup',
6668
];
67-
$this->productMock = $this->getMock('Magento\Catalog\Model\Product', $methods, [], '', false);
69+
$this->productMock = $this->getMock(\Magento\Catalog\Model\Product::class, $methods, [], '', false);
6870
$this->subjectMock = $this->getMock(
69-
'Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper',
71+
\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper::class,
7072
[],
7173
[],
7274
'',
@@ -77,13 +79,16 @@ protected function setUp()
7779

7880
public function testAfterInitializeIfAttributesNotEmptyAndActionNameNotGenerateVariations()
7981
{
82+
$postValue = 'postValue';
83+
$productResourceMock = $this->getProductResource($postValue);
84+
8085
$this->productMock->expects($this->once())->method('getTypeId')->willReturn(ConfigurableProduct::TYPE_CODE);
86+
$this->productMock->expects($this->once())->method('getResource')->willReturn($productResourceMock);
8187
$associatedProductIds = ['key' => 'value'];
8288
$associatedProductIdsSerialized = json_encode($associatedProductIds);
8389
$generatedProductIds = ['key_one' => 'value_one'];
8490
$expectedArray = ['key' => 'value', 'key_one' => 'value_one'];
8591
$attributes = ['key' => 'value'];
86-
$postValue = 'postValue';
8792
$variationsMatrix = ['variationKey' => 'variationValue'];
8893
$variationsMatrixSerialized = json_encode($variationsMatrix);
8994

@@ -125,11 +130,13 @@ public function testAfterInitializeIfAttributesNotEmptyAndActionNameNotGenerateV
125130

126131
public function testAfterInitializeIfAttributesNotEmptyAndActionNameGenerateVariations()
127132
{
133+
$postValue = 'postValue';
134+
$productResourceMock = $this->getProductResource($postValue);
128135
$this->productMock->expects($this->once())->method('getTypeId')->willReturn(ConfigurableProduct::TYPE_CODE);
136+
$this->productMock->expects($this->once())->method('getResource')->willReturn($productResourceMock);
129137
$associatedProductIds = ['key' => 'value'];
130138
$associatedProductIdsSerialized = json_encode($associatedProductIds);
131139
$attributes = ['key' => 'value'];
132-
$postValue = 'postValue';
133140
$valueMap = [
134141
['new-variations-attribute-set-id', null, $postValue],
135142
['associated_product_ids_serialized', '[]', $associatedProductIdsSerialized],
@@ -182,4 +189,22 @@ public function testAfterInitializeForNotConfigurableProduct()
182189
$this->productTypeMock->expects($this->never())->method('generateSimpleProducts');
183190
$this->plugin->afterInitialize($this->subjectMock, $this->productMock);
184191
}
192+
193+
/**
194+
* Generate product resource model mock.
195+
*
196+
* @param $postValue
197+
* @return \PHPUnit_Framework_MockObject_MockObject
198+
*/
199+
private function getProductResource($postValue)
200+
{
201+
$productResourceMock = $this->getMockBuilder(Product::class)
202+
->disableOriginalConstructor()
203+
->getMock();
204+
$productResourceMock->expects(self::once())
205+
->method('getSortedAttributes')
206+
->with($postValue);
207+
208+
return $productResourceMock;
209+
}
185210
}

app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,11 @@
164164
$('[data-role=new-variations-attribute-set-id]').val($('#attribute_set_id').val());
165165
return; // all selected configurable attributes belong to current attribute set
166166
}
167-
if (!$('[data-role=product-variations-matrix] [data-column=entity_id]')
168-
.closest('tr').has('input[name$="[name]"]').length
169-
) {
170-
return; // no new simple products to save from matrix: uniting attribute set is not needed
167+
168+
var regex = /id\/(\d+)(?:\/)?/g;
169+
var existingProductPage = regex.exec(BASE_URL);
170+
if (existingProductPage != null) {
171+
return; // it is not new product page
171172
}
172173

173174
event.stopImmediatePropagation();

app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,28 @@
152152
</item>
153153
</argument>
154154
</column>
155+
<column name="weight">
156+
<argument name="data" xsi:type="array">
157+
<item name="config" xsi:type="array">
158+
<item name="filter" xsi:type="string">text</item>
159+
<item name="add_field" xsi:type="boolean">true</item>
160+
<item name="label" xsi:type="string" translate="true">Weight</item>
161+
<item name="sortOrder" xsi:type="number">90</item>
162+
</item>
163+
</argument>
164+
</column>
165+
<column name="status">
166+
<argument name="data" xsi:type="array">
167+
<item name="options" xsi:type="object">Magento\Catalog\Model\Product\Attribute\Source\Status</item>
168+
<item name="config" xsi:type="array">
169+
<item name="filter" xsi:type="string">select</item>
170+
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
171+
<item name="add_field" xsi:type="boolean">true</item>
172+
<item name="dataType" xsi:type="string">select</item>
173+
<item name="label" xsi:type="string" translate="true">Status</item>
174+
<item name="sortOrder" xsi:type="number">100</item>
175+
</item>
176+
</argument>
177+
</column>
155178
</columns>
156179
</listing>

app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ define([
2929
listens: {
3030
'${ $.productsProvider }:data': '_showMessageAssociatedGrid _handleManualGridOpening',
3131
'${ $.productsMassAction }:selected': '_handleManualGridSelect',
32-
'${ $.configurableVariations }:productMatrix': '_showButtonAddManual _switchProductType'
32+
'${ $.configurableVariations }:productMatrix': '_switchProductType',
33+
'${ $.configurableVariations }:isShowAddProductButton': '_showButtonAddManual'
3334
}
3435
},
3536

@@ -64,7 +65,7 @@ define([
6465
this.productsModal.notification();
6566
}.bind(this));
6667
this.variationsComponent(function (variation) {
67-
this._showButtonAddManual(variation.productMatrix());
68+
this._showButtonAddManual(variation.attributes());
6869
}.bind(this));
6970

7071
this._initGrid = _.once(this._initGrid);
@@ -192,12 +193,12 @@ define([
192193

193194
/**
194195
* Show button add manual
195-
* @param {Array} variations
196+
* @param {Array} attributes
196197
* @returns {*}
197198
* @private
198199
*/
199-
_showButtonAddManual: function (variations) {
200-
return this.button(variations.length);
200+
_showButtonAddManual: function (attributes) {
201+
return this.button(attributes.length);
201202
},
202203

203204
_switchProductType: function (variations) {

app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ define([
3434
configurationsSerialized: ko.observable(''),
3535
variations: [],
3636
productAttributes: [],
37+
isShowAddProductButton: false,
3738
fullAttributes: [],
3839
rowIndexToEdit: false,
3940
productAttributesMap: null,
@@ -73,7 +74,7 @@ define([
7374
pageSize: ko.getObservable(this.paging, 'pageSize')
7475
};
7576

76-
this._super().observe('actions opened attributes productMatrix');
77+
this._super().observe('actions opened attributes productMatrix isShowAddProductButton');
7778
this.paging.totalRecords = this.variations.length;
7879

7980
_.each(pagingObservables, function (observable) {
@@ -452,6 +453,7 @@ define([
452453
}, this);
453454
this.productMatrix([]);
454455
this.productMatrix(tempMatrix);
456+
this.isShowAddProductButton(this.attributes());
455457
},
456458

457459
/**

app/code/Magento/Eav/Model/AttributeRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public function getList($entityTypeCode, \Magento\Framework\Api\SearchCriteriaIn
103103
'main_table.entity_type_id = entity_type.entity_type_id',
104104
[]
105105
);
106-
$attributeCollection->join(
106+
$attributeCollection->joinLeft(
107107
['eav_entity_attribute' => $attributeCollection->getTable('eav_entity_attribute')],
108108
'main_table.attribute_id = eav_entity_attribute.attribute_id',
109109
[]

dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@
445445
<item name="dataset" xsi:type="string">default</item>
446446
</field>
447447
<field name="product_has_weight" xsi:type="string">Yes</field>
448+
<field name="weight" xsi:type="string">1</field>
448449
<field name="price" xsi:type="array">
449450
<item name="value" xsi:type="string">10</item>
450451
<item name="dataset" xsi:type="string" />

0 commit comments

Comments
 (0)