Merge remote-tracking branch 'upstream/develop' into 1508-poco-ostatus

This commit is contained in:
Michael Vogel 2015-08-24 18:16:14 +02:00
commit 9ae4528d8b
23 changed files with 530 additions and 358 deletions

View File

@ -19,7 +19,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_CODENAME', 'Lily of the valley'); define ( 'FRIENDICA_CODENAME', 'Lily of the valley');
define ( 'FRIENDICA_VERSION', '3.4.1' ); define ( 'FRIENDICA_VERSION', '3.4.1' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1187 ); define ( 'DB_UPDATE_VERSION', 1188 );
define ( 'EOL', "<br />\r\n" ); define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@ -84,6 +84,15 @@ define ( 'LOGGER_DEBUG', 2 );
define ( 'LOGGER_DATA', 3 ); define ( 'LOGGER_DATA', 3 );
define ( 'LOGGER_ALL', 4 ); define ( 'LOGGER_ALL', 4 );
/**
* cache levels
*/
define ( 'CACHE_MONTH', 0 );
define ( 'CACHE_WEEK', 1 );
define ( 'CACHE_DAY', 2 );
define ( 'CACHE_HOUR', 3 );
/** /**
* registration policies * registration policies
*/ */

View File

@ -819,7 +819,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
} }
} }
Cache::set("probe_url:".$mode.":".$url,serialize($result)); Cache::set("probe_url:".$mode.":".$url,serialize($result), CACHE_DAY);
return $result; return $result;
} }

View File

@ -5,33 +5,25 @@
class Cache { class Cache {
public static function get($key) { public static function get($key) {
/*if (function_exists("apc_fetch") AND function_exists("apc_exists"))
if (apc_exists($key))
return(apc_fetch($key));*/
$r = q("SELECT `v` FROM `cache` WHERE `k`='%s' limit 1", $r = q("SELECT `v` FROM `cache` WHERE `k`='%s' limit 1",
dbesc($key) dbesc($key)
); );
if (count($r)) { if (count($r))
/*if (function_exists("apc_store"))
apc_store($key, $r[0]['v'], 600);*/
return $r[0]['v']; return $r[0]['v'];
}
return null; return null;
} }
public static function set($key,$value) { public static function set($key,$value, $duration = CACHE_MONTH) {
q("REPLACE INTO `cache` (`k`,`v`,`updated`) VALUES ('%s','%s','%s')", q("REPLACE INTO `cache` (`k`,`v`,`expire_mode`,`updated`) VALUES ('%s','%s',%d,'%s')",
dbesc($key), dbesc($key),
dbesc($value), dbesc($value),
intval($duration),
dbesc(datetime_convert())); dbesc(datetime_convert()));
/*if (function_exists("apc_store"))
apc_store($key, $value, 600);*/
} }
@ -63,8 +55,17 @@
public static function clear(){ public static function clear(){
q("DELETE FROM `cache` WHERE `updated` < '%s'", q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d",
dbesc(datetime_convert('UTC','UTC',"now - 30 days"))); dbesc(datetime_convert('UTC','UTC',"now - 30 days")), intval(CACHE_MONTH));
q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d",
dbesc(datetime_convert('UTC','UTC',"now - 7 days")), intval(CACHE_WEEK));
q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d",
dbesc(datetime_convert('UTC','UTC',"now - 1 days")), intval(CACHE_DAY));
q("DELETE FROM `cache` WHERE `updated` < '%s' AND `expire_mode` = %d",
dbesc(datetime_convert('UTC','UTC',"now - 1 hours")), intval(CACHE_HOUR));
} }
} }

View File

@ -364,6 +364,7 @@ function db_definition() {
"fields" => array( "fields" => array(
"k" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"), "k" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"),
"v" => array("type" => "text", "not null" => "1"), "v" => array("type" => "text", "not null" => "1"),
"expire_mode" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
), ),
"indexes" => array( "indexes" => array(

View File

@ -183,7 +183,7 @@ function discover_directory($search) {
poco_check($data["url"], $data["name"], $data["network"], $data["photo"], "", "", "", $jj->tags, $data["addr"], "", 0); poco_check($data["url"], $data["name"], $data["network"], $data["photo"], "", "", "", $jj->tags, $data["addr"], "", 0);
} }
} }
Cache::set("dirsearch:".$search, time()); Cache::set("dirsearch:".$search, time(), CACHE_DAY);
} }
if (array_search(__file__,get_included_files())===0){ if (array_search(__file__,get_included_files())===0){

View File

@ -969,7 +969,7 @@ function query_page_info($url, $no_photos = false, $photo = "", $keywords = fals
$data = Cache::get("parse_url:".$url); $data = Cache::get("parse_url:".$url);
if (is_null($data)){ if (is_null($data)){
$data = parseurl_getsiteinfo($url, true); $data = parseurl_getsiteinfo($url, true);
Cache::set("parse_url:".$url,serialize($data)); Cache::set("parse_url:".$url,serialize($data), CACHE_DAY);
} else } else
$data = unserialize($data); $data = unserialize($data);

View File

@ -26,7 +26,7 @@ function nav(&$a) {
$tpl = get_markup_template('nav.tpl'); $tpl = get_markup_template('nav.tpl');
$a->page['nav'] .= replace_macros($tpl, array( $a->page['nav'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(), '$baseurl' => $a->get_baseurl(),
'$langselector' => lang_selector(), '$langselector' => lang_selector(),
'$sitelocation' => $nav_info['sitelocation'], '$sitelocation' => $nav_info['sitelocation'],
'$nav' => $nav_info['nav'], '$nav' => $nav_info['nav'],
@ -118,6 +118,12 @@ function nav_info(&$a) {
$nav['search'] = array('search', t('Search'), "", t('Search site content')); $nav['search'] = array('search', t('Search'), "", t('Search site content'));
$nav['searchoption'] = array(
t("Full Text"),
t("Tags"),
t("Contacts"),
t("Forums"));
$gdirpath = 'directory'; $gdirpath = 'directory';
if(strlen(get_config('system','singleuser'))) { if(strlen(get_config('system','singleuser'))) {

View File

@ -73,7 +73,7 @@ function oembed_fetch_url($embedurl, $no_rich_type = false){
if ($txt[0]!="{") $txt='{"type":"error"}'; if ($txt[0]!="{") $txt='{"type":"error"}';
//save in cache //save in cache
Cache::set($a->videowidth . $embedurl,$txt); Cache::set($a->videowidth . $embedurl,$txt, CACHE_DAY);
} }

View File

@ -986,16 +986,26 @@ if(! function_exists('search')) {
* @param string $url search url * @param string $url search url
* @param boolean $savedsearch show save search button * @param boolean $savedsearch show save search button
*/ */
function search($s,$id='search-box',$url='/search',$save = false) { function search($s,$id='search-box',$url='/search',$save = false, $aside = true) {
$a = get_app(); $a = get_app();
return replace_macros(get_markup_template('searchbox.tpl'), array(
'$s' => $s, $values = array(
'$id' => $id, '$s' => $s,
'$action_url' => $a->get_baseurl((stristr($url,'network')) ? true : false) . $url, '$id' => $id,
'$search_label' => t('Search'), '$action_url' => $a->get_baseurl((stristr($url,'network')) ? true : false) . $url,
'$save_label' => t('Save'), '$search_label' => t('Search'),
'$savedsearch' => feature_enabled(local_user(),'savedsearch'), '$save_label' => t('Save'),
)); '$savedsearch' => feature_enabled(local_user(),'savedsearch'),
);
if (!$aside)
$values['$searchoption'] = array(
t("Full Text"),
t("Tags"),
t("Contacts"),
t("Forums"));
return replace_macros(get_markup_template('searchbox.tpl'), $values);
}} }}
if(! function_exists('valid_email')) { if(! function_exists('valid_email')) {

View File

@ -1,6 +1,6 @@
/** /**
* Filebrowser - Friendica Communications Server * Filebrowser - Friendica Communications Server
* *
* Copyright (c) 2010-2013 the Friendica Project * Copyright (c) 2010-2013 the Friendica Project
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -28,7 +28,7 @@
* The event is named * The event is named
* *
* fbrowser.<type>.[<eventname>] * fbrowser.<type>.[<eventname>]
* *
* with params: * with params:
* *
* filemane: filename of item choosed by user * filemane: filename of item choosed by user
@ -49,13 +49,13 @@
* $(id).value = bbcode; * $(id).value = bbcode;
* }); * });
**/ **/
var FileBrowser = { var FileBrowser = {
nickname : "", nickname : "",
type : "", type : "",
event: "", event: "",
id : null, id : null,
init: function(nickname, type) { init: function(nickname, type) {
FileBrowser.nickname = nickname; FileBrowser.nickname = nickname;
FileBrowser.type = type; FileBrowser.type = type;
@ -65,18 +65,23 @@ var FileBrowser = {
FileBrowser.event = FileBrowser.event + "." + h.split("-")[0]; FileBrowser.event = FileBrowser.event + "." + h.split("-")[0];
FileBrowser.id = h.split("-")[1]; FileBrowser.id = h.split("-")[1];
} }
console.log("FileBrowser:", nickname, type,FileBrowser.event, FileBrowser.id ); console.log("FileBrowser:", nickname, type,FileBrowser.event, FileBrowser.id );
$(".error a.close").on("click", function(e) {
e.preventDefault();
$(".error").addClass("hidden");
});
$(".folders a, .path a").on("click", function(e){ $(".folders a, .path a").on("click", function(e){
e.preventDefault(); e.preventDefault();
var url = baseurl + "/fbrowser/" + FileBrowser.type + "/" + this.dataset.folder + "?mode=minimal" + location['hash']; var url = baseurl + "/fbrowser/" + FileBrowser.type + "/" + this.dataset.folder + "?mode=minimal" + location['hash'];
location.href = url; location.href = url;
}); });
$(".photo-album-photo-link").on('click', function(e){ $(".photo-album-photo-link").on('click', function(e){
e.preventDefault(); e.preventDefault();
var embed = ""; var embed = "";
if (FileBrowser.type == "image") { if (FileBrowser.type == "image") {
embed = "[url="+this.dataset.link+"][img]"+this.dataset.img+"[/img][/url]"; embed = "[url="+this.dataset.link+"][img]"+this.dataset.img+"[/img][/url]";
@ -91,31 +96,45 @@ var FileBrowser = {
embed, embed,
FileBrowser.id FileBrowser.id
]); ]);
}); });
if ($("#upload-image").length) if ($("#upload-image").length)
var image_uploader = new window.AjaxUpload( var image_uploader = new window.AjaxUpload(
'upload-image', 'upload-image',
{ action: 'wall_upload/'+FileBrowser.nickname, { action: 'wall_upload/'+FileBrowser.nickname+'?response=json',
name: 'userfile', name: 'userfile',
onSubmit: function(file,ext) { $('#profile-rotator').show(); }, responseType: 'json',
onSubmit: function(file,ext) { $('#profile-rotator').show(); $(".error").addClass('hidden'); },
onComplete: function(file,response) { onComplete: function(file,response) {
if (response['error']!= undefined) {
$(".error span").html(response['error']);
$(".error").removeClass('hidden');
$('#profile-rotator').hide();
return;
}
location = baseurl + "/fbrowser/image/?mode=minimal"+location['hash']; location = baseurl + "/fbrowser/image/?mode=minimal"+location['hash'];
location.reload(true); location.reload(true);
} }
} }
); );
if ($("#upload-file").length) if ($("#upload-file").length)
var file_uploader = new window.AjaxUpload( var file_uploader = new window.AjaxUpload(
'upload-file', 'upload-file',
{ action: 'wall_attach/'+FileBrowser.nickname, { action: 'wall_attach/'+FileBrowser.nickname+'?response=json',
name: 'userfile', name: 'userfile',
onSubmit: function(file,ext) { $('#profile-rotator').show(); }, onSubmit: function(file,ext) { $('#profile-rotator').show(); $(".error").addClass('hidden'); },
onComplete: function(file,response) { onComplete: function(file,response) {
if (response['error']!= undefined) {
$(".error span").html(response['error']);
$(".error").removeClass('hidden');
$('#profile-rotator').hide();
return;
}
location = baseurl + "/fbrowser/file/?mode=minimal"+location['hash']; location = baseurl + "/fbrowser/file/?mode=minimal"+location['hash'];
location.reload(true); } location.reload(true);
}
} }
); );
} }

View File

@ -14,13 +14,13 @@ function dirfind_init(&$a) {
function dirfind_content(&$a) { function dirfind_content(&$a, $prefix = "") {
$community = false; $community = false;
$local = get_config('system','poco_local_search'); $local = get_config('system','poco_local_search');
$search = notags(trim($_REQUEST['search'])); $search = $prefix.notags(trim($_REQUEST['search']));
if(strpos($search,'@') === 0) if(strpos($search,'@') === 0)
$search = substr($search,1); $search = substr($search,1);

View File

@ -11,29 +11,29 @@ require_once('include/Photo.php');
* @param App $a * @param App $a
*/ */
function fbrowser_content($a){ function fbrowser_content($a){
if (!local_user()) if (!local_user())
killme(); killme();
if ($a->argc==1) if ($a->argc==1)
killme(); killme();
$template_file = "filebrowser.tpl"; $template_file = "filebrowser.tpl";
$mode = ""; $mode = "";
if (x($_GET,'mode')) { if (x($_GET,'mode')) {
$template_file = "filebrowser_plain.tpl"; $template_file = "filebrowser_plain.tpl";
$mode = "?mode=".$_GET['mode']; $mode = "?mode=".$_GET['mode'];
} }
//echo "<pre>"; var_dump($a->argv); killme(); //echo "<pre>"; var_dump($a->argv); killme();
switch($a->argv[1]){ switch($a->argv[1]){
case "image": case "image":
$path = array( array("", t("Photos"))); $path = array( array("", t("Photos")));
$albums = false; $albums = false;
$sql_extra = ""; $sql_extra = "";
$sql_extra2 = " ORDER BY created DESC LIMIT 0, 10"; $sql_extra2 = " ORDER BY created DESC LIMIT 0, 10";
if ($a->argc==2){ if ($a->argc==2){
$albums = q("SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = %d ", $albums = q("SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = %d ",
intval(local_user()) intval(local_user())
@ -41,9 +41,9 @@ function fbrowser_content($a){
// anon functions only from 5.3.0... meglio tardi che mai.. // anon functions only from 5.3.0... meglio tardi che mai..
$folder1 = function($el) use ($mode) {return array(bin2hex($el['album']),$el['album']);}; $folder1 = function($el) use ($mode) {return array(bin2hex($el['album']),$el['album']);};
$albums = array_map( $folder1 , $albums); $albums = array_map( $folder1 , $albums);
} }
$album = ""; $album = "";
if ($a->argc==3){ if ($a->argc==3){
$album = hex2bin($a->argv[2]); $album = hex2bin($a->argv[2]);
@ -51,14 +51,14 @@ function fbrowser_content($a){
$sql_extra2 = ""; $sql_extra2 = "";
$path[]=array($a->argv[2], $album); $path[]=array($a->argv[2], $album);
} }
$r = q("SELECT `resource-id`, `id`, `filename`, type, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `desc` $r = q("SELECT `resource-id`, `id`, `filename`, type, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `desc`
FROM `photo` WHERE `uid` = %d AND (height <= 320 AND width <= 320) $sql_extra FROM `photo` WHERE `uid` = %d $sql_extra
GROUP BY `resource-id` $sql_extra2", GROUP BY `resource-id` $sql_extra2",
intval(local_user()) intval(local_user())
); );
function files1($rr){ function files1($rr){
global $a; global $a;
$types = Photo::supportedTypes(); $types = Photo::supportedTypes();
$ext = $types[$rr['type']]; $ext = $types[$rr['type']];
@ -70,16 +70,16 @@ function fbrowser_content($a){
$filename_e = $rr['filename']; $filename_e = $rr['filename'];
} }
return array( return array(
$a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['hiq'] . '.' .$ext, $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '.' .$ext,
$filename_e, $filename_e,
$a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.'. $ext $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.'. $ext
); );
} }
$files = array_map("files1", $r); $files = array_map("files1", $r);
$tpl = get_markup_template($template_file); $tpl = get_markup_template($template_file);
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
'$type' => 'image', '$type' => 'image',
'$baseurl' => $a->get_baseurl(), '$baseurl' => $a->get_baseurl(),
@ -89,16 +89,16 @@ function fbrowser_content($a){
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),
'$nickname' => $a->user['nickname'], '$nickname' => $a->user['nickname'],
)); ));
break; break;
case "file": case "file":
if ($a->argc==2){ if ($a->argc==2){
$files = q("SELECT id, filename, filetype FROM `attach` WHERE `uid` = %d ", $files = q("SELECT id, filename, filetype FROM `attach` WHERE `uid` = %d ",
intval(local_user()) intval(local_user())
); );
function files2($rr){ global $a; function files2($rr){ global $a;
list($m1,$m2) = explode("/",$rr['filetype']); list($m1,$m2) = explode("/",$rr['filetype']);
$filetype = ( (file_exists("images/icons/$m1.png"))?$m1:"zip"); $filetype = ( (file_exists("images/icons/$m1.png"))?$m1:"zip");
@ -109,12 +109,12 @@ function fbrowser_content($a){
$filename_e = $rr['filename']; $filename_e = $rr['filename'];
} }
return array( $a->get_baseurl() . '/attach/' . $rr['id'], $filename_e, $a->get_baseurl() . '/images/icons/16/' . $filetype . '.png'); return array( $a->get_baseurl() . '/attach/' . $rr['id'], $filename_e, $a->get_baseurl() . '/images/icons/16/' . $filetype . '.png');
} }
$files = array_map("files2", $files); $files = array_map("files2", $files);
//echo "<pre>"; var_dump($files); killme(); //echo "<pre>"; var_dump($files); killme();
$tpl = get_markup_template($template_file); $tpl = get_markup_template($template_file);
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
'$type' => 'file', '$type' => 'file',
@ -125,18 +125,18 @@ function fbrowser_content($a){
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),
'$nickname' => $a->user['nickname'], '$nickname' => $a->user['nickname'],
)); ));
} }
break; break;
} }
if (x($_GET,'mode')) { if (x($_GET,'mode')) {
return $o; return $o;
} else { } else {
echo $o; echo $o;
killme(); killme();
} }
} }

View File

@ -60,7 +60,7 @@ function parseurl_getsiteinfo_cached($url, $no_guessing = false, $do_oembed = tr
$data = parseurl_getsiteinfo($url, $no_guessing, $do_oembed); $data = parseurl_getsiteinfo($url, $no_guessing, $do_oembed);
Cache::set("parse_url:".$no_guessing.":".$do_oembed.":".$url,serialize($data)); Cache::set("parse_url:".$no_guessing.":".$do_oembed.":".$url,serialize($data), CACHE_DAY);
return $data; return $data;
} }

View File

@ -1,4 +1,8 @@
<?php <?php
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
require_once('mod/dirfind.php');
function search_saved_searches() { function search_saved_searches() {
@ -92,9 +96,6 @@ function search_content(&$a) {
nav_set_selected('search'); nav_set_selected('search');
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
$o = '<h3>' . t('Search') . '</h3>'; $o = '<h3>' . t('Search') . '</h3>';
@ -110,21 +111,34 @@ function search_content(&$a) {
} }
$o .= search($search,'search-box','/search',((local_user()) ? true : false)); $o .= search($search,'search-box','/search',((local_user()) ? true : false), false);
if(strpos($search,'#') === 0) { if(strpos($search,'#') === 0) {
$tag = true; $tag = true;
$search = substr($search,1); $search = substr($search,1);
} }
if(strpos($search,'@') === 0) { if(strpos($search,'@') === 0) {
require_once('mod/dirfind.php');
return dirfind_content($a); return dirfind_content($a);
} }
if(strpos($search,'!') === 0) { if(strpos($search,'!') === 0) {
require_once('mod/dirfind.php');
return dirfind_content($a); return dirfind_content($a);
} }
if(x($_GET,'search-option'))
switch($_GET['search-option']) {
case 'fulltext':
break;
case 'tags':
$tag = true;
break;
case 'contacts':
return dirfind_content($a, "@");
break;
case 'forums':
return dirfind_content($a, "!");
break;
}
if(! $search) if(! $search)
return $o; return $o;

View File

@ -5,17 +5,22 @@ require_once('include/datetime.php');
function wall_attach_post(&$a) { function wall_attach_post(&$a) {
$r_json = (x($_GET,'response') && $_GET['response']=='json');
if($a->argc > 1) { if($a->argc > 1) {
$nick = $a->argv[1]; $nick = $a->argv[1];
$r = q("SELECT `user`.*, `contact`.`id` FROM `user` LEFT JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1", $r = q("SELECT `user`.*, `contact`.`id` FROM `user` LEFT JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1",
dbesc($nick) dbesc($nick)
); );
if(! count($r)) if(! count($r)){
if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
return; return;
}
} } else {
else if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
return; return;
}
$can_post = false; $can_post = false;
$visitor = 0; $visitor = 0;
@ -52,12 +57,15 @@ function wall_attach_post(&$a) {
} }
} }
if(! $can_post) { if(! $can_post) {
if ($r_json) { echo json_encode(['error'=>t('Permission denied.')]); killme(); }
notice( t('Permission denied.') . EOL ); notice( t('Permission denied.') . EOL );
killme(); killme();
} }
if(! x($_FILES,'userfile')) if(! x($_FILES,'userfile')) {
if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
killme(); killme();
}
$src = $_FILES['userfile']['tmp_name']; $src = $_FILES['userfile']['tmp_name'];
$filename = basename($_FILES['userfile']['name']); $filename = basename($_FILES['userfile']['name']);
@ -72,13 +80,23 @@ function wall_attach_post(&$a) {
*/ */
if($filesize <=0) { if($filesize <=0) {
notice(t('Sorry, maybe your upload is bigger than the PHP configuration allows') . EOL .(t('Or - did you try to upload an empty file?')) . EOL); $msg = t('Sorry, maybe your upload is bigger than the PHP configuration allows') . EOL .(t('Or - did you try to upload an empty file?'));
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
notice( $msg. EOL );
}
@unlink($src); @unlink($src);
killme(); killme();
} }
if(($maxfilesize) && ($filesize > $maxfilesize)) { if(($maxfilesize) && ($filesize > $maxfilesize)) {
echo sprintf(t('File exceeds size limit of %s'), formatBytes($maxfilesize)) . EOL; $msg = sprintf(t('File exceeds size limit of %s'), formatBytes($maxfilesize));
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL ;
}
@unlink($src); @unlink($src);
killme(); killme();
} }
@ -90,7 +108,12 @@ function wall_attach_post(&$a) {
$limit = service_class_fetch($page_owner_uid,'attach_upload_limit'); $limit = service_class_fetch($page_owner_uid,'attach_upload_limit');
if(($limit !== false) && (($r[0]['total'] + strlen($imagedata)) > $limit)) { if(($limit !== false) && (($r[0]['total'] + strlen($imagedata)) > $limit)) {
echo upgrade_message(true) . EOL ; $msg = upgrade_message(true);
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL ;
}
@unlink($src); @unlink($src);
killme(); killme();
} }
@ -119,7 +142,12 @@ function wall_attach_post(&$a) {
@unlink($src); @unlink($src);
if(! $r) { if(! $r) {
echo ( t('File upload failed.') . EOL); $msg = t('File upload failed.');
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL ;
}
killme(); killme();
} }
@ -130,14 +158,21 @@ function wall_attach_post(&$a) {
); );
if(! count($r)) { if(! count($r)) {
echo ( t('File upload failed.') . EOL); $msg = t('File upload failed.');
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL ;
}
killme(); killme();
} }
if ($r_json) { echo json_encode(['ok'=>true]); killme(); }
$lf = "\n"; $lf = "\n";
echo $lf . $lf . '[attachment]' . $r[0]['id'] . '[/attachment]' . $lf; echo $lf . $lf . '[attachment]' . $r[0]['id'] . '[/attachment]' . $lf;
killme(); killme();
// NOTREACHED // NOTREACHED
} }

View File

@ -6,26 +6,29 @@ function wall_upload_post(&$a, $desktopmode = true) {
logger("wall upload: starting new upload", LOGGER_DEBUG); logger("wall upload: starting new upload", LOGGER_DEBUG);
$r_json = (x($_GET,'response') && $_GET['response']=='json');
if($a->argc > 1) { if($a->argc > 1) {
if(! x($_FILES,'media')) { if(! x($_FILES,'media')) {
$nick = $a->argv[1]; $nick = $a->argv[1];
$r = q("SELECT `user`.*, `contact`.`id` FROM `user` INNER JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1", $r = q("SELECT `user`.*, `contact`.`id` FROM `user` INNER JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1",
dbesc($nick) dbesc($nick)
); );
if(! count($r)) if(! count($r)){
return; if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
} return;
else { }
} else {
$user_info = api_get_user($a); $user_info = api_get_user($a);
$r = q("SELECT `user`.*, `contact`.`id` FROM `user` INNER JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1", $r = q("SELECT `user`.*, `contact`.`id` FROM `user` INNER JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1",
dbesc($user_info['screen_name']) dbesc($user_info['screen_name'])
); );
} }
} } else {
else if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
return; return;
}
$can_post = false; $can_post = false;
$visitor = 0; $visitor = 0;
@ -62,14 +65,19 @@ function wall_upload_post(&$a, $desktopmode = true) {
} }
} }
if(! $can_post) { if(! $can_post) {
if ($r_json) { echo json_encode(['error'=>t('Permission denied.')]); killme(); }
notice( t('Permission denied.') . EOL ); notice( t('Permission denied.') . EOL );
killme(); killme();
} }
if(! x($_FILES,'userfile') && ! x($_FILES,'media')) if(! x($_FILES,'userfile') && ! x($_FILES,'media')){
if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
killme(); killme();
}
$src = "";
if(x($_FILES,'userfile')) { if(x($_FILES,'userfile')) {
$src = $_FILES['userfile']['tmp_name']; $src = $_FILES['userfile']['tmp_name'];
$filename = basename($_FILES['userfile']['name']); $filename = basename($_FILES['userfile']['name']);
@ -98,6 +106,12 @@ function wall_upload_post(&$a, $desktopmode = true) {
$filetype = $_FILES['media']['type']; $filetype = $_FILES['media']['type'];
} }
if ($src=="") {
if ($r_json) { echo json_encode(['error'=>t('Invalid request.')]); killme(); }
notice(t('Invalid request.').EOL);
killme();
}
// This is a special treatment for picture upload from Twidere // This is a special treatment for picture upload from Twidere
if (($filename == "octet-stream") AND ($filetype != "")) { if (($filename == "octet-stream") AND ($filetype != "")) {
$filename = $filetype; $filename = $filetype;
@ -109,6 +123,7 @@ function wall_upload_post(&$a, $desktopmode = true) {
// If there is a temp name, then do a manual check // If there is a temp name, then do a manual check
// This is more reliable than the provided value // This is more reliable than the provided value
$imagedata = getimagesize($src); $imagedata = getimagesize($src);
if ($imagedata) if ($imagedata)
$filetype = $imagedata['mime']; $filetype = $imagedata['mime'];
@ -119,7 +134,12 @@ function wall_upload_post(&$a, $desktopmode = true) {
$maximagesize = get_config('system','maximagesize'); $maximagesize = get_config('system','maximagesize');
if(($maximagesize) && ($filesize > $maximagesize)) { if(($maximagesize) && ($filesize > $maximagesize)) {
echo sprintf( t('Image exceeds size limit of %s'), formatBytes($maximagesize)) . EOL; $msg = sprintf( t('Image exceeds size limit of %s'), formatBytes($maximagesize));
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL;
}
@unlink($src); @unlink($src);
killme(); killme();
} }
@ -131,7 +151,12 @@ function wall_upload_post(&$a, $desktopmode = true) {
$limit = service_class_fetch($page_owner_uid,'photo_upload_limit'); $limit = service_class_fetch($page_owner_uid,'photo_upload_limit');
if(($limit !== false) && (($r[0]['total'] + strlen($imagedata)) > $limit)) { if(($limit !== false) && (($r[0]['total'] + strlen($imagedata)) > $limit)) {
echo upgrade_message(true) . EOL ; $msg = upgrade_message(true);
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL;
}
@unlink($src); @unlink($src);
killme(); killme();
} }
@ -141,7 +166,12 @@ function wall_upload_post(&$a, $desktopmode = true) {
$ph = new Photo($imagedata, $filetype); $ph = new Photo($imagedata, $filetype);
if(! $ph->is_valid()) { if(! $ph->is_valid()) {
echo ( t('Unable to process image.') . EOL); $msg = t('Unable to process image.');
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL;
}
@unlink($src); @unlink($src);
killme(); killme();
} }
@ -169,7 +199,12 @@ function wall_upload_post(&$a, $desktopmode = true) {
$r = $ph->store($page_owner_uid, $visitor, $hash, $filename, t('Wall Photos'), 0, 0, $defperm); $r = $ph->store($page_owner_uid, $visitor, $hash, $filename, t('Wall Photos'), 0, 0, $defperm);
if(! $r) { if(! $r) {
echo ( t('Image upload failed.') . EOL); $msg = t('Image upload failed.');
if ($r_json) {
echo json_encode(['error'=>$msg]);
} else {
echo $msg. EOL;
}
killme(); killme();
} }
@ -192,9 +227,10 @@ function wall_upload_post(&$a, $desktopmode = true) {
if (!$desktopmode) { if (!$desktopmode) {
$r = q("SELECT `id`, `datasize`, `width`, `height`, `type` FROM `photo` WHERE `resource-id` = '%s' ORDER BY `width` DESC LIMIT 1", $hash); $r = q("SELECT `id`, `datasize`, `width`, `height`, `type` FROM `photo` WHERE `resource-id` = '%s' ORDER BY `width` DESC LIMIT 1", $hash);
if (!$r) if (!$r){
if ($r_json) { echo json_encode(['error'=>'']); killme(); }
return false; return false;
}
$picture = array(); $picture = array();
$picture["id"] = $r[0]["id"]; $picture["id"] = $r[0]["id"];
@ -206,9 +242,12 @@ function wall_upload_post(&$a, $desktopmode = true) {
$picture["picture"] = $a->get_baseurl()."/photo/{$hash}-0.".$ph->getExt(); $picture["picture"] = $a->get_baseurl()."/photo/{$hash}-0.".$ph->getExt();
$picture["preview"] = $a->get_baseurl()."/photo/{$hash}-{$smallest}.".$ph->getExt(); $picture["preview"] = $a->get_baseurl()."/photo/{$hash}-{$smallest}.".$ph->getExt();
if ($r_json) { echo json_encode(['picture'=>$picture]); killme(); }
return $picture; return $picture;
} }
if ($r_json) { echo json_encode(['ok'=>true]); killme(); }
/* mod Waitman Gobble NO WARRANTY */ /* mod Waitman Gobble NO WARRANTY */
//if we get the signal then return the image url info in BBCODE, otherwise this outputs the info and bails (for the ajax image uploader on wall post) //if we get the signal then return the image url info in BBCODE, otherwise this outputs the info and bails (for the ajax image uploader on wall post)

View File

@ -1,6 +1,6 @@
<?php <?php
define( 'UPDATE_VERSION' , 1187 ); define( 'UPDATE_VERSION' , 1188 );
/** /**
* *

File diff suppressed because it is too large Load Diff

View File

@ -72,7 +72,7 @@ $a->strings["Update now"] = "Jetzt aktualisieren";
$a->strings["Currently blocked"] = "Derzeit geblockt"; $a->strings["Currently blocked"] = "Derzeit geblockt";
$a->strings["Currently ignored"] = "Derzeit ignoriert"; $a->strings["Currently ignored"] = "Derzeit ignoriert";
$a->strings["Currently archived"] = "Momentan archiviert"; $a->strings["Currently archived"] = "Momentan archiviert";
$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt von anderen"; $a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor andere";
$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein"; $a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein";
$a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen"; $a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen";
$a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."; $a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt.";
@ -471,7 +471,7 @@ $a->strings["Banner/Logo"] = "Banner/Logo";
$a->strings["Shortcut icon"] = "Shortcut Icon"; $a->strings["Shortcut icon"] = "Shortcut Icon";
$a->strings["Touch icon"] = "Touch Icon"; $a->strings["Touch icon"] = "Touch Icon";
$a->strings["Additional Info"] = "Zusätzliche Informationen"; $a->strings["Additional Info"] = "Zusätzliche Informationen";
$a->strings["For public servers: you can add additional information here that will be listed at dir.friendica.com/siteinfo."] = "Für öffentliche Server kannst Du hier zusätzliche Informationen angeben, die dann auf Dir.friendica.com/siteinfo angezeigt werden."; $a->strings["For public servers: you can add additional information here that will be listed at %s/siteinfo."] = "Für öffentliche Server kannst Du hier zusätzliche Informationen angeben, die dann auf %s/siteinfo angezeigt werden.";
$a->strings["System language"] = "Systemsprache"; $a->strings["System language"] = "Systemsprache";
$a->strings["System theme"] = "Systemweites Theme"; $a->strings["System theme"] = "Systemweites Theme";
$a->strings["Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"] = "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - <a href='#' id='cnftheme'>Theme-Einstellungen ändern</a>"; $a->strings["Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"] = "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - <a href='#' id='cnftheme'>Theme-Einstellungen ändern</a>";
@ -880,6 +880,8 @@ $a->strings["Disable intelligent shortening"] = "Intelligentes Link kürzen auss
$a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = "Normalerweise versucht das System den besten Link zu finden um ihn zu gekürzten Postings hinzu zu fügen. Wird diese Option ausgewählt wird stets ein Link auf die originale Friendica Nachricht beigefügt."; $a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = "Normalerweise versucht das System den besten Link zu finden um ihn zu gekürzten Postings hinzu zu fügen. Wird diese Option ausgewählt wird stets ein Link auf die originale Friendica Nachricht beigefügt.";
$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatisch allen GNU Social (OStatus) Followern/Erwähnern folgen"; $a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatisch allen GNU Social (OStatus) Followern/Erwähnern folgen";
$a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = "Wenn du eine Nachricht eines unbekannten OStatus Nutzers bekommst, entscheidet diese Option wie diese behandelt werden soll. Ist die Option aktiviert, wird ein neuer Kontakt für den Verfasser erstellt,."; $a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = "Wenn du eine Nachricht eines unbekannten OStatus Nutzers bekommst, entscheidet diese Option wie diese behandelt werden soll. Ist die Option aktiviert, wird ein neuer Kontakt für den Verfasser erstellt,.";
$a->strings["Your legacy GNU Social account"] = "Dein alter GNU Social Account";
$a->strings["If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done."] = "Wenn du deinen alten GNU Socual/Statusnet Accountnamen hier angibst (Fprmat name@domain.tld) werden deine Kontakte automatisch hinzugefügt. Dieses Feld wird geleert, wenn die Kontakte hinzugefügt wurden.";
$a->strings["Built-in support for %s connectivity is %s"] = "Eingebaute Unterstützung für Verbindungen zu %s ist %s"; $a->strings["Built-in support for %s connectivity is %s"] = "Eingebaute Unterstützung für Verbindungen zu %s ist %s";
$a->strings["Diaspora"] = "Diaspora"; $a->strings["Diaspora"] = "Diaspora";
$a->strings["enabled"] = "eingeschaltet"; $a->strings["enabled"] = "eingeschaltet";
@ -938,7 +940,7 @@ $a->strings["Allow friends to tag your posts?"] = "Dürfen Deine Kontakte Deine
$a->strings["Allow us to suggest you as a potential friend to new members?"] = "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?"; $a->strings["Allow us to suggest you as a potential friend to new members?"] = "Dürfen wir Dich neuen Mitgliedern als potentiellen Kontakt vorschlagen?";
$a->strings["Permit unknown people to send you private mail?"] = "Dürfen Dir Unbekannte private Nachrichten schicken?"; $a->strings["Permit unknown people to send you private mail?"] = "Dürfen Dir Unbekannte private Nachrichten schicken?";
$a->strings["Profile is <strong>not published</strong>."] = "Profil ist <strong>nicht veröffentlicht</strong>."; $a->strings["Profile is <strong>not published</strong>."] = "Profil ist <strong>nicht veröffentlicht</strong>.";
$a->strings["Your Identity Address is"] = "Die Adresse Deines Profils lautet:"; $a->strings["Your Identity Address is <strong>'%s'</strong> or '%s'."] = "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'.";
$a->strings["Automatically expire posts after this many days:"] = "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:"; $a->strings["Automatically expire posts after this many days:"] = "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:";
$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht."; $a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht.";
$a->strings["Advanced expiration settings"] = "Erweiterte Verfallseinstellungen"; $a->strings["Advanced expiration settings"] = "Erweiterte Verfallseinstellungen";
@ -1026,7 +1028,7 @@ $a->strings["Hide this contact"] = "Verberge diesen Kontakt";
$a->strings["Welcome home %s."] = "Willkommen zurück %s."; $a->strings["Welcome home %s."] = "Willkommen zurück %s.";
$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s."; $a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s.";
$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:"; $a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:";
$a->strings["If you are not yet a member of the free social web, <a href=\"http://dir.friendica.com/siteinfo\">follow this link to find a public Friendica site and join us today</a>."] = "Wenn Du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"http://Dir.friendica.com/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten."; $a->strings["If you are not yet a member of the free social web, <a href=\"%s/siteinfo\">follow this link to find a public Friendica site and join us today</a>."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten.";
$a->strings["Friend/Connection Request"] = "Freundschafts-/Kontaktanfrage"; $a->strings["Friend/Connection Request"] = "Freundschafts-/Kontaktanfrage";
$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"; $a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca";
$a->strings["Friendica"] = "Friendica"; $a->strings["Friendica"] = "Friendica";

View File

@ -194,6 +194,9 @@ key { display: inline; background-color: #eee; color: #666; padding:0.2em; font-
.fbrowser.file img { display: inline; } .fbrowser.file img { display: inline; }
.fbrowser.file p { display: inline; white-space: nowrap; } .fbrowser.file p { display: inline; white-space: nowrap; }
.fbrowser .upload { clear: both; padding-top: 1em;} .fbrowser .upload { clear: both; padding-top: 1em;}
.fbrowser .error { background: #ffeeee; border: 1px solid #994444; color: #994444; padding: 0.5em;}
.fbrowser .error a.close { float: right; font-weight: bold; }
.fbrowser .error.hidden { display: none; }
a { a {
cursor: pointer; cursor: pointer;

View File

@ -13,11 +13,14 @@
}); });
</script> </script>
<div class="fbrowser {{$type}}"> <div class="fbrowser {{$type}}">
<div class="error hidden">
<span></span> <a href="#" class='close'>X</a>
</div>
<div class="path"> <div class="path">
{{foreach $path as $p}}<a href="#" data-folder="{{$p.0}}">{{$p.1}}</a>{{/foreach}} {{foreach $path as $p}}<a href="#" data-folder="{{$p.0}}">{{$p.1}}</a>{{/foreach}}
</div> </div>
{{if $folders }} {{if $folders }}
<div class="folders"> <div class="folders">
<ul> <ul>
@ -25,7 +28,7 @@
</ul> </ul>
</div> </div>
{{/if}} {{/if}}
<div class="list"> <div class="list">
{{foreach $files as $f}} {{foreach $files as $f}}
<div class="photo-album-image-wrapper"> <div class="photo-album-image-wrapper">
@ -38,11 +41,11 @@
</div> </div>
<div class="upload"> <div class="upload">
<button id="upload-{{$type}}"><img id="profile-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait|escape:'html'}}" style="display: none;" /> {{"Upload"|t}}</button> <button id="upload-{{$type}}"><img id="profile-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait|escape:'html'}}" style="display: none;" /> {{"Upload"|t}}</button>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -2,6 +2,15 @@
<form action="{{$action_url}}" method="get" > <form action="{{$action_url}}" method="get" >
{{strip}} {{strip}}
<input type="text" name="search" id="search-text" placeholder="{{$search_label}}" value="{{$s}}" /> <input type="text" name="search" id="search-text" placeholder="{{$search_label}}" value="{{$s}}" />
{{if $searchoption}}
<select name="search-option" id="search-options">
<option value="fulltext">{{$searchoption.0}}</option>
<option value="tags">{{$searchoption.1}}</option>
<option value="contacts">{{$searchoption.2}}</option>
<option value="forums">{{$searchoption.3}}</option>
</select>
{{/if}}
<input type="submit" name="submit" id="search-submit" value="{{$search_label}}" /> <input type="submit" name="submit" id="search-submit" value="{{$search_label}}" />
{{if $savedsearch}} {{if $savedsearch}}
<input type="submit" name="save" id="search-save" value="{{$save_label}}" /> <input type="submit" name="save" id="search-save" value="{{$save_label}}" />

View File

@ -72,6 +72,12 @@
<li role="search" id="search-box"> <li role="search" id="search-box">
<form method="get" action="{{$nav.search.0}}"> <form method="get" action="{{$nav.search.0}}">
<input accesskey="s" id="search-text" class="nav-menu-search" type="text" value="" name="search"> <input accesskey="s" id="search-text" class="nav-menu-search" type="text" value="" name="search">
<select name="search-option">
<option value="fulltext">{{$nav.searchoption.0}}</option>
<option value="tags">{{$nav.searchoption.1}}</option>
<option value="contacts">{{$nav.searchoption.2}}</option>
<option value="forums">{{$nav.searchoption.3}}</option>
</select>
</form> </form>
</li> </li>
{{/if}} {{/if}}