예제 #1
0
 /**
  * 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;
 }