From 9116ab225b29b80ccb8b87fde437f45e9051b8da Mon Sep 17 00:00:00 2001 From: Alexey Arendarenko Date: Wed, 15 Aug 2018 14:02:33 +0300 Subject: [PATCH 1/2] Catalog module fixes - Add ValueFactory class to save custom options in more proper way --- .../Catalog/Model/Product/Option/Value.php | 52 ++++++++++++------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index e7c770d065824..4ce67a14b4894 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -14,6 +14,7 @@ use Magento\Catalog\Pricing\Price\BasePrice; use Magento\Catalog\Pricing\Price\CustomOptionPriceCalculator; use Magento\Catalog\Pricing\Price\RegularPrice; +use Magento\Catalog\Model\Product\Option\ValueFactory; /** * Catalog product option select type model @@ -72,13 +73,19 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu private $customOptionPriceCalculator; /** - * @param \Magento\Framework\Model\Context $context - * @param \Magento\Framework\Registry $registry + * @var ValueFactory + */ + private $valueFactory; + + /** + * @param \Magento\Framework\Model\Context $context + * @param \Magento\Framework\Registry $registry * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory - * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource - * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection - * @param array $data - * @param CustomOptionPriceCalculator|null $customOptionPriceCalculator + * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource + * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection + * @param array $data + * @param CustomOptionPriceCalculator|null $customOptionPriceCalculator + * @param \Magento\Catalog\Model\Product\Option\ValueFactory|null $valueFactory */ public function __construct( \Magento\Framework\Model\Context $context, @@ -87,12 +94,14 @@ public function __construct( \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], - CustomOptionPriceCalculator $customOptionPriceCalculator = null + CustomOptionPriceCalculator $customOptionPriceCalculator = null, + ValueFactory $valueFactory = null ) { $this->_valueCollectionFactory = $valueCollectionFactory; $this->customOptionPriceCalculator = $customOptionPriceCalculator ?? \Magento\Framework\App\ObjectManager::getInstance()->get(CustomOptionPriceCalculator::class); - + $this->valueFactory = $valueFactory + ?? \Magento\Framework\App\ObjectManager::getInstance()->get(ValueFactory::class); parent::__construct( $context, $registry, @@ -208,18 +217,25 @@ public function saveValues() $option = $this->getOption(); foreach ($this->getValues() as $value) { - $this->isDeleted(false); - $this->setData($value) - ->setData('option_id', $option->getId()) - ->setData('store_id', $option->getStoreId()); - - if ((bool) $this->getData('is_delete') === true) { - if ($this->getId()) { - $this->deleteValues($this->getId()); - $this->delete(); + $optionModel = $this->valueFactory->create(); + + $optionModel->setData( + $value + )->setData( + 'option_id', + $option->getId() + )->setData( + 'store_id', + $option->getStoreId() + ); + + if ((bool) $optionModel->getData('is_delete') === true) { + if ($optionModel->getId()) { + $this->deleteValues($optionModel->getId()); + $optionModel->delete(); } } else { - $this->save(); + $optionModel->save(); } } From 876bab891ce97379887c7676eab704ab904a93bf Mon Sep 17 00:00:00 2001 From: Alexey Arendarenko Date: Wed, 15 Aug 2018 14:57:31 +0300 Subject: [PATCH 2/2] Catalog module fixes - Fix model variable name --- .../Magento/Catalog/Model/Product/Option/Value.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index 4ce67a14b4894..e09d86c7bab5f 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -217,9 +217,9 @@ public function saveValues() $option = $this->getOption(); foreach ($this->getValues() as $value) { - $optionModel = $this->valueFactory->create(); + $valueModel = $this->valueFactory->create(); - $optionModel->setData( + $valueModel->setData( $value )->setData( 'option_id', @@ -229,13 +229,13 @@ public function saveValues() $option->getStoreId() ); - if ((bool) $optionModel->getData('is_delete') === true) { - if ($optionModel->getId()) { - $this->deleteValues($optionModel->getId()); - $optionModel->delete(); + if ((bool) $valueModel->getData('is_delete') === true) { + if ($valueModel->getId()) { + $this->deleteValues($valueModel->getId()); + $valueModel->delete(); } } else { - $optionModel->save(); + $valueModel->save(); } }