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