From 1fd6c0ab759575e922f8f8bc53463efac7976337 Mon Sep 17 00:00:00 2001
From: Patrick Dawkins <pjcdawkins@googlemail.com>
Date: Sun, 25 Dec 2011 23:14:11 +0000
Subject: [PATCH] Issue #1328450 by pjcdawkins: Fixed Views filter handlers for
 nstatus and vstatus.

---
 views/election.views.inc                      |  6 +++--
 .../views_handler_filter_election_nstatus.inc | 26 +++++++++++--------
 .../views_handler_filter_election_vstatus.inc | 26 +++++++++++--------
 3 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/views/election.views.inc b/views/election.views.inc
index c9f63e1..0a42871 100644
--- a/views/election.views.inc
+++ b/views/election.views.inc
@@ -88,10 +88,11 @@ function election_views_data() {
     'field' => array(
       'handler' => 'views_handler_field_election_vstatus',
       'click sortable' => FALSE,
-      'label' => t('Voting status'), // @todo check if this is valid
     ),
     'filter' => array(
+      'label' => t('Voting is open'),
       'handler' => 'views_handler_filter_election_vstatus',
+      'type' => 'yes-no',
     ),
     'sort' => array(
       'handler' => 'views_handler_sort',
@@ -106,10 +107,11 @@ function election_views_data() {
     'field' => array(
       'handler' => 'views_handler_field_election_nstatus',
       'click sortable' => FALSE,
-      'label' => t('Nominations status'), // @todo check if this is valid
     ),
     'filter' => array(
+      'label' => t('Nominations are open'),
       'handler' => 'views_handler_filter_election_nstatus',
+      'type' => 'yes-no',
     ),
     'sort' => array(
       'handler' => 'views_handler_sort',
diff --git a/views/handlers/views_handler_filter_election_nstatus.inc b/views/handlers/views_handler_filter_election_nstatus.inc
index 9b09bab..f646c2b 100644
--- a/views/handlers/views_handler_filter_election_nstatus.inc
+++ b/views/handlers/views_handler_filter_election_nstatus.inc
@@ -3,22 +3,26 @@
  * @file
  * Filter by nominations status
  */
-class views_handler_filter_election_nstatus extends views_handler_filter {
-
-  function admin_summary() { }
-  function operator_form(&$form, &$form_state) { }
-  function can_expose() { return FALSE; }
+class views_handler_filter_election_nstatus extends views_handler_filter_boolean_operator {
 
   function query() {
     $table = $this->ensure_my_table();
+    $vars = array(
+      ':openstatus' => ELECTION_STATUS_OPEN,
+      ':closedstatus' => ELECTION_STATUS_CLOSED,
+      ':scheduledstatus' => ELECTION_STATUS_SCHEDULED,
+      ':rtime' => REQUEST_TIME,
+    );
+    if (empty($this->value)) {
+      $expression = "$table.nstatus = :closedstatus OR ($table.nstatus = :scheduledstatus AND ($table.nopen_time >= :rtime OR $table.nclose_time <= :rtime))";
+    }
+    else {
+      $expression = "$table.nstatus = :openstatus OR ($table.nstatus = :scheduledstatus AND $table.nopen_time < :rtime AND $table.nclose_time > :rtime)";
+    }
     $this->query->add_where_expression(
       $this->options['group'],
-      "$table.nstatus = :openstatus OR ($table.nstatus = :scheduledstatus AND $table.nopen_time < :rtime AND $table.nclose_time > :rtime)",
-      array(
-        ':openstatus' => ELECTION_STATUS_OPEN,
-        ':scheduledstatus' => ELECTION_STATUS_SCHEDULED,
-        ':rtime' => REQUEST_TIME,
-      )
+      $expression,
+      $vars
     );
   }
 
diff --git a/views/handlers/views_handler_filter_election_vstatus.inc b/views/handlers/views_handler_filter_election_vstatus.inc
index 7b229ee..7d92145 100644
--- a/views/handlers/views_handler_filter_election_vstatus.inc
+++ b/views/handlers/views_handler_filter_election_vstatus.inc
@@ -3,22 +3,26 @@
  * @file
  * Filter by voting status = open.
  */
-class views_handler_filter_election_vstatus extends views_handler_filter {
-
-  function admin_summary() { }
-  function operator_form(&$form, &$form_state) { }
-  function can_expose() { return FALSE; }
+class views_handler_filter_election_vstatus extends views_handler_filter_boolean_operator {
 
   function query() {
     $table = $this->ensure_my_table();
+    $vars = array(
+      ':openstatus' => ELECTION_STATUS_OPEN,
+      ':closedstatus' => ELECTION_STATUS_CLOSED,
+      ':scheduledstatus' => ELECTION_STATUS_SCHEDULED,
+      ':rtime' => REQUEST_TIME,
+    );
+    if (empty($this->value)) {
+      $expression = "$table.vstatus = :closedstatus OR ($table.vstatus = :scheduledstatus AND ($table.vopen_time >= :rtime OR $table.vclose_time <= :rtime))";
+    }
+    else {
+      $expression = "$table.vstatus = :openstatus OR ($table.vstatus = :scheduledstatus AND $table.vopen_time < :rtime AND $table.vclose_time > :rtime)";
+    }
     $this->query->add_where_expression(
       $this->options['group'],
-      "$table.vstatus = :openstatus OR ($table.vstatus = :scheduledstatus AND $table.vopen_time < :rtime AND $table.vclose_time > :rtime)",
-      array(
-        ':openstatus' => ELECTION_STATUS_OPEN,
-        ':scheduledstatus' => ELECTION_STATUS_SCHEDULED,
-        ':rtime' => REQUEST_TIME,
-      )
+      $expression,
+      $vars
     );
   }
 
-- 
GitLab