<?php/** * 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 * - enabled-disabled: Enabled/Disabled * - accept null: Treat a NULL value as false. */classviews_handler_filter_boolean_operatorextendsviews_handler_filter{// exposed filter optionsvar$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 notvar$accept_null=FALSE;functionconstruct(){$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'];}elseif(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. */functionget_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'));}}functionoption_definition(){$options=parent::option_definition();$options['value']['default']=FALSE;return$options;}functionoperator_form(&$form,&$form_state){$form['operator']=array();}functionvalue_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(!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'];}}}functionvalue_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.'));}}functionadmin_summary(){if(!empty($this->options['exposed'])){returnt('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)];}functionexpose_options(){parent::expose_options();$this->options['expose']['operator']='';$this->options['expose']['label']=$this->value_value;$this->options['expose']['optional']=FALSE;}functionquery(){$this->ensure_my_table();$where="$this->table_alias.$this->real_field ";if(empty($this->value)){$where.='= 0';if($this->accept_null){$where='('.$where." OR $this->table_alias.$this->real_field IS NULL)";}}else{if(!empty($this->definition['use equal'])){$where.='= 1';}else{$where.='<> 0';}}$this->query->add_where($this->options['group'],$where);}}