Elgg  Version 1.12
navigation.php
Go to the documentation of this file.
1 <?php
92 function elgg_register_menu_item($menu_name, $menu_item) {
94 
95  if (is_array($menu_item)) {
96  $options = $menu_item;
97  $menu_item = \ElggMenuItem::factory($options);
98  if (!$menu_item) {
99  $menu_item_name = elgg_extract('name', $options, 'MISSING NAME');
100  elgg_log("Unable to add menu item '{$menu_item_name}' to '$menu_name' menu", 'WARNING');
101  return false;
102  }
103  }
104 
105  if (!$menu_item instanceof ElggMenuItem) {
106  elgg_log('Second argument of elgg_register_menu_item() must be an instance of ElggMenuItem or an array of menu item factory options', 'ERROR');
107  return false;
108  }
109 
110  if (!isset($CONFIG->menus[$menu_name])) {
111  $CONFIG->menus[$menu_name] = array();
112  }
113  $CONFIG->menus[$menu_name][] = $menu_item;
114  return true;
115 }
116 
126 function elgg_unregister_menu_item($menu_name, $item_name) {
127  global $CONFIG;
128 
129  if (empty($CONFIG->menus[$menu_name])) {
130  return null;
131  }
132 
133  foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
134  /* @var \ElggMenuItem $menu_object */
135  if ($menu_object instanceof ElggMenuItem && $menu_object->getName() == $item_name) {
136  $item = $CONFIG->menus[$menu_name][$index];
137  unset($CONFIG->menus[$menu_name][$index]);
138  return $item;
139  }
140  }
141 
142  return null;
143 }
144 
154 function elgg_is_menu_item_registered($menu_name, $item_name) {
155  global $CONFIG;
156 
157  if (!isset($CONFIG->menus[$menu_name])) {
158  return false;
159  }
160 
161  foreach ($CONFIG->menus[$menu_name] as $menu_object) {
162  /* @var \ElggMenuItem $menu_object */
163  if ($menu_object->getName() == $item_name) {
164  return true;
165  }
166  }
167 
168  return false;
169 }
170 
180 function elgg_get_menu_item($menu_name, $item_name) {
181  global $CONFIG;
182 
183  if (!isset($CONFIG->menus[$menu_name])) {
184  return null;
185  }
186 
187  foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
188  /* @var \ElggMenuItem $menu_object */
189  if ($menu_object->getName() == $item_name) {
190  return $CONFIG->menus[$menu_name][$index];
191  }
192  }
193 
194  return null;
195 }
196 
211 function elgg_register_title_button($handler = null, $name = 'add') {
212  if (elgg_is_logged_in()) {
213 
214  if (!$handler) {
216  }
217 
219  if (!$owner) {
220  // no owns the page so this is probably an all site list page
222  }
223  if ($owner && $owner->canWriteToContainer()) {
224  $guid = $owner->getGUID();
225  elgg_register_menu_item('title', array(
226  'name' => $name,
227  'href' => "$handler/$name/$guid",
228  'text' => elgg_echo("$handler:$name"),
229  'link_class' => 'elgg-button elgg-button-action',
230  ));
231  }
232  }
233 }
234 
248 function elgg_push_breadcrumb($title, $link = null) {
249  global $CONFIG;
250  if (!isset($CONFIG->breadcrumbs)) {
251  $CONFIG->breadcrumbs = array();
252  }
253 
254  $CONFIG->breadcrumbs[] = array('title' => $title, 'link' => $link);
255 }
256 
264  global $CONFIG;
265 
266  if (empty($CONFIG->breadcrumbs) || !is_array($CONFIG->breadcrumbs)) {
267  return array();
268  }
269  return array_pop($CONFIG->breadcrumbs);
270 }
271 
283  global $CONFIG;
284 
285  // if no crumbs set, still allow hook to populate it
286  if (isset($CONFIG->breadcrumbs) && is_array($CONFIG->breadcrumbs)) {
287  $breadcrumbs = $CONFIG->breadcrumbs;
288  } else {
289  $breadcrumbs = array();
290  }
291 
292  $params = array(
293  'breadcrumbs' => $breadcrumbs,
294  );
295  $breadcrumbs = elgg_trigger_plugin_hook('prepare', 'breadcrumbs', $params, $breadcrumbs);
296  if (!is_array($breadcrumbs)) {
297  return array();
298  }
299 
300  return $breadcrumbs;
301 }
302 
315 function elgg_prepare_breadcrumbs($hook, $type, $breadcrumbs, $params) {
316  foreach (array_keys($breadcrumbs) as $i) {
317  $breadcrumbs[$i]['title'] = elgg_get_excerpt($breadcrumbs[$i]['title'], 100);
318  }
319  return $breadcrumbs;
320 }
321 
330 
331  $featured_menu_names = elgg_get_config('site_featured_menu_names');
332  $custom_menu_items = elgg_get_config('site_custom_menu_items');
334  // we have featured or custom menu items
335 
336  $registered = $return['default'];
337  /* @var \ElggMenuItem[] $registered */
338 
339  // set up featured menu items
340  $featured = array();
341  foreach ($featured_menu_names as $name) {
342  foreach ($registered as $index => $item) {
343  if ($item->getName() == $name) {
344  $featured[] = $item;
345  unset($registered[$index]);
346  }
347  }
348  }
349 
350  // add custom menu items
351  $n = 1;
352  foreach ($custom_menu_items as $title => $url) {
353  $item = new \ElggMenuItem("custom$n", $title, $url);
354  $featured[] = $item;
355  $n++;
356  }
357 
358  $return['default'] = $featured;
359  if (count($registered) > 0) {
360  $return['more'] = $registered;
361  }
362  } else {
363  // no featured menu items set
364  $max_display_items = 5;
365 
366  // the first n are shown, rest added to more list
367  // if only one item on more menu, stick it with the rest
368  $num_menu_items = count($return['default']);
369  if ($num_menu_items > ($max_display_items + 1)) {
370  $return['more'] = array_splice($return['default'], $max_display_items);
371  }
372  }
373 
374  // check if we have anything selected
375  $selected = false;
376  foreach ($return as $section) {
377  /* @var \ElggMenuItem[] $section */
378 
379  foreach ($section as $item) {
380  if ($item->getSelected()) {
381  $selected = true;
382  break 2;
383  }
384  }
385  }
386 
387  if (!$selected) {
388  // nothing selected, match name to context or match url
389  $current_url = current_page_url();
390  foreach ($return as $section_name => $section) {
391  foreach ($section as $key => $item) {
392  // only highlight internal links
393  if (strpos($item->getHref(), elgg_get_site_url()) === 0) {
394  if ($item->getName() == elgg_get_context()) {
395  $return[$section_name][$key]->setSelected(true);
396  break 2;
397  }
398  if ($item->getHref() == $current_url) {
399  $return[$section_name][$key]->setSelected(true);
400  break 2;
401  }
402  }
403  }
404  }
405  }
406 
407  return $return;
408 }
409 
415  if (elgg_is_logged_in()) {
416  $item = $params['item'];
417  /* @var \ElggRiverItem $item */
418  $object = $item->getObjectEntity();
419  // add comment link but annotations cannot be commented on
420  if ($item->annotation_id == 0) {
421  if ($object->canComment()) {
422  $options = array(
423  'name' => 'comment',
424  'href' => "#comments-add-$object->guid",
425  'text' => elgg_view_icon('speech-bubble'),
426  'title' => elgg_echo('comment:this'),
427  'rel' => 'toggle',
428  'priority' => 50,
429  );
431  }
432  }
433 
434  if (elgg_is_admin_logged_in()) {
435  $options = array(
436  'name' => 'delete',
437  'href' => elgg_add_action_tokens_to_url("action/river/delete?id=$item->id"),
438  'text' => elgg_view_icon('delete'),
439  'title' => elgg_echo('river:delete'),
440  'confirm' => elgg_echo('deleteconfirm'),
441  'priority' => 200,
442  );
444  }
445  }
446 
447  return $return;
448 }
449 
455  if (elgg_in_context('widgets')) {
456  return $return;
457  }
458 
459  $entity = $params['entity'];
460  /* @var \ElggEntity $entity */
461  $handler = elgg_extract('handler', $params, false);
462 
463  // access
464  if (elgg_is_logged_in()) {
465  $access = elgg_view('output/access', array('entity' => $entity));
466  $options = array(
467  'name' => 'access',
468  'text' => $access,
469  'href' => false,
470  'priority' => 100,
471  );
473  }
474 
475  if ($entity->canEdit() && $handler) {
476  // edit link
477  $options = array(
478  'name' => 'edit',
479  'text' => elgg_echo('edit'),
480  'title' => elgg_echo('edit:this'),
481  'href' => "$handler/edit/{$entity->getGUID()}",
482  'priority' => 200,
483  );
485 
486  // delete link
487  $options = array(
488  'name' => 'delete',
489  'text' => elgg_view_icon('delete'),
490  'title' => elgg_echo('delete:this'),
491  'href' => "action/$handler/delete?guid={$entity->getGUID()}",
492  'confirm' => elgg_echo('deleteconfirm'),
493  'priority' => 300,
494  );
496  }
497 
498  return $return;
499 }
500 
506 
507  $widget = $params['entity'];
508  /* @var \ElggWidget $widget */
509  $show_edit = elgg_extract('show_edit', $params, true);
510 
511  $collapse = array(
512  'name' => 'collapse',
513  'text' => ' ',
514  'href' => "#elgg-widget-content-$widget->guid",
515  'link_class' => 'elgg-widget-collapse-button',
516  'rel' => 'toggle',
517  'priority' => 1,
518  );
519  $return[] = \ElggMenuItem::factory($collapse);
520 
521  if ($widget->canEdit()) {
522  $delete = array(
523  'name' => 'delete',
524  'text' => elgg_view_icon('delete-alt'),
525  'title' => elgg_echo('widget:delete', array($widget->getTitle())),
526  'href' => "action/widgets/delete?widget_guid=$widget->guid",
527  'is_action' => true,
528  'link_class' => 'elgg-widget-delete-button',
529  'id' => "elgg-widget-delete-button-$widget->guid",
530  'data-elgg-widget-type' => $widget->handler,
531  'priority' => 900,
532  );
533  $return[] = \ElggMenuItem::factory($delete);
534 
535  if ($show_edit) {
536  $edit = array(
537  'name' => 'settings',
538  'text' => elgg_view_icon('settings-alt'),
539  'title' => elgg_echo('widget:edit'),
540  'href' => "#widget-edit-$widget->guid",
541  'link_class' => "elgg-widget-edit-button",
542  'rel' => 'toggle',
543  'priority' => 800,
544  );
545  $return[] = \ElggMenuItem::factory($edit);
546  }
547  }
548 
549  return $return;
550 }
551 
557 
558  if (elgg_get_config('allow_registration')) {
560  'name' => 'register',
561  'href' => 'register',
562  'text' => elgg_echo('register'),
563  'link_class' => 'registration_link',
564  ));
565  }
566 
568  'name' => 'forgotpassword',
569  'href' => 'forgotpassword',
570  'text' => elgg_echo('user:password:lost'),
571  'link_class' => 'forgot_link',
572  ));
573 
574  return $return;
575 }
576 
577 
582 function _elgg_nav_init() {
583  elgg_register_plugin_hook_handler('prepare', 'breadcrumbs', 'elgg_prepare_breadcrumbs');
584 
585  elgg_register_plugin_hook_handler('prepare', 'menu:site', '_elgg_site_menu_setup');
586  elgg_register_plugin_hook_handler('register', 'menu:river', '_elgg_river_menu_setup');
587  elgg_register_plugin_hook_handler('register', 'menu:entity', '_elgg_entity_menu_setup');
588  elgg_register_plugin_hook_handler('register', 'menu:widget', '_elgg_widget_menu_setup');
589  elgg_register_plugin_hook_handler('register', 'menu:login', '_elgg_login_menu_setup');
590 
591  elgg_register_plugin_hook_handler('public_pages', 'walled_garden', '_elgg_nav_public_pages');
592 
594  'name' => 'powered',
595  'text' => elgg_echo("elgg:powered"),
596  'href' => 'http://elgg.org',
597  'title' => 'Elgg ' . elgg_get_version(true),
598  'section' => 'meta',
599  )));
600 
601  elgg_register_ajax_view('navigation/menu/user_hover/contents');
602 }
603 
616 function _elgg_nav_public_pages($hook_name, $entity_type, $return_value, $params) {
617  if (is_array($return_value)) {
618  $return_value[] = 'navigation/menu/user_hover/contents';
619  }
620 
621  return $return_value;
622 }
623 
624 return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) {
625  $events->registerHandler('init', 'system', '_elgg_nav_init');
626 };
elgg_get_config($name, $site_guid=0)
Get an Elgg configuration value.
$custom_menu_items
Definition: save.php:21
$n
Profile fields.
Definition: list.php:9
elgg_push_breadcrumb($title, $link=null)
Adds a breadcrumb to the breadcrumbs stack.
Definition: navigation.php:248
elgg_is_logged_in()
Returns whether or not the user is currently logged in.
Definition: sessions.php:51
elgg_unregister_menu_item($menu_name, $item_name)
Remove an item from a menu.
Definition: navigation.php:126
elgg_add_action_tokens_to_url($url, $html_encode=false)
Adds action tokens to URL.
Definition: elgglib.php:1084
_elgg_login_menu_setup($hook, $type, $return, $params)
Add the register and forgot password links to login menu private.
Definition: navigation.php:556
elgg_is_admin_logged_in()
Returns whether or not the viewer is currently logged in and an admin user.
Definition: sessions.php:60
elgg_view_icon($name, $vars=array())
View one of the elgg sprite icons.
Definition: views.php:1388
if($guid==elgg_get_logged_in_user_guid()) $name
Definition: delete.php:21
current_page_url()
Returns the current page&#39;s complete URL.
Definition: input.php:65
$object
Definition: upgrade.php:12
$widget
Definition: delete.php:9
elgg_get_menu_item($menu_name, $item_name)
Get a menu item registered for a menu.
Definition: navigation.php:180
$return
Definition: opendd.php:15
$guid
Removes an admin notice.
elgg_register_plugin_hook_handler($hook, $type, $callback, $priority=500)
Definition: elgglib.php:717
_elgg_widget_menu_setup($hook, $type, $return, $params)
Widget menu is a set of widget controls private.
Definition: navigation.php:505
$url
Definition: exceptions.php:24
$title
Definition: save.php:22
$params
Definition: login.php:72
$options
Definition: index.php:14
$featured_menu_names
Definition: save.php:16
static factory($options)
Create an ElggMenuItem from an associative array.
elgg_prepare_breadcrumbs($hook, $type, $breadcrumbs, $params)
Hook handler to turn titles into 100-character excerpts.
Definition: navigation.php:315
elgg_echo($message_key, $args=array(), $language="")
Given a message key, returns an appropriately translated full-text string.
Definition: languages.php:21
$owner
Definition: crop.php:8
$key
Definition: summary.php:34
$item
Definition: item.php:12
global $CONFIG
$num_menu_items
Definition: save.php:20
elgg_in_context($context)
Check if this context exists anywhere in the stack.
Definition: pageowner.php:244
elgg_trigger_plugin_hook($hook, $type, $params=null, $returnvalue=null)
Definition: elgglib.php:790
elgg_get_breadcrumbs()
Returns all breadcrumbs as an array of array(&#39;title&#39; => &#39;Title&#39;, &#39;link&#39; => &#39;URL&#39;) ...
Definition: navigation.php:282
elgg_register_title_button($handler=null, $name= 'add')
Convenience function for registering a button to the title menu.
Definition: navigation.php:211
elgg_get_context()
Get the current context.
Definition: pageowner.php:207
elgg global
Pointer to the global context.
Definition: elgglib.js:12
elgg_get_site_url($site_guid=0)
Get the URL for the current (or specified) site.
elgg_get_page_owner_entity()
Gets the owner entity for the current page.
Definition: pageowner.php:51
$type
Definition: add.php:8
elgg_register_menu_item($menu_name, $menu_item)
Register an item for an Elgg menu.
Definition: navigation.php:92
elgg_view($view, $vars=array(), $bypass=false, $ignored=false, $viewtype= '')
Return a parsed view.
Definition: views.php:340
_elgg_entity_menu_setup($hook, $type, $return, $params)
Entity menu is list of links and info on any entity private.
Definition: navigation.php:454
elgg_extract($key, $array, $default=null, $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Definition: elgglib.php:1271
elgg_log($message, $level= 'NOTICE')
Display or log a message.
Definition: elgglib.php:958
_elgg_site_menu_setup($hook, $type, $return, $params)
Set up the site menu.
Definition: navigation.php:329
elgg_get_version($human_readable=false)
Get the current Elgg version information.
Definition: elgglib.php:1001
_elgg_nav_init()
Navigation initialization private.
Definition: navigation.php:582
getName()
Get the identifier of the menu item.
elgg_register_ajax_view($view)
Register a view to be available for ajax calls.
Definition: views.php:208
elgg_get_excerpt($text, $num_chars=250)
Returns an excerpt.
Definition: output.php:72
elgg_get_logged_in_user_entity()
Return the current logged in user, or null if no user is logged in.
Definition: sessions.php:32
$handler
Definition: add.php:10
$entity
Definition: delete.php:10
_elgg_nav_public_pages($hook_name, $entity_type, $return_value, $params)
Extend public pages.
Definition: navigation.php:616
_elgg_river_menu_setup($hook, $type, $return, $params)
Add the comment and like links to river actions menu private.
Definition: navigation.php:414
elgg_pop_breadcrumb()
Removes last breadcrumb entry.
Definition: navigation.php:263
elgg_is_menu_item_registered($menu_name, $item_name)
Check if a menu item has been registered.
Definition: navigation.php:154
$access
Definition: save.php:15