You are here

function views_handler_filter_default in Views (for Drupal 7) 5

1 call to views_handler_filter_default()
views_handler_filter_role_custom in modules/views_user.inc
1 string reference to 'views_handler_filter_default'
_views_view_build_filters in ./views_query.inc

File

./views_query.inc, line 134

Code

function views_handler_filter_default($op, $filter, $filterinfo, &$query) {
  $table = $filterinfo['table'];
  $field = $filterinfo['field'];
  if (is_array($filter['value']) && count($filter['value'])) {
    if ($filter['operator'] == 'OR' || $filter['operator'] == 'NOR') {
      $query
        ->ensure_table($table);
      $where_args = array_merge(array(
        $query->use_alias_prefix . $table,
        $field,
      ), $filter['value']);
      $placeholder = array_fill(0, count($filter['value']), '%s');
      if ($filter['operator'] == 'OR') {
        $query
          ->add_where("%s.%s IN ('" . implode("','", $placeholder) . "')", $where_args);
      }
      else {
        $where_args[] = $where_args[0];
        $where_args[] = $where_args[1];
        $query
          ->add_where("(%s.%s NOT IN ('" . implode("','", $placeholder) . "') OR %s.%s IS NULL)", $where_args);
      }
    }
    else {
      $howmany = count($filter['value']);
      $high_table = $query
        ->add_table($table, true, $howmany);
      if (!$high_table) {

        // couldn't add the table
        return;
      }
      $table_num = $high_table - $howmany;
      foreach ($filter['value'] as $item) {
        $table_num++;
        $tn = $query
          ->get_table_name($table, $table_num);
        $query
          ->add_where("%s.%s = '%s'", $tn, $field, $item);
      }
    }
  }
  else {
    $query
      ->ensure_table("{$table}");
    $query
      ->add_where("%s.%s %s '%s'", $query->use_alias_prefix . $table, $field, $filter['operator'], $filter['value']);
  }
}