You are here

public function revisioning_handler_filter_node_number_of_revisions::query in Revisioning 7

Same name and namespace in other branches
  1. 8 views/revisioning_handler_filter_node_number_of_revisions.inc \revisioning_handler_filter_node_number_of_revisions::query()
  2. 6.4 views/revisioning_handler_filter_node_number_of_revisions.inc \revisioning_handler_filter_node_number_of_revisions::query()
  3. 6.3 views/revisioning_handler_filter_node_number_of_revisions.inc \revisioning_handler_filter_node_number_of_revisions::query()

Override the query, in particular the WHERE clause.

Overrides views_handler_filter_numeric::query

File

views/revisioning_handler_filter_node_number_of_revisions.inc, line 13
Views filter override to filter on the number of revisions a node has.

Class

revisioning_handler_filter_node_number_of_revisions
@file Views filter override to filter on the number of revisions a node has.

Code

public function query() {
  if (empty($this->value)) {
    return;
  }
  $info = $this
    ->operators();
  $operator_symbol = drupal_strtoupper($info[$this->operator]['short']);
  if (!empty($operator_symbol)) {
    $node_table = $this
      ->ensure_my_table();
    $revisions_table = $this->query
      ->ensure_table('node_revision');
    $pseudo_field = "(SELECT COUNT(vid) FROM {$revisions_table} WHERE nid={$node_table}.nid)";

    // Can't use add_where() as it sanitises (destroys) the $where_expression
    // Have to use add_where_expression() and copy what add_where() does.
    if ($operator_symbol == 'BETWEEN' || $operator_symbol == 'NOT BETWEEN') {
      $where_expression = "{$pseudo_field} {$operator_symbol} '" . $this->value['min'] . "' AND '" . $this->value['max'] . "'";
    }
    else {
      $where_expression = "{$pseudo_field} {$operator_symbol} " . $this->value['value'];
    }
    $this->query
      ->add_where_expression($this->options['group'], $where_expression);
  }
}