diff --git a/boot.php b/boot.php
index 4bfa5c098..0692e8475 100644
--- a/boot.php
+++ b/boot.php
@@ -36,7 +36,6 @@ require_once 'include/plugin.php';
require_once 'include/text.php';
require_once 'include/datetime.php';
require_once 'include/pgettext.php';
-require_once 'include/nav.php';
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Asparagus');
diff --git a/include/nav.php b/include/nav.php
deleted file mode 100644
index 3cee38b34..000000000
--- a/include/nav.php
+++ /dev/null
@@ -1,250 +0,0 @@
-page,'nav')))
- $a->page['nav'] = '';
-
- $a->page['htmlhead'] .= replace_macros(get_markup_template('nav_head.tpl'), []);
-
- /*
- * Placeholder div for popup panel
- */
-
- $a->page['nav'] .= '
' ;
-
- $nav_info = nav_info($a);
-
- /*
- * Build the page
- */
-
- $tpl = get_markup_template('nav.tpl');
-
- $a->page['nav'] .= replace_macros($tpl, [
- '$baseurl' => System::baseUrl(),
- '$sitelocation' => $nav_info['sitelocation'],
- '$nav' => $nav_info['nav'],
- '$banner' => $nav_info['banner'],
- '$emptynotifications' => t('Nothing new here'),
- '$userinfo' => $nav_info['userinfo'],
- '$sel' => $a->nav_sel,
- '$apps' => $a->apps,
- '$clear_notifs' => t('Clear notifications'),
- '$search_hint' => t('@name, !forum, #tags, content')
- ]);
-
- call_hooks('page_header', $a->page['nav']);
-}
-
-/**
- * @brief Prepares a list of navigation links
- *
- * @param App $a
- * @return array Navigation links
- * string 'sitelocation' => The webbie (username@site.com)
- * array 'nav' => Array of links used in the nav menu
- * string 'banner' => Formatted html link with banner image
- * array 'userinfo' => Array of user information (name, icon)
- */
-function nav_info(App $a)
-{
- $ssl_state = ((local_user()) ? true : false);
-
- /*
- * Our network is distributed, and as you visit friends some of the
- * sites look exactly the same - it isn't always easy to know where you are.
- * Display the current site location as a navigation aid.
- */
-
- $myident = ((is_array($a->user) && isset($a->user['nickname'])) ? $a->user['nickname'] . '@' : '');
-
- $sitelocation = $myident . substr(System::baseUrl($ssl_state), strpos(System::baseUrl($ssl_state), '//') + 2 );
-
- // nav links: array of array('href', 'text', 'extra css classes', 'title')
- $nav = [];
-
- // Display login or logout
- $nav['usermenu'] = [];
- $userinfo = null;
-
- if (local_user()) {
- $nav['logout'] = ['logout', t('Logout'), '', t('End this session')];
-
- // user menu
- $nav['usermenu'][] = ['profile/' . $a->user['nickname'], t('Status'), '', t('Your posts and conversations')];
- $nav['usermenu'][] = ['profile/' . $a->user['nickname'] . '?tab=profile', t('Profile'), '', t('Your profile page')];
- $nav['usermenu'][] = ['photos/' . $a->user['nickname'], t('Photos'), '', t('Your photos')];
- $nav['usermenu'][] = ['videos/' . $a->user['nickname'], t('Videos'), '', t('Your videos')];
- $nav['usermenu'][] = ['events/', t('Events'), '', t('Your events')];
- $nav['usermenu'][] = ['notes/', t('Personal notes'), '', t('Your personal notes')];
-
- // user info
- $contact = dba::selectFirst('contact', ['micro'], ['uid' => $a->user['uid'], 'self' => true]);
- $userinfo = [
- 'icon' => (DBM::is_result($contact) ? $a->remove_baseurl($contact['micro']) : 'images/person-48.jpg'),
- 'name' => $a->user['username'],
- ];
- } else {
- $nav['login'] = ['login', t('Login'), ($a->module == 'login' ? 'selected' : ''), t('Sign in')];
- }
-
- // "Home" should also take you home from an authenticated remote profile connection
- $homelink = Profile::getMyURL();
- if (! $homelink) {
- $homelink = ((x($_SESSION, 'visitor_home')) ? $_SESSION['visitor_home'] : '');
- }
-
- if (($a->module != 'home') && (! (local_user()))) {
- $nav['home'] = [$homelink, t('Home'), '', t('Home Page')];
- }
-
- if (($a->config['register_policy'] == REGISTER_OPEN) && (! local_user()) && (! remote_user())) {
- $nav['register'] = ['register', t('Register'), '', t('Create an account')];
- }
-
- $help_url = 'help';
-
- if (!Config::get('system', 'hide_help')) {
- $nav['help'] = [$help_url, t('Help'), '', t('Help and documentation')];
- }
-
- if (count($a->apps) > 0) {
- $nav['apps'] = ['apps', t('Apps'), '', t('Addon applications, utilities, games')];
- }
-
- if (local_user() || !Config::get('system', 'local_search')) {
- $nav['search'] = ['search', t('Search'), '', t('Search site content')];
-
- $nav['searchoption'] = [
- t('Full Text'),
- t('Tags'),
- t('Contacts')];
-
- if (Config::get('system', 'poco_local_search')) {
- $nav['searchoption'][] = t('Forums');
- }
- }
-
- $gdirpath = 'directory';
-
- if (strlen(Config::get('system', 'singleuser'))) {
- $gdir = Config::get('system', 'directory');
- if (strlen($gdir)) {
- $gdirpath = Profile::zrl($gdir, true);
- }
- }
-
- if (local_user() || Config::get('system', 'community_page_style') != CP_NO_COMMUNITY_PAGE) {
- $nav['community'] = ['community', t('Community'), '', t('Conversations on this and other servers')];
- }
-
- if (local_user()) {
- $nav['events'] = ['events', t('Events'), '', t('Events and Calendar')];
- }
-
- $nav['directory'] = [$gdirpath, t('Directory'), '', t('People directory')];
-
- $nav['about'] = ['friendica', t('Information'), '', t('Information about this friendica instance')];
-
- // The following nav links are only show to logged in users
- if (local_user()) {
- $nav['network'] = ['network', t('Network'), '', t('Conversations from your friends')];
- $nav['net_reset'] = ['network/0?f=&order=comment&nets=all', t('Network Reset'), '', t('Load Network page with no filters')];
-
- $nav['home'] = ['profile/' . $a->user['nickname'], t('Home'), '', t('Your posts and conversations')];
-
- if (in_array($_SESSION['page_flags'], [PAGE_NORMAL, PAGE_SOAPBOX, PAGE_FREELOVE, PAGE_PRVGROUP])) {
- // only show friend requests for normal pages. Other page types have automatic friendship.
- if (in_array($_SESSION['page_flags'], [PAGE_NORMAL, PAGE_SOAPBOX, PAGE_PRVGROUP])) {
- $nav['introductions'] = ['notifications/intros', t('Introductions'), '', t('Friend Requests')];
- }
- if (in_array($_SESSION['page_flags'], [PAGE_NORMAL, PAGE_SOAPBOX, PAGE_FREELOVE])) {
- $nav['notifications'] = ['notifications', t('Notifications'), '', t('Notifications')];
- $nav['notifications']['all'] = ['notifications/system', t('See all notifications'), '', ''];
- $nav['notifications']['mark'] = ['', t('Mark as seen'), '', t('Mark all system notifications seen')];
- }
- }
-
- $nav['messages'] = ['message', t('Messages'), '', t('Private mail')];
- $nav['messages']['inbox'] = ['message', t('Inbox'), '', t('Inbox')];
- $nav['messages']['outbox'] = ['message/sent', t('Outbox'), '', t('Outbox')];
- $nav['messages']['new'] = ['message/new', t('New Message'), '', t('New Message')];
-
- if (is_array($a->identities) && count($a->identities) > 1) {
- $nav['manage'] = ['manage', t('Manage'), '', t('Manage other pages')];
- }
-
- $nav['delegations'] = ['delegate', t('Delegations'), '', t('Delegate Page Management')];
-
- $nav['settings'] = ['settings', t('Settings'), '', t('Account settings')];
-
- if (Feature::isEnabled(local_user(), 'multi_profiles')) {
- $nav['profiles'] = ['profiles', t('Profiles'), '', t('Manage/Edit Profiles')];
- }
-
- $nav['contacts'] = ['contacts', t('Contacts'), '', t('Manage/edit friends and contacts')];
- }
-
- // Show the link to the admin configuration page if user is admin
- if (is_site_admin()) {
- $nav['admin'] = ['admin/', t('Admin'), '', t('Site setup and configuration')];
- }
-
- $nav['navigation'] = ['navigation/', t('Navigation'), '', t('Site map')];
-
- // Provide a banner/logo/whatever
- $banner = Config::get('system', 'banner');
- if (is_null($banner)) {
- $banner = '
Friendica';
- }
-
- call_hooks('nav_info', $nav);
-
- return [
- 'sitelocation' => $sitelocation,
- 'nav' => $nav,
- 'banner' => $banner,
- 'userinfo' => $userinfo,
- ];
-}
-
-/**
- * Set a menu item in navbar as selected
- *
- */
-function nav_set_selected($item){
- $a = get_app();
- $a->nav_sel = [
- 'global' => null,
- 'community' => null,
- 'network' => null,
- 'home' => null,
- 'profiles' => null,
- 'introductions' => null,
- 'notifications' => null,
- 'messages' => null,
- 'directory' => null,
- 'settings' => null,
- 'contacts' => null,
- 'manage' => null,
- 'events' => null,
- 'register' => null,
- ];
- $a->nav_sel[$item] = 'selected';
-}
diff --git a/index.php b/index.php
index bfd5cda64..dcb25cc3a 100644
--- a/index.php
+++ b/index.php
@@ -10,6 +10,7 @@
use Friendica\App;
use Friendica\BaseObject;
+use Friendica\Content\Nav;
use Friendica\Core\System;
use Friendica\Core\Config;
use Friendica\Core\Worker;
@@ -192,7 +193,7 @@ if ($install && $a->module!="view") {
check_plugins($a);
}
-nav_set_selected('nothing');
+Nav::setSelected('nothing');
//Don't populate apps_menu if apps are private
$privateapps = Config::get('config', 'private_addons');
@@ -426,7 +427,7 @@ call_hooks('page_end', $a->page['content']);
* Add the navigation (menu) template
*/
if ($a->module != 'install' && $a->module != 'maintenance') {
- nav($a);
+ Nav::build($a);
}
/*
diff --git a/mod/cal.php b/mod/cal.php
index de00feadd..8f5c1b14c 100644
--- a/mod/cal.php
+++ b/mod/cal.php
@@ -7,6 +7,7 @@
*/
use Friendica\App;
use Friendica\Content\Feature;
+use Friendica\Content\Nav;
use Friendica\Core\Config;
use Friendica\Core\System;
use Friendica\Database\DBM;
@@ -27,7 +28,7 @@ function cal_init(App $a)
return;
}
- nav_set_selected('events');
+ Nav::setSelected('events');
if ($a->argc > 1) {
$nick = $a->argv[1];
@@ -74,7 +75,7 @@ function cal_init(App $a)
function cal_content(App $a)
{
- nav_set_selected('events');
+ Nav::setSelected('events');
// get the translation strings for the callendar
$i18n = get_event_strings();
diff --git a/mod/community.php b/mod/community.php
index cfd2087d9..5fdd6de28 100644
--- a/mod/community.php
+++ b/mod/community.php
@@ -1,6 +1,9 @@
$tabs]);
- nav_set_selected('community');
+ Nav::setSelected('community');
// We need the editor here to be able to reshare an item.
if (local_user()) {
diff --git a/mod/contacts.php b/mod/contacts.php
index ae0edb3cc..682d427c6 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -4,6 +4,7 @@
*/
use Friendica\App;
use Friendica\Content\ContactSelector;
+use Friendica\Content\Nav;
use Friendica\Content\Widget;
use Friendica\Core\System;
use Friendica\Core\Worker;
@@ -369,7 +370,7 @@ function contacts_content(App $a)
{
$sort_type = 0;
$o = '';
- nav_set_selected('contacts');
+ Nav::setSelected('contacts');
if (!local_user()) {
notice(t('Permission denied.') . EOL);
diff --git a/mod/directory.php b/mod/directory.php
index 59a3195b1..6398127cf 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -3,6 +3,7 @@
* @file mod/directory.php
*/
use Friendica\App;
+use Friendica\Content\Nav;
use Friendica\Content\Widget;
use Friendica\Core\Config;
use Friendica\Database\DBM;
@@ -37,7 +38,7 @@ function directory_content(App $a) {
}
$o = '';
- nav_set_selected('directory');
+ Nav::setSelected('directory');
if(x($a->data,'search'))
$search = notags(trim($a->data['search']));
diff --git a/mod/events.php b/mod/events.php
index 791499515..1c8c92a31 100644
--- a/mod/events.php
+++ b/mod/events.php
@@ -4,6 +4,7 @@
* @brief The events module
*/
use Friendica\App;
+use Friendica\Content\Nav;
use Friendica\Core\Config;
use Friendica\Core\System;
use Friendica\Core\Worker;
@@ -212,9 +213,9 @@ function events_content(App $a) {
}
if ($a->theme_events_in_profile) {
- nav_set_selected('home');
+ Nav::setSelected('home');
} else {
- nav_set_selected('events');
+ Nav::setSelected('events');
}
// get the translation strings for the callendar
diff --git a/mod/help.php b/mod/help.php
index ab5223a39..b9c2bae3a 100644
--- a/mod/help.php
+++ b/mod/help.php
@@ -1,6 +1,9 @@
true,
@@ -575,7 +576,7 @@ function networkThreadedView(App $a, $update = 0) {
}
}
- nav_set_selected('network');
+ Nav::setSelected('network');
$content = "";
diff --git a/mod/notes.php b/mod/notes.php
index a98577e54..c02f0a759 100644
--- a/mod/notes.php
+++ b/mod/notes.php
@@ -3,6 +3,7 @@
* @file mod/notes.php
*/
use Friendica\App;
+use Friendica\Content\Nav;
use Friendica\Database\DBM;
use Friendica\Model\Profile;
@@ -16,7 +17,7 @@ function notes_init(App $a) {
$which = $a->user['nickname'];
- nav_set_selected('home');
+ Nav::setSelected('home');
//Profile::load($a, $which, $profile);
diff --git a/mod/notifications.php b/mod/notifications.php
index 4d549b46d..f44007ce3 100644
--- a/mod/notifications.php
+++ b/mod/notifications.php
@@ -5,6 +5,7 @@
*/
use Friendica\App;
use Friendica\Content\ContactSelector;
+use Friendica\Content\Nav;
use Friendica\Core\NotificationsManager;
use Friendica\Core\System;
use Friendica\Database\DBM;
@@ -77,7 +78,7 @@ function notifications_content(App $a) {
$page = (x($_REQUEST,'page') ? $_REQUEST['page'] : 1);
$show = (x($_REQUEST,'show') ? $_REQUEST['show'] : 0);
- nav_set_selected('notifications');
+ Nav::setSelected('notifications');
$json = (($a->argc > 1 && $a->argv[$a->argc - 1] === 'json') ? true : false);
@@ -93,8 +94,8 @@ function notifications_content(App $a) {
$startrec = ($page * $perpage) - $perpage;
// Get introductions
- if( (($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) {
- nav_set_selected('introductions');
+ if ((($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) {
+ Nav::setSelected('introductions');
$notif_header = t('Notifications');
$all = (($a->argc > 2) && ($a->argv[2] == 'all'));
diff --git a/mod/photos.php b/mod/photos.php
index 5714b0e86..f399c3ae8 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -4,6 +4,7 @@
*/
use Friendica\App;
use Friendica\Content\Feature;
+use Friendica\Content\Nav;
use Friendica\Core\System;
use Friendica\Core\Config;
use Friendica\Core\Worker;
@@ -33,7 +34,7 @@ function photos_init(App $a) {
return;
}
- nav_set_selected('home');
+ Nav::setSelected('home');
if ($a->argc > 1) {
$nick = $a->argv[1];
diff --git a/mod/profile.php b/mod/profile.php
index 198260512..4b1d4d2a0 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -4,6 +4,7 @@
*/
use Friendica\App;
use Friendica\Content\Widget;
+use Friendica\Content\Nav;
use Friendica\Core\Config;
use Friendica\Core\PConfig;
use Friendica\Core\System;
@@ -125,7 +126,7 @@ function profile_content(App $a, $update = 0)
// Ensure we've got a profile owner if updating.
$a->profile['profile_uid'] = $update;
} elseif ($a->profile['profile_uid'] == local_user()) {
- nav_set_selected('home');
+ Nav::setSelected('home');
}
$contact = null;
diff --git a/mod/profiles.php b/mod/profiles.php
index 93571db9c..f8d77e27d 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -5,6 +5,7 @@
use Friendica\App;
use Friendica\Content\ContactSelector;
use Friendica\Content\Feature;
+use Friendica\Content\Nav;
use Friendica\Core\Config;
use Friendica\Core\PConfig;
use Friendica\Core\System;
@@ -16,7 +17,7 @@ use Friendica\Network\Probe;
function profiles_init(App $a) {
- nav_set_selected('profiles');
+ Nav::setSelected('profiles');
if (! local_user()) {
return;
diff --git a/mod/search.php b/mod/search.php
index 08b21d1e4..60995e98a 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -4,6 +4,7 @@
*/
use Friendica\App;
use Friendica\Content\Feature;
+use Friendica\Content\Nav;
use Friendica\Core\Cache;
use Friendica\Core\Config;
use Friendica\Database\DBM;
@@ -132,7 +133,7 @@ function search_content(App $a) {
Cache::set("remote_search:".$remote, json_encode(["time" => time(), "accesses" => 1]), CACHE_HOUR);
}
- nav_set_selected('search');
+ Nav::setSelected('search');
if (x($a->data,'search'))
$search = notags(trim($a->data['search']));
diff --git a/mod/settings.php b/mod/settings.php
index 06ac0794b..572857a48 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -4,6 +4,7 @@
*/
use Friendica\App;
use Friendica\Content\Feature;
+use Friendica\Content\Nav;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Core\Config;
@@ -654,7 +655,7 @@ function settings_post(App $a)
function settings_content(App $a)
{
$o = '';
- nav_set_selected('settings');
+ Nav::setSelected('settings');
if (!local_user()) {
//notice(t('Permission denied.') . EOL);
diff --git a/mod/videos.php b/mod/videos.php
index 6dfbb74ed..239d86168 100644
--- a/mod/videos.php
+++ b/mod/videos.php
@@ -3,6 +3,7 @@
* @file mod/videos.php
*/
use Friendica\App;
+use Friendica\Content\Nav;
use Friendica\Core\Config;
use Friendica\Core\System;
use Friendica\Core\Worker;
@@ -26,7 +27,7 @@ function videos_init(App $a) {
return;
}
- nav_set_selected('home');
+ Nav::setSelected('home');
$o = '';
diff --git a/mod/viewcontacts.php b/mod/viewcontacts.php
index a918c1ae5..22ab555b3 100644
--- a/mod/viewcontacts.php
+++ b/mod/viewcontacts.php
@@ -4,6 +4,7 @@
*/
use Friendica\App;
use Friendica\Content\ContactSelector;
+use Friendica\Content\Nav;
use Friendica\Core\Config;
use Friendica\Database\DBM;
use Friendica\Model\Contact;
@@ -15,7 +16,7 @@ function viewcontacts_init(App $a) {
return;
}
- nav_set_selected('home');
+ Nav::setSelected('home');
if($a->argc > 1) {
$nick = $a->argv[1];
diff --git a/src/Content/Nav.php b/src/Content/Nav.php
new file mode 100644
index 000000000..4bbc7900d
--- /dev/null
+++ b/src/Content/Nav.php
@@ -0,0 +1,261 @@
+page, 'nav'))) {
+ $a->page['nav'] = '';
+ }
+
+ $a->page['htmlhead'] .= replace_macros(get_markup_template('nav_head.tpl'), []);
+
+ /*
+ * Placeholder div for popup panel
+ */
+
+ $a->page['nav'] .= '' ;
+
+ $nav_info = self::getInfo($a);
+
+ /*
+ * Build the page
+ */
+
+ $tpl = get_markup_template('nav.tpl');
+
+ $a->page['nav'] .= replace_macros($tpl, [
+ '$baseurl' => System::baseUrl(),
+ '$sitelocation' => $nav_info['sitelocation'],
+ '$nav' => $nav_info['nav'],
+ '$banner' => $nav_info['banner'],
+ '$emptynotifications' => t('Nothing new here'),
+ '$userinfo' => $nav_info['userinfo'],
+ '$sel' => $a->nav_sel,
+ '$apps' => $a->apps,
+ '$clear_notifs' => t('Clear notifications'),
+ '$search_hint' => t('@name, !forum, #tags, content')
+ ]);
+
+ call_hooks('page_header', $a->page['nav']);
+ }
+
+ /**
+ * Prepares a list of navigation links
+ *
+ * @brief Prepares a list of navigation links
+ * @param App $a
+ * @return array Navigation links
+ * string 'sitelocation' => The webbie (username@site.com)
+ * array 'nav' => Array of links used in the nav menu
+ * string 'banner' => Formatted html link with banner image
+ * array 'userinfo' => Array of user information (name, icon)
+ */
+ private static function getInfo(App $a)
+ {
+ $ssl_state = ((local_user()) ? true : false);
+
+ /*
+ * Our network is distributed, and as you visit friends some of the
+ * sites look exactly the same - it isn't always easy to know where you are.
+ * Display the current site location as a navigation aid.
+ */
+
+ $myident = ((is_array($a->user) && isset($a->user['nickname'])) ? $a->user['nickname'] . '@' : '');
+
+ $sitelocation = $myident . substr(System::baseUrl($ssl_state), strpos(System::baseUrl($ssl_state), '//') + 2);
+
+ // nav links: array of array('href', 'text', 'extra css classes', 'title')
+ $nav = [];
+
+ // Display login or logout
+ $nav['usermenu'] = [];
+ $userinfo = null;
+
+ if (local_user()) {
+ $nav['logout'] = ['logout', t('Logout'), '', t('End this session')];
+
+ // user menu
+ $nav['usermenu'][] = ['profile/' . $a->user['nickname'], t('Status'), '', t('Your posts and conversations')];
+ $nav['usermenu'][] = ['profile/' . $a->user['nickname'] . '?tab=profile', t('Profile'), '', t('Your profile page')];
+ $nav['usermenu'][] = ['photos/' . $a->user['nickname'], t('Photos'), '', t('Your photos')];
+ $nav['usermenu'][] = ['videos/' . $a->user['nickname'], t('Videos'), '', t('Your videos')];
+ $nav['usermenu'][] = ['events/', t('Events'), '', t('Your events')];
+ $nav['usermenu'][] = ['notes/', t('Personal notes'), '', t('Your personal notes')];
+
+ // user info
+ $contact = dba::selectFirst('contact', ['micro'], ['uid' => $a->user['uid'], 'self' => true]);
+ $userinfo = [
+ 'icon' => (DBM::is_result($contact) ? $a->remove_baseurl($contact['micro']) : 'images/person-48.jpg'),
+ 'name' => $a->user['username'],
+ ];
+ } else {
+ $nav['login'] = ['login', t('Login'), ($a->module == 'login' ? 'selected' : ''), t('Sign in')];
+ }
+
+ // "Home" should also take you home from an authenticated remote profile connection
+ $homelink = Profile::getMyURL();
+ if (! $homelink) {
+ $homelink = ((x($_SESSION, 'visitor_home')) ? $_SESSION['visitor_home'] : '');
+ }
+
+ if (($a->module != 'home') && (! (local_user()))) {
+ $nav['home'] = [$homelink, t('Home'), '', t('Home Page')];
+ }
+
+ if (($a->config['register_policy'] == REGISTER_OPEN) && (! local_user()) && (! remote_user())) {
+ $nav['register'] = ['register', t('Register'), '', t('Create an account')];
+ }
+
+ $help_url = 'help';
+
+ if (!Config::get('system', 'hide_help')) {
+ $nav['help'] = [$help_url, t('Help'), '', t('Help and documentation')];
+ }
+
+ if (count($a->apps) > 0) {
+ $nav['apps'] = ['apps', t('Apps'), '', t('Addon applications, utilities, games')];
+ }
+
+ if (local_user() || !Config::get('system', 'local_search')) {
+ $nav['search'] = ['search', t('Search'), '', t('Search site content')];
+
+ $nav['searchoption'] = [
+ t('Full Text'),
+ t('Tags'),
+ t('Contacts')
+ ];
+
+ if (Config::get('system', 'poco_local_search')) {
+ $nav['searchoption'][] = t('Forums');
+ }
+ }
+
+ $gdirpath = 'directory';
+
+ if (strlen(Config::get('system', 'singleuser'))) {
+ $gdir = Config::get('system', 'directory');
+ if (strlen($gdir)) {
+ $gdirpath = Profile::zrl($gdir, true);
+ }
+ }
+
+ if (local_user() || Config::get('system', 'community_page_style') != CP_NO_COMMUNITY_PAGE) {
+ $nav['community'] = ['community', t('Community'), '', t('Conversations on this and other servers')];
+ }
+
+ if (local_user()) {
+ $nav['events'] = ['events', t('Events'), '', t('Events and Calendar')];
+ }
+
+ $nav['directory'] = [$gdirpath, t('Directory'), '', t('People directory')];
+
+ $nav['about'] = ['friendica', t('Information'), '', t('Information about this friendica instance')];
+
+ // The following nav links are only show to logged in users
+ if (local_user()) {
+ $nav['network'] = ['network', t('Network'), '', t('Conversations from your friends')];
+ $nav['net_reset'] = ['network/0?f=&order=comment&nets=all', t('Network Reset'), '', t('Load Network page with no filters')];
+
+ $nav['home'] = ['profile/' . $a->user['nickname'], t('Home'), '', t('Your posts and conversations')];
+
+ if (in_array($_SESSION['page_flags'], [PAGE_NORMAL, PAGE_SOAPBOX, PAGE_FREELOVE, PAGE_PRVGROUP])) {
+ // only show friend requests for normal pages. Other page types have automatic friendship.
+ if (in_array($_SESSION['page_flags'], [PAGE_NORMAL, PAGE_SOAPBOX, PAGE_PRVGROUP])) {
+ $nav['introductions'] = ['notifications/intros', t('Introductions'), '', t('Friend Requests')];
+ }
+ if (in_array($_SESSION['page_flags'], [PAGE_NORMAL, PAGE_SOAPBOX, PAGE_FREELOVE])) {
+ $nav['notifications'] = ['notifications', t('Notifications'), '', t('Notifications')];
+ $nav['notifications']['all'] = ['notifications/system', t('See all notifications'), '', ''];
+ $nav['notifications']['mark'] = ['', t('Mark as seen'), '', t('Mark all system notifications seen')];
+ }
+ }
+
+ $nav['messages'] = ['message', t('Messages'), '', t('Private mail')];
+ $nav['messages']['inbox'] = ['message', t('Inbox'), '', t('Inbox')];
+ $nav['messages']['outbox'] = ['message/sent', t('Outbox'), '', t('Outbox')];
+ $nav['messages']['new'] = ['message/new', t('New Message'), '', t('New Message')];
+
+ if (is_array($a->identities) && count($a->identities) > 1) {
+ $nav['manage'] = ['manage', t('Manage'), '', t('Manage other pages')];
+ }
+
+ $nav['delegations'] = ['delegate', t('Delegations'), '', t('Delegate Page Management')];
+
+ $nav['settings'] = ['settings', t('Settings'), '', t('Account settings')];
+
+ if (Feature::isEnabled(local_user(), 'multi_profiles')) {
+ $nav['profiles'] = ['profiles', t('Profiles'), '', t('Manage/Edit Profiles')];
+ }
+
+ $nav['contacts'] = ['contacts', t('Contacts'), '', t('Manage/edit friends and contacts')];
+ }
+
+ // Show the link to the admin configuration page if user is admin
+ if (is_site_admin()) {
+ $nav['admin'] = ['admin/', t('Admin'), '', t('Site setup and configuration')];
+ }
+
+ $nav['navigation'] = ['navigation/', t('Navigation'), '', t('Site map')];
+
+ // Provide a banner/logo/whatever
+ $banner = Config::get('system', 'banner');
+ if (is_null($banner)) {
+ $banner = '
Friendica';
+ }
+
+ call_hooks('nav_info', $nav);
+
+ return [
+ 'sitelocation' => $sitelocation,
+ 'nav' => $nav,
+ 'banner' => $banner,
+ 'userinfo' => $userinfo,
+ ];
+ }
+
+ /**
+ * Set a menu item in navbar as selected
+ */
+ public static function setSelected($item)
+ {
+ $a = get_app();
+ $a->nav_sel = [
+ 'global' => null,
+ 'community' => null,
+ 'network' => null,
+ 'home' => null,
+ 'profiles' => null,
+ 'introductions' => null,
+ 'notifications' => null,
+ 'messages' => null,
+ 'directory' => null,
+ 'settings' => null,
+ 'contacts' => null,
+ 'manage' => null,
+ 'events' => null,
+ 'register' => null
+ ];
+ $a->nav_sel[$item] = 'selected';
+ }
+}