Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
CRAP | |
7.69% |
2 / 26 |
| View | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
106.17 | |
7.69% |
2 / 26 |
| getInfo | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
| preRenderViewElement | |
0.00% |
0 / 1 |
88.65 | |
7.69% |
2 / 26 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\views\Element\View. | |
| */ | |
| namespace Drupal\views\Element; | |
| use Drupal\Core\Render\Element\RenderElement; | |
| use Drupal\views\Views; | |
| /** | |
| * Provides a render element to display a view. | |
| * | |
| * @RenderElement("view") | |
| */ | |
| class View extends RenderElement { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getInfo() { | |
| $class = get_class($this); | |
| return array( | |
| '#pre_render' => array( | |
| array($class, 'preRenderViewElement'), | |
| ), | |
| '#name' => NULL, | |
| '#display_id' => 'default', | |
| '#arguments' => array(), | |
| '#embed' => TRUE, | |
| '#cache' => [], | |
| ); | |
| } | |
| /** | |
| * View element pre render callback. | |
| */ | |
| public static function preRenderViewElement($element) { | |
| // Allow specific Views displays to explicitly perform pre-rendering, for | |
| // those displays that need to be able to know the fully built render array. | |
| if (!empty($element['#pre_rendered'])) { | |
| return $element; | |
| } | |
| if (!isset($element['#view'])) { | |
| $view = Views::getView($element['#name']); | |
| } | |
| else { | |
| $view = $element['#view']; | |
| } | |
| $element += $view->element; | |
| $view->element = &$element; | |
| // Mark the element as being prerendered, so other code like | |
| // \Drupal\views\ViewExecutable::setCurrentPage knows that its no longer | |
| // possible to manipulate the $element. | |
| $view->element['#pre_rendered'] = TRUE; | |
| if (isset($element['#response'])) { | |
| $view->setResponse($element['#response']); | |
| } | |
| if ($view && $view->access($element['#display_id'])) { | |
| if (!empty($element['#embed'])) { | |
| $element['view_build'] = $view->preview($element['#display_id'], $element['#arguments']); | |
| } | |
| else { | |
| // Add contextual links to the view. We need to attach them to the dummy | |
| // $view_array variable, since contextual_preprocess() requires that they | |
| // be attached to an array (not an object) in order to process them. For | |
| // our purposes, it doesn't matter what we attach them to, since once they | |
| // are processed by contextual_preprocess() they will appear in the | |
| // $title_suffix variable (which we will then render in | |
| // views-view.html.twig). | |
| $view->setDisplay($element['#display_id']); | |
| // Add the result of the executed view as a child element so any | |
| // #pre_render elements for the view will get processed. A #pre_render | |
| // element cannot be added to the main element as this is already inside | |
| // a #pre_render callback. | |
| $element['view_build'] = $view->executeDisplay($element['#display_id'], $element['#arguments']); | |
| if (isset($element['view_build']['#title'])) { | |
| $element['#title'] = &$element['view_build']['#title']; | |
| } | |
| if (empty($view->display_handler->getPluginDefinition()['returns_response'])) { | |
| // views_add_contextual_links() needs the following information in | |
| // order to be attached to the view. | |
| $element['#view_id'] = $view->storage->id(); | |
| $element['#view_display_show_admin_links'] = $view->getShowAdminLinks(); | |
| $element['#view_display_plugin_id'] = $view->display_handler->getPluginId(); | |
| views_add_contextual_links($element, 'view', $view->current_display); | |
| } | |
| } | |
| if (empty($view->display_handler->getPluginDefinition()['returns_response'])) { | |
| $element['#attributes']['class'][] = 'views-element-container'; | |
| $element['#theme_wrappers'] = array('container'); | |
| } | |
| } | |
| return $element; | |
| } | |
| } |