91 $generatedProductIds = [];
92 $this->attributes =
null;
95 $newSimpleProduct = $this->productFactory->create();
96 if (isset($simpleProductData[
'configurable_attribute'])) {
97 $configurableAttribute = json_decode($simpleProductData[
'configurable_attribute'],
true);
98 unset($simpleProductData[
'configurable_attribute']);
101 __(
'Contribution must have attributes specified. Enter attributes and try again.')
108 array_merge($simpleProductData, $configurableAttribute)
110 $newSimpleProduct->save();
112 $generatedProductIds[] = $newSimpleProduct->getId();
114 return $generatedProductIds;
126 $this->prepareAttributeSet(
$product);
138 $attributes = $this->configurableProduct->getUsedProductAttributes(
$product);
151 )->setAttributeGroupId(
175 ? ProductType::TYPE_SIMPLE
176 : ProductType::TYPE_VIRTUAL;
182 )->setAttributeSetId(
183 $parentProduct->getNewVariationsAttributeSetId()
186 if ($this->attributes ===
null) {
187 $this->attributes =
$product->getTypeInstance()->getSetAttributes(
$product);
191 $attribute->getAttributeCode() ==
'url_key' ||
192 $attribute->getFrontend()->getInputType() ==
'gallery' ||
193 $attribute->getFrontend()->getInputType() ==
'media_image' ||
202 $keysFilter = [
'item_id',
'product_id',
'stock_id',
'type_id',
'website_id'];
203 $postData[
'stock_data'] = array_diff_key((array)$parentProduct->getStockData(), array_flip($keysFilter));
204 if (!isset(
$postData[
'stock_data'][
'is_in_stock'])) {
205 $stockStatus = $parentProduct->getQuantityAndStockStatus();
206 $postData[
'stock_data'][
'is_in_stock'] = $stockStatus[
'is_in_stock'];
211 : \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED;
215 $parentProduct->getWebsiteIds()
232 foreach (
$productsData as $variationId => $simpleProductData) {
233 if (!isset($simpleProductData[
'media_gallery'][
'images'])) {
237 foreach ($simpleProductData[
'media_gallery'][
'images'] as $imageId =>
$image) {
238 $image[
'variation_id'] = $variationId;
239 if (isset($imagesForCopy[$imageId][0])) {
241 unset($imagesForCopy[$imageId][0]);
243 $imagesForCopy[$imageId][] =
$image;
246 foreach ($imagesForCopy as $imageId => $variationImages) {
247 foreach ($variationImages as
$image) {
249 $variationId =
$image[
'variation_id'];
250 $newFile = $this->mediaGalleryProcessor->duplicateImageFromTmp($file);
251 $productsData[$variationId][
'media_gallery'][
'images'][$imageId][
'file'] = $newFile;
252 foreach ($this->mediaGalleryProcessor->getMediaAttributeCodes() as
$attribute) {
277 if (
false === array_search(
$image, array_column(
$productData[
'media_gallery'][
'images'],
'file'))) {
288 $gallery = array_map(
295 $gallery = array_merge(
$productData[
'media_gallery'][
'images'], $gallery);
__construct(Type\Configurable $configurableProduct, \Magento\Eav\Model\Entity\Attribute\SetFactory $attributeSetFactory, \Magento\Eav\Model\EntityFactory $entityFactory, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration, \Magento\Catalog\Model\Product\Gallery\Processor $mediaGalleryProcessor)
prepareAttributeSetToBeBaseForNewVariations(\Magento\Catalog\Model\Product $product)
fillSimpleProductData(\Magento\Catalog\Model\Product $product, \Magento\Catalog\Model\Product $parentProduct, $postData)
processMediaGallery($product, $productData)
duplicateImagesForVariations($productsData)
generateSimpleProducts($parentProduct, $productsData)
setVisibility($visibility)