Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\views\Routing;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Routing\RouteMatchInterface;
|
Chris@0
|
6 use Drupal\views\Plugin\views\display\Page;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Defines a page controller to execute and render a view.
|
Chris@0
|
10 */
|
Chris@0
|
11 class ViewPageController {
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * Handler a response for a given view and display.
|
Chris@0
|
15 *
|
Chris@0
|
16 * @param string $view_id
|
Chris@0
|
17 * The ID of the view
|
Chris@0
|
18 * @param string $display_id
|
Chris@0
|
19 * The ID of the display.
|
Chris@0
|
20 * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
|
Chris@0
|
21 * The route match.
|
Chris@0
|
22 * @return null|void
|
Chris@0
|
23 */
|
Chris@0
|
24 public function handle($view_id, $display_id, RouteMatchInterface $route_match) {
|
Chris@0
|
25 $args = [];
|
Chris@0
|
26 $route = $route_match->getRouteObject();
|
Chris@0
|
27 $map = $route->hasOption('_view_argument_map') ? $route->getOption('_view_argument_map') : [];
|
Chris@0
|
28
|
Chris@0
|
29 foreach ($map as $attribute => $parameter_name) {
|
Chris@0
|
30 // Allow parameters be pulled from the request.
|
Chris@0
|
31 // The map stores the actual name of the parameter in the request. Views
|
Chris@0
|
32 // which override existing controller, use for example 'node' instead of
|
Chris@0
|
33 // arg_nid as name.
|
Chris@0
|
34 if (isset($map[$attribute])) {
|
Chris@0
|
35 $attribute = $map[$attribute];
|
Chris@0
|
36 }
|
Chris@0
|
37 if ($arg = $route_match->getRawParameter($attribute)) {
|
Chris@0
|
38 }
|
Chris@0
|
39 else {
|
Chris@0
|
40 $arg = $route_match->getParameter($attribute);
|
Chris@0
|
41 }
|
Chris@0
|
42
|
Chris@0
|
43 if (isset($arg)) {
|
Chris@0
|
44 $args[] = $arg;
|
Chris@0
|
45 }
|
Chris@0
|
46 }
|
Chris@0
|
47
|
Chris@0
|
48 /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase $class */
|
Chris@0
|
49 $class = $route->getOption('_view_display_plugin_class');
|
Chris@0
|
50 if ($route->getOption('returns_response')) {
|
Chris@0
|
51 /** @var \Drupal\views\Plugin\views\display\ResponseDisplayPluginInterface $class */
|
Chris@0
|
52 return $class::buildResponse($view_id, $display_id, $args);
|
Chris@0
|
53 }
|
Chris@0
|
54 else {
|
Chris@0
|
55 $build = $class::buildBasicRenderable($view_id, $display_id, $args, $route);
|
Chris@0
|
56 Page::setPageRenderArray($build);
|
Chris@0
|
57
|
Chris@0
|
58 views_add_contextual_links($build, 'page', $display_id, $build);
|
Chris@0
|
59
|
Chris@0
|
60 return $build;
|
Chris@0
|
61 }
|
Chris@0
|
62 }
|
Chris@0
|
63
|
Chris@0
|
64 }
|