@@ -2836,7 +2836,7 @@ private function prepareNewSkuData($sku)
2836
2836
*
2837
2837
* @return array
2838
2838
*/
2839
- private function _parseAdditionalAttributes ($ rowData )
2839
+ private function _parseAdditionalAttributes (array $ rowData ): array
2840
2840
{
2841
2841
if (empty ($ rowData ['additional_attributes ' ])) {
2842
2842
return $ rowData ;
@@ -2846,7 +2846,7 @@ private function _parseAdditionalAttributes($rowData)
2846
2846
$ rowData [mb_strtolower ($ key )] = $ value ;
2847
2847
}
2848
2848
} else {
2849
- $ rowData = array_merge ($ rowData , $ this ->getAdditionalAttributes ($ rowData[ ' additional_attributes ' ] ));
2849
+ $ rowData = array_merge ($ rowData , $ this ->getAdditionalAttributes ($ rowData ));
2850
2850
}
2851
2851
return $ rowData ;
2852
2852
}
@@ -2860,14 +2860,14 @@ private function _parseAdditionalAttributes($rowData)
2860
2860
* codeN => valueN
2861
2861
* ]
2862
2862
*
2863
- * @param string $additionalAttributes Attributes data that will be parsed
2863
+ * @param array $rowData
2864
2864
* @return array
2865
2865
*/
2866
- private function getAdditionalAttributes ($ additionalAttributes )
2866
+ private function getAdditionalAttributes (array $ rowData ): array
2867
2867
{
2868
2868
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 ' ] );
2871
2871
}
2872
2872
2873
2873
/**
@@ -2881,9 +2881,10 @@ private function getAdditionalAttributes($additionalAttributes)
2881
2881
*
2882
2882
* @param string $attributesData Attributes data that will be parsed. It keeps data in format:
2883
2883
* code=value,code2=value2...,codeN=valueN
2884
+ * @param string $productType
2884
2885
* @return array
2885
2886
*/
2886
- private function parseAttributesWithoutWrappedValues ($ attributesData)
2887
+ private function parseAttributesWithoutWrappedValues (string $ attributesData, string $ productType ): array
2887
2888
{
2888
2889
$ attributeNameValuePairs = explode ($ this ->getMultipleValueSeparator (), $ attributesData );
2889
2890
$ preparedAttributes = [];
@@ -2899,7 +2900,21 @@ private function parseAttributesWithoutWrappedValues($attributesData)
2899
2900
}
2900
2901
list ($ code , $ value ) = explode (self ::PAIR_NAME_VALUE_SEPARATOR , $ attributeData , 2 );
2901
2902
$ code = mb_strtolower ($ code );
2902
- $ preparedAttributes [$ code ] = $ value ;
2903
+
2904
+ $ entityTypeModel = $ this ->retrieveProductTypeByName ($ productType );
2905
+ if ($ entityTypeModel ) {
2906
+ $ attrParams = $ entityTypeModel ->retrieveAttributeFromCache ($ code );
2907
+ if (!empty ($ attrParams ) && $ attrParams ['type ' ] == 'multiselect ' ) {
2908
+ $ attributeValue = $ this ->parseMultiselectValues ($ value , Product::PSEUDO_MULTI_LINE_SEPARATOR );
2909
+ if (count ($ attributeValue ) > 1 ) {
2910
+ $ preparedAttributes [$ code ] = $ attributeValue ;
2911
+ } else {
2912
+ $ preparedAttributes [$ code ] = $ value ;
2913
+ }
2914
+ }
2915
+ } else {
2916
+ $ preparedAttributes [$ code ] = $ value ;
2917
+ }
2903
2918
}
2904
2919
return $ preparedAttributes ;
2905
2920
}
0 commit comments