Merge develop into 1006-short-info

Conflicts:
	view/theme/frio/js/theme.js
This commit is contained in:
rabuzarus 2016-06-11 10:52:26 +02:00
commit d39f679230
9 changed files with 183 additions and 136 deletions

44
.gitignore vendored
View File

@ -1,44 +0,0 @@
favicon.*
.htconfig.php
.htpreconfig.php
\#*
include/jquery-1.4.2.min.js
*.log
*.out
*.version*
favicon.*
home.html
addon
*~
robots.txt
#ignore documentation, it should be newly built
doc/html
#ignore reports, should be generted with every build
report/
#ignore config files from eclipse, we don't want IDE files in our repository
.project
.buildpath
.externalToolBuilders
.settings
#ignore OSX .DS_Store files
.DS_Store
/nbproject/private/
#ignore smarty cache
/view/smarty3/compiled/
#ignore cache folders
/privacy_image_cache/
/photo/
/proxy/
nbproject
#ignore vagrant dir
.vagrant/
#ignore local folder
/local/

View File

@ -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";
}
#####################################################################

View File

@ -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");

View File

@ -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),
));

View File

@ -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";
}
...
}

View File

@ -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;
@ -1577,6 +1580,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%;
@ -1707,6 +1715,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;

View File

@ -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 <h4> heading and give it a class
var newText = '<h4 class="search-heading">'+searchText+'</h4>';
// 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");
// append the vcard-short-info to the second nav after passing the element
// with .p-addr (vcard). Use scrollspy to get the scroll position.
if( $("aside .vcard .p-addr").length) {
@ -129,8 +163,6 @@ $(document).ready(function(){
$("#vcard-short-info").fadeOut(500, function () {
$("#vcard-short-info").appendTo("#vcard-short-info-wrapper");
});
},
onEnter: function(element) {
$("#vcard-short-info").appendTo("#nav-short-info");

View File

@ -27,7 +27,7 @@
<span class="sr-only">Toggle navigation</span>
<i class="fa fa-ellipsis-v"></i>
</button>
<button type="button" class="navbar-toggle collapsed pull-right" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<button type="button" class="navbar-toggle collapsed pull-right" data-toggle="collapse" data-target="#search-mobile" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle Search</span>
<i class="fa fa-search" style="color:#FFF;"></i>
</button>
@ -247,6 +247,17 @@
</nav>
{{/if}}
{{* provide a a search input for mobile view, which expands by pressing the search icon *}}
<div id="search-mobile" class="hidden-lg hidden-md collapse">
<form class="navbar-form" role="search" method="get" action="{{$nav.search.0}}">
<!-- <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-mobile" class="form-control form-search" type="text" name="search" data-toggle="tooltip" title="{{$search_hint}}" placeholder="{{$nav.search.1}}">
<button class="btn btn-default btn-sm form-button-search" type="submit">{{$nav.search.1}}</button>
</div>
</form>
</div>
{{* The second navbar which contains nav points of the actual page - (nav points are actual handled by this theme throug js *}}
<div id="topbar-second" class="topbar">
<div class="container">

View File

@ -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}}
<div id="{{$id}}" {{* class="input-group" *}}>
<div id="search-wrapper">
<form action="{{$action_url}}" method="get" >
@ -15,7 +18,7 @@
<div class="col-md-8">
{{* The button to save searches *}}
{{if $savedsearch}}
<button class="btn btn-primary btn-small pull-right" type="submit" name="save" id="search-save" value="{{$save_label}}">{{$save_label}}</button>
<button class="btn btn-primary btn-small pull-right" type="submit" name="save" value="{{$save_label}}">{{$save_label}}</button>
{{/if}}
{{* The select popup menu to select what kind of results the user would like to search for *}}
@ -43,4 +46,9 @@
</form>
</div>
{{* This form is inserted as experiment to move the search-save button to the second navbar with js *}}
<form id="search-save-form" action="{{$action_url}}" method="get" >
<input type="hidden" name="search" value="{{$s}}" />
<button class="btn btn-primary btn-sm btn-main pull-right" type="submit" name="save" id="search-save" value="{{$save_label}}"><i class="fa fa-floppy-o fa-2x" aria-hidden="true"></i></button>
</form>
</div>