示例#1
0
 public function validate()
 {
     $this->getValueOptions();
     $errors = parent::validate();
     // If the operator is an operator which doesn't require a value, there is
     // no need for additional validation.
     if (in_array($this->operator, $this->operatorValues(0))) {
         return array();
     }
     if (!in_array($this->operator, $this->operatorValues(1))) {
         $errors[] = $this->t('The operator is invalid on filter: @filter.', array('@filter' => $this->adminLabel(TRUE)));
     }
     if (is_array($this->value)) {
         if (!isset($this->valueOptions)) {
             // Don't validate if there are none value options provided, for example for special handlers.
             return $errors;
         }
         if ($this->options['exposed'] && !$this->options['expose']['required'] && empty($this->value)) {
             // Don't validate if the field is exposed and no default value is provided.
             return $errors;
         }
         // Some filter_in_operator usage uses optgroups forms, so flatten it.
         $flat_options = OptGroup::flattenOptions($this->valueOptions);
         // Remove every element which is not known.
         foreach ($this->value as $value) {
             if (!isset($flat_options[$value])) {
                 unset($this->value[$value]);
             }
         }
         // Choose different kind of output for 0, a single and multiple values.
         if (count($this->value) == 0) {
             $errors[] = $this->t('No valid values found on filter: @filter.', array('@filter' => $this->adminLabel(TRUE)));
         }
     } elseif (!empty($this->value) && ($this->operator == 'in' || $this->operator == 'not in')) {
         $errors[] = $this->t('The value @value is not an array for @operator on filter: @filter', array('@value' => var_export($this->value), '@operator' => $this->operator, '@filter' => $this->adminLabel(TRUE)));
     }
     return $errors;
 }