/** * Load product specification data for a whole array of products at once */ public static function loadSpecificationForRecordSetArray($class, &$productArray, $fullSpecification = false) { $ids = array(); foreach ($productArray as $key => $product) { $ids[$product['ID']] = $key; } $fieldClass = call_user_func(array($class, 'getFieldClass')); $groupClass = $fieldClass . 'Group'; $groupColumn = call_user_func_array(array($fieldClass, 'getGroupIDColumnName'), array($fieldClass)); $stringClass = call_user_func(array($fieldClass, 'getStringValueClass')); $fieldColumn = call_user_func(array($fieldClass, 'getFieldIDColumnName')); $objectColumn = call_user_func(array($fieldClass, 'getObjectIDColumnName')); $valueItemClass = call_user_func(array($fieldClass, 'getSelectValueClass')); $valueColumn = call_user_func(array($valueItemClass, 'getValueIDColumnName')); $specificationArray = self::fetchSpecificationData($class, array_flip($ids), $fullSpecification); $specFieldSchema = ActiveRecordModel::getSchemaInstance($fieldClass); $specStringSchema = ActiveRecordModel::getSchemaInstance($stringClass); $specFieldColumns = array_keys($specFieldSchema->getFieldList()); foreach ($specificationArray as &$spec) { if ($spec['isMultiValue']) { $value['value'] = $spec['value']; $value = MultiLingualObject::transformArray($value, $specStringSchema); if (isset($productArray[$ids[$spec[$objectColumn]]]['attributes'][$spec[$fieldColumn]])) { $sp =& $productArray[$ids[$spec[$objectColumn]]]['attributes'][$spec[$fieldColumn]]; $sp['valueIDs'][] = $spec['valueID']; $sp['values'][] = $value; continue; } } foreach ($specFieldColumns as $key) { $spec[$fieldClass][$key] = $spec[$key]; unset($spec[$key]); } // transform for presentation $spec[$fieldClass] = MultiLingualObject::transformArray($spec[$fieldClass], $specFieldSchema); if ($spec[$fieldClass]['isMultiValue']) { $spec['valueIDs'] = array($spec['valueID']); $spec['values'] = array($value); } else { $spec = MultiLingualObject::transformArray($spec, $specStringSchema); } // groups if ($spec[$fieldClass][$groupColumn]) { $spec[$fieldClass][$groupClass] = array('ID' => $spec[$fieldClass][$groupColumn], 'name' => $spec['SpecFieldGroupName'], 'position' => $spec['SpecFieldGroupPosition']); if (!isset($groupSchema)) { $groupSchema = ActiveRecordModel::getSchemaInstance($groupClass); } $spec[$fieldClass][$groupClass] = MultiLingualObject::transformArray($spec[$fieldClass][$groupClass], $groupSchema); } if (!empty($spec['value']) || !empty($spec['values']) || !empty($spec['value_lang'])) { // append to product array $productArray[$ids[$spec[$objectColumn]]]['attributes'][$spec[$fieldColumn]] = $spec; self::sortAttributesByHandle($class, $productArray[$ids[$spec[$objectColumn]]]); } } }
public static function transformArray($array, ARSchema $schema) { unset($array[call_user_func(array($schema->getName(), 'getOwnerClass'))]); unset($array[call_user_func(array($schema->getName(), 'getFieldClass'))]); return MultiLingualObject::transformArray($array, $schema); }
/** * Creates array representation * * @return array */ protected static function transformArray($array, ARSchema $schema) { $array = MultiLingualObject::transformArray($array, $schema); $array['unavailableProductCount'] = $array['totalProductCount'] - $array['availableProductCount']; $array['inactiveProductCount'] = $array['totalProductCount'] - $array['activeProductCount']; $c = self::getApplication()->getConfig(); $array['count'] = 'ENABLE_AND_HIDE' == $c->get('INVENTORY_TRACKING') ? $array['availableProductCount'] : $array['activeProductCount']; return $array; }
/** * Creates array representation * * @return array */ protected static function transformArray($array, ARSchema $schema) { if (!empty($array['serializedCondition'])) { $array['serializedCondition'] = unserialize($array['serializedCondition']); } return MultiLingualObject::transformArray($array, $schema); }