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))); } }