/** * {@inheritdoc} */ public function &getHandlers($type) { if (!isset($this->handlers[$type])) { $this->handlers[$type] = array(); $types = ViewExecutable::getHandlerTypes(); $plural = $types[$type]['plural']; // Cast to an array so that if the display does not have any handlers of // this type there is no PHP error. foreach ((array) $this->getOption($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 ($this->view->getRequest()->request->get('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->useGroupBy() && !empty($info['group_type'])) { if (empty($this->view->query)) { $this->view->initQuery(); } $aggregate = $this->view->query->getAggregationInfo(); 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; } if ($handler = Views::handlerManager($handler_type)->getHandler($info, $override)) { // Special override for area types so they know where they come from. if ($handler instanceof AreaPluginBase) { $handler->areaType = $type; } $handler->init($this->view, $this, $info); $this->handlers[$type][$id] =& $handler; } // Prevent reference problems. unset($handler); } } return $this->handlers[$type]; }