/** * @param \Magento\Catalog\Api\Data\ProductInterface $product * @return \Magento\Bundle\Api\Data\OptionInterface[] */ public function getItems(\Magento\Catalog\Api\Data\ProductInterface $product) { $optionCollection = $this->type->getOptionsCollection($product); $optionList = []; /** @var \Magento\Bundle\Model\Option $option */ foreach ($optionCollection as $option) { $productLinks = $this->linkList->getItems($product, $option->getOptionId()); /** @var \Magento\Bundle\Api\Data\OptionInterface $optionDataObject */ $optionDataObject = $this->optionFactory->create(); $this->dataObjectHelper->populateWithArray($optionDataObject, $option->getData(), '\\Magento\\Bundle\\Api\\Data\\OptionInterface'); $optionDataObject->setOptionId($option->getOptionId())->setTitle($option->getTitle() === null ? $option->getDefaultTitle() : $option->getTitle())->setSku($product->getSku())->setProductLinks($productLinks); $optionList[] = $optionDataObject; } return $optionList; }
/** * {@inheritdoc} */ public function get($sku, $optionId) { $product = $this->getProduct($sku); /** @var \Magento\Bundle\Model\Option $option */ $option = $this->type->getOptionsCollection($product)->getItemById($optionId); if (!$option || !$option->getId()) { throw new NoSuchEntityException(__('Requested option doesn\'t exist')); } $productLinks = $this->linkList->getItems($product, $optionId); /** @var \Magento\Bundle\Api\Data\OptionInterface $option */ $optionDataObject = $this->optionFactory->create(); $this->dataObjectHelper->populateWithArray($optionDataObject, $option->getData(), '\\Magento\\Bundle\\Api\\Data\\OptionInterface'); $optionDataObject->setOptionId($option->getId())->setTitle($option->getTitle() === null ? $option->getDefaultTitle() : $option->getTitle())->setSku($product->getSku())->setProductLinks($productLinks); return $optionDataObject; }
/** * @param \Magento\Catalog\Model\Product $product * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function processBundleOptionsData(\Magento\Catalog\Model\Product $product) { $bundleOptionsData = $product->getBundleOptionsData(); if (!$bundleOptionsData) { return; } $options = []; foreach ($bundleOptionsData as $key => $optionData) { if ((bool) $optionData['delete']) { continue; } $option = $this->optionFactory->create(['data' => $optionData]); $option->setSku($product->getSku()); $option->setOptionId(null); $links = []; $bundleLinks = $product->getBundleSelectionsData(); if (empty($bundleLinks[$key])) { continue; } foreach ($bundleLinks[$key] as $linkData) { if ((bool) $linkData['delete']) { continue; } $link = $this->linkFactory->create(['data' => $linkData]); if ((int) $product->getPriceType() !== \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC) { if (array_key_exists('selection_price_value', $linkData)) { $link->setPrice($linkData['selection_price_value']); } if (array_key_exists('selection_price_type', $linkData)) { $link->setPriceType($linkData['selection_price_type']); } } $linkProduct = $this->productRepository->getById($linkData['product_id']); $link->setSku($linkProduct->getSku()); $link->setQty($linkData['selection_qty']); if (array_key_exists('selection_can_change_qty', $linkData)) { $link->setCanChangeQuantity($linkData['selection_can_change_qty']); } $links[] = $link; } $option->setProductLinks($links); $options[] = $option; } $extension = $product->getExtensionAttributes(); $extension->setBundleProductOptions($options); $product->setExtensionAttributes($extension); return; }