From db5438ab1a599147c3d50ada88584be02b272cf3 Mon Sep 17 00:00:00 2001 From: rabuzarus <> Date: Fri, 10 Jun 2016 20:34:25 +0200 Subject: [PATCH 1/3] frio: improvements in search behavior - search value woll be added to nav search input - focus on nav search input as main search - save search button appears in the second navbar if search is available - search heading appears in the second navbar - provide a mobile search by pressing the search icon - dirfind: heading distinguish between people and form search - some js fixes in theme.js --- mod/dirfind.php | 4 +- view/theme/frio/css/style.css | 17 ++++++++ view/theme/frio/js/theme.js | 54 ++++++++++++++++++++----- view/theme/frio/templates/nav.tpl | 13 +++++- view/theme/frio/templates/searchbox.tpl | 10 ++++- 5 files changed, 85 insertions(+), 13 deletions(-) diff --git a/mod/dirfind.php b/mod/dirfind.php index f193a5c45c..44f70d641e 100644 --- a/mod/dirfind.php +++ b/mod/dirfind.php @@ -33,6 +33,7 @@ function dirfind_content(&$a, $prefix = "") { if(strpos($search,'@') === 0) { $search = substr($search,1); + $header = sprintf( t('People Search - %s'), $search); if ((valid_email($search) AND validate_email($search)) OR (substr(normalise_link($search), 0, 7) == "http://")) { $user_data = probe_url($search); @@ -43,6 +44,7 @@ function dirfind_content(&$a, $prefix = "") { if(strpos($search,'!') === 0) { $search = substr($search,1); $community = true; + $header = sprintf( t('Forum Search - %s'), $search); } $o = ''; @@ -227,7 +229,7 @@ function dirfind_content(&$a, $prefix = "") { $tpl = get_markup_template('viewcontact_template.tpl'); $o .= replace_macros($tpl,array( - 'title' => sprintf( t('People Search - %s'), $search), + 'title' => $header, '$contacts' => $entries, '$paginate' => paginate($a), )); diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index 0ecb56441d..49d78e1314 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -581,6 +581,9 @@ nav.navbar a { margin: 0px; padding: 10px 15px; } +#search-mobile .navbar-form { + margin: 0; +} #topbar-first #search-box .form-search { height: 25px; font-size: 13px; @@ -1531,6 +1534,11 @@ img.acpopup-img { /*margin-left: -15px;*/ padding: 0; } +#tabmenu .search-heading { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} ul.tabs { list-style: none; height: 100%; @@ -1661,6 +1669,15 @@ ul.dropdown-menu li:hover { color: $link_color; font-size: 20px; } +.search-content-wrapper > #search-header-wrapper { + display: none; +} +.search-content-wrapper > .section-title-wrapper { + display: none; +} +#navbar-button > #search-save-form > #search-save { + margin-top: 3px; +} /* Section-Content-Wrapper */ #search-header-wrapper { padding: 15px; diff --git a/view/theme/frio/js/theme.js b/view/theme/frio/js/theme.js index 9be1b9456e..28221dcd0d 100644 --- a/view/theme/frio/js/theme.js +++ b/view/theme/frio/js/theme.js @@ -40,7 +40,7 @@ $(document).ready(function(){ $(".field.select > select, .field.custom > select").addClass("form-control"); // move the tabbar to the second nav bar - if( $("ul.tabbar")) { + if( $("ul.tabbar").length ) { $("ul.tabbar").appendTo("#topbar-second > .container > #tabmenu"); } @@ -50,7 +50,7 @@ $(document).ready(function(){ // to the friendica logo (the mask is in nav.tpl at the botom). To make it work we need to apply the // correct url. The only way which comes to my mind was to do this with js // So we apply the correct url (with the link to the id of the mask) after the page is loaded. - if($("#logo-img")) { + if($("#logo-img").length ) { var pageurl = "url('" + window.location.href + "#logo-mask')"; $("#logo-img").css({"mask": pageurl}); } @@ -66,7 +66,7 @@ $(document).ready(function(){ }); // add Jot botton to the scecond navbar - if( $("section #jotOpen")) { + if( $("section #jotOpen").length ) { $("section #jotOpen").appendTo("#topbar-second > .container > #navbar-button"); if( $("#jot-popup").is(":hidden")) $("#topbar-second > .container > #navbar-button #jotOpen").hide(); } @@ -94,13 +94,6 @@ $(document).ready(function(){ }); } }); - - // add search-heading to the scecond navbar - if( $(".search-heading")) { - $(".search-heading").appendTo("#topbar-second > .container > #tabmenu"); - } - - //$('ul.flex-nav').flexMenu(); @@ -120,6 +113,47 @@ $(document).ready(function(){ // initialize the bootstrap-select $('.selectpicker').selectpicker(); + // add search-heading to the seccond navbar + if( $(".search-heading").length) { + $(".search-heading").appendTo("#topbar-second > .container > #tabmenu"); + } + + // add search results heading to the second navbar + // and insert the search value to the top nav search input + if( $(".search-content-wrapper").length ) { + // get the text of the heading (we catch the plain text because we don't + // want to have a h4 heading in the navbar + var searchText = $(".section-title-wrapper > h2").text(); + // insert the plain text in a

heading and give it a class + var newText = '

'+searchText+'

'; + // append the new heading to the navbar + $("#topbar-second > .container > #tabmenu").append(newText); + + // try to get the value of the original search input to insert it + // as value in the nav-search-input + var searchValue = $("#search-wrapper .form-group-search input").val(); + + // if the orignal search value isn't available use the location path as value + if( typeof searchValue === "undefined") { + // get the location path + var urlPath = window.location.search + // and split it up in its parts + var splitPath = urlPath.split(/(\?search?=)(.*$)/); + + if(typeof splitPath[2] !== 'undefined') { + // decode the path (e.g to decode %40 to the character @) + var searchValue = decodeURIComponent(splitPath[2]); + } + } + + if( typeof searchValue !== "undefined") { + $("#nav-search-input-field").val(searchValue); + } + + } + + // move the "Save the search" button to the second navbar + $(".search-content-wrapper #search-save-form ").appendTo("#topbar-second > .container > #navbar-button"); }); //function commentOpenUI(obj, id) { diff --git a/view/theme/frio/templates/nav.tpl b/view/theme/frio/templates/nav.tpl index b8d5b2307e..f77f2da783 100644 --- a/view/theme/frio/templates/nav.tpl +++ b/view/theme/frio/templates/nav.tpl @@ -27,7 +27,7 @@ Toggle navigation - @@ -247,6 +247,17 @@ {{/if}} +{{* provide a a search input for mobile view, which expands by pressing the search icon *}} + + {{* The second navbar which contains nav points of the actual page - (nav points are actual handled by this theme throug js *}}
diff --git a/view/theme/frio/templates/searchbox.tpl b/view/theme/frio/templates/searchbox.tpl index cc39ba6dc5..8f6354b269 100644 --- a/view/theme/frio/templates/searchbox.tpl +++ b/view/theme/frio/templates/searchbox.tpl @@ -1,4 +1,7 @@ +{{* important notes: The frio theme hides under certain conditions some parts of the templates through css. +Some parts of this template will be moved by js to other places (see theme.js) - E.g. the save-search button}} +
@@ -15,7 +18,7 @@
{{* The button to save searches *}} {{if $savedsearch}} - + {{/if}} {{* The select popup menu to select what kind of results the user would like to search for *}} @@ -43,4 +46,9 @@
+ {{* This form is inserted as experiment to move the search-save button to the second navbar with js *}} +
+ + +
From fbb905a5c2fa4dd4435ef2140481bfa08ccba301 Mon Sep 17 00:00:00 2001 From: fabrixxm Date: Sat, 11 Jun 2016 09:27:00 +0200 Subject: [PATCH 2/3] Move Nginx reverse proxy sample from INSTALL to separate file --- INSTALL.txt | 12 ----------- mods/sample-nginx-reverse-proxy.config | 30 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 mods/sample-nginx-reverse-proxy.config diff --git a/INSTALL.txt b/INSTALL.txt index 71671af3f1..08bd41c8d3 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -154,18 +154,6 @@ Friendica also supports a number on non-standard headers in common use. X-Forwarded-Ssl: on It is however preferable to use the standard approach if configuring a new server. -In Nginx, this can be done as follows (assuming Friendica runs on port 8080). - - location / { - if ( $scheme != https ) { # Force Redirect to HTTPS - return 302 https://$host$uri; - } - proxy_pass http://localhost:8080; - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Forwarded "for=$proxy_add_x_forwarded_for; proto=$scheme"; - } ##################################################################### diff --git a/mods/sample-nginx-reverse-proxy.config b/mods/sample-nginx-reverse-proxy.config new file mode 100644 index 0000000000..fbbbc48802 --- /dev/null +++ b/mods/sample-nginx-reverse-proxy.config @@ -0,0 +1,30 @@ +# +# Example of NGINX as reverse-proxy terminating an HTTPS connection. +# +# This is not a complete NGINX config. +# +# Please refer to NGINX docs +# + +... + +server { + + ... + + # assuming Friendica runs on port 8080 + location / { + if ( $scheme != https ) { + # Force Redirect to HTTPS + return 302 https://$host$uri; + } + proxy_pass http://localhost:8080; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Forwarded "for=$proxy_add_x_forwarded_for; proto=$scheme"; + } + + ... + +} From eafad7145bafd5dbd913b82b9a4629b1445e5000 Mon Sep 17 00:00:00 2001 From: rabuzarus <> Date: Sat, 11 Jun 2016 10:12:03 +0200 Subject: [PATCH 3/3] mod/admin.php: some clean up --- mod/admin.php | 133 ++++++++++++++++++++++++++------------------------ 1 file changed, 68 insertions(+), 65 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 2303d3b9c1..36b2ca730f 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -165,7 +165,7 @@ function admin_content(&$a) { /* get plugins admin page */ - $r = q("SELECT `name` FROM `addon` WHERE `plugin_admin`=1 ORDER BY `name`"); + $r = q("SELECT `name` FROM `addon` WHERE `plugin_admin` = 1 ORDER BY `name`"); $aside_tools['plugins_admin']=array(); foreach ($r as $h){ $plugin =$h['name']; @@ -271,7 +271,7 @@ function admin_page_federation(&$a) { // displayed on the stats page. $platforms = array('Friendica', 'Diaspora', '%%red%%', 'Hubzilla', 'GNU Social', 'StatusNet'); $colors = array('Friendica' => '#ffc018', // orange from the logo - 'Diaspora' => '#a1a1a1', // logo is black and white, makes a gray + 'Diaspora' => '#a1a1a1', // logo is black and white, makes a gray '%%red%%' => '#c50001', // fire red from the logo 'Hubzilla' => '#43488a', // blue from the logo 'GNU Social'=> '#a22430', // dark red from the logo @@ -282,17 +282,17 @@ function admin_page_federation(&$a) { foreach ($platforms as $p) { // get a total count for the platform, the name and version of the // highest version and the protocol tpe - $c = q('SELECT count(*) AS total, platform, network, version FROM gserver - WHERE platform LIKE "%s" AND last_contact > last_failure AND `version` != "" - ORDER BY version ASC;', $p); + $c = q('SELECT COUNT(*) AS `total`, `platform`, `network`, `version` FROM `gserver` + WHERE `platform` LIKE "%s" AND `last_contact` > `last_failure` AND `version` != "" + ORDER BY `version` ASC;', $p); $total = $total + $c[0]['total']; // what versions for that platform do we know at all? // again only the active nodes - $v = q('SELECT count(*) AS total, version FROM gserver - WHERE last_contact > last_failure AND platform LIKE "%s" AND `version` != "" - GROUP BY version - ORDER BY version;', $p); + $v = q('SELECT COUNT(*) AS `total, version` FROM `gserver` + WHERE `last_contact` > `last_failure` AND `platform` LIKE "%s" AND `version` != "" + GROUP BY `version` + ORDER BY `version`;', $p); // // clean up version numbers @@ -386,7 +386,10 @@ function admin_page_federation(&$a) { */ function admin_page_queue(&$a) { // get content from the queue table - $r = q("SELECT c.name,c.nurl,q.id,q.network,q.created,q.last from queue as q, contact as c where c.id=q.cid order by q.cid, q.created;"); + $r = q("SELECT `c`.`name`, `c`.`nurl`, `q`.`id`, `q`.`network`, `q`.`created`, `q`.`last` + FROM `queue` AS `q`, `contact` AS `c` + WHERE `c`.`id` = `q`.`cid` + ORDER BY `q`.`cid`, `q`.`created`;"); $t = get_markup_template("admin_queue.tpl"); return replace_macros($t, array( @@ -416,7 +419,7 @@ function admin_page_queue(&$a) { * @return string */ function admin_page_summary(&$a) { - $r = q("SELECT `page-flags`, COUNT(uid) as `count` FROM `user` GROUP BY `page-flags`"); + $r = q("SELECT `page-flags`, COUNT(`uid`) AS `count` FROM `user` GROUP BY `page-flags`"); $accounts = array( array(t('Normal Account'), 0), array(t('Soapbox Account'), 0), @@ -431,21 +434,21 @@ function admin_page_summary(&$a) { logger('accounts: '.print_r($accounts,true),LOGGER_DATA); - $r = q("SELECT COUNT(id) as `count` FROM `register`"); + $r = q("SELECT COUNT(`id`) AS `count` FROM `register`"); $pending = $r[0]['count']; - $r = q("select count(*) as total from deliverq where 1"); + $r = q("SELECT COUNT(*) AS `total` FROM `deliverq` WHERE 1"); $deliverq = (($r) ? $r[0]['total'] : 0); - $r = q("select count(*) as total from queue where 1"); + $r = q("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1"); $queue = (($r) ? $r[0]['total'] : 0); - if (get_config('system','worker')) { - $r = q("select count(*) as total from workerqueue where 1"); - $workerqueue = (($r) ? $r[0]['total'] : 0); - } else { - $workerqueue = 0; - } + if (get_config('system','worker')) { + $r = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE 1"); + $workerqueue = (($r) ? $r[0]['total'] : 0); + } else { + $workerqueue = 0; + } // We can do better, but this is a quick queue status @@ -543,7 +546,7 @@ function admin_page_site_post(&$a) { set_config('system','url',$new_url); // send relocate - $users = q("SELECT uid FROM user WHERE account_removed = 0 AND account_expired = 0"); + $users = q("SELECT `uid` FROM `user` WHERE `account_removed` = 0 AND `account_expired` = 0"); foreach ($users as $user) { proc_run('php', 'include/notifier.php', 'relocate', $user['uid']); @@ -558,10 +561,10 @@ function admin_page_site_post(&$a) { $sitename = ((x($_POST,'sitename')) ? notags(trim($_POST['sitename'])) : ''); $hostname = ((x($_POST,'hostname')) ? notags(trim($_POST['hostname'])) : ''); $sender_email = ((x($_POST,'sender_email')) ? notags(trim($_POST['sender_email'])) : ''); - $banner = ((x($_POST,'banner')) ? trim($_POST['banner']) : false); + $banner = ((x($_POST,'banner')) ? trim($_POST['banner']) : false); $shortcut_icon = ((x($_POST,'shortcut_icon')) ? notags(trim($_POST['shortcut_icon'])) : ''); $touch_icon = ((x($_POST,'touch_icon')) ? notags(trim($_POST['touch_icon'])) : ''); - $info = ((x($_POST,'info')) ? trim($_POST['info']) : false); + $info = ((x($_POST,'info')) ? trim($_POST['info']) : false); $language = ((x($_POST,'language')) ? notags(trim($_POST['language'])) : ''); $theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : ''); $theme_mobile = ((x($_POST,'theme_mobile')) ? notags(trim($_POST['theme_mobile'])) : ''); @@ -647,41 +650,41 @@ function admin_page_site_post(&$a) { if($ssl_policy != intval(get_config('system','ssl_policy'))) { if($ssl_policy == SSL_POLICY_FULL) { - q("update `contact` set - `url` = replace(`url` , 'http:' , 'https:'), - `photo` = replace(`photo` , 'http:' , 'https:'), - `thumb` = replace(`thumb` , 'http:' , 'https:'), - `micro` = replace(`micro` , 'http:' , 'https:'), - `request` = replace(`request`, 'http:' , 'https:'), - `notify` = replace(`notify` , 'http:' , 'https:'), - `poll` = replace(`poll` , 'http:' , 'https:'), - `confirm` = replace(`confirm`, 'http:' , 'https:'), - `poco` = replace(`poco` , 'http:' , 'https:') - where `self` = 1" + q("UPDATE `contact` SET + `url` = REPLACE(`url` , 'http:' , 'https:'), + `photo` = REPLACE(`photo` , 'http:' , 'https:'), + `thumb` = REPLACE(`thumb` , 'http:' , 'https:'), + `micro` = REPLACE(`micro` , 'http:' , 'https:'), + `request` = REPLACE(`request`, 'http:' , 'https:'), + `notify` = REPLACE(`notify` , 'http:' , 'https:'), + `poll` = REPLACE(`poll` , 'http:' , 'https:'), + `confirm` = REPLACE(`confirm`, 'http:' , 'https:'), + `poco` = REPLACE(`poco` , 'http:' , 'https:') + WHERE `self` = 1" ); - q("update `profile` set - `photo` = replace(`photo` , 'http:' , 'https:'), - `thumb` = replace(`thumb` , 'http:' , 'https:') - where 1 " + q("UPDATE `profile` SET + `photo` = REPLACE(`photo` , 'http:' , 'https:'), + `thumb` = REPLACE(`thumb` , 'http:' , 'https:') + WHERE 1 " ); } elseif($ssl_policy == SSL_POLICY_SELFSIGN) { - q("update `contact` set - `url` = replace(`url` , 'https:' , 'http:'), - `photo` = replace(`photo` , 'https:' , 'http:'), - `thumb` = replace(`thumb` , 'https:' , 'http:'), - `micro` = replace(`micro` , 'https:' , 'http:'), - `request` = replace(`request`, 'https:' , 'http:'), - `notify` = replace(`notify` , 'https:' , 'http:'), - `poll` = replace(`poll` , 'https:' , 'http:'), - `confirm` = replace(`confirm`, 'https:' , 'http:'), - `poco` = replace(`poco` , 'https:' , 'http:') - where `self` = 1" + q("UPDATE `contact` SET + `url` = REPLACE(`url` , 'https:' , 'http:'), + `photo` = REPLACE(`photo` , 'https:' , 'http:'), + `thumb` = REPLACE(`thumb` , 'https:' , 'http:'), + `micro` = REPLACE(`micro` , 'https:' , 'http:'), + `request` = REPLACE(`request`, 'https:' , 'http:'), + `notify` = REPLACE(`notify` , 'https:' , 'http:'), + `poll` = REPLACE(`poll` , 'https:' , 'http:'), + `confirm` = REPLACE(`confirm`, 'https:' , 'http:'), + `poco` = REPLACE(`poco` , 'https:' , 'http:') + WHERE `self` = 1" ); - q("update `profile` set - `photo` = replace(`photo` , 'https:' , 'http:'), - `thumb` = replace(`thumb` , 'https:' , 'http:') - where 1 " + q("UPDATE `profile` SET + `photo` = REPLACE(`photo` , 'https:' , 'http:'), + `thumb` = REPLACE(`thumb` , 'https:' , 'http:') + WHERE 1 " ); } } @@ -876,7 +879,7 @@ function admin_page_site(&$a) { /* get user names to make the install a personal install of X */ $user_names = array(); $user_names['---'] = t('Multi user instance'); - $users = q("SELECT username, nickname FROM `user`"); + $users = q("SELECT `username`, `nickname` FROM `user`"); foreach ($users as $user) { $user_names[$user['nickname']] = $user['username']; } @@ -1084,7 +1087,7 @@ function admin_page_dbsync(&$a) { } $failed = array(); - $r = q("select k, v from config where `cat` = 'database' "); + $r = q("SELECT `k`, `v` FROM `config` WHERE `cat` = 'database' "); if(count($r)) { foreach($r as $rr) { $upd = intval(substr($rr['k'],7)); @@ -1123,7 +1126,7 @@ function admin_page_users_post(&$a){ $pending = (x($_POST, 'pending') ? $_POST['pending'] : array()); $users = (x($_POST, 'user') ? $_POST['user'] : array()); $nu_name = (x($_POST, 'new_user_name') ? $_POST['new_user_name'] : ''); - $nu_nickname = (x($_POST, 'new_user_nickname') ? $_POST['new_user_nickname'] : ''); + $nu_nickname = (x($_POST, 'new_user_nickname') ? $_POST['new_user_nickname'] : ''); $nu_email = (x($_POST, 'new_user_email') ? $_POST['new_user_email'] : ''); check_form_security_token_redirectOnErr('/admin/users', 'admin_users'); @@ -1180,7 +1183,7 @@ function admin_page_users_post(&$a){ if(x($_POST,'page_users_block')) { foreach($users as $uid){ - q("UPDATE `user` SET `blocked`=1-`blocked` WHERE `uid`=%s", + q("UPDATE `user` SET `blocked` = 1-`blocked` WHERE `uid` = %s", intval($uid) ); } @@ -1225,7 +1228,7 @@ function admin_page_users_post(&$a){ function admin_page_users(&$a){ if($a->argc>2) { $uid = $a->argv[3]; - $user = q("SELECT username, blocked FROM `user` WHERE `uid`=%d", intval($uid)); + $user = q("SELECT `username`, `blocked` FROM `user` WHERE `uid` = %d", intval($uid)); if(count($user)==0) { notice('User not found'.EOL); goaway('admin/users'); @@ -1242,7 +1245,7 @@ function admin_page_users(&$a){ }; break; case "block":{ check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't'); - q("UPDATE `user` SET `blocked`=%d WHERE `uid`=%s", + q("UPDATE `user` SET `blocked` = %d WHERE `uid` = %s", intval(1-$user[0]['blocked']), intval($uid) ); @@ -1262,7 +1265,7 @@ function admin_page_users(&$a){ /* get users */ - $total = q("SELECT count(*) as total FROM `user` where 1"); + $total = q("SELECT COUNT(*) AS `total` FROM `user` WHERE 1"); if(count($total)) { $a->set_pager_total($total[0]['total']); $a->set_pager_itemspage(100); @@ -1855,11 +1858,11 @@ function admin_page_logs_post(&$a) { function admin_page_logs(&$a){ $log_choices = array( - LOGGER_NORMAL => 'Normal', - LOGGER_TRACE => 'Trace', - LOGGER_DEBUG => 'Debug', - LOGGER_DATA => 'Data', - LOGGER_ALL => 'All' + LOGGER_NORMAL => 'Normal', + LOGGER_TRACE => 'Trace', + LOGGER_DEBUG => 'Debug', + LOGGER_DATA => 'Data', + LOGGER_ALL => 'All' ); $t = get_markup_template("admin_logs.tpl");