You are here

public function InOperator::validate in Views (for Drupal 7) 8.3

Validates the handler against the complete View.

This is called when the complete View is being validated. For validating the handler options form use validateOptionsForm().

Return value

Empty array if the handler is valid; an array of error strings if it is not.

Overrides HandlerBase::validate

See also

views_handler::validateOptionsForm()

File

lib/Drupal/views/Plugin/views/filter/InOperator.php, line 403
Definition of Drupal\views\Plugin\views\filter\InOperator.

Class

InOperator
Simple filter to handle matching of multiple options selectable via checkboxes

Namespace

Drupal\views\Plugin\views\filter

Code

public function validate() {
  $this
    ->get_value_options();
  $errors = array();

  // 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
    ->operator_values(0))) {
    return array();
  }
  if (!in_array($this->operator, $this
    ->operator_values(1))) {
    $errors[] = t('The operator is invalid on filter: @filter.', array(
      '@filter' => $this
        ->adminLabel(TRUE),
    ));
  }
  if (is_array($this->value)) {
    if (!isset($this->value_options)) {

      // 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 = form_options_flatten($this->value_options, TRUE);

    // 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 ouput for 0, a single and multiple values.
    if (count($this->value) == 0) {
      $errors[] = 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[] = 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;
}