1 views_plugin_display.inc views_plugin_display::get_handlers($type)

Get a full array of handlers for $type. This caches them.

File

core/modules/views/plugins/views_plugin_display.inc, line 914
Contains the base display plugin.

Class

views_plugin_display
The default display plugin handler. Display plugins handle options and basic mechanisms for different output methods.

Code

function get_handlers($type) {
  if (!isset($this->handlers[$type])) {
    $this->handlers[$type] = array();
    $types = views_object_types();
    $plural = $types[$type]['plural'];

    foreach ($this->get_option($plural) as $id => $info) {
      // If this is during form submission and there are temporary options
      // which can only appear if the view is in the edit cache, use those
      // options instead. This is used for AJAX multi-step stuff.
      if (isset($_POST['form_id']) && isset($this->view->temporary_options[$type][$id])) {
        $info = $this->view->temporary_options[$type][$id];
      }

      if ($info['id'] != $id) {
        $info['id'] = $id;
      }

      // If aggregation is on, the group type might override the actual
      // handler that is in use. This piece of code checks that and,
      // if necessary, sets the override handler.
      $override = NULL;
      if ($this->use_group_by() && !empty($info['group_type'])) {
        if (empty($this->view->query)) {
          $this->view->init_query();
        }
        $aggregate = $this->view->query->get_aggregation_info();
        if (!empty($aggregate[$info['group_type']]['handler'][$type])) {
          $override = $aggregate[$info['group_type']]['handler'][$type];
        }
      }

      if (!empty($types[$type]['type'])) {
        $handler_type = $types[$type]['type'];
      }
      else {
        $handler_type = $type;
      }

      $handler = views_get_handler($info['table'], $info['field'], $handler_type, $override);
      if ($handler) {
        // Special override for area types so they know where they come from.
        if ($handler_type == 'area') {
          $handler->handler_type = $type;
        }

        $handler->init($this->view, $info);
        $this->handlers[$type][$id] = &$handler;
      }

      // Prevent reference problems.
      unset($handler);
    }
  }

  return $this->handlers[$type];
}