Skip to content

Commit 94b5a41

Browse files
committed
Merge remote-tracking branch 'magento2ce/develop' into master4
2 parents 8a4d956 + c743dec commit 94b5a41

File tree

14 files changed

+228
-184
lines changed

14 files changed

+228
-184
lines changed

app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -119,23 +119,21 @@ protected function _saveValuePrices(\Magento\Framework\Model\AbstractModel $obje
119119
$optionId = $connection->fetchOne($statement);
120120

121121
if ($optionId) {
122-
if ($object->getStoreId() == '0') {
123-
$data = $this->_prepareDataForTable(
124-
new \Magento\Framework\DataObject(
125-
['price' => $object->getPrice(), 'price_type' => $object->getPriceType()]
126-
),
127-
$priceTable
128-
);
122+
$data = $this->_prepareDataForTable(
123+
new \Magento\Framework\DataObject(
124+
['price' => $object->getPrice(), 'price_type' => $object->getPriceType()]
125+
),
126+
$priceTable
127+
);
129128

130-
$connection->update(
131-
$priceTable,
132-
$data,
133-
[
134-
'option_id = ?' => $object->getId(),
135-
'store_id = ?' => \Magento\Store\Model\Store::DEFAULT_STORE_ID
136-
]
137-
);
138-
}
129+
$connection->update(
130+
$priceTable,
131+
$data,
132+
[
133+
'option_id = ?' => $object->getId(),
134+
'store_id = ?' => \Magento\Store\Model\Store::DEFAULT_STORE_ID
135+
]
136+
);
139137
} else {
140138
$data = $this->_prepareDataForTable(
141139
new \Magento\Framework\DataObject(

app/code/Magento/CatalogImportExport/Model/Import/Product.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,9 +2223,14 @@ private function _parseAdditionalAttributes($rowData)
22232223

22242224
$attributeNameValuePairs = explode($this->getMultipleValueSeparator(), $rowData['additional_attributes']);
22252225
foreach ($attributeNameValuePairs as $attributeNameValuePair) {
2226-
$nameAndValue = explode(self::PAIR_NAME_VALUE_SEPARATOR, $attributeNameValuePair);
2227-
if (!empty($nameAndValue)) {
2228-
$rowData[$nameAndValue[0]] = isset($nameAndValue[1]) ? $nameAndValue[1] : '';
2226+
$separatorPosition = strpos($attributeNameValuePair, self::PAIR_NAME_VALUE_SEPARATOR);
2227+
if ($separatorPosition !== false) {
2228+
$key = substr($attributeNameValuePair, 0, $separatorPosition);
2229+
$value = substr(
2230+
$attributeNameValuePair,
2231+
$separatorPosition + strlen(self::PAIR_NAME_VALUE_SEPARATOR)
2232+
);
2233+
$rowData[$key] = $value === false ? '' : $value;
22292234
}
22302235
}
22312236
return $rowData;

app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ class ConfigurableProductHandler
2020
/** @var ConfigurableProductsProvider */
2121
private $configurableProductsProvider;
2222

23-
/** @var array */
24-
private $subProductsValidationResults = [];
25-
2623
/**
2724
* @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurable
2825
* @param ConfigurableProductsProvider $configurableProductsProvider
@@ -39,45 +36,24 @@ public function __construct(
3936
* @param \Magento\CatalogRule\Model\Rule $rule
4037
* @param array $productIds
4138
* @return array
39+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4240
*/
4341
public function afterGetMatchingProductIds(\Magento\CatalogRule\Model\Rule $rule, array $productIds)
4442
{
4543
$configurableProductIds = $this->configurableProductsProvider->getIds(array_keys($productIds));
4644
foreach ($configurableProductIds as $productId) {
47-
$subProductsIds = $this->configurable->getChildrenIds($productId)[0];
48-
$parentValidationResult = $productIds[$productId];
49-
foreach ($subProductsIds as $subProductsId) {
50-
$productIds[$subProductsId] = $this->getSubProductValidationResult(
51-
$rule->getId(),
52-
$subProductsId,
53-
$parentValidationResult
54-
);
45+
$subProductIds = $this->configurable->getChildrenIds($productId)[0];
46+
$parentValidationResult = isset($productIds[$productId])
47+
? array_filter($productIds[$productId])
48+
: [];
49+
foreach ($subProductIds as $subProductId) {
50+
$childValidationResult = isset($productIds[$subProductId])
51+
? array_filter($productIds[$subProductId])
52+
: [];
53+
$productIds[$subProductId] = $parentValidationResult + $childValidationResult;
5554
}
5655
unset($productIds[$productId]);
5756
}
5857
return $productIds;
5958
}
60-
61-
/**
62-
* Return validation result for sub-product.
63-
* If any of configurable product is valid for current rule, then their sub-product must be valid too
64-
*
65-
* @param int $urlId
66-
* @param int $subProductsId
67-
* @param array $parentValidationResult
68-
* @return array
69-
*/
70-
private function getSubProductValidationResult($urlId, $subProductsId, $parentValidationResult)
71-
{
72-
if (!isset($this->subProductsValidationResults[$urlId][$subProductsId])) {
73-
$this->subProductsValidationResults[$urlId][$subProductsId] = array_filter($parentValidationResult);
74-
} else {
75-
$parentValidationResult = array_intersect_key(
76-
$this->subProductsValidationResults[$urlId][$subProductsId] + $parentValidationResult,
77-
$parentValidationResult
78-
);
79-
$this->subProductsValidationResults[$urlId][$subProductsId] = $parentValidationResult;
80-
}
81-
return $parentValidationResult;
82-
}
8359
}

app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,9 @@ public function testAfterGetMatchingProductIdsWithConfigurableProduct()
9393
0 => true,
9494
1 => true,
9595
3 => true,
96-
4 => false,
9796
],
9897
'simple2' => [
99-
0 => false,
100-
1 => false,
10198
3 => true,
102-
4 => false,
10399
]
104100
],
105101
$this->configurableProductHandler->afterGetMatchingProductIds(

app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Steps/Bulk.php

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,24 @@ class Bulk extends \Magento\Ui\Block\Component\StepsWizard\StepAbstract
1212
/** @var \Magento\Catalog\Helper\Image */
1313
protected $image;
1414

15+
/**
16+
* @var \Magento\ConfigurableProduct\Model\Product\VariationMediaAttributes
17+
*/
18+
protected $variationMediaAttributes;
19+
1520
/**
1621
* @param \Magento\Framework\View\Element\Template\Context $context
1722
* @param \Magento\Catalog\Helper\Image $image
23+
* @param \Magento\ConfigurableProduct\Model\Product\VariationMediaAttributes $variationMediaAttributes
1824
*/
1925
public function __construct(
2026
\Magento\Framework\View\Element\Template\Context $context,
21-
\Magento\Catalog\Helper\Image $image
27+
\Magento\Catalog\Helper\Image $image,
28+
\Magento\ConfigurableProduct\Model\Product\VariationMediaAttributes $variationMediaAttributes
2229
) {
2330
parent::__construct($context);
2431
$this->image = $image;
32+
$this->variationMediaAttributes = $variationMediaAttributes;
2533
}
2634

2735
/**
@@ -39,4 +47,31 @@ public function getNoImageUrl()
3947
{
4048
return $this->image->getDefaultPlaceholderUrl('thumbnail');
4149
}
50+
51+
/**
52+
* Get image types data
53+
*
54+
* @return array
55+
*/
56+
public function getImageTypes()
57+
{
58+
$imageTypes = [];
59+
foreach ($this->variationMediaAttributes->getMediaAttributes() as $attribute) {
60+
/* @var $attribute \Magento\Eav\Model\Entity\Attribute */
61+
$imageTypes[$attribute->getAttributeCode()] = [
62+
'code' => $attribute->getAttributeCode(),
63+
'value' => '',
64+
'name' => '',
65+
];
66+
}
67+
return $imageTypes;
68+
}
69+
70+
/**
71+
* @return array
72+
*/
73+
public function getMediaAttributes()
74+
{
75+
return $this->variationMediaAttributes->getMediaAttributes();
76+
}
4277
}

app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,36 @@ class VariationHandler
3232
/** @var \Magento\CatalogInventory\Api\StockConfigurationInterface */
3333
protected $stockConfiguration;
3434

35+
/**
36+
* @var \Magento\ConfigurableProduct\Model\Product\VariationMediaAttributes
37+
*/
38+
protected $variationMediaAttributes;
39+
3540
/**
3641
* @param Type\Configurable $configurableProduct
3742
* @param \Magento\Eav\Model\Entity\Attribute\SetFactory $attributeSetFactory
3843
* @param \Magento\Eav\Model\EntityFactory $entityFactory
3944
* @param \Magento\Catalog\Model\ProductFactory $productFactory
4045
* @param \Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration
4146
* @param \Magento\Catalog\Model\Product\Attribute\Backend\Media $media
47+
* @param VariationMediaAttributes $variationMediaAttributes
4248
*/
4349
public function __construct(
4450
Type\Configurable $configurableProduct,
4551
\Magento\Eav\Model\Entity\Attribute\SetFactory $attributeSetFactory,
4652
\Magento\Eav\Model\EntityFactory $entityFactory,
4753
\Magento\Catalog\Model\ProductFactory $productFactory,
4854
\Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration,
49-
\Magento\Catalog\Model\Product\Attribute\Backend\Media $media
55+
\Magento\Catalog\Model\Product\Attribute\Backend\Media $media,
56+
\Magento\ConfigurableProduct\Model\Product\VariationMediaAttributes $variationMediaAttributes
5057
) {
5158
$this->configurableProduct = $configurableProduct;
5259
$this->attributeSetFactory = $attributeSetFactory;
5360
$this->entityFactory = $entityFactory;
5461
$this->productFactory = $productFactory;
5562
$this->stockConfiguration = $stockConfiguration;
5663
$this->media = $media;
64+
$this->variationMediaAttributes = $variationMediaAttributes;
5765
}
5866

5967
/**
@@ -209,11 +217,11 @@ public function duplicateImagesForVariations($productsData)
209217
$variationId = $image['variation_id'];
210218
$newFile = $this->media->duplicateImageFromTmp($file);
211219
$productsData[$variationId]['media_gallery']['images'][$imageId]['file'] = $newFile;
212-
foreach (['small_image', 'thumbnail', 'image'] as $imageType) {
213-
if (isset($productsData[$variationId][$imageType])
214-
&& $productsData[$variationId][$imageType] == $file
220+
foreach ($this->variationMediaAttributes->getMediaAttributes() as $attribute) {
221+
if (isset($productsData[$variationId][$attribute->getAttributeCode()])
222+
&& $productsData[$variationId][$attribute->getAttributeCode()] == $file
215223
) {
216-
$productsData[$variationId][$imageType] = $newFile;
224+
$productsData[$variationId][$attribute->getAttributeCode()] = $newFile;
217225
}
218226
}
219227
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\ConfigurableProduct\Model\Product;
8+
9+
/**
10+
* Class VariationMediaAttributes. Return media attributes allowed for variations
11+
*/
12+
class VariationMediaAttributes
13+
{
14+
/**
15+
* @var \Magento\Catalog\Model\ProductFactory
16+
*/
17+
protected $productFactory;
18+
19+
/**
20+
* @var array
21+
*/
22+
protected $mediaAttributes;
23+
24+
/**
25+
* @param \Magento\Catalog\Model\ProductFactory $productFactory
26+
*/
27+
public function __construct(\Magento\Catalog\Model\ProductFactory $productFactory)
28+
{
29+
$this->productFactory = $productFactory;
30+
}
31+
32+
/**
33+
* Get media attributes for Configurable variation
34+
*
35+
* @return array
36+
*/
37+
public function getMediaAttributes()
38+
{
39+
if (null === $this->mediaAttributes) {
40+
$this->mediaAttributes = $this->getProduct()->getMediaAttributes();
41+
}
42+
return $this->mediaAttributes;
43+
}
44+
45+
/**
46+
* Get product container for Simple product
47+
*
48+
* @return \Magento\Catalog\Model\Product
49+
*/
50+
private function getProduct()
51+
{
52+
return $this->productFactory->create()->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE);
53+
}
54+
}

0 commit comments

Comments
 (0)