예제 #1
0
 /**
  * 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);
 }
예제 #3
0
파일: Category.php 프로젝트: saiber/www
 /**
  * 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;
 }
예제 #4
0
 /**
  * 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);
 }