diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 066e0cf166ee1..142c4bb7b5f5c 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -2223,9 +2223,14 @@ private function _parseAdditionalAttributes($rowData) $attributeNameValuePairs = explode($this->getMultipleValueSeparator(), $rowData['additional_attributes']); foreach ($attributeNameValuePairs as $attributeNameValuePair) { - $nameAndValue = explode(self::PAIR_NAME_VALUE_SEPARATOR, $attributeNameValuePair); - if (!empty($nameAndValue)) { - $rowData[$nameAndValue[0]] = isset($nameAndValue[1]) ? $nameAndValue[1] : ''; + $separatorPosition = strpos($attributeNameValuePair, self::PAIR_NAME_VALUE_SEPARATOR); + if ($separatorPosition !== false) { + $key = substr($attributeNameValuePair, 0, $separatorPosition); + $value = substr( + $attributeNameValuePair, + $separatorPosition + strlen(self::PAIR_NAME_VALUE_SEPARATOR) + ); + $rowData[$key] = $value === false ? '' : $value; } } return $rowData; diff --git a/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php b/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php index b8f8b78108fc9..8c7eff09a889c 100644 --- a/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php +++ b/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php @@ -20,9 +20,6 @@ class ConfigurableProductHandler /** @var ConfigurableProductsProvider */ private $configurableProductsProvider; - /** @var array */ - private $subProductsValidationResults = []; - /** * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurable * @param ConfigurableProductsProvider $configurableProductsProvider @@ -39,45 +36,24 @@ public function __construct( * @param \Magento\CatalogRule\Model\Rule $rule * @param array $productIds * @return array + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterGetMatchingProductIds(\Magento\CatalogRule\Model\Rule $rule, array $productIds) { $configurableProductIds = $this->configurableProductsProvider->getIds(array_keys($productIds)); foreach ($configurableProductIds as $productId) { - $subProductsIds = $this->configurable->getChildrenIds($productId)[0]; - $parentValidationResult = $productIds[$productId]; - foreach ($subProductsIds as $subProductsId) { - $productIds[$subProductsId] = $this->getSubProductValidationResult( - $rule->getId(), - $subProductsId, - $parentValidationResult - ); + $subProductIds = $this->configurable->getChildrenIds($productId)[0]; + $parentValidationResult = isset($productIds[$productId]) + ? array_filter($productIds[$productId]) + : []; + foreach ($subProductIds as $subProductId) { + $childValidationResult = isset($productIds[$subProductId]) + ? array_filter($productIds[$subProductId]) + : []; + $productIds[$subProductId] = $parentValidationResult + $childValidationResult; } unset($productIds[$productId]); } return $productIds; } - - /** - * Return validation result for sub-product. - * If any of configurable product is valid for current rule, then their sub-product must be valid too - * - * @param int $urlId - * @param int $subProductsId - * @param array $parentValidationResult - * @return array - */ - private function getSubProductValidationResult($urlId, $subProductsId, $parentValidationResult) - { - if (!isset($this->subProductsValidationResults[$urlId][$subProductsId])) { - $this->subProductsValidationResults[$urlId][$subProductsId] = array_filter($parentValidationResult); - } else { - $parentValidationResult = array_intersect_key( - $this->subProductsValidationResults[$urlId][$subProductsId] + $parentValidationResult, - $parentValidationResult - ); - $this->subProductsValidationResults[$urlId][$subProductsId] = $parentValidationResult; - } - return $parentValidationResult; - } } diff --git a/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php b/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php index 5878f7eea8702..90f7856dc81af 100644 --- a/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php +++ b/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php @@ -93,13 +93,9 @@ public function testAfterGetMatchingProductIdsWithConfigurableProduct() 0 => true, 1 => true, 3 => true, - 4 => false, ], 'simple2' => [ - 0 => false, - 1 => false, 3 => true, - 4 => false, ] ], $this->configurableProductHandler->afterGetMatchingProductIds(