| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- declare(strict_types=1);
 
- namespace Magento\ConfigurableImportExport\Model\Export;
 
- use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection;
 
- use Magento\CatalogImportExport\Model\Export\RowCustomizerInterface;
 
- use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
 
- use Magento\ConfigurableProduct\Model\Product\Type\Configurable as ConfigurableProductType;
 
- use Magento\ImportExport\Model\Import;
 
- use Magento\Store\Model\Store;
 
- use Magento\Store\Model\StoreManagerInterface;
 
- /**
 
-  * Customizes output during export
 
-  */
 
- class RowCustomizer implements RowCustomizerInterface
 
- {
 
-     /**
 
-      * Header column for Configurable Product variations
 
-      */
 
-     const CONFIGURABLE_VARIATIONS_COLUMN = 'configurable_variations';
 
-     /**
 
-      * Header column for Configurable Product variation labels
 
-      */
 
-     const CONFIGURABLE_VARIATIONS_LABELS_COLUMN = 'configurable_variation_labels';
 
-     /**
 
-      * @var array
 
-      */
 
-     protected $configurableData = [];
 
-     /**
 
-      * @var string[]
 
-      */
 
-     private $configurableColumns = [
 
-         self::CONFIGURABLE_VARIATIONS_COLUMN,
 
-         self::CONFIGURABLE_VARIATIONS_LABELS_COLUMN
 
-     ];
 
-     /**
 
-      * @var StoreManagerInterface
 
-      */
 
-     private $storeManager;
 
-     /**
 
-      * @param StoreManagerInterface $storeManager
 
-      */
 
-     public function __construct(StoreManagerInterface $storeManager)
 
-     {
 
-         $this->storeManager = $storeManager;
 
-     }
 
-     /**
 
-      * Prepare configurable data for export
 
-      *
 
-      * @param ProductCollection $collection
 
-      * @param int[] $productIds
 
-      * @return void
 
-      */
 
-     public function prepareData($collection, $productIds)
 
-     {
 
-         $productCollection = clone $collection;
 
-         $productCollection->addAttributeToFilter('entity_id', ['in' => $productIds])
 
-             ->addAttributeToFilter('type_id', ['eq' => ConfigurableProductType::TYPE_CODE]);
 
-         // set global scope during export
 
-         $this->storeManager->setCurrentStore(Store::DEFAULT_STORE_ID);
 
-         while ($product = $productCollection->fetchItem()) {
 
-             $productAttributesOptions = $product->getTypeInstance()->getConfigurableOptions($product);
 
-             $this->configurableData[$product->getId()] = [];
 
-             $variations = [];
 
-             $variationsLabels = [];
 
-             foreach ($productAttributesOptions as $productAttributeOption) {
 
-                 foreach ($productAttributeOption as $optValues) {
 
-                     $variations[$optValues['sku']][] = $optValues['attribute_code'] . '=' . $optValues['option_title'];
 
-                     if (!empty($optValues['super_attribute_label'])) {
 
-                         $variationsLabels[$optValues['attribute_code']] = $optValues['attribute_code'] . '='
 
-                             . $optValues['super_attribute_label'];
 
-                     }
 
-                 }
 
-             }
 
-             foreach ($variations as $sku => $values) {
 
-                 $variations[$sku] = 'sku=' . $sku . Import::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR
 
-                     . implode(Import::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR, $values);
 
-             }
 
-             $this->configurableData[$product->getId()] = [
 
-                 self::CONFIGURABLE_VARIATIONS_COLUMN => implode(
 
-                     ImportProduct::PSEUDO_MULTI_LINE_SEPARATOR,
 
-                     $variations
 
-                 ),
 
-                 self::CONFIGURABLE_VARIATIONS_LABELS_COLUMN => implode(
 
-                     Import::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR,
 
-                     $variationsLabels
 
-                 )
 
-             ];
 
-         }
 
-     }
 
-     /**
 
-      * Set headers columns
 
-      *
 
-      * @param array $columns
 
-      * @return array
 
-      */
 
-     public function addHeaderColumns($columns)
 
-     {
 
-         return array_merge($columns, $this->configurableColumns);
 
-     }
 
-     /**
 
-      * Add configurable data for export
 
-      *
 
-      * @param array $dataRow
 
-      * @param int $productId
 
-      * @return array
 
-      */
 
-     public function addData($dataRow, $productId)
 
-     {
 
-         if (!empty($this->configurableData[$productId])) {
 
-             $dataRow = array_merge($dataRow, $this->configurableData[$productId]);
 
-         }
 
-         return $dataRow;
 
-     }
 
-     /**
 
-      * Calculate the largest links block
 
-      *
 
-      * @param array $additionalRowsCount
 
-      * @param int $productId
 
-      * @return array
 
-      */
 
-     public function getAdditionalRowsCount($additionalRowsCount, $productId)
 
-     {
 
-         if (!empty($this->configurableData[$productId])) {
 
-             $additionalRowsCount = max($additionalRowsCount, count($this->configurableData[$productId]));
 
-         }
 
-         return $additionalRowsCount;
 
-     }
 
- }
 
 
  |