Security update for Core, with self-updated composer
[yaffs-website] / web / core / includes / menu.inc
1 <?php
2
3 /**
4  * @file
5  * API for the Drupal menu system.
6  */
7
8 /**
9  * @addtogroup menu
10  * @{
11  */
12
13 use Drupal\Component\Utility\SafeMarkup;
14 use Drupal\Core\Render\Element;
15
16 /**
17  * Prepares variables for single local task link templates.
18  *
19  * Default template: menu-local-task.html.twig.
20  *
21  * @param array $variables
22  *   An associative array containing:
23  *   - element: A render element containing:
24  *     - #link: A menu link array with 'title', 'url', and (optionally)
25  *       'localized_options' keys.
26  *     - #active: A boolean indicating whether the local task is active.
27  */
28 function template_preprocess_menu_local_task(&$variables) {
29   $link = $variables['element']['#link'];
30   $link += [
31     'localized_options' => [],
32   ];
33   $link_text = $link['title'];
34
35   if (!empty($variables['element']['#active'])) {
36     $variables['is_active'] = TRUE;
37
38     // Add text to indicate active tab for non-visual users.
39     $active = SafeMarkup::format('<span class="visually-hidden">@label</span>', ['@label' => t('(active tab)')]);
40     $link_text = t('@local-task-title@active', ['@local-task-title' => $link_text, '@active' => $active]);
41   }
42
43   $link['localized_options']['set_active_class'] = TRUE;
44
45   $variables['link'] = [
46     '#type' => 'link',
47     '#title' => $link_text,
48     '#url' => $link['url'],
49     '#options' => $link['localized_options'],
50   ];
51 }
52
53 /**
54  * Prepares variables for single local action link templates.
55  *
56  * Default template: menu-local-action.html.twig.
57  *
58  * @param array $variables
59  *   An associative array containing:
60  *   - element: A render element containing:
61  *     - #link: A menu link array with 'title', 'url', and (optionally)
62  *       'localized_options' keys.
63  */
64 function template_preprocess_menu_local_action(&$variables) {
65   $link = $variables['element']['#link'];
66   $link += [
67     'localized_options' => [],
68   ];
69   $link['localized_options']['attributes']['class'][] = 'button';
70   $link['localized_options']['attributes']['class'][] = 'button-action';
71   $link['localized_options']['set_active_class'] = TRUE;
72
73   $variables['link'] = [
74     '#type' => 'link',
75     '#title' => $link['title'],
76     '#options' => $link['localized_options'],
77     '#url' => $link['url'],
78   ];
79 }
80
81 /**
82  * Returns an array containing the names of system-defined (default) menus.
83  */
84 function menu_list_system_menus() {
85   return [
86     'tools' => 'Tools',
87     'admin' => 'Administration',
88     'account' => 'User account menu',
89     'main' => 'Main navigation',
90     'footer' => 'Footer menu',
91   ];
92 }
93
94 /**
95  * Collects the local tasks (tabs) for the current route.
96  *
97  * @param int $level
98  *   The level of tasks you ask for. Primary tasks are 0, secondary are 1.
99  *
100  * @return array
101  *   An array containing
102  *   - tabs: Local tasks for the requested level.
103  *   - route_name: The route name for the current page used to collect the local
104  *     tasks.
105  *
106  * @see hook_menu_local_tasks_alter()
107  * @see https://www.drupal.org/node/2544940
108  *
109  * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
110  */
111 function menu_local_tasks($level = 0) {
112   /** @var \Drupal\Core\Menu\LocalTaskManagerInterface $manager */
113   $manager = \Drupal::service('plugin.manager.menu.local_task');
114   return $manager->getLocalTasks(\Drupal::routeMatch()->getRouteName(), $level);
115 }
116
117 /**
118  * Returns the rendered local tasks at the top level.
119  *
120  * @see https://www.drupal.org/node/2874695
121  *
122  * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
123  */
124 function menu_primary_local_tasks() {
125   /** @var \Drupal\Core\Menu\LocalTaskManagerInterface $manager */
126   $manager = \Drupal::service('plugin.manager.menu.local_task');
127   $links = $manager->getLocalTasks(\Drupal::routeMatch()->getRouteName(), 0);
128   // Do not display single tabs.
129   return count(Element::getVisibleChildren($links['tabs'])) > 1 ? $links['tabs'] : '';
130 }
131
132 /**
133  * Returns the rendered local tasks at the second level.
134  *
135  * @see https://www.drupal.org/node/2874695
136  *
137  * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
138  */
139 function menu_secondary_local_tasks() {
140   /** @var \Drupal\Core\Menu\LocalTaskManagerInterface $manager */
141   $manager = \Drupal::service('plugin.manager.menu.local_task');
142   $links = $manager->getLocalTasks(\Drupal::routeMatch()->getRouteName(), 1);
143   // Do not display single tabs.
144   return count(Element::getVisibleChildren($links['tabs'])) > 1 ? $links['tabs'] : '';
145 }
146
147 /**
148  * Returns a renderable element for the primary and secondary tabs.
149  */
150 function menu_local_tabs() {
151   $build = [
152     '#theme' => 'menu_local_tasks',
153     '#primary' => menu_primary_local_tasks(),
154     '#secondary' => menu_secondary_local_tasks(),
155   ];
156   return !empty($build['#primary']) || !empty($build['#secondary']) ? $build : [];
157 }
158
159 /**
160  * Clears all cached menu data.
161  *
162  * This should be called any time broad changes
163  * might have been made to the router items or menu links.
164  */
165 function menu_cache_clear_all() {
166   \Drupal::cache('menu')->invalidateAll();
167 }
168
169 /**
170  * @} End of "addtogroup menu".
171  */