]> git.mxchange.org Git - friendica.git/commitdiff
make nav menu available for remote user and friendica visitors
authorrabuzarus <>
Tue, 19 Apr 2016 00:06:02 +0000 (02:06 +0200)
committerrabuzarus <>
Tue, 19 Apr 2016 00:06:02 +0000 (02:06 +0200)
css/style.css
templates/nav.tpl
theme.php

index 42e6b57a5a88e2c767d86e497c8a41748ad2652e..b1cbaaff10d345c6e85f9df0c3319d7b0e444e57 100644 (file)
@@ -186,7 +186,8 @@ header #banner {
     font-weight: bold;
     whitespace: nowrap;
 }
-header #banner #logo-img {
+header #banner #logo-img, 
+.navbar-brand #logo-img {
     mask: url('img/friendica-logo.svg#logo_mask');
     mask-image: url('img/friendica-25.png');
     -webkit-mask-image: url('img/friendica-25.png');
@@ -196,6 +197,12 @@ header #banner #logo-img {
     margin-left: auto;
     margin-right: auto;
 }
+#navbrand-container {
+    display: flex;
+}
+#navbrand-container #navbar-brand-text {
+    padding-left: 5px;
+}
 
 /* NavBar */
 .topbar {
index b66415d0a72a98c3db6a761af48a55e71431ebc0..9beebf1a5370d301614b89e7e8b43846503caaba 100644 (file)
@@ -1,10 +1,16 @@
-{{if $userinfo}}
+{{* we have modified the navmenu (look at function frio_remote_nav() ) to have remote links. $nav.userinfo is a new variable and replaces the original $userinfo variable *}}
+{{if $nav.userinfo}}
 <header>
        {{* {{$langselector}} *}}
 
        <div id="site-location">{{$sitelocation}}</div>
        <div id="banner" class="hidden-sm hidden-xs">
+               {{* show on remote/visitor connections an other logo which symols that fact*}}
+               {{if $nav.remote}}
+               <a href="{{$baseurl}}"><div id="remote-logo-img"></div></a>
+               {{else}}
                <a href="{{$baseurl}}"><div id="logo-img"></div></a>
+               {{/if}}
        </div>
 </header>
 <nav id="topbar-first" class="topbar">
                                        {{if $nav.search}}
                                        <li id="search-box" class="hidden-xs">
                                                        <form class="navbar-form" role="search" method="get" action="{{$nav.search.0}}">
-                                                               <!-- <img class="hidden-xs" src="{{$userinfo.icon}}" alt="{{$userinfo.name}}" style="max-width:33px; max-height:33px; min-width:33px; min-height:33px; width:33px; height:33px;"> -->
+                                                               <!-- <img class="hidden-xs" src="{{$nav.userinfo.icon}}" alt="{{$nav.userinfo.name}}" style="max-width:33px; max-height:33px; min-width:33px; min-height:33px; width:33px; height:33px;"> -->
                                                                <div class="form-group form-group-search">
                                                                        <input id="nav-search-input-field" class="form-control form-search" type="text" name="search" placeholder="Search">
                                                                        <button class="btn btn-default btn-sm form-button-search" type="submit">Search</button>
                                        {{/if}}
 
                                        {{* The user dropdown menu *}}
-                                       {{if $userinfo}}
+                                       {{if $nav.userinfo}}
                                        <li id="nav-user-linkmenu" class="dropdown account nav-menu hidden-xs">
                                                <a href="#" id="main-menu" class="dropdown-toggle nav-avatar " data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
                                                        <div class="user-title pull-left hidden-xs hidden-sm hidden-md">
-                                                               <strong>{{$userinfo.name}}</strong>
+                                                               <strong>{{$nav.userinfo.name}}</strong>
                                                                <span id="intro-update" class="nav-intro-badge badge nav-notify"></span>
                                                        </div>
 
-                                                       <img  id="avatar" src="{{$userinfo.icon}}" alt="{{$userinfo.name}}">
+                                                       <img  id="avatar" src="{{$nav.userinfo.icon}}" alt="{{$nav.userinfo.name}}">
                                                        <span class="caret"></span>
 
                                                </a>
                                                        <li class="divider"></li>
                                                        {{if $nav.logout}}
                                                        <li role="menuitem"><a id="nav-logout-link" class="nav-link {{$nav.logout.2}}" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}" ><i class="fa fa fa-sign-out fa-fw"></i> {{$nav.logout.1}}</a></li>
-                                                       {{/if}}
-                                                       {{if $nav.login}}
+                                                       {{else}}
                                                        <li role="menuitem"><a id="nav-login-link" class="nav-login-link {{$nav.login.2}}" href="{{$nav.login.0}}" title="{{$nav.login.3}}" ><i class="fa fa-power-off fa-fw"></i> {{$nav.login.1}}</a></li>
                                                        {{/if}}
                                                </ul>
                        <div id="myNavmenu" class="navmenu navmenu-default navmenu-fixed-right offcanvas">
                                <div class="nav-container">
                                        <div class="list-group">
-                                               <li class="list-group-item"><img src="{{$userinfo.icon}}" alt="{{$userinfo.name}}" style="max-width:15px; max-height:15px; min-width:15px; min-height:15px; width:15px; height:15px;"> {{$userinfo.name}}</li>
+                                               <li class="list-group-item"><img src="{{$nav.userinfo.icon}}" alt="{{$nav.userinfo.name}}" style="max-width:15px; max-height:15px; min-width:15px; min-height:15px; width:15px; height:15px;"> {{$nav.userinfo.name}}</li>
                                                {{foreach $nav.usermenu as $usermenu}}
                                                <a class="{{$usermenu.2}} list-group-item" href="{{$usermenu.0}}" title="{{$usermenu.3}}">{{$usermenu.1}}</a>
                                                {{/foreach}}
                                                {{/if}}
                                                {{if $nav.logout}}
                                                <a class="nav-link {{$nav.logout.2}} list-group-item" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}" ><i class="fa fa fa-sign-out fa-fw"></i> {{$nav.logout.1}}</a>
-                                               {{/if}}
-                                               {{if $nav.login}}
+                                               {{else}}
                                                <a class="nav-login-link {{$nav.login.2}} list-group-item" href="{{$nav.login.0}}" title="{{$nav.login.3}}" ><i class="fa fa-power-off fa-fw"></i> {{$nav.login.1}}</a>
                                                {{/if}}
                                        </div>
 
 
 {{* The navbar for users which are not logged in *}}
-{{if $userinfo == ''}}
+{{if $nav.userinfo == ''}}
 <nav class="navbar navbar-fixed-top">
        <div class="container">
                <div class="navbar-header">
-                       <a class="navbar-brand" href="#">
-                               <span><img alt="Brand" src="./view/theme/frio/img/logo.png" width="25" height="25"> Friendica</span>
+                   <a class="navbar-brand" href="#"><div id="navbrand-container">
+                               <div id="logo-img"></div>
+                               <div id="navbar-brand-text"> Friendica</div></div>
                        </a>
                </div>
                <div class="hidden-sm hidden-xs">
index af41cb287e1f5f1575dc3fed8560925fbf6ffd23..f9d15e9c9d41bb50bc7eaedae67fd45b75354dca 100644 (file)
--- a/theme.php
+++ b/theme.php
@@ -32,6 +32,7 @@ function frio_init(&$a) {
 function frio_install() {
        register_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links');
        register_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu');
+       register_hook('nav_info', 'view/theme/frio/theme.php', 'frio_remote_nav');
 
        logger("installed theme frio");
 }
@@ -104,3 +105,90 @@ function frio_item_photo_menu($a, &$arr){
        }
        $args = array('item' => $item, 'menu' => $menu);
 }
+
+/**
+ * @brief Construct remote nav menu
+ * 
+ *  It creates a remote baseurl form $_SESSION for remote users and friendica
+ *  visitors. This url will be added to some of the nav links. With this behaviour 
+ *  the user will come back to her/his own pages on his/her friendica server.
+ *  Not all possible links are available (notifications, administrator, manage,
+ *  notes aren't available because we have no way the check remote permissions)..
+ *  Some links will point to the local pages because the user would expect
+ *  local page (these pages are: search, community, help, apps, directory).
+ * 
+ * @param app $a The App class
+ * @param array $nav The original nav menu
+ */
+function frio_remote_nav($a,&$nav) {
+       // get the homelink from $_XSESSION
+       $homelink = get_my_url();
+       if(! $homelink)
+               $homelink = ((x($_SESSION,'visitor_home')) ? $_SESSION['visitor_home'] : '');
+
+       // split up the url in it's parts (protocol,domain/directory, /profile/, nickname
+       // I'm not familiar with regex, so someone might find a better solutionen
+       // 
+       // E.g $homelink = 'https://friendica.domain.com/profile/mickey' should result in an array
+       // with 0 => 'https://friendica.domain.com/profile/mickey' 1 => 'https://',
+       // 2 => 'friendica.domain.com' 3 => '/profile/' 4 => 'mickey'
+       // 
+       //$server_url = preg_match('/^(https?:\/\/.*?)\/profile\//2', $homelink);
+       preg_match('/^(https?:\/\/)?(.*?)(\/profile\/)(.*)/', $homelink, $url_parts);
+
+       // Construct the server url of the visitor. So we could link back to his/her own menu.
+       // And construct a webbie (e.g. mickey@friendica.domain.com for the search in gcontact
+       // We use the webbie for search in gcontact because we don't know if gcontact table stores
+       // the right value if its http or https protocol
+       if(count($url_parts)) {
+               $server_url = $url_parts[1] . $url_parts[2];
+               $webbie = $url_parts[4] . '@' . $url_parts[2];
+       }
+
+       // since $userinfo isn't available for the hook we write it to the nav array
+       // this isn't optimal because the contact query will be done now twice
+       if(local_user()) {
+               // empty the server url for local user because we won't need it
+               $server_url = '';
+               // user info
+               $r = q("SELECT `micro` FROM `contact` WHERE `uid` = %d AND `self` = 1", intval($a->user['uid']));
+               
+               $r[0]['photo'] = (count($r) ? $a->remove_baseurl($r[0]['micro']) : "images/person-48.jpg");
+               $r[0]['name'] = $a->user['username'];
+
+       } elseif(!local_user() && remote_user()) {
+               $r = q("SELECT `name`, `nick`, `micro` AS `photo` FROM `contact` WHERE `id` = %d", intval(remote_user()));
+               $nav['remote'] = 1;
+
+       } elseif(get_my_url ()) {
+               $r = q("SELECT `name`, `nick`, `photo` FROM `gcontact`
+                               WHERE `addr` = '%s' AND `network` = 'dfrn'",
+                       dbesc($webbie));
+               $nav['remote'] = 1;
+       }
+
+       if(count($r)){
+                       $nav['userinfo'] = array(
+                               'icon' => (count($r) ? $r[0]['photo'] : "images/person-48.jpg"),
+                               'name' => $r['name'],
+                       );
+               }
+
+       if(!local_user() && !empty($server_url)) {
+               $nav['logout'] = Array($server_url . '/logout',t('Logout'), "", t('End this session'));
+
+               // user menu
+               $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname'], t('Status'), "", t('Your posts and conversations'));
+               $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname']. '?tab=profile', t('Profile'), "", t('Your profile page'));
+               $nav['usermenu'][] = Array($server_url . '/photos/' . $a->user['nickname'], t('Photos'), "", t('Your photos'));
+               $nav['usermenu'][] = Array($server_url . '/videos/' . $a->user['nickname'], t('Videos'), "", t('Your videos'));
+               $nav['usermenu'][] = Array($server_url . '/events/', t('Events'), "", t('Your events'));
+
+               // navbar links
+               $nav['network'] = array($server_url . '/network', t('Network'), "", t('Conversations from your friends'));
+               $nav['events'] = Array($server_url . '/events', t('Events'), "", t('Events and Calendar'));
+               $nav['messages'] = array($server_url . '/message', t('Messages'), "", t('Private mail'));
+               $nav['settings'] = array($server_url . '/settings', t('Settings'),"", t('Account settings'));
+               $nav['contacts'] = array($server_url . '/contacts', t('Contacts'),"", t('Manage/edit friends and contacts'));
+       }
+}