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