@@ -938,7 +938,7 @@ public function __construct(
938938 $ this ->_optionEntity = $ data ['option_entity ' ] ??
939939 $ optionFactory ->create (['data ' => ['product_entity ' => $ this ]]);
940940 $ this ->skuStorage = $ skuStorage ?? ObjectManager::getInstance ()
941- ->get (SkuStorage::class);
941+ ->get (SkuStorage::class);
942942 $ this ->_initAttributeSets ()
943943 ->_initTypeModels ()
944944 ->_initSkus ()
@@ -948,7 +948,7 @@ public function __construct(
948948 $ this ->productRepository = $ productRepository ?? ObjectManager::getInstance ()
949949 ->get (ProductRepositoryInterface::class);
950950 $ this ->stockItemProcessor = $ stockItemProcessor ?? ObjectManager::getInstance ()
951- ->get (StockItemProcessorInterface::class);
951+ ->get (StockItemProcessorInterface::class);
952952 }
953953
954954 /**
@@ -2002,8 +2002,8 @@ private function saveProductMediaGalleryPhase(
20022002 private function saveProductAttributesPhase (
20032003 array $ rowData ,
20042004 int $ rowScope ,
2005- &$ previousType ,
2006- &$ prevAttributeSet ,
2005+ &$ previousType ,
2006+ &$ prevAttributeSet ,
20072007 array &$ attributes
20082008 ) : void {
20092009 $ rowSku = $ rowData [self ::COL_SKU ];
@@ -2836,7 +2836,7 @@ private function prepareNewSkuData($sku)
28362836 *
28372837 * @return array
28382838 */
2839- private function _parseAdditionalAttributes ($ rowData )
2839+ private function _parseAdditionalAttributes (array $ rowData ): array
28402840 {
28412841 if (empty ($ rowData ['additional_attributes ' ])) {
28422842 return $ rowData ;
@@ -2846,7 +2846,7 @@ private function _parseAdditionalAttributes($rowData)
28462846 $ rowData [mb_strtolower ($ key )] = $ value ;
28472847 }
28482848 } else {
2849- $ rowData = array_merge ($ rowData , $ this ->getAdditionalAttributes ($ rowData[ ' additional_attributes ' ] ));
2849+ $ rowData = array_merge ($ rowData , $ this ->getAdditionalAttributes ($ rowData ));
28502850 }
28512851 return $ rowData ;
28522852 }
@@ -2860,14 +2860,14 @@ private function _parseAdditionalAttributes($rowData)
28602860 * codeN => valueN
28612861 * ]
28622862 *
2863- * @param string $additionalAttributes Attributes data that will be parsed
2863+ * @param array $rowData
28642864 * @return array
28652865 */
2866- private function getAdditionalAttributes ($ additionalAttributes )
2866+ private function getAdditionalAttributes (array $ rowData ): array
28672867 {
28682868 return empty ($ this ->_parameters [Import::FIELDS_ENCLOSURE ])
2869- ? $ this ->parseAttributesWithoutWrappedValues ($ additionalAttributes )
2870- : $ this ->parseAttributesWithWrappedValues ($ additionalAttributes );
2869+ ? $ this ->parseAttributesWithoutWrappedValues ($ rowData [ ' additional_attributes ' ], $ rowData [ ' product_type ' ] )
2870+ : $ this ->parseAttributesWithWrappedValues ($ rowData [ ' additional_attributes ' ] );
28712871 }
28722872
28732873 /**
@@ -2881,9 +2881,10 @@ private function getAdditionalAttributes($additionalAttributes)
28812881 *
28822882 * @param string $attributesData Attributes data that will be parsed. It keeps data in format:
28832883 * code=value,code2=value2...,codeN=valueN
2884+ * @param string $productType
28842885 * @return array
28852886 */
2886- private function parseAttributesWithoutWrappedValues ($ attributesData)
2887+ private function parseAttributesWithoutWrappedValues (string $ attributesData, string $ productType ): array
28872888 {
28882889 $ attributeNameValuePairs = explode ($ this ->getMultipleValueSeparator (), $ attributesData );
28892890 $ preparedAttributes = [];
@@ -2894,21 +2895,21 @@ private function parseAttributesWithoutWrappedValues($attributesData)
28942895 if (!$ code ) {
28952896 continue ;
28962897 }
2897- //concatenate attribute values with last used separator in case of array
2898- if (is_array ($ preparedAttributes [$ code ])
2899- && str_contains ($ attributesData , self ::PSEUDO_MULTI_LINE_SEPARATOR )) {
2900- $ preparedAttributes [$ code ] = implode (
2901- self ::PSEUDO_MULTI_LINE_SEPARATOR ,
2902- $ preparedAttributes [$ code ]
2903- );
2904- }
29052898 $ preparedAttributes [$ code ] .= $ this ->getMultipleValueSeparator () . $ attributeData ;
29062899 continue ;
29072900 }
29082901 list ($ code , $ value ) = explode (self ::PAIR_NAME_VALUE_SEPARATOR , $ attributeData , 2 );
29092902 $ code = mb_strtolower ($ code );
2910- if (str_contains ($ value , self ::PSEUDO_MULTI_LINE_SEPARATOR )) {
2911- $ value = $ this ->parseMultiselectValues ($ value , self ::PSEUDO_MULTI_LINE_SEPARATOR );
2903+
2904+ $ entityTypeModel = $ this ->retrieveProductTypeByName ($ productType );
2905+ if ($ entityTypeModel ) {
2906+ $ attrParams = $ entityTypeModel ->retrieveAttributeFromCache ($ code );
2907+ if (!empty ($ attrParams ) && $ attrParams ['type ' ] == 'multiselect ' ) {
2908+ $ parsedValue = $ this ->parseMultiselectValues ($ value , self ::PSEUDO_MULTI_LINE_SEPARATOR );
2909+ if (count ($ parsedValue ) > 1 ) {
2910+ $ value = $ parsedValue ;
2911+ }
2912+ }
29122913 }
29132914 $ preparedAttributes [$ code ] = $ value ;
29142915 }
0 commit comments