|
|
Drupal example source code file (views_handler_filter_boolean_operator.inc)
The views_handler_filter_boolean_operator.inc Drupal example source code<?php // $Id: views_handler_filter_boolean_operator.inc,v 1.6.4.8 2010/12/09 23:52:48 merlinofchaos Exp $ /** * Simple filter to handle matching of boolean values * * Definition items: * - label: (REQUIRED) The label for the checkbox. * - type: For basic 'true false' types, an item can specify the following: * - true-false: True/false (this is the default) * - yes-no: Yes/No * - on-off: On/Off * - accept null: Treat a NULL value as false. */ class views_handler_filter_boolean_operator extends views_handler_filter { // exposed filter options var $no_single = TRUE; // Don't display empty space where the operator would be. var $no_operator = TRUE; // Whether to accept NULL as a false value or not var $accept_null = FALSE; function construct() { $this->value_value = t('True'); if (isset($this->definition['label'])) { $this->value_value = $this->definition['label']; } if (isset($this->definition['accept null'])) { $this->accept_null = (bool) $this->definition['accept null']; } else if (isset($this->definition['accept_null'])) { $this->accept_null = (bool) $this->definition['accept_null']; } $this->value_options = NULL; parent::construct(); } /** * Return the possible options for this filter. * * Child classes should override this function to set the possible values * for the filter. Since this is a boolean filter, the array should have * two possible keys: 1 for "True" and 0 for "False", although the labels * can be whatever makes sense for the filter. These values are used for * configuring the filter, when the filter is exposed, and in the admin * summary of the filter. Normally, this should be static data, but if it's * dynamic for some reason, child classes should use a guard to reduce * database hits as much as possible. */ function get_value_options() { if (isset($this->definition['type'])) { if ($this->definition['type'] == 'yes-no') { $this->value_options = array(1 => t('Yes'), 0 => t('No')); } if ($this->definition['type'] == 'on-off') { $this->value_options = array(1 => t('On'), 0 => t('Off')); } } // Provide a fallback if the above didn't set anything. if (!isset($this->value_options)) { $this->value_options = array(1 => t('True'), 0 => t('False')); } } function option_definition() { $options = parent::option_definition(); $options['value']['default'] = FALSE; return $options; } function operator_form(&$form, &$form_state) { $form['operator'] = array(); } function value_form(&$form, &$form_state) { if (empty($this->value_options)) { // Initialize the array of possible values for this filter. $this->get_value_options(); } if (!empty($form_state['exposed'])) { // Exposed filter: use a select box to save space. $filter_form_type = 'select'; } else { // Configuring a filter: use radios for clarity. $filter_form_type = 'radios'; } $form['value'] = array( '#type' => $filter_form_type, '#title' => $this->value_value, '#options' => $this->value_options, '#default_value' => $this->value, ); if (!empty($this->options['exposed'])) { $identifier = $this->options['expose']['identifier']; if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) { $form_state['input'][$identifier] = $this->value; } // If we're configuring an exposed filter, add an <Any> option. if (empty($form_state['exposed']) || !empty($this->options['optional'])) { $any_label = variable_get('views_exposed_filter_any_label', 'old_any') == 'old_any' ? '<Any>' : t('- Any -'); if ($form['value']['#type'] != 'select') { $any_label = check_plain($any_label); } $form['value']['#options'] = array('All' => $any_label) + $form['value']['#options']; } } } function value_validate($form, &$form_state) { if ($form_state['values']['options']['value'] == 'All' && empty($form_state['values']['options']['expose']['optional'])) { form_set_error('value', t('You must select a value unless this is an optional exposed filter.')); } } function admin_summary() { if (!empty($this->options['exposed'])) { return t('exposed'); } if (empty($this->value_options)) { $this->get_value_options(); } // Now that we have the valid options for this filter, just return the // human-readable label based on the current value. The value_options // array is keyed with either 0 or 1, so if the current value is not // empty, use the label for 1, and if it's empty, use the label for 0. return $this->value_options[!empty($this->value)]; } function expose_options() { parent::expose_options(); $this->options['expose']['operator'] = ''; $this->options['expose']['label'] = $this->value_value; $this->options['expose']['optional'] = FALSE; } function query() { $this->ensure_my_table(); $field = "$this->table_alias.$this->real_field"; if (empty($this->value)) { if ($this->accept_null) { $or = db_or() ->condition($field, 0, '=') ->condition($field, NULL, 'IS NULL'); $this->query->add_where($this->options['group'], $or); } else { $this->query->add_where($this->options['group'], $field, 0, '='); } } else { if (!empty($this->definition['use equal'])) { $this->query->add_where($this->options['group'], $field, 1, '='); } else { $this->query->add_where($this->options['group'], $field, 0, '<>'); } } } } Other Drupal examples (source code examples)Here is a short list of links related to this Drupal views_handler_filter_boolean_operator.inc source code file: |
"Drupal" is a registered trademark of Dries Buytaert.
my drupal tutorials and examples
Copyright
1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.
Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.