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;
 }
Exemple #4
0
 /**
  * Adds a 'choice' value to this field
  */
 public function addValue(EavValue $value)
 {
     return parent::addValue($value);
 }
Exemple #5
0
 /**
  * Adds a 'choice' value to this field
  *
  * @param SpecFieldValue $value
  */
 public function addValue(SpecFieldValue $value)
 {
     return parent::addValue($value);
 }