|  | @@ -0,0 +1,142 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +class tripal_views_handler_filter_boolean_operator extends tripal_views_handler_filter {
 | 
	
		
			
				|  |  | +  // exposed filter options
 | 
	
		
			
				|  |  | +  var $always_multiple = 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'));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if ($this->definition['type'] == 'enabled-disabled') {
 | 
	
		
			
				|  |  | +        $this->value_options = array(1 => t('Enabled'), 0 => t('Disabled'));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 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['expose']['required'])) {
 | 
	
		
			
				|  |  | +        $any_label = variable_get('views_exposed_filter_any_label', 'new_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']['required'])) {
 | 
	
		
			
				|  |  | +      form_set_error('value', t('You must select a value unless this is an non-required exposed filter.'));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function admin_summary() {
 | 
	
		
			
				|  |  | +    if ($this->is_a_group()) {
 | 
	
		
			
				|  |  | +      return t('grouped');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    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_id'] = '';
 | 
	
		
			
				|  |  | +    $this->options['expose']['label'] = $this->value_value;
 | 
	
		
			
				|  |  | +    $this->options['expose']['required'] = TRUE;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function query() {
 | 
	
		
			
				|  |  | +//     $this->ensure_my_table();
 | 
	
		
			
				|  |  | +//     $field = $this->real_field;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//     $info = $this->operators();
 | 
	
		
			
				|  |  | +//     if (!empty($info[$this->operator]['method'])) {
 | 
	
		
			
				|  |  | +//       $this->{$info[$this->operator]['method']}($field);
 | 
	
		
			
				|  |  | +//     }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 |