diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php
index c4f4038dc..f13fbe362 100644
--- a/Zotlabs/Lib/Apps.php
+++ b/Zotlabs/Lib/Apps.php
@@ -383,6 +383,13 @@ class Apps {
$install_action = (($installed) ? t('Update') : t('Install'));
$icon = ((strpos($papp['photo'],'icon:') === 0) ? substr($papp['photo'],5) : '');
+ if($mode === 'navbar') {
+ return replace_macros(get_markup_template('app_nav.tpl'),array(
+ '$app' => $papp,
+ '$icon' => $icon,
+ ));
+ }
+
return replace_macros(get_markup_template('app.tpl'),array(
'$app' => $papp,
'$icon' => $icon,
diff --git a/Zotlabs/Lib/ThreadStream.php b/Zotlabs/Lib/ThreadStream.php
index d7a898704..436723f8c 100644
--- a/Zotlabs/Lib/ThreadStream.php
+++ b/Zotlabs/Lib/ThreadStream.php
@@ -68,7 +68,7 @@ class ThreadStream {
// pull some trickery which allows us to re-invoke this function afterward
// it's an ugly hack so @FIXME
$this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
- $this->uploadable = false;
+ $this->uploadable = perm_is_allowed($this->profile_owner,$ob_hash,'write_storage');
break;
case 'page':
$this->profile_owner = \App::$profile['uid'];
diff --git a/Zotlabs/Module/Bookmarks.php b/Zotlabs/Module/Bookmarks.php
index e62f5ce96..e147ffe6c 100644
--- a/Zotlabs/Module/Bookmarks.php
+++ b/Zotlabs/Module/Bookmarks.php
@@ -8,7 +8,7 @@ class Bookmarks extends \Zotlabs\Web\Controller {
if(! local_channel())
return;
- nav_set_selected(t('View Bookmarks'));
+ nav_set_selected('View Bookmarks');
$item_id = intval($_REQUEST['item']);
$burl = trim($_REQUEST['burl']);
diff --git a/Zotlabs/Module/Cdav.php b/Zotlabs/Module/Cdav.php
index abaec26a6..77052f97c 100644
--- a/Zotlabs/Module/Cdav.php
+++ b/Zotlabs/Module/Cdav.php
@@ -824,7 +824,7 @@ class Cdav extends \Zotlabs\Web\Controller {
}
if(argv(1) === 'calendar') {
- nav_set_selected(t('CalDAV'));
+ nav_set_selected('CalDAV');
$caldavBackend = new \Sabre\CalDAV\Backend\PDO($pdo);
$calendars = $caldavBackend->getCalendarsForUser($principalUri);
}
@@ -1025,7 +1025,7 @@ class Cdav extends \Zotlabs\Web\Controller {
if(argv(1) === 'addressbook') {
- nav_set_selected(t('CardDAV'));
+ nav_set_selected('CardDAV');
$carddavBackend = new \Sabre\CardDAV\Backend\PDO($pdo);
$addressbooks = $carddavBackend->getAddressBooksForUser($principalUri);
}
diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php
index 8550c69cd..508d2b57a 100644
--- a/Zotlabs/Module/Channel.php
+++ b/Zotlabs/Module/Channel.php
@@ -94,7 +94,7 @@ class Channel extends \Zotlabs\Web\Controller {
}
else {
if(\App::$profile['profile_uid'] == local_channel()) {
- nav_set_selected(t('Channel Home'));
+ nav_set_selected('Channel Home');
}
}
diff --git a/Zotlabs/Module/Chat.php b/Zotlabs/Module/Chat.php
index 138ca1cb5..378c9f4dd 100644
--- a/Zotlabs/Module/Chat.php
+++ b/Zotlabs/Module/Chat.php
@@ -91,7 +91,7 @@ class Chat extends \Zotlabs\Web\Controller {
if(local_channel()) {
$channel = \App::get_channel();
- nav_set_selected(t('My Chatrooms'));
+ nav_set_selected('My Chatrooms');
}
$ob = \App::get_observer();
diff --git a/Zotlabs/Module/Connections.php b/Zotlabs/Module/Connections.php
index 6ad1e9528..f42ff9b84 100644
--- a/Zotlabs/Module/Connections.php
+++ b/Zotlabs/Module/Connections.php
@@ -30,7 +30,7 @@ class Connections extends \Zotlabs\Web\Controller {
return login();
}
- nav_set_selected(t('Connections'));
+ nav_set_selected('Connections');
$blocked = false;
$hidden = false;
diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php
index 6268e99c6..caf0190ae 100644
--- a/Zotlabs/Module/Directory.php
+++ b/Zotlabs/Module/Directory.php
@@ -77,7 +77,7 @@ class Directory extends \Zotlabs\Web\Controller {
$pubforums = get_directory_setting($observer, 'pubforums');
$o = '';
- nav_set_selected(t('Directory'));
+ nav_set_selected('Directory');
if(x($_POST,'search'))
$search = notags(trim($_POST['search']));
diff --git a/Zotlabs/Module/Events.php b/Zotlabs/Module/Events.php
index 0541f5e9b..33c8b8249 100644
--- a/Zotlabs/Module/Events.php
+++ b/Zotlabs/Module/Events.php
@@ -272,7 +272,7 @@ class Events extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Events'));
+ nav_set_selected('Events');
if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) {
$r = q("update event set dismissed = 1 where id = %d and uid = %d",
diff --git a/Zotlabs/Module/Help.php b/Zotlabs/Module/Help.php
index f3cc3aa5f..f1b1acaef 100644
--- a/Zotlabs/Module/Help.php
+++ b/Zotlabs/Module/Help.php
@@ -15,7 +15,7 @@ require_once('include/help.php');
class Help extends \Zotlabs\Web\Controller {
function get() {
- nav_set_selected(t('Help'));
+ nav_set_selected('Help');
if($_REQUEST['search']) {
$o .= '
';
diff --git a/Zotlabs/Module/Invite.php b/Zotlabs/Module/Invite.php
index bbd98150d..0bcd1c1fa 100644
--- a/Zotlabs/Module/Invite.php
+++ b/Zotlabs/Module/Invite.php
@@ -95,7 +95,7 @@ class Invite extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Invite'));
+ nav_set_selected('Invite');
$tpl = get_markup_template('invite.tpl');
$invonly = false;
diff --git a/Zotlabs/Module/Lang.php b/Zotlabs/Module/Lang.php
index 84776c3ea..0e5d85d05 100644
--- a/Zotlabs/Module/Lang.php
+++ b/Zotlabs/Module/Lang.php
@@ -5,7 +5,7 @@ namespace Zotlabs\Module;
class Lang extends \Zotlabs\Web\Controller {
function get() {
- nav_set_selected(t('Language'));
+ nav_set_selected('Language');
return lang_selector();
}
diff --git a/Zotlabs/Module/Mail.php b/Zotlabs/Module/Mail.php
index e5509961a..12f3b8152 100644
--- a/Zotlabs/Module/Mail.php
+++ b/Zotlabs/Module/Mail.php
@@ -140,7 +140,7 @@ class Mail extends \Zotlabs\Web\Controller {
function get() {
$o = '';
- nav_set_selected(t('Mail'));
+ nav_set_selected('Mail');
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
diff --git a/Zotlabs/Module/Mood.php b/Zotlabs/Module/Mood.php
index 85c8a3042..ad29ec7e8 100644
--- a/Zotlabs/Module/Mood.php
+++ b/Zotlabs/Module/Mood.php
@@ -117,7 +117,7 @@ class Mood extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Mood'));
+ nav_set_selected('Mood');
$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0');
diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php
index 2b5584c35..ee736ff42 100644
--- a/Zotlabs/Module/Network.php
+++ b/Zotlabs/Module/Network.php
@@ -154,7 +154,7 @@ class Network extends \Zotlabs\Web\Controller {
));
}
- nav_set_selected(t('Activity'));
+ nav_set_selected('Grid');
$channel_acl = array(
'allow_cid' => $channel['channel_allow_cid'],
diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php
index 2ca9bfe50..caef45d98 100644
--- a/Zotlabs/Module/Photos.php
+++ b/Zotlabs/Module/Photos.php
@@ -555,7 +555,7 @@ class Photos extends \Zotlabs\Web\Controller {
$sql_extra = permissions_sql($owner_uid,get_observer_hash(),'photo');
$sql_attach = permissions_sql($owner_uid,get_observer_hash(),'attach');
- nav_set_selected(t('Photos'));
+ nav_set_selected('Photos');
$o = "";
diff --git a/Zotlabs/Module/Poke.php b/Zotlabs/Module/Poke.php
index 0bd1187c7..d13ec5ced 100644
--- a/Zotlabs/Module/Poke.php
+++ b/Zotlabs/Module/Poke.php
@@ -150,7 +150,7 @@ class Poke extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Poke'));
+ nav_set_selected('Poke');
$name = '';
$id = '';
diff --git a/Zotlabs/Module/Probe.php b/Zotlabs/Module/Probe.php
index 859bed315..2e65f107c 100644
--- a/Zotlabs/Module/Probe.php
+++ b/Zotlabs/Module/Probe.php
@@ -8,7 +8,7 @@ class Probe extends \Zotlabs\Web\Controller {
function get() {
- nav_set_selected(t('Remote Diagnostics'));
+ nav_set_selected('Remote Diagnostics');
$o .= '
Probe Diagnostic
';
diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php
index e716d1330..5d2f0d7e8 100644
--- a/Zotlabs/Module/Rpost.php
+++ b/Zotlabs/Module/Rpost.php
@@ -61,7 +61,7 @@ class Rpost extends \Zotlabs\Web\Controller {
return login();
}
- nav_set_selected(t('Post'));
+ nav_set_selected('Post');
// If we have saved rpost session variables, but nothing in the current $_REQUEST, recover the saved variables
diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php
index e1d35b879..37e9a336f 100644
--- a/Zotlabs/Module/Search.php
+++ b/Zotlabs/Module/Search.php
@@ -22,7 +22,7 @@ class Search extends \Zotlabs\Web\Controller {
if($load)
$_SESSION['loadtime'] = datetime_convert();
- nav_set_selected(t('Search'));
+ nav_set_selected('Search');
require_once("include/bbcode.php");
require_once('include/security.php');
diff --git a/Zotlabs/Module/Suggest.php b/Zotlabs/Module/Suggest.php
index c3f4a6d5a..f79e4e245 100644
--- a/Zotlabs/Module/Suggest.php
+++ b/Zotlabs/Module/Suggest.php
@@ -29,7 +29,7 @@ class Suggest extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Suggest Channels'));
+ nav_set_selected('Suggest Channels');
$_SESSION['return_url'] = z_root() . '/' . \App::$cmd;
diff --git a/Zotlabs/Module/Webpages.php b/Zotlabs/Module/Webpages.php
index e449a790f..97ec55ba3 100644
--- a/Zotlabs/Module/Webpages.php
+++ b/Zotlabs/Module/Webpages.php
@@ -35,7 +35,7 @@ class Webpages extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Webpages'));
+ nav_set_selected('Webpages');
$which = argv(1);
diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php
index fe2bfbdfb..d6a01af11 100644
--- a/Zotlabs/Module/Wiki.php
+++ b/Zotlabs/Module/Wiki.php
@@ -76,7 +76,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$wiki_owner = true;
- nav_set_selected(t('Wiki'));
+ nav_set_selected('Wiki');
// Obtain the default permission settings of the channel
$owner_acl = array(
diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php
index d126cb3da..ca664cba6 100644
--- a/Zotlabs/Render/Comanche.php
+++ b/Zotlabs/Render/Comanche.php
@@ -121,6 +121,11 @@ class Comanche {
if($cnt)
\App::$layout['theme'] = trim($matches[1]);
+ $cnt = preg_match("/\[navbar\](.*?)\[\/navbar\]/ism", $s, $matches);
+ if($cnt)
+ \App::$layout['navbar'] = trim($matches[1]);
+
+
$cnt = preg_match_all("/\[webpage\](.*?)\[\/webpage\]/ism", $s, $matches, PREG_SET_ORDER);
if($cnt) {
// only the last webpage definition is used if there is more than one
diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php
index 9b7e9ad8e..6f6f4a292 100644
--- a/Zotlabs/Storage/Browser.php
+++ b/Zotlabs/Storage/Browser.php
@@ -244,7 +244,7 @@ class Browser extends DAV\Browser\Plugin {
$a = false;
- nav_set_selected(t('Files'));
+ nav_set_selected('Files');
\App::$page['content'] = $html;
load_pdl();
diff --git a/boot.php b/boot.php
index f955ba511..df57009e5 100755
--- a/boot.php
+++ b/boot.php
@@ -2090,17 +2090,21 @@ function construct_page() {
$installing = false;
+ $navbar = get_config('system','navbar','nav');
+ if(App::$profile_uid) {
+ $navbar = get_pconfig(App::$profile_uid,'system','navbar',$navbar);
+ }
+
+ if($comanche && App::$layout['navbar']) {
+ $navbar = App::$layout['navbar'];
+ }
+
if (App::$module == 'setup') {
$installing = true;
} else {
- nav($a);
+ nav($navbar);
}
- if ($comanche) {
- if (App::$layout['nav']) {
- App::$page['nav'] = get_custom_nav(App::$layout['nav']);
- }
- }
$current_theme = Zotlabs\Render\Theme::current();
diff --git a/doc/member/member_guide.bb b/doc/member/member_guide.bb
index 0a2d11a88..0794f24d3 100644
--- a/doc/member/member_guide.bb
+++ b/doc/member/member_guide.bb
@@ -634,6 +634,15 @@ This will select the theme named "suckerberg" and select the "pas
The condensed notation isn't part of Comanche itself but is recognised by $Projectname platform as a theme specifier.
+[h4]Navbar[/h4]
+
+[code]
+ [navbar]tucson[/navbar]
+[/code]
+
+Use the 'tucson' navbar template and CSS rules. By default the 'nav' navbar template will be used.
+
+
[h4]Regions[/h4]
Each region has a name, as noted above. You will specify the region of interest using a 'region' tag, which includes the name. Any content you wish placed in this region should be placed between the opening region tag and the closing tag.
diff --git a/include/nav.php b/include/nav.php
index 6b56c9aee..3da67ffd1 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -6,7 +6,7 @@ require_once('include/security.php');
require_once('include/menu.php');
-function nav() {
+function nav($template = 'nav') {
/**
*
@@ -103,12 +103,12 @@ EOT;
$nav['logout'] = ['logout',t('Logout'), "", t('End this session'),'logout_nav_btn'];
// user menu
- $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['active'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn'];
+ $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['name'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn'];
if(feature_enabled(local_channel(),'multi_profiles'))
- $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['active'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn'];
+ $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['name'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn'];
else
- $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['active'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn'];
+ $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['name'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn'];
}
else {
@@ -233,6 +233,15 @@ EOT;
// turned off until somebody discovers this and figures out a good location for it.
$powered_by = '';
+ $active_app = q("SELECT app_url FROM app WHERE app_channel = %d AND app_name = '%s' LIMIT 1",
+ intval($channel['channel_id']),
+ dbesc(\App::$nav_sel['raw_name'])
+ );
+
+ if($active_app) {
+ $url = $active_app[0]['app_url'];
+ }
+
//app bin
if($is_owner) {
if(get_pconfig(local_channel(), 'system','initial_import_system_apps') === false) {
@@ -258,16 +267,33 @@ EOT;
$syslist = Zlib\Apps::app_order(local_channel(),$syslist);
foreach($syslist as $app) {
- if(\App::$nav_sel['active'] == $app['name'])
+ if(\App::$nav_sel['name'] == $app['name'])
$app['active'] = true;
- if($is_owner)
+ if($is_owner) {
$nav_apps[] = Zlib\Apps::app_render($app,'nav');
- elseif(! $is_owner && strpos($app['requires'], 'local_channel') === false)
+ if(strpos($app['categories'],'navbar_' . $template)) {
+ $navbar_apps[] = Zlib\Apps::app_render($app,'navbar');
+ }
+ }
+ elseif(! $is_owner && strpos($app['requires'], 'local_channel') === false) {
$nav_apps[] = Zlib\Apps::app_render($app,'nav');
+ if(strpos($app['categories'],'navbar_' . $template)) {
+ $navbar_apps[] = Zlib\Apps::app_render($app,'navbar');
+ }
+ }
}
- $tpl = get_markup_template('nav.tpl');
+ $c = theme_include('navbar_' . $template . '.css');
+ $tpl = get_markup_template('navbar_' . $template . '.tpl');
+
+ if($c && $tpl) {
+ head_add_css('navbar_' . $template . '.css');
+ }
+
+ if(! $tpl) {
+ $tpl = get_markup_template('nav.tpl');
+ }
App::$page['nav'] .= replace_macros($tpl, array(
'$baseurl' => z_root(),
@@ -280,18 +306,19 @@ EOT;
'$userinfo' => $x['usermenu'],
'$localuser' => local_channel(),
'$is_owner' => $is_owner,
- '$sel' => App::$nav_sel,
+ '$sel' => App::$nav_sel,
'$powered_by' => $powered_by,
'$help' => t('@name, #tag, ?doc, content'),
'$pleasewait' => t('Please wait...'),
'$nav_apps' => $nav_apps,
+ '$navbar_apps' => $navbar_apps,
'$channel_menu' => get_config('system','channel_menu'),
'$channel_thumb' => ((App::$profile) ? App::$profile['thumb'] : ''),
'$channel_apps' => $channel_apps,
'$addapps' => t('Add Apps'),
'$orderapps' => t('Arrange Apps'),
'$sysapps_toggle' => t('Toggle System Apps'),
- '$loc' => $myident
+ '$url' => $url
));
if(x($_SESSION, 'reload_avatar') && $observer) {
@@ -314,7 +341,10 @@ EOT;
*
*/
function nav_set_selected($item){
- App::$nav_sel['active'] = $item;
+ App::$nav_sel['raw_name'] = $item;
+ $item = ['name' => $item];
+ Zlib\Apps::translate_system_apps($item);
+ App::$nav_sel['name'] = $item['name'];
}
@@ -490,7 +520,6 @@ function channel_apps($is_owner = false, $nickname = null) {
'$tabs' => $arr['tabs'],
'$name' => App::$profile['channel_name'],
'$thumb' => App::$profile['thumb'],
- '$channel_menu' => get_config('system','channel_menu')
]
);
}
diff --git a/view/js/main.js b/view/js/main.js
index 186cefbd0..6557b1d8e 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -445,10 +445,10 @@ function NavUpdate() {
updateCountsOnly = false;
if(data.network || data.home || data.intros || data.register || data.mail || data.all_events || data.notify || data.files || data.pubs) {
- $('#notifications-btn').css('opacity', 1);
+ $('#notifications-btn, #notifications-btn-1').css('opacity', 1);
}
else {
- $('#notifications-btn').css('opacity', 0.5);
+ $('#notifications-btn, #notifications-btn-1').css('opacity', 0.5);
$('#navbar-collapse-1').removeClass('show');
}
diff --git a/view/php/default.php b/view/php/default.php
index 444e24197..b180a6eb8 100644
--- a/view/php/default.php
+++ b/view/php/default.php
@@ -15,7 +15,7 @@
-
+