Exemplo n.º 1
0
 /**
  * {@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];
 }