/** * 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; }