public function unserialize($serialized) { parent::unserialize($serialized); // load products $productIds = array(); foreach ($this->orderedItems as $item) { $productIds[] = $item->getProduct()->getID(); } $products = ActiveRecordModel::getInstanceArray('Product', $productIds, Product::LOAD_REFERENCES); // load product prices $set = new ARSet(); foreach ($products as $product) { $set->add($product); } ProductPrice::loadPricesForRecordSet($set); }
protected function loadSpecificationData($specificationDataArray) { if (!is_array($specificationDataArray)) { $specificationDataArray = array(); } // get value class and field names $fieldClass = $this->getFieldClass(); $fieldColumn = call_user_func(array($fieldClass, 'getFieldIDColumnName')); $valueItemClass = call_user_func(array($fieldClass, 'getSelectValueClass')); $valueClass = call_user_func(array($valueItemClass, 'getValueClass')); $multiValueItemClass = call_user_func(array($fieldClass, 'getMultiSelectValueClass')); // preload all specFields from database $specFieldIds = array(); $selectors = array(); $simpleValues = array(); foreach ($specificationDataArray as $value) { $specFieldIds[$value[$fieldColumn]] = $value[$fieldColumn]; if ($value['valueID']) { $selectors[$value[$fieldColumn]][$value['valueID']] = $value; } else { $simpleValues[$value[$fieldColumn]] = $value; } } $specFields = ActiveRecordModel::getInstanceArray($fieldClass, $specFieldIds); // simple values foreach ($simpleValues as $value) { $specField = $specFields[$value[$fieldColumn]]; $class = $specField->getValueTableName(); // temporarly fix for Eav selectors parse as string values //TODO: fix Eav selectors if ($class == "EavItem") { switch ($specField->type->get()) { case EavFieldCommon::TYPE_NUMBERS_SELECTOR: // $class == "EavNumericValue"; // $class == "EavNumericValue"; case EavFieldCommon::TYPE_TEXT_SELECTOR: $class = "EavStringValue"; } } $specification = call_user_func_array(array($class, 'restoreInstance'), array($this->owner, $specField, $value['value'])); $this->attributes[$specField->getID()] = $specification; } // selectors foreach ($selectors as $specFieldId => $value) { if (!isset($specFields[$specFieldId])) { continue; } $specField = $specFields[$specFieldId]; if ($specField->isMultiValue->get()) { $values = array(); foreach ($value as $val) { $values[$val['valueID']] = $val['value']; } $specification = call_user_func_array(array($multiValueItemClass, 'restoreInstance'), array($this->owner, $specField, $values)); } else { $value = array_pop($value); $specFieldValue = call_user_func_array(array($valueClass, 'restoreInstance'), array($specField, $value['valueID'], $value['value'])); $specification = call_user_func_array(array($valueItemClass, 'restoreInstance'), array($this->owner, $specField, $specFieldValue)); } $this->attributes[$specField->getID()] = $specification; } }
protected function loadSpecificationData($specificationDataArray) { if (!is_array($specificationDataArray)) { $specificationDataArray = array(); } // get value class and field names $fieldClass = $this->getFieldClass(); $fieldColumn = call_user_func(array($fieldClass, 'getFieldIDColumnName')); $valueItemClass = call_user_func(array($fieldClass, 'getSelectValueClass')); $valueClass = call_user_func(array($valueItemClass, 'getValueClass')); $multiValueItemClass = call_user_func(array($fieldClass, 'getMultiSelectValueClass')); // preload all specFields from database $specFieldIds = array(); $selectors = array(); $simpleValues = array(); foreach ($specificationDataArray as $value) { $specFieldIds[$value[$fieldColumn]] = $value[$fieldColumn]; if ($value['valueID']) { $selectors[$value[$fieldColumn]][$value['valueID']] = $value; } else { $simpleValues[$value[$fieldColumn]] = $value; } } $specFields = ActiveRecordModel::getInstanceArray($fieldClass, $specFieldIds); // simple values foreach ($simpleValues as $value) { $specField = $specFields[$value[$fieldColumn]]; $class = $specField->getValueTableName(); $specification = call_user_func_array(array($class, 'restoreInstance'), array($this->owner, $specField, $value['value'])); $this->attributes[$specField->getID()] = $specification; } // selectors foreach ($selectors as $specFieldId => $value) { if (!isset($specFields[$specFieldId])) { continue; } $specField = $specFields[$specFieldId]; if ($specField->isMultiValue->get()) { $values = array(); foreach ($value as $val) { $values[$val['valueID']] = $val['value']; } $specification = call_user_func_array(array($multiValueItemClass, 'restoreInstance'), array($this->owner, $specField, $values)); } else { $value = array_pop($value); $specFieldValue = call_user_func_array(array($valueClass, 'restoreInstance'), array($specField, $value['valueID'], $value['value'])); $specification = call_user_func_array(array($valueItemClass, 'restoreInstance'), array($this->owner, $specField, $specFieldValue)); } $this->attributes[$specField->getID()] = $specification; } }