More tidying.
[yaffs-website] / web / modules / contrib / metatag / metatag_views / metatag_views.module
1 <?php
2
3 /**
4  * Contains hook implementations for the metatag_views module.
5  */
6
7 use Drupal\Core\Routing\RouteMatchInterface;
8 use Drupal\views\ViewEntityInterface;
9 use Drupal\views\ViewExecutable;
10 use Drupal\views\Views;
11
12 /**
13  * Gets the metatags of a specific view, if set.
14  *
15  * @param mixed $view
16  *   The view id, view config entity or view executable.
17  * @param string $display
18  *   The display id. If empty uses the preselected display if $view is a
19  *   ViewExecutable, otherwise the default display.
20  *
21  * @return array|null
22  *   The metatags if set, null otherwise.
23  */
24 function metatag_get_view_tags($view, $display_id = NULL) {
25   if (empty($view)) {
26     return;
27   }
28   if ($view instanceof ViewEntityInterface) {
29     $view = $view->getExecutable();
30   }
31   elseif (is_string($view)) {
32     $view = Views::getView($view);
33   }
34   if (!$view instanceof ViewExecutable) {
35     return;
36   }
37   $view->setDisplay($display_id);
38
39   // And get the list of extenders for this display.
40   $extenders = $view->getDisplay()->getExtenders();
41   if (!isset($extenders['metatag_display_extender'])) {
42     // If the id of the plugin is not in the list then something is wrong.
43     return;
44   }
45
46   // Retrieve the metatag settings from the extender.
47   return $extenders['metatag_display_extender']->getMetatags();
48 }
49
50 /**
51  * Implements hook_metatags_alter().
52  */
53 function metatag_views_metatags_alter(&$metatags, $context) {
54   if (!$context['entity'] instanceof ViewEntityInterface) {
55     return;
56   }
57
58   $view = $context['entity']->getExecutable();
59   // If display_id is not available, will default to Master display.
60   $display_id = \Drupal::routeMatch()->getParameter('display_id');
61   if ($tags = metatag_get_view_tags($view, $display_id)) {
62     // Apply view overrides.
63     $metatags = array_merge($metatags, $tags);
64   }
65 }
66
67 /**
68  * Implements hook_metatag_route_entity().
69  */
70 function metatag_views_metatag_route_entity(RouteMatchInterface $route_match) {
71   if ($view_id = $route_match->getParameter('view_id')) {
72     $entity = \Drupal::entityTypeManager()->getStorage('view')->load($view_id);
73     return $entity;
74   }
75 }