public function testAfterLoadWithExistingExtensionAttributes() { // test when extension attributes already exist $this->productMock->expects($this->once())->method('getExtensionAttributes')->willReturn($this->productExtensionMock); $this->productExtensionFactoryMock->expects($this->never())->method('create'); $this->assertEquals($this->productMock, $this->plugin->afterLoad($this->productMock)); }
/** * 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; }
/** * @param \Magento\Catalog\Model\Product $subject * @param callable $proceed * @param int $modelId * @param null $field * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundLoad(\Magento\Catalog\Model\Product $subject, \Closure $proceed, $modelId, $field = null) { /** @var \Magento\Catalog\Model\Product $product */ $product = $proceed($modelId, $field); if ($product->getTypeId() != \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) { return $product; } $productExtension = $this->productExtensionFactory->create(); $productExtension->setBundleProductOptions($this->productOptionList->getItems($product)); $product->setExtensionAttributes($productExtension); return $product; }
/** * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product */ public function afterLoad(\Magento\Catalog\Model\Product $product) { if ($product->getTypeId() != \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE) { return $product; } $productExtension = $product->getExtensionAttributes(); if ($productExtension === null) { $productExtension = $this->productExtensionFactory->create(); } $productExtension->setConfigurableProductOptions($this->getOptions($product)); $productExtension->setConfigurableProductLinks($this->getLinkedProducts($product)); $product->setExtensionAttributes($productExtension); return $product; }
/** * * Creates a configurable product with child simple products * * @throws \Exception */ public function createConfigurableProduct() { if ($this->processedProducts >= $this->getCount()) { return; } $configurableAttribute = $this->attributeRepository->get(self::CONFIGURABLE_ATTRIBUTE); if (null == $configurableAttribute) { throw new \Exception("Selected configurable attribute {self::CONFIGURABLE_ATTRIBUTE} is not available"); } $childProductsData = $this->createConfigurableChildren($configurableAttribute); /** @var \Magento\Catalog\Model\Product $configurableProduct */ $configurableProduct = $this->objectManager->create('Magento\\Catalog\\Model\\Product'); $configurableProduct->setStoreId(self::DEFAULT_STORE_ID)->setTypeId('configurable')->setAttributeSetId(self::ATTRIBUTE_SET)->setName(self::NAMES_PREFIX . $this->titlesGenerator->generateProductTitle() . ' configurable')->setPrice(self::DEFAULT_PRODUCT_PRICE)->setWeight(self::DEFAULT_PRODUCT_WEIGHT)->setSku(uniqid())->setCategoriesIds([$this->getProductCategory()]); $configurableOption = $this->configurableOption; $configurableOption->setAttributeId($configurableAttribute->getAttributeId())->setLabel('Color')->setValues($childProductsData['configurable_options_values']); $extensionAttributes = $configurableProduct->getExtensionAttributes(); if (!$extensionAttributes) { $extensionAttributes = $this->productExtensionFactory->create(); } $extensionAttributes->setConfigurableProductLinks($childProductsData['child_products_ids']); $extensionAttributes->setConfigurableProductOptions([$configurableOption]); $configurableProduct->setExtensionAttributes($extensionAttributes); $this->productRepository->save($configurableProduct); $this->processedProducts++; }
/** * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product */ public function afterLoad(\Magento\Catalog\Model\Product $product) { if ($product->getTypeId() != \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE) { return $product; } $productExtension = $product->getExtensionAttributes() ?: $this->productExtensionFactory->create(); $links = $this->linkRepository->getLinksByProduct($product); if ($links !== null) { $productExtension->setDownloadableProductLinks($links); } $samples = $this->sampleRepository->getSamplesByProduct($product); if ($samples !== null) { $productExtension->setDownloadableProductSamples($samples); } $product->setExtensionAttributes($productExtension); return $product; }