function views_plugin_display::get_handlers

Same name in other branches
  1. 6.x-3.x plugins/views_plugin_display.inc \views_plugin_display::get_handlers()

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

6 calls to views_plugin_display::get_handlers()
views_plugin_display::get_field_labels in plugins/views_plugin_display.inc
List of fields for the current display with the associated relationship.
views_plugin_display::get_handler in plugins/views_plugin_display.inc
Get the handler object for a single handler.
views_plugin_display::is_identifier_unique in plugins/views_plugin_display.inc
Check if the provided identifier is unique.
views_plugin_display::options_form in plugins/views_plugin_display.inc
Provide the default form for setting options.
views_plugin_display::render_area in plugins/views_plugin_display.inc

... See full list

File

plugins/views_plugin_display.inc, line 1019

Class

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

Code

public 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];
}