/** * Add stock item information to the product's extension attributes * * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product */ public function afterLoad(\Magento\Catalog\Model\Product $product) { $productExtension = $product->getExtensionAttributes(); if ($productExtension === null) { $productExtension = $this->productExtensionFactory->create(); } // stockItem := \Magento\CatalogInventory\Api\Data\StockItemInterface $productExtension->setStockItem($this->stockRegistry->getStockItem($product->getId())); $product->setExtensionAttributes($productExtension); return $product; }
/** * Prepare product to save * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { if ($downloadable = $this->request->getPost('downloadable')) { $product->setDownloadableData($downloadable); $extension = $product->getExtensionAttributes(); if (isset($downloadable['link']) && is_array($downloadable['link'])) { $links = []; foreach ($downloadable['link'] as $linkData) { if (!$linkData || isset($linkData['is_delete']) && $linkData['is_delete']) { continue; } else { $links[] = $this->getLinkBuilder()->setData($linkData)->build($this->getLinkFactory()->create()); } } $extension->setDownloadableProductLinks($links); } if (isset($downloadable['sample']) && is_array($downloadable['sample'])) { $samples = []; foreach ($downloadable['sample'] as $sampleData) { if (!$sampleData || isset($sampleData['is_delete']) && (bool) $sampleData['is_delete']) { continue; } else { $samples[] = $this->getSampleBuilder()->setData($sampleData)->build($this->getSampleFactory()->create()); } } $extension->setDownloadableProductSamples($samples); } $product->setExtensionAttributes($extension); if ($product->getLinksPurchasedSeparately()) { $product->setTypeHasRequiredOptions(true)->setRequiredOptions(true); } else { $product->setTypeHasRequiredOptions(false)->setRequiredOptions(false); } } return $product; }
/** * @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; }
/** * {@inheritdoc} */ public function setExtensionAttributes(\Magento\Catalog\Api\Data\ProductExtensionInterface $extensionAttributes) { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'setExtensionAttributes'); if (!$pluginInfo) { return parent::setExtensionAttributes($extensionAttributes); } else { return $this->___callPlugins('setExtensionAttributes', func_get_args(), $pluginInfo); } }
/** * Prepare product to save * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { if ($downloadable = $this->request->getPost('downloadable')) { $product->setDownloadableData($downloadable); $extension = $product->getExtensionAttributes(); if (isset($downloadable['link']) && is_array($downloadable['link'])) { $links = []; foreach ($downloadable['link'] as $linkData) { if (!$linkData || isset($linkData['is_delete']) && (bool) $linkData['is_delete']) { continue; } else { unset($linkData['link_id']); // TODO: need to implement setLinkFileContent() $link = $this->linkFactory->create(['data' => $linkData]); if (isset($linkData['type'])) { $link->setLinkType($linkData['type']); } if (isset($linkData['file'])) { $link->setLinkFile($linkData['file']); } if (isset($linkData['file_content'])) { $link->setLinkFileContent($linkData['file_content']); } $link->setId(null); if (isset($linkData['sample']['type'])) { $link->setSampleType($linkData['sample']['type']); } if (isset($linkData['sample']['file'])) { $link->setSampleFile($linkData['sample']['file']); } if (isset($linkData['sample']['url'])) { $link->setSampleUrl($linkData['sample']['url']); } if (isset($linkData['sample']['file_content'])) { $link->setSampleFileContent($linkData['file_content']); } $link->setStoreId($product->getStoreId()); $link->setWebsiteId($product->getStore()->getWebsiteId()); $link->setProductWebsiteIds($product->getWebsiteIds()); if (!$link->getSortOrder()) { $link->setSortOrder(1); } if (null === $link->getPrice()) { $link->setPrice(0); } if ($link->getIsUnlimited()) { $link->setNumberOfDownloads(0); } $links[] = $link; } } $extension->setDownloadableProductLinks($links); } if (isset($downloadable['sample']) && is_array($downloadable['sample'])) { $samples = []; foreach ($downloadable['sample'] as $sampleData) { if (!$sampleData || isset($sampleData['is_delete']) && (bool) $sampleData['is_delete']) { continue; } else { unset($sampleData['sample_id']); $sample = $this->sampleFactory->create(['data' => $sampleData]); $sample->setId(null); $sample->setStoreId($product->getStoreId()); if (isset($sampleData['type'])) { $sample->setSampleType($sampleData['type']); } if (isset($sampleData['sample_url'])) { $sample->setSampleUrl($sampleData['sample_url']); } if (!$sample->getSortOrder()) { $sample->setSortOrder(1); } $samples[] = $sample; } } $extension->setDownloadableProductSamples($samples); } $product->setExtensionAttributes($extension); if ($product->getLinksPurchasedSeparately()) { $product->setTypeHasRequiredOptions(true)->setRequiredOptions(true); } else { $product->setTypeHasRequiredOptions(false)->setRequiredOptions(false); } } return $product; }