danielebarchiesi@0: FALSE, 'bool' => TRUE); danielebarchiesi@0: $options['not'] = array('default' => FALSE, 'bool' => TRUE); danielebarchiesi@0: danielebarchiesi@0: return $options; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function options_form(&$form, &$form_state) { danielebarchiesi@0: parent::options_form($form, $form_state); danielebarchiesi@0: danielebarchiesi@0: // allow + for or, , for and danielebarchiesi@0: $form['break_phrase'] = array( danielebarchiesi@0: '#type' => 'checkbox', danielebarchiesi@0: '#title' => t('Allow multiple values'), danielebarchiesi@0: '#description' => t('If selected, users can enter multiple values in the form of 1+2+3 (for OR) or 1,2,3 (for AND).'), danielebarchiesi@0: '#default_value' => !empty($this->options['break_phrase']), danielebarchiesi@0: '#fieldset' => 'more', danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['not'] = array( danielebarchiesi@0: '#type' => 'checkbox', danielebarchiesi@0: '#title' => t('Exclude'), danielebarchiesi@0: '#description' => t('If selected, the numbers entered for the filter will be excluded rather than limiting the view.'), danielebarchiesi@0: '#default_value' => !empty($this->options['not']), danielebarchiesi@0: '#fieldset' => 'more', danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function title() { danielebarchiesi@0: if (!$this->argument) { danielebarchiesi@0: return !empty($this->definition['empty field name']) ? $this->definition['empty field name'] : t('Uncategorized'); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (!empty($this->options['break_phrase'])) { danielebarchiesi@0: views_break_phrase($this->argument, $this); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $this->value = array($this->argument); danielebarchiesi@0: $this->operator = 'or'; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (empty($this->value)) { danielebarchiesi@0: return !empty($this->definition['empty field name']) ? $this->definition['empty field name'] : t('Uncategorized'); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if ($this->value === array(-1)) { danielebarchiesi@0: return !empty($this->definition['invalid input']) ? $this->definition['invalid input'] : t('Invalid input'); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return implode($this->operator == 'or' ? ' + ' : ', ', $this->title_query()); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Override for specific title lookups. danielebarchiesi@0: * @return array danielebarchiesi@0: * Returns all titles, if it's just one title it's an array with one entry. danielebarchiesi@0: */ danielebarchiesi@0: function title_query() { danielebarchiesi@0: return $this->value; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function query($group_by = FALSE) { danielebarchiesi@0: $this->ensure_my_table(); danielebarchiesi@0: danielebarchiesi@0: if (!empty($this->options['break_phrase'])) { danielebarchiesi@0: views_break_phrase($this->argument, $this); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $this->value = array($this->argument); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $placeholder = $this->placeholder(); danielebarchiesi@0: $null_check = empty($this->options['not']) ? '' : "OR $this->table_alias.$this->real_field IS NULL"; danielebarchiesi@0: danielebarchiesi@0: if (count($this->value) > 1) { danielebarchiesi@0: $operator = empty($this->options['not']) ? 'IN' : 'NOT IN'; danielebarchiesi@0: $this->query->add_where_expression(0, "$this->table_alias.$this->real_field $operator($placeholder) $null_check", array($placeholder => $this->value)); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $operator = empty($this->options['not']) ? '=' : '!='; danielebarchiesi@0: $this->query->add_where_expression(0, "$this->table_alias.$this->real_field $operator $placeholder $null_check", array($placeholder => $this->argument)); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function get_sort_name() { danielebarchiesi@0: return t('Numerical', array(), array('context' => 'Sort order')); danielebarchiesi@0: } danielebarchiesi@0: }