From fbfd7ce030bd9ba6d4fc1baaf07f2d8ebd94e85f Mon Sep 17 00:00:00 2001 From: Rafael Kassner Date: Sun, 26 Mar 2017 22:47:04 +0200 Subject: [PATCH] Bundle _prepareProduct cannot be called twice with different selections --- .../Model/ResourceModel/Option/Collection.php | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php index 6bc46ff824375..0f43acf84285d 100644 --- a/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php +++ b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php @@ -17,13 +17,6 @@ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\Ab */ protected $_itemIds; - /** - * True when selections appended - * - * @var bool - */ - protected $_selectionsAppended = false; - /** * Init model and resource model * @@ -132,10 +125,10 @@ public function setPositionOrder() public function appendSelections($selectionsCollection, $stripBefore = false, $appendAll = true) { if ($stripBefore) { - $this->_stripSelections(); + $this->_stripSelections($selectionsCollection); } - if (!$this->_selectionsAppended) { + if (!$selectionsCollection->getFlag('has_options_appended')) { foreach ($selectionsCollection->getItems() as $key => $selection) { $option = $this->getItemById($selection->getOptionId()); if ($option) { @@ -147,7 +140,7 @@ public function appendSelections($selectionsCollection, $stripBefore = false, $a } } } - $this->_selectionsAppended = true; + $selectionsCollection->setFlag('has_options_appended', true); } return $this->getItems(); @@ -156,14 +149,21 @@ public function appendSelections($selectionsCollection, $stripBefore = false, $a /** * Removes appended selections before * + * @param \Magento\Framework\Data\Collection $selectionsCollection * @return $this */ - protected function _stripSelections() + protected function _stripSelections(\Magento\Framework\Data\Collection $selectionsCollection) { foreach ($this->getItems() as $option) { $option->setSelections([]); } - $this->_selectionsAppended = false; + + foreach ($selectionsCollection->getItems() as $selection) { + $selection->setOption(null); + } + + $selectionsCollection->setFlag('has_options_appended', false); + return $this; }