You are here

class views_handler_area_link in Views link area 7

Same name and namespace in other branches
  1. 6 views_handler_area_link.inc \views_handler_area_link

Hierarchy

Expanded class hierarchy of views_handler_area_link

1 string reference to 'views_handler_area_link'
views_linkarea_views_data in ./views_linkarea.views.inc
Implementation of hook_views_data()

File

./views_handler_area_link.inc, line 3

View source
class views_handler_area_link extends views_handler_area {
  function option_definition() {
    $options = parent::option_definition();
    $options['text'] = array(
      'default' => '',
      'translatable' => TRUE,
    );
    $options['html'] = array(
      'default' => 0,
    );
    $options['path'] = array(
      'default' => '',
    );
    $options['querystring'] = array(
      'default' => '',
    );
    $options['anchor'] = array(
      'default' => '',
    );
    $options['class'] = array(
      'default' => '',
    );
    $options['return'] = array(
      'default' => FALSE,
    );
    $options['title'] = array(
      'default' => '',
    );
    $options['rel'] = array(
      'default' => '',
    );
    $options['prefix'] = array(
      'default' => '',
      'translatable' => TRUE,
    );
    $options['suffix'] = array(
      'default' => '',
      'translatable' => TRUE,
    );
    $options['target'] = array(
      'default' => '',
    );
    $options['tokenize'] = array(
      'default' => FALSE,
    );
    return $options;
  }
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['text'] = array(
      '#type' => 'textfield',
      '#title' => t('Link text'),
      '#default_value' => $this->options['text'],
      '#description' => t('The text of the link'),
    );
    $form['html'] = array(
      '#type' => 'checkbox',
      '#title' => t('Display link text as HTML'),
      '#default_value' => $this->options['html'],
      '#description' => t('Show link text as HTML instead of plain text.'),
    );
    $form['path'] = array(
      '#type' => 'textfield',
      '#title' => t('Link path'),
      '#default_value' => $this->options['path'],
      '#description' => t('The Drupal path or full URL to which to link'),
    );
    $form['querystring'] = array(
      '#type' => 'textfield',
      '#title' => t('Link querystring'),
      '#default_value' => $this->options['querystring'],
      '#description' => t('The query parameters that follow the full path'),
    );
    $form['return'] = array(
      '#type' => 'checkbox',
      '#title' => t('Set destination as the current page'),
      '#default_value' => $this->options['return'],
      '#description' => t('If the link leads to a form, this will redirect the user to the view when the form is submitted. This will override any destination set in the querystring option above.'),
    );
    $form['anchor'] = array(
      '#type' => 'textfield',
      '#title' => t('Link anchor'),
      '#default_value' => $this->options['anchor'],
      '#description' => t('The anchor data that follows the full path and query parameters'),
    );
    $form['attributes'] = array(
      '#type' => 'fieldset',
      '#title' => t('Attributes'),
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    $form['class'] = array(
      '#type' => 'textfield',
      '#title' => t('Link CSS class'),
      '#default_value' => $this->options['class'],
      '#description' => t('A custom CSS class to add to the link'),
      '#fieldset' => 'attributes',
    );
    $form['title'] = array(
      '#type' => 'textfield',
      '#title' => t('Link title'),
      '#description' => t('Set the title attribute of the link'),
      '#default_value' => $this->options['title'],
      '#fieldset' => 'attributes',
    );
    $form['rel'] = array(
      '#type' => 'textfield',
      '#title' => t('Link rel'),
      '#description' => t('Set the rel attribute of the link'),
      '#default_value' => $this->options['rel'],
      '#fieldset' => 'attributes',
    );
    $form['prefix'] = array(
      '#type' => 'textfield',
      '#title' => t('Prefix text'),
      '#default_value' => $this->options['prefix'],
      '#description' => t('Any text to display before this link. You may include HTML.'),
      '#fieldset' => 'attributes',
    );
    $form['suffix'] = array(
      '#type' => 'textfield',
      '#title' => t('Suffix text'),
      '#default_value' => $this->options['suffix'],
      '#description' => t('Any text to display after this link. You may include HTML.'),
      '#fieldset' => 'attributes',
    );
    $target_options = array(
      '' => t('None'),
      '_blank' => t('New window (_blank)'),
      '_parent' => '_parent',
      '_self' => '_self',
      '_top' => '_top',
    );
    $form['target'] = array(
      '#type' => 'select',
      '#title' => t('Link target'),
      '#description' => t('Set the target attribute of the link.'),
      '#options' => $target_options,
      '#default_value' => $this->options['target'],
      '#fieldset' => 'attributes',
    );
    $tokenize_id = drupal_html_id('tokenize_checkbox');
    $form['tokenize'] = array(
      '#id' => $tokenize_id,
      '#type' => 'checkbox',
      '#title' => t('Use replacement tokens from the first row'),
      '#default_value' => $this->options['tokenize'],
    );

    // Get a list of the available fields and arguments for token replacement.
    $options = array();
    foreach ($this->view->display_handler
      ->get_handlers('field') as $field => $handler) {
      $options[t('Fields')]["[{$field}]"] = $handler
        ->ui_name();
    }
    $count = 0;

    // This lets us prepare the key as we want it printed.
    foreach ($this->view->display_handler
      ->get_handlers('argument') as $arg => $handler) {
      $options[t('Arguments')]['%' . ++$count] = t('@argument title', array(
        '@argument' => $handler
          ->ui_name(),
      ));
      $options[t('Arguments')]['!' . $count] = t('@argument input', array(
        '@argument' => $handler
          ->ui_name(),
      ));
    }
    $output = t('<p>You must add some additional fields to this display before using this field. These fields may be marked as <em>Exclude from display</em> if you prefer. Note that due to rendering order, you cannot use fields that come after this field; if you need a field not listed here, rearrange your fields.</p>');
    if (!empty($options)) {
      $output = '';
      foreach ($options as $type => $values) {
        if (empty($values)) {
          continue;
        }
        $vars = array(
          'title' => $type,
        );
        foreach ($values as $key => $label) {
          $vars['items'][] = $key . ' == ' . $label;
        }
        $output .= theme('item_list', $vars);
      }
    }
    $form['help'] = array(
      '#type' => 'fieldset',
      '#title' => t('Replacement patterns'),
      '#description' => '<p>' . t('The following tokens are available. If you would like to have the characters \'[\' and \']\' please use the html entity codes \'%5B\' or \'%5D\' or they will get replaced with empty space.') . '</p>',
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
      '#value' => $output,
      '#dependency' => array(
        $tokenize_id => array(
          1,
        ),
      ),
    );
  }
  function options_submit(&$form, &$form_state) {
    parent::options_submit($form, $form_state);
  }
  function render($empty = FALSE) {
    $value = '';
    if ($empty && empty($this->options['empty'])) {
      return '';
    }
    $tokens = $this
      ->get_render_tokens();

    // Replace any tokens in the text.
    $text = strtr($this->options['text'], $tokens);

    // Replace any tokens in the path.
    $path = strtr($this->options['path'], $tokens);
    if (!empty($this->options['prefix'])) {
      $value .= filter_xss_admin(strtr($this->options['prefix'], $tokens));
    }

    // Check that the user has access to the menu router item, but only if the
    // path is for a valid menu router item, so that external URLs or paths not
    // handled by Drupal's menu router are always permitted.
    $router_item = menu_get_item($path);
    if ($router_item && !$router_item['access']) {
      return '';
    }

    // Where we store tokenized values.
    $link_properties = array();

    // Options that will go into the attributes array for url().
    $attribute_keys = array(
      'title',
      'target',
      'rel',
      'class',
    );

    // Other options that we need to put into link properties.
    $option_keys = array_merge(array(
      'anchor',
      'text',
      'path',
    ), $attribute_keys);
    if (!empty($this->options['querystring'])) {

      // This is an ugly way to do it, but Drupal 7 now takes an array for
      // query instead of a string.  That's good, but makes our string field
      // not work.  This should get switched to a multi-value interface of
      // some kind instead of ugly string parsing. @todo
      $querystring = strtr($this->options['querystring'], $tokens);
      $link_properties['query'] = drupal_get_query_array($querystring);
    }
    if (!empty($this->options['return'])) {
      $destination = drupal_get_destination();
      $link_properties['query']['destination'] = $destination['destination'];
    }

    // Grab all of our options and tokenize them if necessary.
    foreach ($option_keys as $key) {
      if (empty($this->options[$key])) {
        continue;
      }
      if ('anchor' == $key) {
        $link_properties['fragment'] = $this->options[$key];
      }
      else {
        $link_properties[$key] = $this->options[$key];
      }

      // Apply the argument substitutions.
      if (!empty($tokens)) {
        $link_properties[$key] = str_replace(array_keys($tokens), array_values($tokens), $link_properties[$key]);
      }

      // Apply the more advanced tokenization.
      if ($this->options['tokenize']) {
        $link_properties[$key] = $this->view->style_plugin
          ->tokenize_value($link_properties[$key], 0);
      }
    }
    if (empty($link_properties['attributes'])) {
      $link_properties['attributes'] = array();
    }

    // Move our attributes into an attribute array for ease of use with url().
    foreach ($attribute_keys as $key) {
      if (!empty($link_properties[$key])) {
        $link_properties['attributes'][$key] = $link_properties[$key];
        if ('class' === $key) {
          $link_properties['attributes'][$key] = explode(' ', $link_properties['attributes'][$key]);
        }
      }
    }
    if ($this->options['html']) {
      $text = filter_xss_admin($text);
      $link_properties['html'] = TRUE;
    }
    else {

      // Make sure all HTML entities are decoded before passing to l().
      while (decode_entities($text) != $text) {
        $text = decode_entities($text);
      }
    }
    $value .= l($text, $path, $link_properties);
    if (!empty($this->options['suffix'])) {
      $value .= filter_xss_admin(strtr($this->options['suffix'], $tokens));
    }
    return $value;
  }

  /**
   * Gets appropriate views replacement tokens for this handler.
   *
   * This code is largely based on views_handler_field's token rendering, but
   * we only care about arguments.  The render() method's link generation
   * handles XSS for us.
   */
  function get_render_tokens() {
    $tokens = array();
    if (!empty($this->view->build_info['substitutions'])) {
      $tokens = $this->view->build_info['substitutions'];
    }
    $count = 0;
    foreach ($this->view->display_handler
      ->get_handlers('argument') as $arg => $handler) {
      $token = '%' . ++$count;
      if (!isset($tokens[$token])) {
        $tokens[$token] = '';
      }
      $tokens['!' . $count] = isset($this->view->args[$count - 1]) ? check_plain($this->view->args[$count - 1]) : '';
    }
    return $tokens;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
views_handler::$handler_type public property The type of the handler, for example filter/footer/field.
views_handler::$query public property Where the $query object will reside:. 1
views_handler::$real_field public property The actual field in the database table, maybe different on other kind of query plugins/special handlers.
views_handler::$relationship public property The relationship used for this field.
views_handler::$table_alias public property The alias of the table of this handler which is used in the query.
views_handler::$view public property The top object of a view. Overrides views_object::$view
views_handler::accept_exposed_input public function Take input from exposed handlers and assign to this handler, if necessary. 1
views_handler::access public function Check whether current user has access to this handler. 10
views_handler::broken public function Determine if the handler is considered 'broken'. 6
views_handler::can_expose public function Determine if a handler can be exposed. 2
views_handler::case_transform public function Transform a string by a certain method.
views_handler::ensure_my_table public function Ensure the main table for this handler is in the query. This is used a lot. 8
views_handler::exposed_form public function Render our chunk of the exposed handler form when selecting. 1
views_handler::exposed_info public function Get information about the exposed form for the form renderer. 1
views_handler::exposed_submit public function Submit the exposed handler form.
views_handler::exposed_validate public function Validate the exposed handler form. 4
views_handler::expose_form public function Form for exposed handler options. 2
views_handler::expose_options public function Set new exposed option defaults when exposed setting is flipped on. 2
views_handler::expose_submit public function Perform any necessary changes to the form exposes prior to storage. There is no need for this function to actually store the data.
views_handler::expose_validate public function Validate the options form. 1
views_handler::extra_options public function Provide defaults for the handler.
views_handler::extra_options_form public function Provide a form for setting options. 1
views_handler::extra_options_submit public function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data.
views_handler::extra_options_validate public function Validate the options form.
views_handler::get_field public function Shortcut to get a handler's raw field value.
views_handler::get_join public function Get the join object that should be used for this handler.
views_handler::groupby_form public function Provide a form for aggregation settings. 1
views_handler::groupby_form_submit public function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. 1
views_handler::has_extra_options public function If a handler has 'extra options' it will get a little settings widget and another form called extra_options. 1
views_handler::is_a_group public function Returns TRUE if the exposed filter works like a grouped filter. 1
views_handler::is_exposed public function Determine if this item is 'exposed', meaning it provides form elements to let users modify the view.
views_handler::multiple_exposed_input public function Define if the exposed input has to be submitted multiple times. This is TRUE when exposed filters grouped are using checkboxes as widgets. 1
views_handler::needs_style_plugin public function Determine if the argument needs a style plugin. 1
views_handler::options_validate public function Validate the options form. 4
views_handler::placeholder public function Provides a unique placeholders for handlers.
views_handler::post_execute public function Run after the view is executed, before the result is cached. 1
views_handler::pre_query public function Run before the view is built. 1
views_handler::sanitize_value public function Sanitize the value for output.
views_handler::set_relationship public function Called just prior to query(), this lets a handler set up any relationship it needs.
views_handler::show_expose_button public function Shortcut to display the expose/hide button. 2
views_handler::show_expose_form public function Shortcut to display the exposed options form.
views_handler::store_exposed_input public function If set to remember exposed input in the session, store it there. 1
views_handler::ui_name public function Return a string representing this handler's name in the UI. 9
views_handler::validate public function Validates the handler against the complete View. 1
views_handler_area::admin_summary public function Provide extra data to the administration form. Overrides views_handler::admin_summary
views_handler_area::init public function Init the handler with necessary data. Overrides views_handler::init
views_handler_area::label public function
views_handler_area::query public function Don't run a query. 1
views_handler_area::use_group_by public function Area handlers shouldn't have groupby. Overrides views_handler::use_group_by
views_handler_area_link::get_render_tokens function Gets appropriate views replacement tokens for this handler.
views_handler_area_link::options_form function Default options form that provides the label widget that all fields should have. Overrides views_handler_area::options_form
views_handler_area_link::options_submit function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. Overrides views_handler::options_submit
views_handler_area_link::option_definition function Information about options for all kinds of purposes will be held here. Overrides views_handler_area::option_definition
views_handler_area_link::render function Render the area. Overrides views_handler_area::render
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::destroy public function Destructor. 2
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function