diff --git a/handlers/views_handler_filter.inc b/handlers/views_handler_filter.inc index f9b0a10..a226f35 100644 --- a/handlers/views_handler_filter.inc +++ b/handlers/views_handler_filter.inc @@ -60,6 +60,7 @@ class views_handler_filter extends views_handler { $options['operator'] = array('default' => '='); $options['value'] = array('default' => ''); + $options['argument_value'] = array('default' => array()); $options['group'] = array('default' => '0'); $options['exposed'] = array('default' => FALSE); $options['expose'] = array( @@ -190,6 +191,51 @@ class views_handler_filter extends views_handler { $form['value']['#prefix'] = '
' . (isset($form['value']['#prefix']) ? $form['value']['#prefix'] : ''); $form['value']['#suffix'] = (isset($form['value']['#suffix']) ? $form['value']['#suffix'] : '') . '
'; } + $options = array('' => t('None')); + foreach ($this->view->display_handler->get_handlers('argument') as $id => $argument) { + $options[$id] = $argument->ui_name(TRUE); + } + + // If a certain filter handler has multiple form elements both add the value as possible form element and update the depedency. + $option_definition = $this->option_definition(); + if (isset($option_definition['value']['contains'])) { + foreach ($option_definition['value']['contains'] as $value => $definition) { + // Some fields uses 'value' in the form or as a child element. So take care about it. + if ($value == 'value') { + if (isset($form['value']['value'])) { + $values[$value] = array('title' => $form['value']['value']['#title'], 'weight' => $form['value']['value']['#weight']); + $form['value']['value']['#dependency']['edit-options-argument-value-' . $value] = array(''); + $form['value']['value']['#dependency_count'] = count($form['value']['value']['#dependency']); + } + else { + $values[$value] = array('title' => $form['value']['#title'], 'weight' => $form['value']['#weight']); + $form['value']['#dependency']['edit-options-argument-value-' . $value] = array(''); + $form['value']['#dependency_count'] = count($form['value']['#dependency']); + } + } + else { + $values[$value] = array('title' => $form['value'][$value]['#title'], 'weight' => $form['value'][$value]['#weight']); + $form['value'][$value]['#dependency']['edit-options-argument-value-' . $value] = array(''); + $form['value'][$value]['#dependency_count'] = count($form['value'][$value]['#dependency']); + } + } + } + else { + $values = array('value' => array('title' => $form['value']['#title'], 'weight' => $form['value']['#weight'])); + $form['value']['#dependency']['edit-options-argument-value-value'] = array(''); + } + + foreach ($values as $value => $setting) { + $form['argument_value'][$value] = array( + '#type' => 'select', + '#title' => t('Select value from argument for @field.', array('@field' => $setting['title'])), + '#options' => $options, + '#default_value' => isset($this->options['argument_value'][$value]) ? $this->options['argument_value'][$value] : '', + '#weight' => $setting['weight'], + ); + } + $form['argument_value']['#prefix'] = '
' . (isset($form['argument_value']['#prefix']) ? $form['argument_value']['#prefix'] : ''); + $form['argument_value']['#suffix'] = (isset($form['argument_value']['#suffix']) ? $form['argument_value']['#suffix'] : '') . '
'; } /** @@ -572,6 +618,27 @@ class views_handler_filter extends views_handler { } /** + * If pulling arguments from the filter is set, set $this->value here. + */ + function pre_query() { + // If there are multiple values, store the value in $this->value as an array. + // else store a singular item in $this->value. + $count = count($this->options['argument_value']); + foreach ($this->options['argument_value'] as $value => $argument) { + if (!empty($argument)) { + if ($count == 1) { + $argument = $this->view->argument[$argument]; + $this->value = $argument->get_value(); + } + else { + $argument = $this->view->argument[$argument]; + $this->value[$value] = $argument->get_value(); + } + } + } + } + + /** * Add this filter to the query. * * Due to the nature of fapi, the value and the operator have an unintended