public function removeAttributeValue(EavFieldCommon $field, EavValueCommon $value) { if (!$field->isSelector()) { throw new Exception('Cannot remove a value from non selector type specification field'); } if (!isset($this->attributes[$field->getID()])) { return false; } if ($field->isMultiValue->get()) { $this->attributes[$field->getID()]->removeValue($value); } else { // no changes should be made until the save() function is called $this->attributes[$field->getID()]->delete(); } }
/** * 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))); } }