Updated all the contrib modules to their latest versions.
[yaffs-website] / web / modules / contrib / metatag / metatag_page_manager / metatag_page_manager.module
1 <?php
2
3 /**
4  * @file
5  * Contains metatag_page_manager.module.
6  */
7
8 use Drupal\Core\Routing\RouteMatchInterface;
9 use Drupal\Core\Form\FormStateInterface;
10 use Drupal\page_manager\Entity\PageVariant;
11 use Drupal\metatag\Entity\MetatagDefaults;
12
13 /**
14  * Implements hook_form_FORM_ID_alter().
15  */
16 function metatag_page_manager_form_metatag_defaults_add_form_alter(&$form, FormStateInterface $form_state, $form_id) {
17   $variants_options['Page Variants'] = _metatag_page_manager_get_variants();
18   $form['id']['#options'] = array_merge($form['id']['#options'], $variants_options);
19 }
20
21 /**
22  * Implements hook_page_attachments().
23  */
24 function metatag_page_manager_page_attachments(array &$attachments) {
25   // Fetch entity from request.
26   $entity = \Drupal::request()->attributes->get('_entity');
27   if ($entity) {
28
29     $key = $entity->getEntityType()->id() . '__' . $entity->id();
30     // Get default metatags.
31     $metatag_defaults = metatag_get_default_tags();
32     // Load page variant metatags.
33     $metatag_variant = MetatagDefaults::load($key);
34     if ($metatag_variant) {
35       // Overwrite the metatag defaults with the tags of the page variant.
36       $metatag_defaults = array_merge($metatag_defaults, $metatag_variant->get('tags'));
37
38       // Set the metatag in the static metatag attachments parameter so the
39       // metatag module wouldn't overwrite them.
40       $metatag_attachments = &drupal_static('metatag_attachments');
41
42       $metatag_manager = \Drupal::service('metatag.manager');
43       $metatag_attachments = $metatag_manager->generateElements($metatag_defaults, $entity);
44
45       // If any Metatag items were found, append them.
46       if (!empty($metatag_attachments['#attached']['html_head'])) {
47         if (empty($attachments['#attached'])) {
48           $attachments['#attached'] = [];
49         }
50         if (empty($attachments['#attached']['html_head'])) {
51           $attachments['#attached']['html_head'] = [];
52         }
53         foreach ($metatag_attachments['#attached']['html_head'] as $item) {
54           $attachments['#attached']['html_head'][] = $item;
55         }
56       }
57     }
58   }
59 }
60
61 /**
62  * Returns all available page variants.
63  *
64  * @return string[]
65  *   A list of page variants keyed by label.
66  */
67 function _metatag_page_manager_get_variants() {
68   /** @var \Drupal\page_manager\Entity\PageVariant[] $variants */
69   $variants = PageVariant::loadMultiple();
70   $variant_options = [];
71   // Load all metatag defaults so we can filter the variants which already have
72   // a metatag default configured.
73   $metatag_defaults = MetatagDefaults::loadMultiple();
74   foreach ($variants as $key => $variant) {
75     $id = $variant->getEntityType()->id() . '__' . $key;
76     if (!isset($metatag_defaults[$id])) {
77       $label = $variant->getPage()->label() . ' : ' . $variant->label();
78       $variant_options[$id] = $label;
79     }
80   }
81   return $variant_options;
82 }
83
84 /**
85  * Implements hook_metatag_alter().
86  */
87 function metatag_page_manager_metatags_alter(array &$metatags, array &$context) {
88   if (!$context['entity'] instanceof PageVariant) {
89     return;
90   }
91
92   $key = $context['entity']->getEntityType()->id() . '__' . $context['entity']->id();
93   $metatag_variant = MetatagDefaults::load($key);
94   if ($metatag_variant) {
95     $metatags = array_merge($metatags, $metatag_variant->get('tags'));
96   }
97 }
98
99 /**
100  * Implements hook_metatag_route_entity().
101  */
102 function metatag_page_manager_metatag_route_entity(RouteMatchInterface $route_match) {
103   if ($variant = $route_match->getParameter('page_manager_page_variant')) {
104     return $variant;
105   }
106 }