Elgg  Version 1.10
navigation.php
Go to the documentation of this file.
1 <?php
92 function elgg_register_menu_item($menu_name, $menu_item) {
94 
95  if (!isset($CONFIG->menus[$menu_name])) {
96  $CONFIG->menus[$menu_name] = array();
97  }
98 
99  if (is_array($menu_item)) {
100  $item = \ElggMenuItem::factory($menu_item);
101  if (!$item) {
102  elgg_log("Unable to add menu item '{$menu_item['name']}' to '$menu_name' menu", 'WARNING');
103  return false;
104  }
105  } else {
106  $item = $menu_item;
107  }
108 
109  $CONFIG->menus[$menu_name][] = $item;
110  return true;
111 }
112 
122 function elgg_unregister_menu_item($menu_name, $item_name) {
123  global $CONFIG;
124 
125  if (!isset($CONFIG->menus[$menu_name])) {
126  return null;
127  }
128 
129  foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
130  /* @var \ElggMenuItem $menu_object */
131  if ($menu_object->getName() == $item_name) {
132  $item = $CONFIG->menus[$menu_name][$index];
133  unset($CONFIG->menus[$menu_name][$index]);
134  return $item;
135  }
136  }
137 
138  return null;
139 }
140 
150 function elgg_is_menu_item_registered($menu_name, $item_name) {
151  global $CONFIG;
152 
153  if (!isset($CONFIG->menus[$menu_name])) {
154  return false;
155  }
156 
157  foreach ($CONFIG->menus[$menu_name] as $menu_object) {
158  /* @var \ElggMenuItem $menu_object */
159  if ($menu_object->getName() == $item_name) {
160  return true;
161  }
162  }
163 
164  return false;
165 }
166 
176 function elgg_get_menu_item($menu_name, $item_name) {
177  global $CONFIG;
178 
179  if (!isset($CONFIG->menus[$menu_name])) {
180  return null;
181  }
182 
183  foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
184  /* @var \ElggMenuItem $menu_object */
185  if ($menu_object->getName() == $item_name) {
186  return $CONFIG->menus[$menu_name][$index];
187  }
188  }
189 
190  return null;
191 }
192 
207 function elgg_register_title_button($handler = null, $name = 'add') {
208  if (elgg_is_logged_in()) {
209 
210  if (!$handler) {
212  }
213 
215  if (!$owner) {
216  // no owns the page so this is probably an all site list page
218  }
219  if ($owner && $owner->canWriteToContainer()) {
220  $guid = $owner->getGUID();
221  elgg_register_menu_item('title', array(
222  'name' => $name,
223  'href' => "$handler/$name/$guid",
224  'text' => elgg_echo("$handler:$name"),
225  'link_class' => 'elgg-button elgg-button-action',
226  ));
227  }
228  }
229 }
230 
240 function elgg_push_breadcrumb($title, $link = null) {
241  global $CONFIG;
242  if (!isset($CONFIG->breadcrumbs)) {
243  $CONFIG->breadcrumbs = array();
244  }
245 
246  // avoid key collisions.
247  $CONFIG->breadcrumbs[] = array('title' => elgg_get_excerpt($title, 100), 'link' => $link);
248 }
249 
257  global $CONFIG;
258 
259  if (is_array($CONFIG->breadcrumbs)) {
260  return array_pop($CONFIG->breadcrumbs);
261  }
262 
263  return false;
264 }
265 
273  global $CONFIG;
274 
275  if (isset($CONFIG->breadcrumbs) && is_array($CONFIG->breadcrumbs)) {
276  return $CONFIG->breadcrumbs;
277  }
278 
279  return array();
280 }
281 
290 
291  $featured_menu_names = elgg_get_config('site_featured_menu_names');
292  $custom_menu_items = elgg_get_config('site_custom_menu_items');
294  // we have featured or custom menu items
295 
296  $registered = $return['default'];
297  /* @var \ElggMenuItem[] $registered */
298 
299  // set up featured menu items
300  $featured = array();
301  foreach ($featured_menu_names as $name) {
302  foreach ($registered as $index => $item) {
303  if ($item->getName() == $name) {
304  $featured[] = $item;
305  unset($registered[$index]);
306  }
307  }
308  }
309 
310  // add custom menu items
311  $n = 1;
312  foreach ($custom_menu_items as $title => $url) {
313  $item = new \ElggMenuItem("custom$n", $title, $url);
314  $featured[] = $item;
315  $n++;
316  }
317 
318  $return['default'] = $featured;
319  if (count($registered) > 0) {
320  $return['more'] = $registered;
321  }
322  } else {
323  // no featured menu items set
324  $max_display_items = 5;
325 
326  // the first n are shown, rest added to more list
327  // if only one item on more menu, stick it with the rest
328  $num_menu_items = count($return['default']);
329  if ($num_menu_items > ($max_display_items + 1)) {
330  $return['more'] = array_splice($return['default'], $max_display_items);
331  }
332  }
333 
334  // check if we have anything selected
335  $selected = false;
336  foreach ($return as $section) {
337  /* @var \ElggMenuItem[] $section */
338 
339  foreach ($section as $item) {
340  if ($item->getSelected()) {
341  $selected = true;
342  break 2;
343  }
344  }
345  }
346 
347  if (!$selected) {
348  // nothing selected, match name to context or match url
349  $current_url = current_page_url();
350  foreach ($return as $section_name => $section) {
351  foreach ($section as $key => $item) {
352  // only highlight internal links
353  if (strpos($item->getHref(), elgg_get_site_url()) === 0) {
354  if ($item->getName() == elgg_get_context()) {
355  $return[$section_name][$key]->setSelected(true);
356  break 2;
357  }
358  if ($item->getHref() == $current_url) {
359  $return[$section_name][$key]->setSelected(true);
360  break 2;
361  }
362  }
363  }
364  }
365  }
366 
367  return $return;
368 }
369 
375  if (elgg_is_logged_in()) {
376  $item = $params['item'];
377  /* @var \ElggRiverItem $item */
378  $object = $item->getObjectEntity();
379  // add comment link but annotations cannot be commented on
380  if ($item->annotation_id == 0) {
381  if ($object->canComment()) {
382  $options = array(
383  'name' => 'comment',
384  'href' => "#comments-add-$object->guid",
385  'text' => elgg_view_icon('speech-bubble'),
386  'title' => elgg_echo('comment:this'),
387  'rel' => 'toggle',
388  'priority' => 50,
389  );
391  }
392  }
393 
394  if (elgg_is_admin_logged_in()) {
395  $options = array(
396  'name' => 'delete',
397  'href' => elgg_add_action_tokens_to_url("action/river/delete?id=$item->id"),
398  'text' => elgg_view_icon('delete'),
399  'title' => elgg_echo('river:delete'),
400  'confirm' => elgg_echo('deleteconfirm'),
401  'priority' => 200,
402  );
404  }
405  }
406 
407  return $return;
408 }
409 
415  if (elgg_in_context('widgets')) {
416  return $return;
417  }
418 
419  $entity = $params['entity'];
420  /* @var \ElggEntity $entity */
421  $handler = elgg_extract('handler', $params, false);
422 
423  // access
424  if (elgg_is_logged_in()) {
425  $access = elgg_view('output/access', array('entity' => $entity));
426  $options = array(
427  'name' => 'access',
428  'text' => $access,
429  'href' => false,
430  'priority' => 100,
431  );
433  }
434 
435  if ($entity->canEdit() && $handler) {
436  // edit link
437  $options = array(
438  'name' => 'edit',
439  'text' => elgg_echo('edit'),
440  'title' => elgg_echo('edit:this'),
441  'href' => "$handler/edit/{$entity->getGUID()}",
442  'priority' => 200,
443  );
445 
446  // delete link
447  $options = array(
448  'name' => 'delete',
449  'text' => elgg_view_icon('delete'),
450  'title' => elgg_echo('delete:this'),
451  'href' => "action/$handler/delete?guid={$entity->getGUID()}",
452  'confirm' => elgg_echo('deleteconfirm'),
453  'priority' => 300,
454  );
456  }
457 
458  return $return;
459 }
460 
466 
467  $widget = $params['entity'];
468  /* @var \ElggWidget $widget */
469  $show_edit = elgg_extract('show_edit', $params, true);
470 
471  $collapse = array(
472  'name' => 'collapse',
473  'text' => ' ',
474  'href' => "#elgg-widget-content-$widget->guid",
475  'link_class' => 'elgg-widget-collapse-button',
476  'rel' => 'toggle',
477  'priority' => 1,
478  );
479  $return[] = \ElggMenuItem::factory($collapse);
480 
481  if ($widget->canEdit()) {
482  $delete = array(
483  'name' => 'delete',
484  'text' => elgg_view_icon('delete-alt'),
485  'title' => elgg_echo('widget:delete', array($widget->getTitle())),
486  'href' => "action/widgets/delete?widget_guid=$widget->guid",
487  'is_action' => true,
488  'link_class' => 'elgg-widget-delete-button',
489  'id' => "elgg-widget-delete-button-$widget->guid",
490  'data-elgg-widget-type' => $widget->handler,
491  'priority' => 900,
492  );
493  $return[] = \ElggMenuItem::factory($delete);
494 
495  if ($show_edit) {
496  $edit = array(
497  'name' => 'settings',
498  'text' => elgg_view_icon('settings-alt'),
499  'title' => elgg_echo('widget:edit'),
500  'href' => "#widget-edit-$widget->guid",
501  'link_class' => "elgg-widget-edit-button",
502  'rel' => 'toggle',
503  'priority' => 800,
504  );
505  $return[] = \ElggMenuItem::factory($edit);
506  }
507  }
508 
509  return $return;
510 }
511 
517 
518  if (elgg_get_config('allow_registration')) {
520  'name' => 'register',
521  'href' => 'register',
522  'text' => elgg_echo('register'),
523  'link_class' => 'registration_link',
524  ));
525  }
526 
528  'name' => 'forgotpassword',
529  'href' => 'forgotpassword',
530  'text' => elgg_echo('user:password:lost'),
531  'link_class' => 'forgot_link',
532  ));
533 
534  return $return;
535 }
536 
537 
542 function _elgg_nav_init() {
543  elgg_register_plugin_hook_handler('prepare', 'menu:site', '_elgg_site_menu_setup');
544  elgg_register_plugin_hook_handler('register', 'menu:river', '_elgg_river_menu_setup');
545  elgg_register_plugin_hook_handler('register', 'menu:entity', '_elgg_entity_menu_setup');
546  elgg_register_plugin_hook_handler('register', 'menu:widget', '_elgg_widget_menu_setup');
547  elgg_register_plugin_hook_handler('register', 'menu:login', '_elgg_login_menu_setup');
548 
550  'name' => 'powered',
551  'text' => elgg_echo("elgg:powered"),
552  'href' => 'http://elgg.org',
553  'title' => 'Elgg ' . elgg_get_version(true),
554  'section' => 'meta',
555  )));
556 }
557 
558 elgg_register_event_handler('init', 'system', '_elgg_nav_init');
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:240
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:122
elgg_view_icon($name, $class= '')
View one of the elgg sprite icons.
Definition: views.php:1372
elgg_add_action_tokens_to_url($url, $html_encode=false)
Adds action tokens to URL.
Definition: elgglib.php:1162
_elgg_login_menu_setup($hook, $type, $return, $params)
Add the register and forgot password links to login menu private.
Definition: navigation.php:516
elgg_is_admin_logged_in()
Returns whether or not the viewer is currently logged in and an admin user.
Definition: sessions.php:60
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:176
$return
Definition: opendd.php:15
$guid
Removes an admin notice.
elgg_extract($key, array $array, $default=null, $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Definition: elgglib.php:1349
elgg_register_plugin_hook_handler($hook, $type, $callback, $priority=500)
Register a callback as a plugin hook handler.
Definition: elgglib.php:737
_elgg_widget_menu_setup($hook, $type, $return, $params)
Widget menu is a set of widget controls private.
Definition: navigation.php:465
$url
Definition: exceptions.php:24
$title
Definition: save.php:24
$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_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:250
elgg_get_breadcrumbs()
Returns all breadcrumbs as an array of array(&#39;title&#39; => &#39;Readable Title&#39;, &#39;link&#39; => &#39;URL&#39;) ...
Definition: navigation.php:272
elgg_register_title_button($handler=null, $name= 'add')
Convenience function for registering a button to the title menu.
Definition: navigation.php:207
elgg_get_context()
Get the current context.
Definition: pageowner.php:213
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:53
$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:354
_elgg_entity_menu_setup($hook, $type, $return, $params)
Entity menu is list of links and info on any entity private.
Definition: navigation.php:414
elgg_register_event_handler($event, $object_type, $callback, $priority=500)
Register a callback as an Elgg event handler.
Definition: elgglib.php:553
elgg_log($message, $level= 'NOTICE')
Display or log a message.
Definition: elgglib.php:967
_elgg_site_menu_setup($hook, $type, $return, $params)
Set up the site menu.
Definition: navigation.php:289
elgg_get_version($human_readable=false)
Get the current Elgg version information.
Definition: elgglib.php:1010
_elgg_nav_init()
Navigation initialization private.
Definition: navigation.php:542
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_river_menu_setup($hook, $type, $return, $params)
Add the comment and like links to river actions menu private.
Definition: navigation.php:374
elgg_pop_breadcrumb()
Removes last breadcrumb entry.
Definition: navigation.php:256
elgg_is_menu_item_registered($menu_name, $item_name)
Check if a menu item has been registered.
Definition: navigation.php:150
$access
Definition: save.php:15