123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?php
- /**
- * @file
- * Argument handler to filter results by target.
- */
- /**
- * Argument handler to filter results by target.
- *
- * @codingStandardsIgnoreStart
- */
- class link_views_handler_argument_target extends views_handler_argument {
- /**
- * Provide defaults for the argument when a new one is created.
- */
- function option_definition() {
- $options = parent::option_definition();
- return $options;
- }
- /**
- * Provide a default options form for the argument.
- *
- * @codingStandardsIgnoreStart
- */
- public function options_form(&$form, &$form_state) {
- // @codingStandardsIgnoreEnd
- $defaults = $this->default_actions();
- $form['title'] = array(
- '#prefix' => '<div class="clear-block">',
- '#suffix' => '</div>',
- '#type' => 'textfield',
- '#title' => t('Title'),
- '#default_value' => $this->options['title'],
- '#description' => t('The title to use when this argument is present; it will override the title of the view and titles from previous arguments. You can use percent substitution here to replace with argument titles. Use "%1" for the first argument, "%2" for the second, etc.'),
- );
- $form['clear_start'] = array(
- '#value' => '<div class="clear-block">',
- );
- $form['defaults_start'] = array(
- '#value' => '<div class="views-left-50">',
- );
- $form['default_action'] = array(
- '#type' => 'radios',
- '#title' => t('Action to take if argument is not present'),
- '#default_value' => $this->options['default_action'],
- );
- $form['defaults_stop'] = array(
- '#value' => '</div>',
- );
- $form['wildcard'] = array(
- '#prefix' => '<div class="views-right-50">',
- // Prefix and no suffix means these two items will be grouped together.
- '#type' => 'textfield',
- '#title' => t('Wildcard'),
- '#size' => 20,
- '#default_value' => $this->options['wildcard'],
- '#description' => t('If this value is received as an argument, the argument will be ignored; i.e, "all values"'),
- );
- $form['wildcard_substitution'] = array(
- '#suffix' => '</div>',
- '#type' => 'textfield',
- '#title' => t('Wildcard title'),
- '#size' => 20,
- '#default_value' => $this->options['wildcard_substitution'],
- '#description' => t('The title to use for the wildcard in substitutions elsewhere.'),
- );
- $form['clear_stop'] = array(
- '#value' => '</div>',
- );
- $options = array();
- $validate_options = array();
- foreach ($defaults as $id => $info) {
- $options[$id] = $info['title'];
- if (empty($info['default only'])) {
- $validate_options[$id] = $info['title'];
- }
- if (!empty($info['form method'])) {
- $this->{$info['form method']}($form, $form_state);
- }
- }
- $form['default_action']['#options'] = $options;
- $form['validate_type'] = array(
- '#type' => 'select',
- '#title' => t('Validator'),
- '#default_value' => $this->options['validate_type'],
- );
- $validate_types = array('none' => t('- Basic validation -'));
- $plugins = views_fetch_plugin_data('argument validator');
- foreach ($plugins as $id => $info) {
- $valid = TRUE;
- if (!empty($info['type'])) {
- $valid = FALSE;
- if (empty($this->definition['validate type'])) {
- continue;
- }
- foreach ((array) $info['type'] as $type) {
- if ($type == $this->definition['validate type']) {
- $valid = TRUE;
- break;
- }
- }
- }
- // If we decide this validator is ok, add it to the list.
- if ($valid) {
- $plugin = views_get_plugin('argument validator', $id);
- if ($plugin) {
- $plugin->init($this->view, $this, $id);
- if ($plugin->access()) {
- $plugin->validate_form($form, $form_state, $id);
- $validate_types[$id] = $info['title'];
- }
- }
- }
- }
- asort($validate_types);
- $form['validate_type']['#options'] = $validate_types;
- // Show this gadget if *anything* but 'none' is selected.
- $form['validate_fail'] = array(
- '#type' => 'select',
- '#title' => t('Action to take if argument does not validate'),
- '#default_value' => $this->options['validate_fail'],
- '#options' => $validate_options,
- );
- }
- /**
- * Set up the query for this argument.
- *
- * The argument sent may be found at $this->argument.
- */
- public function query($group_by = FALSE) {
- $this->ensure_my_table();
- // Because attributes are stored serialized, our only option is to also
- // serialize the data we're searching for and use LIKE to find similar data.
- $this->query->add_where(0, $this->table_alias . ' . ' . $this->real_field . " LIKE '%%%s%'", serialize(array('target' => $this->argument)));
- }
- }
|