Elgg  Version 5.1
Page.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Elgg\Menus;
4 
7 
14 class Page {
15 
25  public static function registerAdminPluginSettings(\Elgg\Event $event) {
26  if (!elgg_in_context('admin') || !elgg_is_admin_logged_in()) {
27  return;
28  }
29 
30  $current_route = elgg_get_current_route();
31  if (elgg_extract('segments', $current_route->getMatchedParameters()) !== 'plugins' && $current_route->getName() !== 'admin:plugin_settings') {
32  return;
33  }
34 
35  // plugin settings
36  $active_plugins = elgg_get_plugins('active');
37  if (empty($active_plugins)) {
38  // nothing added because no items
39  return;
40  }
41 
42  $plugins_with_settings = [];
43 
44  foreach ($active_plugins as $plugin) {
45  $plugin_id = $plugin->getID();
46 
47  if (!elgg_view_exists("plugins/{$plugin_id}/settings")) {
48  continue;
49  }
50 
51  $plugin_name = $plugin->getDisplayName();
52  $plugins_with_settings[strtolower($plugin_name)] = [
53  'name' => "plugin:settings:{$plugin_id}",
54  'href' => elgg_generate_url('admin:plugin_settings', [
55  'plugin_id' => $plugin_id,
56  ]),
57  'text' => $plugin_name,
58  'section' => 'plugin_settings',
59  ];
60  }
61 
62  if (empty($plugins_with_settings)) {
63  return;
64  }
65 
66  /* @var $return MenuItems */
67  $return = $event->getValue();
68 
69  ksort($plugins_with_settings);
70  $priority = 0;
71  foreach ($plugins_with_settings as $plugin_item) {
72  $priority += 10;
73  $plugin_item['priority'] = $priority;
74  $return[] = \ElggMenuItem::factory($plugin_item);
75  }
76 
77  return $return;
78  }
79 
87  public static function registerUserSettings(\Elgg\Event $event) {
89  if (!$user instanceof \ElggUser || !elgg_in_context('settings') || !$user->canEdit()) {
90  return;
91  }
92 
93  /* @var $return MenuItems */
94  $return = $event->getValue();
95 
96  $return[] = \ElggMenuItem::factory([
97  'name' => '1_account',
98  'text' => elgg_echo('usersettings:user:opt:linktext'),
99  'href' => elgg_generate_url('settings:account', [
100  'username' => $user->username,
101  ]),
102  'section' => 'configure',
103  ]);
104 
105  $return[] = \ElggMenuItem::factory([
106  'name' => '1_notifications',
107  'text' => elgg_echo('usersettings:notifications:menu:page'),
108  'href' => elgg_generate_url('settings:notifications', [
109  'username' => $user->username,
110  ]),
111  'section' => 'configure',
112  ]);
113 
114  $return[] = \ElggMenuItem::factory([
115  'name' => '1_statistics',
116  'text' => elgg_echo('usersettings:statistics:opt:linktext'),
117  'href' => elgg_generate_url('settings:statistics', [
118  'username' => $user->username,
119  ]),
120  'section' => 'configure',
121  ]);
122 
123  return $return;
124  }
125 
133  public static function registerUserSettingsPlugins(\Elgg\Event $event) {
135  if (!$user instanceof \ElggUser || !elgg_in_context('settings') || !$user->canEdit()) {
136  return;
137  }
138 
139  /* @var $return MenuItems */
140  $return = $event->getValue();
141 
142  $return[] = \ElggMenuItem::factory([
143  'name' => '1_plugins',
144  'text' => elgg_echo('usersettings:plugins:opt:linktext'),
145  'href' => false,
146  'section' => 'configure',
147  'show_with_empty_children' => false,
148  ]);
149 
150  $active_plugins = elgg_get_plugins();
151  foreach ($active_plugins as $plugin) {
152  $plugin_id = $plugin->getID();
153  if (!elgg_view_exists("plugins/{$plugin_id}/usersettings")) {
154  continue;
155  }
156 
157  $title = $plugin->getDisplayName();
158  if (elgg_language_key_exists("{$plugin_id}:usersettings:title")) {
159  $title = elgg_echo("{$plugin_id}:usersettings:title");
160  }
161 
162  $return[] = \ElggMenuItem::factory([
163  'name' => $plugin_id,
164  'text' => $title,
165  'href' => elgg_generate_url('settings:tools', [
166  'username' => $user->username,
167  'plugin_id' => $plugin_id,
168  ]),
169  'parent_name' => '1_plugins',
170  'section' => 'configure',
171  ]);
172  }
173 
174  return $return;
175  }
176 
186  public static function moveOldAdminSectionsToAdminHeader(\Elgg\Event $event) {
187  if (!elgg_in_context('admin') || !elgg_is_admin_logged_in()) {
188  return;
189  }
190 
191  /* @var $return MenuItems */
192  $return = $event->getValue();
193 
194  $remove_items = [];
195  foreach ($return as $menu_item) {
196  $section_name = $menu_item->getSection();
197  if (!in_array($section_name, ['configure', 'administer', 'information'])) {
198  continue;
199  }
200 
201  $menu_item->setSection('default');
202  if (empty($menu_item->getParentName())) {
203  $menu_item->setParentName($section_name);
204  }
205 
206  elgg_register_menu_item('admin_header', $menu_item);
207  $remove_items[] = $menu_item->getID();
208 
209  elgg_deprecated_notice("The menu item [{$menu_item->getID()}] is using an old section of the admin page menu. These sections have been moved to the 'admin_header' menu. Please update your menu item configuration.", '5.0');
210  }
211 
212  foreach ($remove_items as $id) {
213  // need to remove separately because removing during a foreach has issues
214  $return->remove($id);
215  }
216  }
217 }
elgg_get_plugins(string $status= 'active')
Returns an ordered list of plugins.
Definition: plugins.php:55
$plugin
elgg_deprecated_notice(string $msg, string $dep_version)
Log a notice about deprecated use of a function, view, etc.
Definition: elgglib.php:115
elgg_is_admin_logged_in()
Returns whether or not the viewer is currently logged in and an admin user.
Definition: sessions.php:52
elgg_in_context(string $context)
Check if this context exists anywhere in the stack.
Definition: context.php:78
$title
Definition: generic.php:50
static moveOldAdminSectionsToAdminHeader(\Elgg\Event $event)
Moves menu items registered to the page to the admin header.
Definition: Page.php:186
Register menu items for the page menu.
Definition: Page.php:14
static registerUserSettings(\Elgg\Event $event)
Register menu items for the user settings.
Definition: Page.php:87
elgg_echo(string $message_key, array $args=[], string $language= '')
Elgg language module Functions to manage language and translations.
Definition: languages.php:17
static factory(array $options)
Create an ElggMenuItem from an associative array.
$plugin_id
Remove all user and plugin settings from the give plugin ID.
Definition: remove.php:8
elgg_extract($key, $array, $default=null, bool $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Definition: elgglib.php:254
elgg_language_key_exists(string $key, string $language= 'en')
Check if a given language key exists.
Definition: languages.php:44
$user
Definition: ban.php:7
elgg_get_page_owner_entity()
Gets the owner entity for the current page.
Definition: pageowner.php:23
elgg_get_current_route()
Get the route for the current request.
Definition: pagehandler.php:88
static registerAdminPluginSettings(\Elgg\Event $event)
Register links to the plugin settings admin section.
Definition: Page.php:25
elgg_generate_url(string $name, array $parameters=[])
Generate a URL for named route.
if(!$plugin) $plugin_name
Definition: save.php:25
static registerUserSettingsPlugins(\Elgg\Event $event)
Register menu items for the user plugin settings.
Definition: Page.php:133
$id
Generic annotation delete action.
Definition: delete.php:6
elgg_view_exists(string $view, string $viewtype= '', bool $recurse=true)
Returns whether the specified view exists.
Definition: views.php:152
$priority
Models an event passed to event handlers.
Definition: Event.php:11
elgg_register_menu_item(string $menu_name, array|\ElggMenuItem $menu_item)
Elgg navigation library Functions for managing menus and other navigational elements.
Definition: navigation.php:83