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 isAttributeSet(EavFieldCommon $field)
 {
     return isset($this->attributes[$field->getID()]);
 }
 /**
  * Creates a new or modifies an exisitng specification field (according to a passed parameters)
  *
  * @return JSONResponse Returns success status or failure status with array of erros
  */
 protected function save(EavFieldCommon $specField)
 {
     $this->getSpecFieldConfig();
     $errors = $this->validate($this->request->getValueArray(array('handle', 'values', 'name', 'type', 'dataType', 'categoryID', 'ID')), $this->specFieldConfig['languageCodes']);
     if (!$errors) {
         $type = $this->request->get('advancedText') ? EavFieldCommon::TYPE_TEXT_ADVANCED : (int) $this->request->get('type');
         $dataType = EavFieldCommon::getDataTypeFromType($type);
         $categoryID = $this->request->get('categoryID');
         $values = $this->request->get('values');
         $specField->loadRequestData($this->request);
         foreach ($specField->getSchema()->getFieldsByType('ARBool') as $field) {
             $name = $field->getName();
             $specField->setFieldValue($name, $this->request->get($name, 0));
         }
         $specField->setFieldValue('dataType', $dataType);
         $specField->setFieldValue('type', $type);
         $specField->save();
         // save specification field values in database
         $newIDs = array();
         $valueClass = call_user_func(array(call_user_func(array($this->getFieldClass(), 'getSelectValueClass')), 'getValueClass'));
         if ($specField->isSelector() && is_array($values)) {
             $position = 1;
             $countValues = count($values);
             $i = 0;
             foreach ($values as $key => $value) {
                 $i++;
                 // If last new is empty miss it
                 if ($countValues == $i && preg_match('/new/', $key) && empty($value[$this->specFieldConfig['languageCodes'][0]])) {
                     continue;
                 }
                 if (preg_match('/^new/', $key)) {
                     $specFieldValues = call_user_func_array(array($valueClass, 'getNewInstance'), array($specField));
                 } else {
                     $specFieldValues = call_user_func_array(array($valueClass, 'getInstanceByID'), array($key));
                 }
                 if (EavFieldCommon::TYPE_NUMBERS_SELECTOR == $type) {
                     $specFieldValues->setFieldValue('value', $value);
                 } else {
                     $specFieldValues->setLanguageField('value', $value, $this->specFieldConfig['languageCodes']);
                 }
                 $specFieldValues->setFieldValue('position', $position++);
                 $specFieldValues->save();
                 if (preg_match('/^new/', $key)) {
                     $newIDs[$specFieldValues->getID()] = $key;
                 }
             }
         }
         return new JSONResponse(array('id' => $specField->getID(), 'newIDs' => $newIDs), 'success');
     } else {
         return new JSONResponse(array('errors' => $this->translateArray($errors)));
     }
 }