public static function restoreInstance($className, ActiveRecordModel $owner, EavFieldCommon $field, $value) { $specItem = parent::getInstanceByID($className, array(call_user_func(array($className, 'getOwnerIDColumnName')) => $owner->getID(), call_user_func(array($className, 'getFieldIDColumnName')) => $field->getID())); $specItem->value->set($value); $specItem->resetModifiedStatus(); return $specItem; }
public function setFormResponse(ActionResponse $response, Form $form, $prefix = '') { $specFields = $this->owner->getSpecification()->getSpecificationFieldSet(ActiveRecordModel::LOAD_REFERENCES); $specFieldArray = $specFields->toArray(); // set select values $selectors = EavFieldCommon::getSelectorValueTypes(); foreach ($specFields as $key => $field) { if (in_array($field->type->get(), $selectors)) { $values = $field->getValuesSet()->toArray(); $specFieldArray[$key]['values'] = array('' => ''); foreach ($values as $value) { $specFieldArray[$key]['values'][$value['ID']] = isset($value['value_lang']) ? $value['value_lang'] : $value['value']; } } } // arrange SpecFields's into groups $specFieldsByGroup = array(); $prevGroupID = -1; $groupClass = $this->getFieldClass() . 'Group'; foreach ($specFieldArray as $field) { $groupID = isset($field[$groupClass]['ID']) ? $field[$groupClass]['ID'] : ''; if ((int) $groupID && $prevGroupID != $groupID) { $prevGroupID = $groupID; } $specFieldsByGroup[$groupID][] = $field; } // get multi language spec fields $multiLingualSpecFields = array(); foreach ($specFields as $key => $field) { if ($field->isTextField()) { $multiLingualSpecFields[] = $field->toArray(); } } if (!$prefix) { $response->set("specFieldList", $specFieldsByGroup); } $response->set("groupClass", $groupClass); $response->set("multiLingualSpecFieldss", $multiLingualSpecFields); // set fields by prefix $prefixed = $response->get("specFieldList_prefix", array()); $prefixed[$prefix] = $specFieldsByGroup; $response->set("specFieldList_prefix", $prefixed); $this->owner->load(); // set fields by owner if ($this->owner instanceof EavObject && ($owner = $this->owner->getOwner())) { $byOwner = $response->get("specFieldListByOwner", array()); $byOwner[get_class($owner)][$owner->getID()] = $specFieldsByGroup; $response->set("specFieldListByOwner", $byOwner); } $form->setData($this->getFormData($prefix)); //$this->setFormValidator($form->getValidator()); }
/** * Validates specification field form * * @param array $values List of values to validate. * @param array $config * @return array List of all errors */ protected function validate($values = array(), $languageCodes) { $errors = array(); if (!isset($values['name']) || $values['name'] == '') { $errors['name'] = '_error_name_empty'; } if (!isset($values['handle']) || $values['handle'] == '' || preg_match('/[^\\w\\d_.]/', $values['handle'])) { $errors['handle'] = '_error_handle_invalid'; } else { $values['ID'] = !isset($values['ID']) ? -1 : $values['ID']; $filter = new ARSelectFilter(); $handleCond = new EqualsCond(new ARFieldHandle($this->getFieldClass(), 'handle'), $values['handle']); $handleCond->addAND(new EqualsCond(new ARFieldHandle($this->getFieldClass(), call_user_func(array($this->getFieldClass(), 'getOwnerIDColumnName'))), $values['categoryID'])); $handleCond->addAND(new NotEqualsCond(new ARFieldHandle($this->getFieldClass(), 'ID'), $values['ID'])); $filter->setCondition($handleCond); if (count(ActiveRecordModel::getRecordSetArray($this->getFieldClass(), $filter)) > 0) { $errors['handle'] = '_error_handle_exists'; } } if (!isset($values['handle']) || $values['handle'] == '') { $errors['handle'] = '_error_handle_empty'; } if (in_array($values['type'], EavFieldCommon::getSelectorValueTypes()) && isset($values['values']) && is_array($values['values'])) { $countValues = count($values['values']); $i = 0; foreach ($values['values'] as $key => $v) { $i++; if ($countValues == $i && preg_match('/new/', $key) && empty($v[$languageCodes[0]])) { continue; } else { if (!strlen($v[$languageCodes[0]])) { $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_empty'; } else { if (EavFieldCommon::getDataTypeFromType($values['type']) == 2 && !is_numeric($v[$languageCodes[0]])) { $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_is_not_a_number'; } } } } } return $errors; }
/** * Adds a 'choice' value to this field */ public function addValue(EavValue $value) { return parent::addValue($value); }
/** * Adds a 'choice' value to this field * * @param SpecFieldValue $value */ public function addValue(SpecFieldValue $value) { return parent::addValue($value); }