1
0
Fork 0
Conflicts:
	include/poller.php
This commit is contained in:
Michael - piratica.eu 2013-01-20 14:17:09 +01:00
commit cc9ce39e3f
741 changed files with 9987 additions and 5350 deletions

View file

@ -12,10 +12,9 @@ require_once('library/Mobile_Detect/Mobile_Detect.php');
require_once('include/features.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '3.1.1572' );
define ( 'FRIENDICA_VERSION', '3.1.1589' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1159 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@ -385,8 +384,14 @@ if(! class_exists('App')) {
'template_engine' => 'internal',
);
public $smarty3_ldelim = '{{';
public $smarty3_rdelim = '}}';
private $ldelim = array(
'internal' => '',
'smarty3' => '{{'
);
private $rdelim = array(
'internal' => '',
'smarty3' => '}}'
);
private $scheme;
private $hostname;
@ -617,17 +622,17 @@ if(! class_exists('App')) {
*/
if(!isset($this->page['htmlhead']))
$this->page['htmlhead'] = '';
$tpl = get_markup_template('head.tpl');
// If we're using Smarty, then doing replace_macros() will replace
// any unrecognized variables with a blank string. Since we delay
// replacing $stylesheet until later, we need to replace it now
// with another variable name
if($this->theme['template_engine'] === 'smarty3')
$stylesheet = $this->smarty3_ldelim . '$stylesheet' . $this->smarty3_rdelim;
$stylesheet = $this->get_template_ldelim('smarty3') . '$stylesheet' . $this->get_template_rdelim('smarty3');
else
$stylesheet = '$stylesheet';
$tpl = get_markup_template('head.tpl');
$this->page['htmlhead'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
'$local_user' => local_user(),
@ -688,6 +693,31 @@ if(! class_exists('App')) {
return $this->cached_profile_image[$avatar_image];
}
function get_template_engine() {
return $this->theme['template_engine'];
}
function set_template_engine($engine = 'internal') {
$this->theme['template_engine'] = 'internal';
switch($engine) {
case 'smarty3':
if(is_writable('view/smarty3/'))
$this->theme['template_engine'] = 'smarty3';
break;
default:
break;
}
}
function get_template_ldelim($engine = 'internal') {
return $this->ldelim[$engine];
}
function get_template_rdelim($engine = 'internal') {
return $this->rdelim[$engine];
}
}
}
@ -776,16 +806,12 @@ function is_ajax() {
// Primarily involved with database upgrade, but also sets the
// base url for use in cmdline programs which don't have
// $_SERVER variables, and synchronising the state of installed plugins.
// $_SERVER variables
if(! function_exists('check_config')) {
function check_config(&$a) {
$build = get_config('system','build');
if(! x($build))
$build = set_config('system','build',DB_UPDATE_VERSION);
$url = get_config('system','url');
// if the url isn't set or the stored url is radically different
@ -800,6 +826,10 @@ if(! function_exists('check_config')) {
$url = set_config('system','url',$a->get_baseurl());
$build = get_config('system','build');
if(! x($build))
$build = set_config('system','build',DB_UPDATE_VERSION);
if($build != DB_UPDATE_VERSION) {
$stored = intval($build);
$current = intval(DB_UPDATE_VERSION);
@ -848,9 +878,10 @@ if(! function_exists('check_config')) {
'$error' => sprintf( t('Update %s failed. See error logs.'), $x)
));
$subject=sprintf(t('Update Error at %s'), $a->get_baseurl());
require_once('include/email.php');
$subject = email_header_encode($subject,'UTF-8');
mail($a->config['admin_email'], $subject, $email_msg,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
//try the logger
@ -867,6 +898,14 @@ if(! function_exists('check_config')) {
}
}
return;
}
}
if(! function_exists('check_plugins')) {
function check_plugins(&$a) {
/**
*
* Synchronise plugins:
@ -1108,6 +1147,10 @@ if(! function_exists('get_max_import_size')) {
* Profile information is placed in the App structure for later retrieval.
* Honours the owner's chosen theme for display.
*
* IMPORTANT: Should only be run in the _init() functions of a module. That ensures that
* the theme is chosen before the _init() function of a theme is run, which will usually
* load a lot of theme-specific content
*
*/
if(! function_exists('profile_load')) {
@ -1167,7 +1210,7 @@ if(! function_exists('profile_load')) {
if(! $r[0]['is-default']) {
$x = q("select `pub_keywords` from `profile` where uid = %d and `is-default` = 1 limit 1",
intval($profile_uid)
intval($r[0]['profile_uid'])
);
if($x && count($x))
$r[0]['pub_keywords'] = $x[0]['pub_keywords'];
@ -1175,7 +1218,7 @@ if(! function_exists('profile_load')) {
$a->profile = $r[0];
$a->profile['mobile-theme'] = get_pconfig($profile_uid, 'system', 'mobile_theme');
$a->profile['mobile-theme'] = get_pconfig($a->profile['profile_uid'], 'system', 'mobile_theme');
$a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
@ -1186,6 +1229,8 @@ if(! function_exists('profile_load')) {
* load/reload current theme info
*/
$a->set_template_engine(); // reset the template engine to the default in case the user's theme doesn't specify one
$theme_info_file = "view/theme/".current_theme()."/theme.php";
if (file_exists($theme_info_file)){
require_once($theme_info_file);
@ -1344,8 +1389,6 @@ if(! function_exists('profile_sidebar')) {
}
$tpl = get_markup_template('profile_vcard.tpl');
$p = array();
foreach($profile as $k => $v) {
$k = str_replace('-','_',$k);
@ -1355,6 +1398,7 @@ if(! function_exists('profile_sidebar')) {
if($a->theme['template_engine'] === 'internal')
$location = template_escape($location);
$tpl = get_markup_template('profile_vcard.tpl');
$o .= replace_macros($tpl, array(
'$profile' => $p,
'$connect' => $connect,
@ -1612,7 +1656,7 @@ if(! function_exists('current_theme')) {
// $mobile_detect = new Mobile_Detect();
// $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
$is_mobile = $a->is_mobile || $a->is_tablet;
if($is_mobile) {
if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
$system_theme = '';
@ -1947,16 +1991,9 @@ function clear_cache($basepath = "", $path = "") {
}
function set_template_engine(&$a, $engine = 'internal') {
// This function is no longer necessary, but keep it as a wrapper to the class method
// to avoid breaking themes again unnecessarily
$a->theme['template_engine'] = 'internal';
if(is_writable('view/smarty3/')) {
switch($engine) {
case 'smarty3':
$a->theme['template_engine'] = 'smarty3';
break;
default:
break;
}
}
$a->set_template_engine($engine);
}

View file

@ -241,6 +241,20 @@ CREATE TABLE IF NOT EXISTS `deliverq` (
-- --------------------------------------------------------
--
-- Table structure for table `dsprphotoq`
--
CREATE TABLE `dsprphotoq` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`msg` mediumtext NOT NULL,
`attempt` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `event`
--

View file

@ -42,6 +42,10 @@ function z_mime_content_type($filename) {
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'ogg' => 'application/ogg',
'mp4' => 'video/mp4',
'avi' => 'video/x-msvideo',
'wmv' => 'video/x-ms-wmv',
'wma' => 'audio/x-ms-wma',
// adobe
'pdf' => 'application/pdf',

View file

@ -254,12 +254,22 @@ function bb_ShareAttributes($match) {
if ($matches[1] != "")
$profile = $matches[1];
$posted = "";
preg_match("/posted='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "")
$posted = $matches[1];
preg_match('/posted="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "")
$posted = $matches[1];
$reldate = (($posted) ? " " . relative_date($posted) : '');
$headline = '<div class="shared_header">';
if ($avatar != "")
$headline .= '<img src="'.$avatar.'" height="32" width="32" >';
$headline .= sprintf(t('<span><a href="%s" target="external-link">%s</a> wrote the following <a href="%s" target="external-link">post</a>:</span>'), $profile, $author, $link);
$headline .= sprintf(t('<span><a href="%s" target="external-link">%s</a> wrote the following <a href="%s" target="external-link">post</a>'.$reldate.':</span>'), $profile, $author, $link);
$headline .= "</div>";
@ -312,6 +322,9 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = preg_replace("/\s?\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","[share$1]$2[/share]",$Text);
$Text = preg_replace("/\s?\[quote(.*?)\]\s?(.*?)\s?\[\/quote\]\s?/ism","[quote$1]$2[/quote]",$Text);
$Text = preg_replace("/\n\[code\]/ism", "[code]", $Text);
$Text = preg_replace("/\[\/code\]\n/ism", "[/code]", $Text);
// when the content is meant exporting to other systems then remove the avatar picture since this doesn't really look good on these systems
if (!$tryoembed)
$Text = preg_replace("/\[share(.*?)avatar\s?=\s?'.*?'\s?(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","\n[share$1$2]$3[/share]",$Text);
@ -327,12 +340,13 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = str_replace("\r\n","\n", $Text);
// removing multiplicated newlines
$search = array("\n\n\n", "\n ", " \n", "[/quote]\n\n", "\n[/quote]");
$replace = array("\n\n", "\n", "\n", "[/quote]\n", "[/quote]");
do {
$oldtext = $Text;
$Text = str_replace($search, $replace, $Text);
} while ($oldtext != $Text);
// $search = array("\n\n\n", "\n ", " \n", "[/quote]\n\n", "\n[/quote]");
// $replace = array("\n\n", "\n", "\n", "[/quote]\n", "[/quote]");
// do {
// $oldtext = $Text;
// $Text = str_replace($search, $replace, $Text);
// } while ($oldtext != $Text);
$Text = str_replace(array("\r","\n"), array('<br />','<br />'), $Text);

View file

@ -524,7 +524,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$hashtags = array();
$mentions = array();
$taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)",
$taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`",
intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION));
foreach($taglist as $tag) {
@ -896,26 +896,21 @@ function format_like($cnt,$arr,$type,$id) {
if($cnt == 1)
$o .= (($type === 'like') ? sprintf( t('%s likes this.'), $arr[0]) : sprintf( t('%s doesn\'t like this.'), $arr[0])) . EOL ;
else {
//$spanatts = 'class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');"';
$spanatts = "class=\"fakelink\" onclick=\"openClose('{$type}list-$id');\"";
switch($type) {
case 'like':
// $phrase = sprintf( t('<span %1$s>%2$d people</span> like this.'), $spanatts, $cnt);
$mood = t('like this');
$phrase = sprintf( t('<span %1$s>%2$d people</span> like this'), $spanatts, $cnt);
break;
case 'dislike':
// $phrase = sprintf( t('<span %1$s>%2$d people</span> don\'t like this.'), $spanatts, $cnt);
$mood = t('don\'t like this');
$phrase = sprintf( t('<span %1$s>%2$d people</span> don\'t like this'), $spanatts, $cnt);
break;
}
$tpl = get_markup_template("voting_fakelink.tpl");
$phrase = replace_macros($tpl, array(
'$vote_id' => $type . 'list-' . $id,
'$count' => $cnt,
'$people' => t('people'),
'$vote_mood' => $mood
$phrase .= EOL ;
$o .= replace_macros(get_markup_template('voting_fakelink.tpl'), array(
'$phrase' => $phrase,
'$type' => $type,
'$id' => $id
));
$o .= $phrase;
// $o .= EOL ;
$total = count($arr);
if($total >= MAX_LIKERS)

29
include/dbupdate.php Normal file
View file

@ -0,0 +1,29 @@
<?php
require_once("boot.php");
function dbupdate_run(&$argv, &$argc) {
global $a, $db;
if(is_null($a)){
$a = new App;
}
if(is_null($db)) {
@include(".htconfig.php");
require_once("include/dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data);
}
load_config('config');
load_config('system');
check_config($a);
}
if (array_search(__file__,get_included_files())===0){
dbupdate_run($argv,$argc);
killme();
}

View file

@ -16,7 +16,9 @@ function diaspora_dispatch_public($msg) {
return;
}
$r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 AND `account_removed` = 0 ",
$r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN
( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' )
AND `account_expired` = 0 AND `account_removed` = 0 ",
dbesc(NETWORK_DIASPORA),
dbesc($msg['author'])
);
@ -32,7 +34,7 @@ function diaspora_dispatch_public($msg) {
function diaspora_dispatch($importer,$msg) {
function diaspora_dispatch($importer,$msg,$attempt=1) {
$ret = 0;
@ -88,7 +90,7 @@ function diaspora_dispatch($importer,$msg) {
$ret = diaspora_signed_retraction($importer,$xmlbase->relayable_retraction,$msg);
}
elseif($xmlbase->photo) {
$ret = diaspora_photo($importer,$xmlbase->photo,$msg);
$ret = diaspora_photo($importer,$xmlbase->photo,$msg,$attempt);
}
elseif($xmlbase->conversation) {
$ret = diaspora_conversation($importer,$xmlbase->conversation,$msg);
@ -1669,7 +1671,7 @@ function diaspora_message($importer,$xml,$msg) {
}
function diaspora_photo($importer,$xml,$msg) {
function diaspora_photo($importer,$xml,$msg,$attempt=1) {
$a = get_app();
@ -1707,7 +1709,14 @@ function diaspora_photo($importer,$xml,$msg) {
dbesc($status_message_guid)
);
if(! count($r)) {
logger('diaspora_photo: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid);
if($attempt <= 3) {
q("INSERT INTO dsprphotoq (uid, msg, attempt) VALUES (%d, '%s', %d)",
intval($importer['uid']),
dbesc(serialize($msg)),
intval($attempt + 1)
);
}
logger('diaspora_photo: attempt = ' . $attempt . '; status message not found: ' . $status_message_guid . ' for photo: ' . $guid);
return;
}
@ -2333,13 +2342,15 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
// $theiraddr = $contact['addr'];
// Diaspora doesn't support threaded comments
/*if($item['thr-parent']) {
// Diaspora doesn't support threaded comments, but some
// versions of Diaspora (i.e. Diaspora-pistos) support
// likes on comments
if($item['verb'] === ACTIVITY_LIKE && $item['thr-parent']) {
$p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1",
dbesc($item['thr-parent'])
);
}
else {*/
else {
// The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
// return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
// The only item with `parent` and `id` as the parent id is the parent item.
@ -2347,7 +2358,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
intval($item['parent']),
intval($item['parent'])
);
//}
}
if(count($p))
$parent = $p[0];
else
@ -2409,13 +2420,15 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$body = $item['body'];
$text = html_entity_decode(bb2diaspora($body));
// Diaspora doesn't support threaded comments
/*if($item['thr-parent']) {
// Diaspora doesn't support threaded comments, but some
// versions of Diaspora (i.e. Diaspora-pistos) support
// likes on comments
if($item['verb'] === ACTIVITY_LIKE && $item['thr-parent']) {
$p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1",
dbesc($item['thr-parent'])
);
}
else {*/
else {
// The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
// return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
// The only item with `parent` and `id` as the parent id is the parent item.
@ -2423,7 +2436,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
intval($item['parent']),
intval($item['parent'])
);
//}
}
if(count($p))
$parent = $p[0];
else

50
include/dsprphotoq.php Normal file
View file

@ -0,0 +1,50 @@
<?php
require_once("boot.php");
require_once('include/diaspora.php');
function dsprphotoq_run($argv, $argc){
global $a, $db;
if(is_null($a)){
$a = new App;
}
if(is_null($db)){
@include(".htconfig.php");
require_once("include/dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data);
};
logger("diaspora photo queue: running", LOGGER_DEBUG);
$r = q("SELECT * FROM dsprphotoq");
if(!$r)
return;
$dphotos = $r;
logger("diaspora photo queue: processing " . count($dphotos) . " photos");
foreach($dphotos as $dphoto) {
$r = q("SELECT * FROM user WHERE uid = %d",
intval($dphoto['uid'])
);
if(!$r) {
logger("diaspora photo queue: user " . $dphoto['uid'] . " not found");
return;
}
$ret = diaspora_dispatch($r[0],unserialize($dphoto['msg']),$dphoto['attempt']);
q("DELETE FROM dsprphotoq WHERE id = %d",
intval($dphoto['id'])
);
}
}
if (array_search(__file__,get_included_files())===0){
dsprphotoq_run($argv,$argc);
killme();
}

View file

@ -471,8 +471,8 @@ class enotify {
// generate a multipart/alternative message header
$messageHeader =
$params['additionalMailHeader'] .
"From: {$params['fromName']} <{$params['fromEmail']}>\n" .
"Reply-To: {$params['fromName']} <{$params['replyTo']}>\n" .
"From: $fromName <{$params['fromEmail']}>\n" .
"Reply-To: $fromName <{$params['replyTo']}>\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/alternative; boundary=\"{$mimeBoundary}\"";
@ -493,7 +493,7 @@ class enotify {
// send the message
$res = mail(
$params['toEmail'], // send to address
$params['messageSubject'], // subject
$messageSubject, // subject
$multipartMessageBody, // message body
$messageHeader // message headers
);

View file

@ -24,8 +24,11 @@ class FriendicaSmarty extends Smarty {
$this->setConfigDir('view/smarty3/config/');
$this->setCacheDir('view/smarty3/cache/');
$this->left_delimiter = $a->smarty3_ldelim;
$this->right_delimiter = $a->smarty3_rdelim;
$this->left_delimiter = $a->get_template_ldelim('smarty3');
$this->right_delimiter = $a->get_template_rdelim('smarty3');
// Don't report errors so verbosely
$this->error_reporting = E_ALL & ~E_NOTICE;
}
function parsed($template = '') {

View file

@ -209,7 +209,7 @@ function html2plain($html, $wraplength = 75, $compact = false)
if (!$compact) {
$counter = 1;
foreach ($urls as $id=>$url)
if (strpos($message, $url) == false)
if (strpos($message, $url) === false)
$message .= "\n".$url." ";
//$message .= "\n[".($counter++)."] ".$url;
}

View file

@ -6,6 +6,8 @@ require_once('include/salmon.php');
require_once('include/crypto.php');
require_once('include/Photo.php');
require_once('include/tags.php');
require_once('include/text.php');
require_once('include/email.php');
function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) {
@ -238,7 +240,7 @@ function construct_activity_object($item) {
$r->link = str_replace('&','&amp;', $r->link);
$r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link);
$o .= $r->link;
}
}
else
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n";
}
@ -270,7 +272,7 @@ function construct_activity_target($item) {
$r->link = str_replace('&','&amp;', $r->link);
$r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link);
$o .= $r->link;
}
}
else
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n";
}
@ -882,7 +884,7 @@ function item_store($arr,$force_parent = false) {
$arr['gravity'] = 0;
elseif(activity_match($arr['verb'],ACTIVITY_POST))
$arr['gravity'] = 6;
else
else
$arr['gravity'] = 6; // extensible catchall
if(! x($arr,'type'))
@ -1072,10 +1074,9 @@ function item_store($arr,$force_parent = false) {
if(count($r)) {
$current_post = $r[0]['id'];
create_tags_from_item($r[0]['id']);
logger('item_store: created item ' . $current_post);
}
else {
create_tags_from_item($r[0]['id']);
} else {
logger('item_store: could not locate created item');
return 0;
}
@ -1153,6 +1154,15 @@ function item_store($arr,$force_parent = false) {
tag_deliver($arr['uid'],$current_post);
// Store the fresh generated item into the cache
$cachefile = get_cachefile($arr["guid"]."-".hash("md5", $arr['body']));
if (($cachefile != '') AND !file_exists($cachefile)) {
$s = prepare_text($arr['body']);
file_put_contents($cachefile, $s);
logger('item_store: put item '.$current_post.' into cachefile '.$cachefile);
}
return $current_post;
}
@ -3401,9 +3411,9 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
'$sitename' => $a->config['sitename']
));
$res = mail($r[0]['email'],
(($sharing) ? t('A new person is sharing with you at ') : t("You have a new follower at ")) . $a->config['sitename'],
email_header_encode((($sharing) ? t('A new person is sharing with you at ') : t("You have a new follower at ")) . $a->config['sitename'],'UTF-8'),
$email,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
@ -3763,11 +3773,11 @@ function item_getfeedtags($item) {
function item_getfeedattach($item) {
$ret = '';
$arr = explode(',',$item['attach']);
$arr = explode('[/attach],',$item['attach']);
if(count($arr)) {
foreach($arr as $r) {
$matches = false;
$cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches);
$cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches);
if($cnt) {
$ret .= '<link rel="enclosure" href="' . xmlify($matches[1]) . '" type="' . xmlify($matches[3]) . '" ';
if(intval($matches[2]))

View file

@ -37,6 +37,7 @@ require_once('include/html2plain.php');
* tag (in photos.php, poke.php, tagger.php)
* tgroup (in items.php)
* wall-new (in photos.php, item.php)
* removeme (in Contact.php)
*
* and ITEM_ID is the id of the item in the database that needs to be sent to others.
*/
@ -138,14 +139,17 @@ function notifier_run(&$argv, &$argc){
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($item_id));
if (! $r)
return;
$user = $r[0];
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($item_id));
if (! $r)
return;
$self = $r[0];
$r = q("SELECT * FROM `contact` WHERE `self` = 0 AND `uid` = %d", intval($item_id));
if(! $r)
return;
require_once('include/Contact.php');
foreach($r as $contact) {
terminate_friendship($user, $self, $contact);

View file

@ -62,6 +62,10 @@ function poller_run(&$argv, &$argc){
proc_run('php',"include/queue.php");
// run diaspora photo queue process in the background
proc_run('php',"include/dsprphotoq.php");
// expire any expired accounts
q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0

View file

@ -2,7 +2,6 @@
require_once('include/datetime.php');
/*
* poco_load
*

View file

@ -25,7 +25,7 @@ function create_tags_from_item($itemid) {
$searchpath = $a->get_baseurl()."/search?tag=";
$messages = q("SELECT `uri`, `uid`, `id`, `created`, `edited`, `commented`, `received`, `changed`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
$messages = q("SELECT `guid`, `uid`, `id`, `edited`, `deleted`, `title`, `body`, `tag` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
if (!$messages)
return;
@ -42,6 +42,14 @@ function create_tags_from_item($itemid) {
if ($message["deleted"])
return;
$cachefile = get_cachefile($message["guid"]."-".hash("md5", $message['body']));
if (($cachefile != '') AND !file_exists($cachefile)) {
$s = prepare_text($message['body']);
file_put_contents($cachefile, $s);
logger('create_tags_from_item: put item '.$message["id"].' into cachefile '.$cachefile);
}
$taglist = explode(",", $message["tag"]);
$tags = "";

View file

@ -23,7 +23,6 @@ function replace_macros($s,$r) {
if(gettype($s) === 'string') {
$template = $s;
$s = new FriendicaSmarty();
$s->error_reporting = E_ALL & ~E_NOTICE;
}
foreach($r as $key=>$value) {
if($key[0] === '$') {
@ -490,12 +489,12 @@ function get_template_file($a, $filename, $root = '') {
if($root !== '' && $root[strlen($root)-1] !== '/')
$root = $root . '/';
if(file_exists($root . "view/theme/$theme/$filename"))
$template_file = $root . "view/theme/$theme/$filename";
elseif (x($a->theme_info,"extends") && file_exists($root . "view/theme/".$a->theme_info["extends"]."/$filename"))
$template_file = $root . "view/theme/".$a->theme_info["extends"]."/$filename";
if(file_exists("{$root}view/theme/$theme/$filename"))
$template_file = "{$root}view/theme/$theme/$filename";
elseif (x($a->theme_info,"extends") && file_exists("{$root}view/theme/{$a->theme_info["extends"]}/$filename"))
$template_file = "{$root}view/theme/{$a->theme_info["extends"]}/$filename";
else
$template_file = $root . "view/$filename";
$template_file = "{$root}view/$filename";
return $template_file;
}}
@ -1019,7 +1018,8 @@ function prepare_body($item,$attach = false) {
$a = get_app();
call_hooks('prepare_body_init', $item);
$cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body']));
//$cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body']));
$cachefile = get_cachefile($item["guid"]."-".hash("md5", $item['body']));
if (($cachefile != '')) {
if (file_exists($cachefile))
@ -1027,6 +1027,7 @@ function prepare_body($item,$attach = false) {
else {
$s = prepare_text($item['body']);
file_put_contents($cachefile, $s);
logger('prepare_body: put item '.$item["id"].' into cachefile '.$cachefile);
}
} else
$s = prepare_text($item['body']);
@ -1043,13 +1044,13 @@ function prepare_body($item,$attach = false) {
return $s;
}
$arr = explode(',',$item['attach']);
$arr = explode('[/attach],',$item['attach']);
if(count($arr)) {
$s .= '<div class="body-attach">';
foreach($arr as $r) {
$matches = false;
$icon = '';
$cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches, PREG_SET_ORDER);
$cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches, PREG_SET_ORDER);
if($cnt) {
foreach($matches as $mtch) {
$icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/')));

View file

@ -7,6 +7,7 @@ require_once('include/text.php');
require_once('include/pgettext.php');
require_once('include/datetime.php');
function create_user($arr) {
// Required: { username, nickname, email } or { openid_url }

View file

@ -1,5 +1,6 @@
<?php
/**
*
* Friendica
@ -43,7 +44,7 @@ load_translation_table($lang);
require_once("include/dba.php");
if(! $install) {
if(!$install) {
$db = new dba($db_host, $db_user, $db_pass, $db_data, $install);
unset($db_host, $db_user, $db_pass, $db_data);
@ -59,6 +60,8 @@ if(! $install) {
call_hooks('init_1');
}
$maintenance = get_config('system', 'maintenance');
/**
*
@ -89,7 +92,7 @@ if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
load_translation_table($lang);
}
if((x($_GET,'zrl')) && (! $install)) {
if((x($_GET,'zrl')) && (!$install && !$maintenance)) {
$_SESSION['my_url'] = $_GET['zrl'];
$a->query_string = preg_replace('/[\?&]zrl=(.*?)([\?&]|$)/is','',$a->query_string);
zrl_init($a);
@ -135,8 +138,12 @@ if(! x($_SESSION,'sysmsg_info'))
if($install)
$a->module = 'install';
else
check_config($a);
elseif($maintenance)
$a->module = 'maintenance';
else {
proc_run('php', 'include/dbupdate.php');
check_plugins($a);
}
nav_set_selected('nothing');
@ -237,7 +244,7 @@ if (file_exists($theme_info_file)){
if(! x($a->page,'content'))
$a->page['content'] = '';
if(! $install)
if(!$install && !$maintenance)
call_hooks('page_content_top',$a->page['content']);
/**
@ -372,20 +379,14 @@ $a->page['content'] .= '<div id="pause"></div>';
*
*/
if($a->module != 'install') {
if($a->module != 'install' && $a->module != 'maintenance') {
nav($a);
}
/**
* Build the page - now that we have all the components
* Add a "toggle mobile" link if we're using a mobile device
*/
if(!$a->theme['stylesheet'])
$stylesheet = current_theme_url();
else
$stylesheet = $a->theme['stylesheet'];
$a->page['htmlhead'] = replace_macros($a->page['htmlhead'], array('$stylesheet' => $stylesheet));
if($a->is_mobile || $a->is_tablet) {
if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
$link = $a->get_baseurl() . '/toggle_mobile?address=' . curPageURL();
@ -399,6 +400,16 @@ if($a->is_mobile || $a->is_tablet) {
));
}
/**
* Build the page - now that we have all the components
*/
if(!$a->theme['stylesheet'])
$stylesheet = current_theme_url();
else
$stylesheet = $a->theme['stylesheet'];
$a->page['htmlhead'] = replace_macros($a->page['htmlhead'], array('$stylesheet' => $stylesheet));
$page = $a->page;
$profile = $a->profile;

View file

@ -253,10 +253,9 @@ ACL.prototype.populate = function(data){
//console.log(html);
that.list_content.append(html);
});
$(".acl-list-item img[data-src]").each(function(i, el){
// Replace data-src attribute with src attribute for every image
$(".acl-list-item img[data-src]", that.list_content).each(function(i, el){
// Add src attribute for images with a data-src attribute
$(el).attr('src', $(el).data("src"));
$(el).removeAttr("data-src");
});
that.update_view();
}

2
js/acl.min.js vendored

File diff suppressed because one or more lines are too long

View file

@ -183,9 +183,8 @@
});
$("img[data-src]", nnm).each(function(i, el){
// Replace data-src attribute with src attribute for every image
// Add src attribute for images with a data-src attribute
$(el).attr('src', $(el).data("src"));
$(el).removeAttr("data-src");
});
}

View file

@ -34,9 +34,11 @@ function attach_init(&$a) {
return;
}
// Use quotes around the filename to prevent a "multiple Content-Disposition"
// error in Chrome for filenames with commas in them
header('Content-type: ' . $r[0]['filetype']);
header('Content-disposition: attachment; filename=' . $r[0]['filename']);
header('Content-disposition: attachment; filename="' . $r[0]['filename'] . '"');
echo $r[0]['data'];
killme();
// NOTREACHED
}
}

View file

@ -11,7 +11,7 @@ function visible_lf($s) {
function babel_content(&$a) {
$o .= '<h3>Babel Diagnostic</h3>';
$o .= '<h1>Babel Diagnostic</h1>';
$o .= '<form action="babel" method="post">';
$o .= t('Source (bbcode) text:') . EOL . '<textarea name="text" >' . htmlspecialchars($_REQUEST['text']) .'</textarea>' . EOL;
@ -28,31 +28,35 @@ function babel_content(&$a) {
if(x($_REQUEST,'text')) {
$text = trim($_REQUEST['text']);
$o .= t("Source input: ") . EOL. EOL;
$o .= "<h2>" . t("Source input: ") . "</h2>" . EOL. EOL;
$o .= visible_lf($text) . EOL. EOL;
$html = bbcode($text);
$o .= t("bb2html: ") . EOL. EOL;
$o .= "<h2>" . t("bb2html (raw HTML): ") . "</h2>" . EOL. EOL;
$o .= htmlspecialchars($html). EOL. EOL;
//$html = bbcode($text);
$o .= "<h2>" . t("bb2html: ") . "</h2>" . EOL. EOL;
$o .= $html. EOL. EOL;
$bbcode = html2bbcode($html);
$o .= t("bb2html2bb: ") . EOL. EOL;
$o .= "<h2>" . t("bb2html2bb: ") . "</h2>" . EOL. EOL;
$o .= visible_lf($bbcode) . EOL. EOL;
$diaspora = bb2diaspora($text);
$o .= t("bb2md: ") . EOL. EOL;
$o .= "<h2>" . t("bb2md: ") . "</h2>" . EOL. EOL;
$o .= visible_lf($diaspora) . EOL. EOL;
$html = Markdown($diaspora);
$o .= t("bb2md2html: ") . EOL. EOL;
$o .= "<h2>" . t("bb2md2html: ") . "</h2>" . EOL. EOL;
$o .= $html. EOL. EOL;
$bbcode = diaspora2bb($diaspora);
$o .= t("bb2dia2bb: ") . EOL. EOL;
$o .= "<h2>" . t("bb2dia2bb: ") . "</h2>" . EOL. EOL;
$o .= visible_lf($bbcode) . EOL. EOL;
$bbcode = html2bbcode($html);
$o .= t("bb2md2html2bb: ") . EOL. EOL;
$o .= "<h2>" . t("bb2md2html2bb: ") . "</h2>" . EOL. EOL;
$o .= visible_lf($bbcode) . EOL. EOL;
@ -62,12 +66,12 @@ function babel_content(&$a) {
if(x($_REQUEST,'d2bbtext')) {
$d2bbtext = trim($_REQUEST['d2bbtext']);
$o .= t("Source input (Diaspora format): ") . EOL. EOL;
$o .= "<h2>" . t("Source input (Diaspora format): ") . "</h2>" . EOL. EOL;
$o .= visible_lf($d2bbtext) . EOL. EOL;
$bb = diaspora2bb($d2bbtext);
$o .= t("diaspora2bb: ") . EOL. EOL;
$o .= "<h2>" . t("diaspora2bb: ") . "</h2>" . EOL. EOL;
$o .= visible_lf($bb) . EOL. EOL;
}

View file

@ -746,10 +746,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
'$dfrn_url' => $r[0]['url'],
'$uid' => $newuid )
);
$res = mail($r[0]['email'], sprintf( t("Connection accepted at %s") , $a->config['sitename']),
require_once('include/email.php');
$res = mail($r[0]['email'], email_header_encode( sprintf( t("Connection accepted at %s") , $a->config['sitename']),'UTF-8'),
$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );

View file

@ -1,6 +1,18 @@
<?php
function display_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
return;
}
$nick = (($a->argc > 1) ? $a->argv[1] : '');
profile_load($a,$nick);
}
function display_content(&$a, $update = 0) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
@ -25,10 +37,10 @@ function display_content(&$a, $update = 0) {
else {
$nick = (($a->argc > 1) ? $a->argv[1] : '');
}
profile_load($a,$nick);
if($update) {
$item_id = $_REQUEST['item_id'];
$a->profile = array('uid' => intval($update), 'profile_uid' => intval($update));
}
else {
$item_id = (($a->argc > 2) ? intval($a->argv[2]) : 0);
@ -108,6 +120,8 @@ function display_content(&$a, $update = 0) {
$sql_extra = item_permissions_sql($a->profile['uid'],$remote_contact,$groups);
if($update) {
dbg(1);
$r = q("SELECT id FROM item WHERE item.uid = %d
AND `item`.`parent` = ( SELECT `parent` FROM `item` WHERE ( `id` = '%s' OR `uri` = '%s' ))
$sql_extra AND unseen = 1",
@ -115,6 +129,7 @@ function display_content(&$a, $update = 0) {
dbesc($item_id),
dbesc($item_id)
);
dbg(0);
if(!$r)
return '';
}

View file

@ -250,8 +250,8 @@ function events_content(&$a) {
$r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`,
`item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id`
WHERE `event`.`uid` = %d and event.ignore = %d
AND (( `adjust` = 0 AND `finish` >= '%s' AND `start` <= '%s' )
OR ( `adjust` = 1 AND `finish` >= '%s' AND `start` <= '%s' )) ",
AND (( `adjust` = 0 AND ( `finish` >= '%s' or nofinish ) AND `start` <= '%s' )
OR ( `adjust` = 1 AND ( `finish` >= '%s' or nofinish ) AND `start` <= '%s' )) ",
intval(local_user()),
intval($ignored),
dbesc($start),

View file

@ -220,16 +220,15 @@ function group_content(&$a) {
}
}
$context['$groupeditor'] = $groupeditor;
$context['$desc'] = t('Click on a contact to add or remove.');
if($change) {
$context['$groupeditor'] = $groupeditor;
$tpl = get_markup_template('groupeditor.tpl');
echo replace_macros($tpl, $context);
killme();
}
$context['$groupedit_info'] = $groupeditor;
return replace_macros($tpl, $context);
}

View file

@ -25,8 +25,12 @@ function home_content(&$a) {
if(x($_SESSION,'mobile-theme'))
unset($_SESSION['mobile-theme']);
if(file_exists('home.html'))
$o .= file_get_contents('home.html');
if(file_exists('home.html')){
if(file_exists('home.css')){
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/home.css' . '" media="all" />';}
$o .= file_get_contents('home.html');}
else $o .= '<h1>' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '</h1>';

View file

@ -7,6 +7,8 @@
*
*/
require_once('include/email.php');
function invite_post(&$a) {
if(! local_user()) {
@ -56,7 +58,7 @@ function invite_post(&$a) {
else
$nmessage = $message;
$res = mail($recip, sprintf( t('Please join us on Friendica'), $a->config['sitename']),
$res = mail($recip, email_header_encode( t('Please join us on Friendica'),'UTF-8'),
$nmessage,
"From: " . $a->user['email'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"

View file

@ -757,6 +757,15 @@ function item_post(&$a) {
// update filetags in pconfig
file_tag_update_pconfig($uid,$categories_old,$categories_new,'category');
// Store the fresh generated item into the cache
$cachefile = get_cachefile($datarray["guid"]."-".hash("md5", $datarray['body']));
if (($cachefile != '') AND !file_exists($cachefile)) {
$s = prepare_text($datarray['body']);
file_put_contents($cachefile, $s);
logger('mod_item: put item '.$r[0]['id'].' into cachefile '.$cachefile);
}
if($parent) {
// This item is the last leaf and gets the comment box, clear any ancestors

View file

@ -1,5 +1,6 @@
<?php
require_once('include/email.php');
function lostpass_post(&$a) {
@ -40,9 +41,9 @@ function lostpass_post(&$a) {
'$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
));
$res = mail($email, sprintf( t('Password reset requested at %s'),$a->config['sitename']),
$res = mail($email, email_header_encode(sprintf( t('Password reset requested at %s'),$a->config['sitename']),'UTF-8'),
$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
@ -103,8 +104,10 @@ function lostpass_content(&$a) {
'$new_password' => $new_password,
'$uid' => $newuid ));
$res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
$subject = sprintf( t('Your password has been changed at %s'), $a->config['sitename']);
$res = mail($email, email_header_encode( $subject, 'UTF-8'), $email_tpl,
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );

7
mod/maintenance.php Normal file
View file

@ -0,0 +1,7 @@
<?php
function maintenance_content(&$a) {
return replace_macros(get_markup_template('maintenance.tpl'), array(
'$sysdown' => t('System down for maintenance')
));
}

View file

@ -516,7 +516,7 @@ function message_content(&$a) {
'$to' => t('To:'),
'$showinputs' => '',
'$subject' => t('Subject:'),
'$subjtxt' => template_escape($message['title']),
'$subjtxt' => $subjtxt_e,
'$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ',
'$yourmessage' => t('Your message:'),
'$text' => '',

View file

@ -236,8 +236,6 @@ function parse_url_content(&$a) {
$str_tags = '';
$textmode = false;
if(local_user() && intval(get_pconfig(local_user(),'system','plaintext')))
$textmode = true;
if(local_user() && (! feature_enabled(local_user(),'richtext')))
$textmode = true;

View file

@ -33,7 +33,6 @@ function profile_init(&$a) {
auto_redir($a, $which);
}
set_template_engine($a); // reset the template engine to the default in case the user's theme doesn't specify one
profile_load($a,$which,$profile);
$blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);

View file

@ -1,6 +1,145 @@
<?php
function profiles_init(&$a) {
nav_set_selected('profiles');
if(! local_user()) {
return;
}
if(($a->argc > 2) && ($a->argv[1] === "drop") && intval($a->argv[2])) {
$r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1",
intval($a->argv[2]),
intval(local_user())
);
if(! count($r)) {
notice( t('Profile not found.') . EOL);
goaway($a->get_baseurl(true) . '/profiles');
return; // NOTREACHED
}
check_form_security_token_redirectOnErr('/profiles', 'profile_drop', 't');
// move every contact using this profile as their default to the user default
$r = q("UPDATE `contact` SET `profile-id` = (SELECT `profile`.`id` AS `profile-id` FROM `profile` WHERE `profile`.`is-default` = 1 AND `profile`.`uid` = %d LIMIT 1) WHERE `profile-id` = %d AND `uid` = %d ",
intval(local_user()),
intval($a->argv[2]),
intval(local_user())
);
$r = q("DELETE FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($a->argv[2]),
intval(local_user())
);
if($r)
info( t('Profile deleted.') . EOL);
goaway($a->get_baseurl(true) . '/profiles');
return; // NOTREACHED
}
if(($a->argc > 1) && ($a->argv[1] === 'new')) {
check_form_security_token_redirectOnErr('/profiles', 'profile_new', 't');
$r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d",
intval(local_user()));
$num_profiles = count($r0);
$name = t('Profile-') . ($num_profiles + 1);
$r1 = q("SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1",
intval(local_user()));
$r2 = q("INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`)
VALUES ( %d, '%s', '%s', '%s', '%s' )",
intval(local_user()),
dbesc($name),
dbesc($r1[0]['name']),
dbesc($r1[0]['photo']),
dbesc($r1[0]['thumb'])
);
$r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1",
intval(local_user()),
dbesc($name)
);
info( t('New profile created.') . EOL);
if(count($r3) == 1)
goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']);
goaway($a->get_baseurl(true) . '/profiles');
}
if(($a->argc > 2) && ($a->argv[1] === 'clone')) {
check_form_security_token_redirectOnErr('/profiles', 'profile_clone', 't');
$r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d",
intval(local_user()));
$num_profiles = count($r0);
$name = t('Profile-') . ($num_profiles + 1);
$r1 = q("SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1",
intval(local_user()),
intval($a->argv[2])
);
if(! count($r1)) {
notice( t('Profile unavailable to clone.') . EOL);
killme();
return;
}
unset($r1[0]['id']);
$r1[0]['is-default'] = 0;
$r1[0]['publish'] = 0;
$r1[0]['net-publish'] = 0;
$r1[0]['profile-name'] = dbesc($name);
dbesc_array($r1[0]);
$r2 = dbq("INSERT INTO `profile` (`"
. implode("`, `", array_keys($r1[0]))
. "`) VALUES ('"
. implode("', '", array_values($r1[0]))
. "')" );
$r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1",
intval(local_user()),
dbesc($name)
);
info( t('New profile created.') . EOL);
if(count($r3) == 1)
goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']);
goaway($a->get_baseurl(true) . '/profiles');
return; // NOTREACHED
}
if(($a->argc > 1) && (intval($a->argv[1]))) {
$r = q("SELECT id FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($a->argv[1]),
intval(local_user())
);
if(! count($r)) {
notice( t('Profile not found.') . EOL);
killme();
return;
}
profile_load($a,$a->user['nickname'],$r[0]['id']);
}
}
function profiles_post(&$a) {
if(! local_user()) {
@ -424,127 +563,12 @@ function profile_activity($changed, $value) {
function profiles_content(&$a) {
$o = '';
nav_set_selected('profiles');
if(! local_user()) {
notice( t('Permission denied.') . EOL);
return;
}
if(($a->argc > 2) && ($a->argv[1] === "drop") && intval($a->argv[2])) {
$r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1",
intval($a->argv[2]),
intval(local_user())
);
if(! count($r)) {
notice( t('Profile not found.') . EOL);
goaway($a->get_baseurl(true) . '/profiles');
return; // NOTREACHED
}
check_form_security_token_redirectOnErr('/profiles', 'profile_drop', 't');
// move every contact using this profile as their default to the user default
$r = q("UPDATE `contact` SET `profile-id` = (SELECT `profile`.`id` AS `profile-id` FROM `profile` WHERE `profile`.`is-default` = 1 AND `profile`.`uid` = %d LIMIT 1) WHERE `profile-id` = %d AND `uid` = %d ",
intval(local_user()),
intval($a->argv[2]),
intval(local_user())
);
$r = q("DELETE FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($a->argv[2]),
intval(local_user())
);
if($r)
info( t('Profile deleted.') . EOL);
goaway($a->get_baseurl(true) . '/profiles');
return; // NOTREACHED
}
if(($a->argc > 1) && ($a->argv[1] === 'new')) {
check_form_security_token_redirectOnErr('/profiles', 'profile_new', 't');
$r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d",
intval(local_user()));
$num_profiles = count($r0);
$name = t('Profile-') . ($num_profiles + 1);
$r1 = q("SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1",
intval(local_user()));
$r2 = q("INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`)
VALUES ( %d, '%s', '%s', '%s', '%s' )",
intval(local_user()),
dbesc($name),
dbesc($r1[0]['name']),
dbesc($r1[0]['photo']),
dbesc($r1[0]['thumb'])
);
$r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1",
intval(local_user()),
dbesc($name)
);
info( t('New profile created.') . EOL);
if(count($r3) == 1)
goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']);
goaway($a->get_baseurl(true) . '/profiles');
}
if(($a->argc > 2) && ($a->argv[1] === 'clone')) {
check_form_security_token_redirectOnErr('/profiles', 'profile_clone', 't');
$r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d",
intval(local_user()));
$num_profiles = count($r0);
$name = t('Profile-') . ($num_profiles + 1);
$r1 = q("SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1",
intval(local_user()),
intval($a->argv[2])
);
if(! count($r1)) {
notice( t('Profile unavailable to clone.') . EOL);
return;
}
unset($r1[0]['id']);
$r1[0]['is-default'] = 0;
$r1[0]['publish'] = 0;
$r1[0]['net-publish'] = 0;
$r1[0]['profile-name'] = dbesc($name);
dbesc_array($r1[0]);
$r2 = dbq("INSERT INTO `profile` (`"
. implode("`, `", array_keys($r1[0]))
. "`) VALUES ('"
. implode("', '", array_values($r1[0]))
. "')" );
$r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1",
intval(local_user()),
dbesc($name)
);
info( t('New profile created.') . EOL);
if(count($r3) == 1)
goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']);
goaway($a->get_baseurl(true) . '/profiles');
return; // NOTREACHED
}
$o = '';
if(($a->argc > 1) && (intval($a->argv[1]))) {
$r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@ -556,8 +580,6 @@ function profiles_content(&$a) {
return;
}
profile_load($a,$a->user['nickname'],$r[0]['id']);
require_once('include/profile_selectors.php');

View file

@ -1,5 +1,7 @@
<?php
require_once('include/email.php');
if(! function_exists('register_post')) {
function register_post(&$a) {
@ -86,9 +88,9 @@ function register_post(&$a) {
'$password' => $result['password'],
'$uid' => $user['uid'] ));
$res = mail($user['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
$res = mail($user['email'], email_header_encode( sprintf( t('Registration details for %s'), $a->config['sitename']),'UTF-8'),
$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
@ -140,9 +142,9 @@ function register_post(&$a) {
'$hash' => $hash
));
$res = mail($a->config['admin_email'], sprintf(t('Registration request at %s'), $a->config['sitename']),
$res = mail($a->config['admin_email'], email_header_encode( sprintf(t('Registration request at %s'), $a->config['sitename']),'UTF-8'),
$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
@ -239,7 +241,6 @@ function register_content(&$a) {
));
}
$license = '';
$o = get_markup_template("register.tpl");
@ -267,7 +268,7 @@ function register_content(&$a) {
'$openid' => $openid_url,
'$namelabel' => t('Your Full Name ' . "\x28" . 'e.g. Joe Smith' . "\x29" . ': '),
'$addrlabel' => t('Your Email Address: '),
'$nickdesc' => t('Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.'),
'$nickdesc' => str_replace('$sitename',$a->get_hostname(),t('Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.')),
'$nicklabel' => t('Choose a nickname: '),
'$photo' => $photo,
'$publish' => $profile_publish,

View file

@ -1,5 +1,7 @@
<?php
require_once('include/email.php');
function user_allow($hash) {
$a = get_app();
@ -49,9 +51,9 @@ function user_allow($hash) {
'$uid' => $user[0]['uid']
));
$res = mail($user[0]['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
$res = mail($user[0]['email'], email_header_encode( sprintf(t('Registration details for %s'), $a->config['sitename']), 'UTF-8'),
$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );

View file

@ -26,7 +26,8 @@ function share_init(&$a) {
$o = "[share author='".str_replace("'", "&#039;",$r[0]['author-name']).
"' profile='".$r[0]['author-link'].
"' avatar='".$r[0]['author-avatar'].
"' link='".$r[0]['plink']."']\n";
"' link='".$r[0]['plink'].
"' posted='".$r[0]['created']."']\n";
if($r[0]['title'])
$o .= '[b]'.$r[0]['title'].'[/b]'."\n";
$o .= $r[0]['body'];

View file

@ -160,7 +160,12 @@ function wall_upload_post(&$a) {
//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 ($_REQUEST['hush']!='yeah') {
echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]\n\n";
if(local_user() && (! feature_enabled(local_user(),'richtext') || x($_REQUEST['nomce'])) ) {
echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]\n\n";
}
else {
echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."\" alt=\"$basename\" /></a><br /><br />";
}
}
else {
$m = '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]";

View file

@ -1,14 +1,17 @@
#!/usr/bin/python
#
# Script to convert Friendica internal template files into Smarty template files
# Copyright 2012 Zach Prezkuta
# Copyright 2013 Zach Prezkuta
# Licensed under GPL v3
import os, re, string
import sys, getopt
ldelim = '{{'
rdelim = '}}'
addheader = True
def fToSmarty(matches):
match = matches.group(0)
if match == '$j':
@ -77,7 +80,7 @@ def fix_element(element):
if parts[first+1][0] == '$':
# This takes care of elements where the filename is a variable, e.g. {{ inc $file }}
element += 'file:' + ldelim + parts[first+1].rstrip('}') + rdelim
element += ldelim + parts[first+1].rstrip('}') + rdelim
else:
# This takes care of elements where the filename is a path, e.g. {{ inc file.tpl }}
element += parts[first+1].rstrip('}')
@ -93,6 +96,10 @@ def fix_element(element):
def convert(filename, tofilename, php_tpl):
if addheader:
header = ldelim + "*\n *\tAUTOMATICALLY GENERATED TEMPLATE\n *\tDO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN\n *\n *" + rdelim + "\n"
tofilename.write(header)
for line in filename:
newline = ''
st_pos = 0
@ -170,7 +177,39 @@ def convert(filename, tofilename, php_tpl):
tofilename.write(newline)
path = raw_input('Path to template folder to convert: ')
def help(pname):
print "\nUsage:"
print "\t" + pname + " -h\n\n\t\t\tShow this help screen\n"
print "\t" + pname + " -p directory\n\n\t\t\tConvert all .tpl files in directory to\n\t\t\tSmarty templates in directory/smarty3/\n"
print "\t" + pname + "\n\n\t\t\tInteractive mode\n"
#
# Main script
#
path = ''
try:
opts, args = getopt.getopt(sys.argv[1:], "hp:", ['no-header'])
for opt, arg in opts:
if opt == '-h':
help(sys.argv[0])
sys.exit()
elif opt == '-p':
path = arg
elif opt == '--no-header':
addheader = False
except getopt.GetoptError:
help(sys.argv[0])
sys.exit(2)
if path == '':
path = raw_input('Path to template folder to convert: ')
if path[-1:] != '/':
path = path + '/'
@ -189,10 +228,14 @@ for a_file in files:
filename = os.path.join(path,a_file)
ext = a_file.split('.')[-1]
if os.path.isfile(filename) and ext == 'tpl':
with open(filename, 'r') as f:
newfilename = os.path.join(outpath,a_file)
with open(newfilename, 'w') as outf:
print "Converting " + filename + " to " + newfilename
convert(f, outf, php_tpl)
f = open(filename, 'r')
newfilename = os.path.join(outpath,a_file)
outf = open(newfilename, 'w')
print "Converting " + filename + " to " + newfilename
convert(f, outf, php_tpl)
outf.close()
f.close()

View file

@ -79,7 +79,7 @@ server {
# otherwise fall back to front controller
# allow browser to cache them
# added .htm for advanced source code editor library
location ~* \.(jpg|jpeg|gif|png|css|js|htm|html)$ {
location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|svg)$ {
expires 30d;
try_files $uri /index.php?q=$uri&$args;
}

64
mods/updatetpl.py Executable file
View file

@ -0,0 +1,64 @@
#!/usr/bin/python
#
# Script to update Smarty template files from all internal templates
# Copyright 2013 Zach Prezkuta
# Licensed under GPL v3
import os
import sys, getopt
import subprocess
def help(pname):
print "\nUsage:"
print "\t" + pname + " -h\n\n\t\t\tShow this help screen\n"
print "\t" + pname + " -p directory\n\n\t\t\tConvert all .tpl files in top-level\n\t\t\tFriendica directory to Smarty templates\n"
print "\t" + pname + "\n\n\t\t\tInteractive mode\n"
#
# Main script
#
path = ''
try:
opts, args = getopt.getopt(sys.argv[1:], "hp:")
for opt, arg in opts:
if opt == '-h':
help(sys.argv[0])
sys.exit()
elif opt == '-p':
path = arg
except getopt.GetoptError:
help(sys.argv[0])
sys.exit(2)
if path == '':
path = raw_input('Path to top-level Friendica directory: ')
if path[-1:] != '/':
path = path + '/'
tplpaths = ['view/']
names = os.listdir(path + 'view/')
for name in names:
if os.path.isdir(path + 'view/' + name):
if name != 'smarty3' and name != 'theme':
tplpaths.append('view/' + name + '/')
names = os.listdir(path + 'view/theme/')
for name in names:
if os.path.isdir(path + 'view/theme/' + name):
tplpaths.append('view/theme/' + name + '/')
fnull = open(os.devnull, "w")
for tplpath in tplpaths:
print "Converting " + path + tplpath
subprocess.call(['python', path + 'mods/friendica-to-smarty-tpl.py', '-p', path + tplpath], stdout = fnull)
fnull.close()

View file

@ -66,6 +66,7 @@ class Item extends BaseObject {
if(! visible_activity($item)) {
continue;
}
$item['pagedrop'] = $data['pagedrop'];
$child = new Item($item);
$this->add_child($child);
}
@ -150,7 +151,7 @@ class Item extends BaseObject {
$hashtags = array();
$mentions = array();
$taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d)",
$taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`",
intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION));
foreach($taglist as $tag) {
@ -536,13 +537,7 @@ class Item extends BaseObject {
return false;
}
if($a->theme['template_engine'] === 'smarty3') {
$template_file = get_template_file($a, 'smarty3/' . $this->available_templates[$name]);
}
else {
$template_file = $this->available_templates[$name];
}
$this->template = $template_file;
$this->template = $this->available_templates[$name];
}
/**

View file

@ -1371,6 +1371,7 @@ ADD INDEX ( `datasize` ) ");
}
function update_1157() {
<<<<<<< HEAD
$r = q("ALTER TABLE `term` ADD `aid` int(10) unsigned NOT NULL DEFAULT '0',
ADD `uid` int(10) unsigned NOT NULL DEFAULT '0',
ADD INDEX (`uid`),
@ -1380,6 +1381,32 @@ function update_1157() {
return UPDATE_SUCCESS;
}
function update_1158() {
$r = q("CREATE TABLE IF NOT EXISTS `dsprphotoq` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`msg` mediumtext NOT NULL,
`attempt` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8"
);
if($r)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
}
function update_1159() {
$r = q("ALTER TABLE `term` ADD `aid` int(10) unsigned NOT NULL DEFAULT '0',
ADD `uid` int(10) unsigned NOT NULL DEFAULT '0',
ADD INDEX (`uid`),
ADD INDEX (`aid`)");
if(!$r) return UPDATE_FAILED;
return UPDATE_SUCCESS;
}
function update_1160() {
$r = q("ALTER TABLE `item` ADD `mention` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX (`mention`)");
// KEY `mention` (`mention`)
if(!$r) return UPDATE_FAILED;

34
util/config Normal file
View file

@ -0,0 +1,34 @@
#!/usr/bin/env php
<?php
// Red config utility
require_once('include/cli_startup.php');
cli_startup();
if($argc > 3) {
set_config($argv[1],$argv[2],$argv[3]);
echo "config[{$argv[1]}][{$argv[2]}] = " . get_config($argv[1],$argv[2]) . "\n";
}
if($argc == 3) {
echo "config[{$argv[1]}][{$argv[2]}] = " . get_config($argv[1],$argv[2]) . "\n";
}
if($argc == 2) {
load_config($argv[1]);
foreach($a->config[$argv[1]] as $k => $x) {
echo "config[{$argv[1]}][{$k}] = " . $x . "\n";
}
}
if($argc == 1) {
$r = q("select * from config where 1");
if($r) {
foreach($r as $rr) {
echo "config[{$rr['cat']}][{$rr['k']}] = " . $rr['v'] . "\n";
}
}
}

26
util/config.md Normal file
View file

@ -0,0 +1,26 @@
CLI config utility
==================
Usage:
config
displays all config entries
config family
displays all config entries for family (system, database, etc)
config family key
displays single config entry for specified family and key
config family key value
set config entry for specified family and key to value and display result
Notes:
Setting config entries which are manually set in .htconfig.php may result in
conflict between database settings and the manual startup settings.

31
util/maintenance.php Normal file
View file

@ -0,0 +1,31 @@
<?php
require_once("boot.php");
$a = new App;
@include(".htconfig.php");
$lang = get_browser_language();
load_translation_table($lang);
require_once("include/dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data, false);
unset($db_host, $db_user, $db_pass, $db_data);
load_config('config');
load_config('system');
$maint_mode = 1;
if($argc > 1)
$maint_mode = intval($argv[1]);
set_config('system', 'maintenance', $maint_mode);
if($maint_mode)
$mode_str = "maintenance mode";
else
$mode_str = "normal mode";
echo "\n\tSystem set in $mode_str\n\n";
echo "Usage:\n\n";
echo "\tphp {$argv[0]} [1]\tSet the system in maintenance mode\n";
echo "\tphp {$argv[0]} 0 \tSet the system in normal mode\n\n";

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$myname}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<?php
// Set the following for your MySQL installation

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Has rebut un nou missatge privat de '{{$from}}' en {{$siteName}}.
{{$title}}

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
S'ha rebut la sol·licitud de registre d'un nou usuari en
{{$sitename}} que requereix la teva aprovació.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$myname}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Apreciat/da {{$username}},

View file

@ -14,8 +14,8 @@
$tabs
{{ for $contacts as $c }}
{{ inc contact_template.tpl with $contact=$c }}{{ endinc }}
{{ for $contacts as $contact }}
{{ inc contact_template.tpl }}{{ endinc }}
{{ endfor }}
<div id="contact-edit-end"></div>

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},
'{{$from}}' okommentoval položku/konverzaci, kterou následujete.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},
'{{$from}}' okommentoval položku/konverzaci, kterou následujete.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<?php
// Nastavte následující pro Vaši instalaci MySQL

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},
Na webu {{$sitename}} byl zaregistrován požadavek na znovunastavení hesla k Vašemu účtu. Pro potvrzení této žádosti prosím klikněte na potvrzovací odkaz níže, nebo si tento odkaz zkopírujte do adresního řádku prohlížeče.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
{{$from}} Vám poslal(a) novou soukromou zprávu na {{$siteName}}.
{{$title}}

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},
Vaše heslo bylo na Vaši žádost změněno. Prosím zaznamenejte si tuto informaci (nebo si Vaše heslo změňte na nějaké, které si budete pamatovat).

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/milá {{$username}},
Díky za registraci na {{$sitename}}. Váš účet byl vytvořen.
Vaše přihlašovací údaje jsou tato:

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Na webu {{$sitename}} byla vytvořena nová uživatelská registrace, která vyžaduje Vaše schválení.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},
'{{$from}}' obohatil Vaši profilovou zeď.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Milý/Milá {{$username}},
'{{$from}}' obohatil Vaši profilovou zeď.

View file

@ -258,6 +258,11 @@ $a->strings["This is most often a permission setting, as the web server may not
$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = "Na konci této procedury obd nás obdržíte text k uložení v souboru pojmenovaném .htconfig.php ve Vašem Friendica kořenovém adresáři.";
$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Alternativně můžete tento krok přeskočit a provést manuální instalaci. Přečtěte si prosím soubor \"INSTALL.txt\" pro další instrukce.";
$a->strings[".htconfig.php is writable"] = ".htconfig.php je editovatelné";
$a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica používá šablonovací nástroj Smarty3 pro zobrazení svých weobvých stránek. Smarty3 kompiluje šablony do PHP pro zrychlení vykreslování.";
$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Pro uložení kompilovaných šablon, webový server potřebuje mít přístup k zápisu do adresáře view/smarty3/ pod hlavním adresářem instalace Friendica";
$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "prosím ujistěte se, že uživatel web serveru (jako například www-data) má právo zápisu do tohoto adresáře";
$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = "Poznámka: jako bezpečnostní opatření, přidělte právo zápisu pouze k adresáři /view/smarty3/ a nikoliv už k souborům s šablonami (.tpl), které obsahuje.";
$a->strings["view/smarty3 is writable"] = "view/smarty3 je nastaven pro zápis";
$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Url rewrite v .htconfig nefunguje. Prověřte prosím Vaše nastavení serveru.";
$a->strings["Url rewrite is working"] = "Url rewrite je funkční.";
$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Databázový konfigurační soubor \".htconfig.php\" nemohl být uložen. Prosím, použijte přiložený text k vytvoření konfiguračního souboru ve vašem kořenovém adresáři webového serveru.";
@ -615,7 +620,9 @@ $a->strings["Save"] = "Uložit";
$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Došlo k překročení maximálního povoleného počtu registrací za den na tomto serveru. Zkuste to zítra znovu.";
$a->strings["Import"] = "Import";
$a->strings["Move account"] = "Přesunout účet";
$a->strings["You can import an account from another Friendica server. <br>\r\n You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here.<br>\r\n <b>This feature is experimental. We can't import contacts from the OStatus network (statusnet/identi.ca) or from diaspora"] = "Je možné importovat účet z jiného Friendica serveru. <br>\nPotřebujete exportovat Váš účet ze starého serveru a importovat ho zde. My následně znovu vytvoříme Váš účet zde se všemi Vašimi kontakty. Také se pokusíme informovat všechny Vaše přátele o tom, že jste se sem přesunuli.<br>\n<b>Tato funkčnost je experimentální. Nemůžeme importovat kontakty ze sítě OStatus (statusnet/identi.ca) nebo z diaspory.";
$a->strings["You can import an account from another Friendica server."] = "Můžete importovat účet z jiného Friendica serveru.";
$a->strings["You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."] = "Musíte exportovat svůj účet na sterém serveru a nahrát ho zde. My následně vytvoříme Váš původní účet zde včetně všech kontaktů. Zároveň se pokusíme informovat všechny Vaše přátele, že jste se sem přestěhovali.";
$a->strings["This feature is experimental. We can't import contacts from the OStatus network (statusnet/identi.ca) or from Diaspora"] = "Tato funkčnost je experimentální. Nemůžeme importovat kontakty z OSStatus sítí (statusnet/identi.ca) nebo z Diaspory";
$a->strings["Account file"] = "Soubor s účtem";
$a->strings["To export your accont, go to \"Settings->Export your porsonal data\" and select \"Export account\""] = "K exportu Vašeho účtu, jděte do \"Nastavení->Export vašich osobních dat\" a zvolte \" Export účtu\"";
$a->strings["Number of daily wall messages for %s exceeded. Message failed."] = "Došlo k překročení maximálního počtu zpráv na zeď během jednoho dne. Zpráva %s nedoručena.";
@ -800,6 +807,7 @@ $a->strings["Self-signed certificate, use SSL for local links only (discouraged)
$a->strings["File upload"] = "Nahrání souborů";
$a->strings["Policies"] = "Politiky";
$a->strings["Advanced"] = "Pokročilé";
$a->strings["Performance"] = "Výkonnost";
$a->strings["Site name"] = "Název webu";
$a->strings["Banner/Logo"] = "Banner/logo";
$a->strings["System language"] = "Systémový jazyk";
@ -809,6 +817,8 @@ $a->strings["Mobile system theme"] = "Systémové téma zobrazení pro mobilní
$a->strings["Theme for mobile devices"] = "Téma zobrazení pro mobilní zařízení";
$a->strings["SSL link policy"] = "Politika SSL odkazů";
$a->strings["Determines whether generated links should be forced to use SSL"] = "Určuje, zda-li budou generované odkazy používat SSL";
$a->strings["'Share' element"] = "Element \"Sdílet\"";
$a->strings["Activates the bbcode element 'share' for repeating items."] = "Aktivuje bbcode prvek 'share' pro opakované položky.";
$a->strings["Maximum image size"] = "Maximální velikost obrázků";
$a->strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Maximální velikost v bajtech nahraných obrázků. Defaultní je 0, což znamená neomezeno.";
$a->strings["Maximum image length"] = "Maximální velikost obrázků";
@ -864,6 +874,14 @@ $a->strings["Poll interval"] = "Dotazovací interval";
$a->strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Tímto nastavením ovlivníte prodlení mezi aktualizačními procesy běžícími na pozadí, čímž můžete snížit systémovou zátěž. Pokud 0, použijte doručovací interval.";
$a->strings["Maximum Load Average"] = "Maximální průměrné zatížení";
$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maximální zatížení systému před pozastavením procesů zajišťujících doručování aktualizací - defaultně 50";
$a->strings["Use MySQL full text engine"] = "Použít fulltextový vyhledávací stroj MySQL";
$a->strings["Activates the full text engine. Speeds up search - but can only search for four and more characters."] = "Aktivuje fulltextový vyhledávací stroj. Zrychluje vyhledávání ale pouze pro vyhledávání čtyř a více znaků";
$a->strings["Path to item cache"] = "Cesta k položkám vyrovnávací paměti";
$a->strings["Cache duration in seconds"] = "Doba platnosti vyrovnávací paměti v sekundách";
$a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day)."] = "Jak dlouho by měla vyrovnávací paměť držet data? Výchozí hodnota je 86400 sekund (Jeden den).";
$a->strings["Path for lock file"] = "Cesta k souboru zámku";
$a->strings["Temp path"] = "Cesta k dočasným souborům";
$a->strings["Base path to installation"] = "Základní cesta k instalaci";
$a->strings["Update has been marked successful"] = "Aktualizace byla označena jako úspěšná.";
$a->strings["Executing %s failed. Check system logs."] = "Vykonávání %s selhalo. Zkontrolujte chybový protokol.";
$a->strings["Update %s was successfully applied."] = "Aktualizace %s byla úspěšně aplikována.";
@ -1157,6 +1175,7 @@ $a->strings["Remove Facebook Post connector"] = "Odstranit konektor pro přísp
$a->strings["Suppress \"View on friendica\""] = "Potlačit \"Zobrazit na friendica\"";
$a->strings["Post to page/group:"] = "Příspěvek na stránku/skupinu";
$a->strings["Facebook Post Settings"] = "Nastavení konektoru pro příspěvky na Facebook";
$a->strings["%s:"] = "%s:";
$a->strings["%d person likes this"] = array(
0 => "%d člověku se toto líbí",
1 => "%d lidem se toto líbí",
@ -1876,6 +1895,7 @@ $a->strings["Inbox"] = "Doručená pošta";
$a->strings["Outbox"] = "Odeslaná pošta";
$a->strings["Manage"] = "Spravovat";
$a->strings["Manage other pages"] = "Spravovat jiné stránky";
$a->strings["Delegations"] = "Delegace";
$a->strings["Profiles"] = "Profily";
$a->strings["Manage/Edit Profiles"] = "Spravovat/Editovat Profily";
$a->strings["Manage/edit friends and contacts"] = "Spravovat/upravit přátelé a kontakty";
@ -1918,8 +1938,8 @@ $a->strings["seconds"] = "sekund";
$a->strings["%1\$d %2\$s ago"] = "před %1\$d %2\$s";
$a->strings["%s's birthday"] = "%s má narozeniny";
$a->strings["Happy Birthday %s"] = "Veselé narozeniny %s";
$a->strings["From: "] = "Od:";
$a->strings["Image/photo"] = "Obrázek/fotografie";
$a->strings["<span><a href=\"%s\" target=\"external-link\">%s</a> wrote the following <a href=\"%s\" target=\"external-link\">post</a>:</span>"] = "<span><a href=\"%s\" target=\"external-link\">%s</a> napsal následující <a href=\"%s\" target=\"external-link\">příspěvek</a>:</span>";
$a->strings["$1 wrote:"] = "$1 napsal:";
$a->strings["Encrypted content"] = "Šifrovaný obsah";
$a->strings["General Features"] = "Obecné funkčnosti";
@ -2053,8 +2073,9 @@ $a->strings["Delete Selected Items"] = "Smazat vybrané položky";
$a->strings["Follow Thread"] = "Následovat vlákno";
$a->strings["%s likes this."] = "%s se to líbí.";
$a->strings["%s doesn't like this."] = "%s se to nelíbí.";
$a->strings["<span %1\$s>%2\$d people</span> like this."] = "<span %1\$s>%2\$d lidem</span> se to líbí.";
$a->strings["<span %1\$s>%2\$d people</span> don't like this."] = "<span %1\$s>%2\$d lidem</span> se to nelíbí.";
$a->strings["like this"] = "libí se mu";
$a->strings["don't like this"] = "nelíbí se mu";
$a->strings["people"] = "lidé";
$a->strings["and"] = "a";
$a->strings[", and %d other people"] = ", a %d dalších lidí";
$a->strings["%s like this."] = "%s se to líbí.";
@ -2079,6 +2100,10 @@ $a->strings["Password: "] = "Heslo: ";
$a->strings["Remember me"] = "Pamatuj si mne";
$a->strings["Or login using OpenID: "] = "Nebo přihlášení pomocí OpenID: ";
$a->strings["Forgot your password?"] = "Zapomněli jste své heslo?";
$a->strings["Website Terms of Service"] = "Podmínky použití serveru";
$a->strings["terms of service"] = "podmínky použití";
$a->strings["Website Privacy Policy"] = "Pravidla ochrany soukromí serveru";
$a->strings["privacy policy"] = "Ochrana soukromí";
$a->strings["Requested account is not available."] = "Požadovaný účet není dostupný.";
$a->strings["Edit profile"] = "Upravit profil";
$a->strings["Message"] = "Zpráva";

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,7 @@ erhalten.
Du kannst sein/ihr Profil unter $[url] finden.
Bitte melde dich an um die komplette Vorstellung einzusehen
Bitte melde dich an um die komplette Anfrage einzusehen
und die Anfrage zu bestätigen oder zu ignorieren oder abzulehnen.
$[siteurl]

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},
'{{$from}}' hat einen Pinnwandeintrag kommentiert dem du auch folgst.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$myname}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<?php
// Set the following for your MySQL installation

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},
Auf {{$sitename}} wurde eine Anfrage zum Zurücksetzen deines

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
<html>
<head>

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Du hast eine neue private Nachricht von '{{$from}}' auf '{{$siteName}}' erhhalten.
{{$title}}

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},
Dein Passwort wurde wie gewünscht geändert. Bitte bewahre diese

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$username}},
Danke für deine Anmeldung auf {{$sitename}}. Dein Account wurde angelegt.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Eine Neuanmeldung auf {{$sitename}} benötigt
deine Aufmerksamkeit.

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hallo {{$myname}},
@ -7,7 +12,7 @@ erhalten.
Du kannst sein/ihr Profil unter {{$url}} finden.
Bitte melde dich an um die komplette Vorstellung einzusehen
Bitte melde dich an um die komplette Anfrage einzusehen
und die Anfrage zu bestätigen oder zu ignorieren oder abzulehnen.
{{$siteurl}}

View file

@ -1,3 +1,8 @@
{{*
* AUTOMATICALLY GENERATED TEMPLATE
* DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
*
*}}
Hi,
ich bin {{$sitename}}.
Die friendica Entwickler haben jüngst Update {{$update}} veröffentlicht,

Some files were not shown because too many files have changed in this diff Show more