|
@@ -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);
|
|
|
+// }
|
|
|
+ }
|
|
|
+}
|