This commit is contained in:
hauke 2014-09-07 17:07:14 +02:00
commit db2e20eb2e
289 changed files with 8076 additions and 12326 deletions

126
boot.php
View file

@ -12,7 +12,7 @@ require_once('library/Mobile_Detect/Mobile_Detect.php');
require_once('include/features.php'); require_once('include/features.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '3.2.1753' ); define ( 'FRIENDICA_VERSION', '3.2.1754' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1173 ); define ( 'DB_UPDATE_VERSION', 1173 );
define ( 'EOL', "<br />\r\n" ); define ( 'EOL', "<br />\r\n" );
@ -796,7 +796,7 @@ if(! class_exists('App')) {
} }
if ($name===""){ if ($name===""){
echo "template engine <tt>$class</tt> cannot be registered without a name.\n"; echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
killme(); killme();
} }
$this->template_engines[$name] = $class; $this->template_engines[$name] = $class;
} }
@ -804,7 +804,7 @@ if(! class_exists('App')) {
/** /**
* return template engine instance. If $name is not defined, * return template engine instance. If $name is not defined,
* return engine defined by theme, or default * return engine defined by theme, or default
* *
* @param strin $name Template engine name * @param strin $name Template engine name
* @return object Template Engine instance * @return object Template Engine instance
*/ */
@ -1037,26 +1037,14 @@ if(! function_exists('update_db')) {
require_once("include/dbstructure.php"); require_once("include/dbstructure.php");
$retval = update_structure(false, true); $retval = update_structure(false, true);
if($retval) { if($retval) {
//send the administrator an e-mail update_fail(
$email_tpl = get_intltext_template("update_fail_eml.tpl"); DB_UPDATE_VERSION,
$email_msg = replace_macros($email_tpl, array( sprintf(t('Update %s failed. See error logs.'), DB_UPDATE_VERSION)
'$sitename' => $a->config['sitename'], );
'$siteurl' => $a->get_baseurl(),
'$update' => DB_UPDATE_VERSION,
'$error' => sprintf(t('Update %s failed. See error logs.'), DB_UPDATE_VERSION)
));
$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: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME']."\n"
.'Content-type: text/plain; charset=UTF-8'."\n"
.'Content-transfer-encoding: 8bit');
//try the logger
logger("CRITICAL: Database structure update failed: ".$retval);
break; break;
} else } else {
set_config('database','dbupdate_'.DB_UPDATE_VERSION, 'success'); set_config('database','dbupdate_'.DB_UPDATE_VERSION, 'success');
}
for($x = $stored; $x < $current; $x ++) { for($x = $stored; $x < $current; $x ++) {
if(function_exists('update_' . $x)) { if(function_exists('update_' . $x)) {
@ -1080,22 +1068,10 @@ if(! function_exists('update_db')) {
$retval = $func(); $retval = $func();
if($retval) { if($retval) {
//send the administrator an e-mail //send the administrator an e-mail
$email_tpl = get_intltext_template("update_fail_eml.tpl"); update_fail(
$email_msg = replace_macros($email_tpl, array( $x,
'$sitename' => $a->config['sitename'], sprintf(t('Update %s failed. See error logs.'), $x)
'$siteurl' => $a->get_baseurl(), );
'$update' => $x,
'$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: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
//try the logger
logger('CRITICAL: Update Failed: '. $x);
break; break;
} else { } else {
set_config('database','update_' . $x, 'success'); set_config('database','update_' . $x, 'success');
@ -1221,7 +1197,7 @@ if(! function_exists('login')) {
} }
$noid = get_config('system','no_openid'); $noid = get_config('system','no_openid');
$dest_url = $a->get_baseurl(true) . '/' . $a->query_string; $dest_url = $a->get_baseurl(true) . '/' . $a->query_string;
if(local_user()) { if(local_user()) {
@ -1242,18 +1218,18 @@ if(! function_exists('login')) {
'$dest_url' => $dest_url, '$dest_url' => $dest_url,
'$logout' => t('Logout'), '$logout' => t('Logout'),
'$login' => t('Login'), '$login' => t('Login'),
'$lname' => array('username', t('Nickname or Email address: ') , '', ''), '$lname' => array('username', t('Nickname or Email address: ') , '', ''),
'$lpassword' => array('password', t('Password: '), '', ''), '$lpassword' => array('password', t('Password: '), '', ''),
'$lremember' => array('remember', t('Remember me'), 0, ''), '$lremember' => array('remember', t('Remember me'), 0, ''),
'$openid' => !$noid, '$openid' => !$noid,
'$lopenid' => array('openid_url', t('Or login using OpenID: '),'',''), '$lopenid' => array('openid_url', t('Or login using OpenID: '),'',''),
'$hiddens' => $hiddens, '$hiddens' => $hiddens,
'$register' => $reg, '$register' => $reg,
'$lostpass' => t('Forgot your password?'), '$lostpass' => t('Forgot your password?'),
'$lostlink' => t('Password Reset'), '$lostlink' => t('Password Reset'),
@ -1316,9 +1292,9 @@ if(! function_exists('remote_user')) {
if(! function_exists('notice')) { if(! function_exists('notice')) {
/** /**
* Show an error message to user. * Show an error message to user.
* *
* This function save text in session, to be shown to the user at next page load * This function save text in session, to be shown to the user at next page load
* *
* @param string $s - Text of notice * @param string $s - Text of notice
*/ */
function notice($s) { function notice($s) {
@ -1331,9 +1307,9 @@ if(! function_exists('notice')) {
if(! function_exists('info')) { if(! function_exists('info')) {
/** /**
* Show an info message to user. * Show an info message to user.
* *
* This function save text in session, to be shown to the user at next page load * This function save text in session, to be shown to the user at next page load
* *
* @param string $s - Text of notice * @param string $s - Text of notice
*/ */
function info($s) { function info($s) {
@ -1757,7 +1733,7 @@ if(! function_exists('get_birthdays')) {
$rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : ''); $rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : '');
$rr['startime'] = Null; $rr['startime'] = Null;
$rr['today'] = $today; $rr['today'] = $today;
} }
} }
} }
@ -1832,7 +1808,7 @@ if(! function_exists('get_events')) {
$strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start']); $strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start']);
$today = ((substr($strt,0,10) === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) ? true : false); $today = ((substr($strt,0,10) === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) ? true : false);
$rr['link'] = $md; $rr['link'] = $md;
$rr['title'] = $title; $rr['title'] = $title;
$rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : ''); $rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '');
@ -1892,7 +1868,7 @@ if(! function_exists('proc_run')) {
} }
$args = $newargs; $args = $newargs;
$arr = array('args' => $args, 'run_cmd' => true); $arr = array('args' => $args, 'run_cmd' => true);
call_hooks("proc_run", $arr); call_hooks("proc_run", $arr);
@ -1901,14 +1877,14 @@ if(! function_exists('proc_run')) {
if(count($args) && $args[0] === 'php') if(count($args) && $args[0] === 'php')
$args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php'); $args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
// add baseurl to args. cli scripts can't construct it // add baseurl to args. cli scripts can't construct it
$args[] = $a->get_baseurl(); $args[] = $a->get_baseurl();
for($x = 0; $x < count($args); $x ++) for($x = 0; $x < count($args); $x ++)
$args[$x] = escapeshellarg($args[$x]); $args[$x] = escapeshellarg($args[$x]);
$cmdline = implode($args," "); $cmdline = implode($args," ");
if(get_config('system','proc_windows')) if(get_config('system','proc_windows'))
@ -1921,9 +1897,9 @@ if(! function_exists('proc_run')) {
if(! function_exists('current_theme')) { if(! function_exists('current_theme')) {
function current_theme(){ function current_theme(){
$app_base_themes = array('duepuntozero', 'dispy', 'quattro'); $app_base_themes = array('duepuntozero', 'dispy', 'quattro');
$a = get_app(); $a = get_app();
// $mobile_detect = new Mobile_Detect(); // $mobile_detect = new Mobile_Detect();
// $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet(); // $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
$is_mobile = $a->is_mobile || $a->is_tablet; $is_mobile = $a->is_mobile || $a->is_tablet;
@ -1953,17 +1929,17 @@ if(! function_exists('current_theme')) {
(file_exists('view/theme/' . $theme_name . '/style.css') || (file_exists('view/theme/' . $theme_name . '/style.css') ||
file_exists('view/theme/' . $theme_name . '/style.php'))) file_exists('view/theme/' . $theme_name . '/style.php')))
return($theme_name); return($theme_name);
foreach($app_base_themes as $t) { foreach($app_base_themes as $t) {
if(file_exists('view/theme/' . $t . '/style.css')|| if(file_exists('view/theme/' . $t . '/style.css')||
file_exists('view/theme/' . $t . '/style.php')) file_exists('view/theme/' . $t . '/style.php'))
return($t); return($t);
} }
$fallback = array_merge(glob('view/theme/*/style.css'),glob('view/theme/*/style.php')); $fallback = array_merge(glob('view/theme/*/style.css'),glob('view/theme/*/style.php'));
if(count($fallback)) if(count($fallback))
return (str_replace('view/theme/','', substr($fallback[0],0,-10))); return (str_replace('view/theme/','', substr($fallback[0],0,-10)));
} }
} }
@ -2003,7 +1979,7 @@ if(! function_exists('feed_birthday')) {
* *
*/ */
$birthday = ''; $birthday = '';
if(! strlen($tz)) if(! strlen($tz))
@ -2073,13 +2049,13 @@ if(! function_exists('load_contact_links')) {
if(! function_exists('profile_tabs')){ if(! function_exists('profile_tabs')){
function profile_tabs($a, $is_owner=False, $nickname=Null){ function profile_tabs($a, $is_owner=False, $nickname=Null){
//echo "<pre>"; var_dump($a->user); killme(); //echo "<pre>"; var_dump($a->user); killme();
if (is_null($nickname)) if (is_null($nickname))
$nickname = $a->user['nickname']; $nickname = $a->user['nickname'];
if(x($_GET,'tab')) if(x($_GET,'tab'))
$tab = notags(trim($_GET['tab'])); $tab = notags(trim($_GET['tab']));
$url = $a->get_baseurl() . '/profile/' . $nickname; $url = $a->get_baseurl() . '/profile/' . $nickname;
$tabs = array( $tabs = array(
@ -2112,7 +2088,7 @@ if(! function_exists('profile_tabs')){
'id' => 'video-tab', 'id' => 'video-tab',
), ),
); );
if ($is_owner){ if ($is_owner){
$tabs[] = array( $tabs[] = array(
'label' => t('Events'), 'label' => t('Events'),
@ -2133,7 +2109,7 @@ if(! function_exists('profile_tabs')){
$arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => (($tab) ? $tab : false), 'tabs' => $tabs); $arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => (($tab) ? $tab : false), 'tabs' => $tabs);
call_hooks('profile_tabs', $arr); call_hooks('profile_tabs', $arr);
$tpl = get_markup_template('common_tabs.tpl'); $tpl = get_markup_template('common_tabs.tpl');
return replace_macros($tpl,array('$tabs' => $arr['tabs'])); return replace_macros($tpl,array('$tabs' => $arr['tabs']));
@ -2172,28 +2148,28 @@ function zrl($s,$force = false) {
/** /**
* returns querystring as string from a mapped array * returns querystring as string from a mapped array
* *
* @param params Array * @param params Array
* @return string * @return string
*/ */
function build_querystring($params, $name=null) { function build_querystring($params, $name=null) {
$ret = ""; $ret = "";
foreach($params as $key=>$val) { foreach($params as $key=>$val) {
if(is_array($val)) { if(is_array($val)) {
if($name==null) { if($name==null) {
$ret .= build_querystring($val, $key); $ret .= build_querystring($val, $key);
} else { } else {
$ret .= build_querystring($val, $name."[$key]"); $ret .= build_querystring($val, $name."[$key]");
} }
} else { } else {
$val = urlencode($val); $val = urlencode($val);
if($name!=null) { if($name!=null) {
$ret.=$name."[$key]"."=$val&"; $ret.=$name."[$key]"."=$val&";
} else { } else {
$ret.= "$key=$val&"; $ret.= "$key=$val&";
} }
} }
} }
return $ret; return $ret;
} }
function explode_querystring($query) { function explode_querystring($query) {

View file

@ -2,7 +2,7 @@
require_once('include/email.php'); require_once('include/email.php');
class EmailNotification { class Emailer {
/** /**
* Send a multipart/alternative message with Text and HTML versions * Send a multipart/alternative message with Text and HTML versions
* *
@ -13,13 +13,13 @@ class EmailNotification {
* @param messageSubject subject of the message * @param messageSubject subject of the message
* @param htmlVersion html version of the message * @param htmlVersion html version of the message
* @param textVersion text only version of the message * @param textVersion text only version of the message
* @param additionalMailHeader additions to the smtp mail header
*/ */
static public function sendTextHtmlEmail($fromName,$fromEmail,$replyTo,$toEmail,$messageSubject,$htmlVersion,$textVersion) { static public function send($params) {
$fromName = email_header_encode(html_entity_decode($params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8');
$messageSubject = email_header_encode(html_entity_decode($params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8');
$fromName = email_header_encode($fromName,'UTF-8');
$messageSubject = email_header_encode($messageSubject,'UTF-8');
// generate a mime boundary // generate a mime boundary
$mimeBoundary =rand(0,9)."-" $mimeBoundary =rand(0,9)."-"
.rand(10000000000,9999999999)."-" .rand(10000000000,9999999999)."-"
@ -28,14 +28,15 @@ class EmailNotification {
// generate a multipart/alternative message header // generate a multipart/alternative message header
$messageHeader = $messageHeader =
"From: {$fromName} <{$fromEmail}>\n" . $params['additionalMailHeader'] .
"Reply-To: {$replyTo}\n" . "From: $fromName <{$params['fromEmail']}>\n" .
"Reply-To: $fromName <{$params['replyTo']}>\n" .
"MIME-Version: 1.0\n" . "MIME-Version: 1.0\n" .
"Content-Type: multipart/alternative; boundary=\"{$mimeBoundary}\""; "Content-Type: multipart/alternative; boundary=\"{$mimeBoundary}\"";
// assemble the final multipart message body with the text and html types included // assemble the final multipart message body with the text and html types included
$textBody = chunk_split(base64_encode($textVersion)); $textBody = chunk_split(base64_encode($params['textVersion']));
$htmlBody = chunk_split(base64_encode($htmlVersion)); $htmlBody = chunk_split(base64_encode($params['htmlVersion']));
$multipartMessageBody = $multipartMessageBody =
"--" . $mimeBoundary . "\n" . // plain text section "--" . $mimeBoundary . "\n" . // plain text section
"Content-Type: text/plain; charset=UTF-8\n" . "Content-Type: text/plain; charset=UTF-8\n" .
@ -49,12 +50,13 @@ class EmailNotification {
// send the message // send the message
$res = mail( $res = mail(
$toEmail, // send to address $params['toEmail'], // send to address
$messageSubject, // subject $messageSubject, // subject
$multipartMessageBody, // message body $multipartMessageBody, // message body
$messageHeader // message headers $messageHeader // message headers
); );
logger("sendTextHtmlEmail: END"); logger("header " . 'To: ' . $params['toEmail'] . "\n" . $messageHeader, LOGGER_DEBUG);
logger("return value " . (($res)?"true":"false"), LOGGER_DEBUG);
} }
} }
?> ?>

View file

@ -1,5 +1,66 @@
<?php <?php
require_once("boot.php"); require_once("boot.php");
require_once("include/text.php");
/*
* send the email and do what is needed to do on update fails
*
* @param update_id (int) number of failed update
* @param error_message (str) error message
*/
function update_fail($update_id, $error_message){
//send the administrators an e-mail
$admin_mail_list = "'".implode("','", array_map(dbesc, explode(",", str_replace(" ", "", $a->config['admin_email']))))."'";
$adminlist = q("SELECT uid, language, email FROM user WHERE email IN (%s)",
$admin_mail_list
);
// every admin could had different language
foreach ($adminlist as $admin) {
$lang = (($admin['language'])?$admin['language']:'en');
push_lang($lang);
$preamble = deindent(t("
The friendica developers released update %s recently,
but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and I can't do it alone. Please contact a
friendica developer if you can not help me on your own. My database might be invalid."));
$body = t("The error message is\n[pre]%s[/pre]");
$preamble = sprintf($preamble, $update_id);
$body = sprintf($body, $error_message);
notification(array(
'type' => "SYSTEM_EMAIL",
'to_email' => $admin['email'],
'preamble' => $preamble,
'body' => $body,
'language' => $lang,
));
}
/*
$email_tpl = get_intltext_template("update_fail_eml.tpl");
$email_msg = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
'$update' => DB_UPDATE_VERSION,
'$error' => sprintf(t('Update %s failed. See error logs.'), DB_UPDATE_VERSION)
));
$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: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME']."\n"
.'Content-type: text/plain; charset=UTF-8'."\n"
.'Content-transfer-encoding: 8bit');
*/
//try the logger
logger("CRITICAL: Database structure update failed: ".$retval);
break;
}
function dbstructure_run(&$argv, &$argc) { function dbstructure_run(&$argv, &$argc) {
global $a, $db; global $a, $db;

View file

@ -249,6 +249,12 @@ function email_header_encode($in_str, $charset) {
return $out_str; return $out_str;
} }
/**
* email_send is used by NETWORK_EMAIL and NETWORK_EMAIL2 code
* (not to notify the user, but to send items to email contacts
*
* TODO: this could be changed to use the Emailer class
*/
function email_send($addr, $subject, $headers, $item) { function email_send($addr, $subject, $headers, $item) {
//$headers .= 'MIME-Version: 1.0' . "\n"; //$headers .= 'MIME-Version: 1.0' . "\n";
//$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; //$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";

View file

@ -1,10 +1,12 @@
<?php <?php
require_once('include/Emailer.php');
require_once('include/email.php'); require_once('include/email.php');
require_once('include/bbcode.php');
require_once('include/html2bbcode.php');
function notification($params) { function notification($params) {
logger('notification: entry', LOGGER_DEBUG); #logger('notification()', LOGGER_DEBUG);
$a = get_app(); $a = get_app();
@ -26,8 +28,13 @@ function notification($params) {
$hostname = substr($hostname,0,strpos($hostname,':')); $hostname = substr($hostname,0,strpos($hostname,':'));
$sender_email = t('noreply') . '@' . $hostname; $sender_email = t('noreply') . '@' . $hostname;
$additional_mail_header = "";
// with $params['show_in_notification_page'] == false, the notification isn't inserted into
// the database, and an email is sent if applicable.
// default, if not specified: true
$show_in_notification_page = ((x($params,'show_in_notification_page')) ? $params['show_in_notification_page']:True);
$additional_mail_header = "";
$additional_mail_header .= "Precedence: list\n"; $additional_mail_header .= "Precedence: list\n";
$additional_mail_header .= "X-Friendica-Host: ".$hostname."\n"; $additional_mail_header .= "X-Friendica-Host: ".$hostname."\n";
$additional_mail_header .= "X-Friendica-Platform: ".FRIENDICA_PLATFORM."\n"; $additional_mail_header .= "X-Friendica-Platform: ".FRIENDICA_PLATFORM."\n";
@ -35,6 +42,7 @@ function notification($params) {
$additional_mail_header .= "List-ID: <notification.".$hostname.">\n"; $additional_mail_header .= "List-ID: <notification.".$hostname.">\n";
$additional_mail_header .= "List-Archive: <".$a->get_baseurl()."/notifications/system>\n"; $additional_mail_header .= "List-Archive: <".$a->get_baseurl()."/notifications/system>\n";
if(array_key_exists('item',$params)) { if(array_key_exists('item',$params)) {
$title = $params['item']['title']; $title = $params['item']['title'];
$body = $params['item']['body']; $body = $params['item']['body'];
@ -223,6 +231,30 @@ function notification($params) {
$tsitelink = sprintf( $sitelink, $siteurl ); $tsitelink = sprintf( $sitelink, $siteurl );
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
$itemlink = $params['link']; $itemlink = $params['link'];
switch ($params['verb']) {
case ACTIVITY_FRIEND:
// someone started to share with user (mostly OStatus)
$subject = sprintf( t('[Friendica:Notify] A new person is sharing with you'));
$preamble = sprintf( t('%1$s is sharing with you at %2$s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('%1$s is sharing with you at %2$s'),
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$sitename);
break;
case ACTIVITY_FOLLOW:
// someone started to follow the user (mostly OStatus)
$subject = sprintf( t('[Friendica:Notify] You have a new follower'));
$preamble = sprintf( t('You have a new follower at %2$s : %1$s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('You have a new follower at %2$s : %1$s'),
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]',
$sitename);
break;
default:
// ACTIVITY_REQ_FRIEND is default activity for notifications
break;
}
} }
if($params['type'] == NOTIFY_SUGGEST) { if($params['type'] == NOTIFY_SUGGEST) {
@ -244,12 +276,81 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_CONFIRM) { if($params['type'] == NOTIFY_CONFIRM) {
if ($params['verb'] == ACTIVITY_FRIEND ){ // mutual connection
$subject = sprintf( t('[Friendica:Notify] Connection accepted'));
$preamble = sprintf( t('\'%1$s\' has acepted your connection request at %2$s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('%2$s has accepted your [url=%1$s]connection request[/url].'),
$itemlink,
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
$body = t('You are now mutual friends and may exchange status updates, photos, and email
without restriction.');
$sitelink = t('Please visit %s if you wish to make any changes to this relationship.');
$tsitelink = sprintf( $sitelink, $siteurl );
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
$itemlink = $params['link'];
} else { // ACTIVITY_FOLLOW
$subject = sprintf( t('[Friendica:Notify] Connection accepted'));
$preamble = sprintf( t('\'%1$s\' has acepted your connection request at %2$s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('%2$s has accepted your [url=%1$s]connection request[/url].'),
$itemlink,
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
$body = sprintf(t('\'%1$s\' has chosen to accept you a "fan", which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'), $params['source_name']);
$body .= "\n\n";
$body .= sprintf(t('\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future. '), $params['source_name']);
$sitelink = t('Please visit %s if you wish to make any changes to this relationship.');
$tsitelink = sprintf( $sitelink, $siteurl );
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
$itemlink = $params['link'];
}
} }
if($params['type'] == NOTIFY_SYSTEM) { if($params['type'] == NOTIFY_SYSTEM) {
switch($params['event']) {
case "SYSTEM_REGISTER_REQUEST":
$subject = sprintf( t('[Friendica System:Notify] registration request'));
$preamble = sprintf( t('You\'ve received a registration request from \'%1$s\' at %2$s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('You\'ve received a [url=%1$s]registration request[/url] from %2$s.'),
$itemlink,
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
$body = sprintf( t('Full Name: %1$s\nSite Location: %2$s\nLogin Name: %3$s (%4$s)'),
$params['source_name'], $siteurl, $params['source_mail'], $params['source_nick']);
$sitelink = t('Please visit %s to approve or reject the request.');
$tsitelink = sprintf( $sitelink, $params['link'] );
$hsitelink = sprintf( $sitelink, '<a href="' . $params['link'] . '">' . $sitename . '</a>');
$itemlink = $params['link'];
break;
case "SYSTEM_DB_UPDATE_FAIL":
break;
}
} }
if ($params['type'] == "SYSTEM_EMAIL"){
// not part of the notifications.
// it just send a mail to the user.
// It will be used by the system to send emails to users (like
// password reset, invitations and so) using one look (but without
// add a notification to the user, with could be inexistent)
$subject = $params['subject'];
$preamble = $params['preamble'];
if (x($params,'epreamble')){
$epreamble = $params['epreamble'];
} else {
$epreamble = str_replace("\n","<br>\n",$preamble);
}
$body = $params['body'];
$sitelink = "";
$tsitelink = "";
$hsitelink = "";
$itemlink = "";
$show_in_notification_page = false;
}
$h = array( $h = array(
'params' => $params, 'params' => $params,
'subject' => $subject, 'subject' => $subject,
@ -274,114 +375,110 @@ function notification($params) {
$itemlink = $h['itemlink']; $itemlink = $h['itemlink'];
require_once('include/html2bbcode.php');
do { if ($show_in_notification_page) {
$dups = false; logger("adding notification entry", LOGGER_DEBUG);
$hash = random_string(); do {
$r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1", $dups = false;
dbesc($hash)); $hash = random_string();
if(count($r)) $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1",
$dups = true; dbesc($hash));
} while($dups == true); if(count($r))
$dups = true;
} while($dups == true);
$datarray = array(); $datarray = array();
$datarray['hash'] = $hash; $datarray['hash'] = $hash;
$datarray['name'] = $params['source_name']; $datarray['name'] = $params['source_name'];
$datarray['url'] = $params['source_link']; $datarray['url'] = $params['source_link'];
$datarray['photo'] = $params['source_photo']; $datarray['photo'] = $params['source_photo'];
$datarray['date'] = datetime_convert(); $datarray['date'] = datetime_convert();
$datarray['uid'] = $params['uid']; $datarray['uid'] = $params['uid'];
$datarray['link'] = $itemlink; $datarray['link'] = $itemlink;
$datarray['parent'] = $parent_id; $datarray['parent'] = $parent_id;
$datarray['type'] = $params['type']; $datarray['type'] = $params['type'];
$datarray['verb'] = $params['verb']; $datarray['verb'] = $params['verb'];
$datarray['otype'] = $params['otype']; $datarray['otype'] = $params['otype'];
$datarray['abort'] = false; $datarray['abort'] = false;
call_hooks('enotify_store', $datarray); call_hooks('enotify_store', $datarray);
if($datarray['abort']) { if($datarray['abort']) {
pop_lang();
return;
}
// create notification entry in DB
$r = q("insert into notify (hash,name,url,photo,date,uid,link,parent,type,verb,otype)
values('%s','%s','%s','%s','%s',%d,'%s',%d,%d,'%s','%s')",
dbesc($datarray['hash']),
dbesc($datarray['name']),
dbesc($datarray['url']),
dbesc($datarray['photo']),
dbesc($datarray['date']),
intval($datarray['uid']),
dbesc($datarray['link']),
intval($datarray['parent']),
intval($datarray['type']),
dbesc($datarray['verb']),
dbesc($datarray['otype'])
);
$r = q("select id from notify where hash = '%s' and uid = %d limit 1",
dbesc($hash),
intval($params['uid'])
);
if($r)
$notify_id = $r[0]['id'];
else {
pop_lang();
return;
}
// we seem to have a lot of duplicate comment notifications due to race conditions, mostly from forums
// After we've stored everything, look again to see if there are any duplicates and if so remove them
$p = null;
$p = q("select id from notify where ( type = %d or type = %d ) and link = '%s' and uid = %d order by id",
intval(NOTIFY_TAGSELF),
intval(NOTIFY_COMMENT),
dbesc($params['link']),
intval($params['uid'])
);
if($p && (count($p) > 1)) {
for ($d = 1; $d < count($p); $d ++) {
q("delete from notify where id = %d",
intval($p[$d]['id'])
);
}
// only continue on if we stored the first one
if($notify_id != $p[0]['id']) {
pop_lang(); pop_lang();
return; return False;
} }
// create notification entry in DB
$r = q("insert into notify (hash,name,url,photo,date,uid,link,parent,type,verb,otype)
values('%s','%s','%s','%s','%s',%d,'%s',%d,%d,'%s','%s')",
dbesc($datarray['hash']),
dbesc($datarray['name']),
dbesc($datarray['url']),
dbesc($datarray['photo']),
dbesc($datarray['date']),
intval($datarray['uid']),
dbesc($datarray['link']),
intval($datarray['parent']),
intval($datarray['type']),
dbesc($datarray['verb']),
dbesc($datarray['otype'])
);
$r = q("select id from notify where hash = '%s' and uid = %d limit 1",
dbesc($hash),
intval($params['uid'])
);
if($r)
$notify_id = $r[0]['id'];
else {
pop_lang();
return False;
}
// we seem to have a lot of duplicate comment notifications due to race conditions, mostly from forums
// After we've stored everything, look again to see if there are any duplicates and if so remove them
$p = null;
$p = q("select id from notify where ( type = %d or type = %d ) and link = '%s' and uid = %d order by id",
intval(NOTIFY_TAGSELF),
intval(NOTIFY_COMMENT),
dbesc($params['link']),
intval($params['uid'])
);
if($p && (count($p) > 1)) {
for ($d = 1; $d < count($p); $d ++) {
q("delete from notify where id = %d",
intval($p[$d]['id'])
);
}
// only continue on if we stored the first one
if($notify_id != $p[0]['id']) {
pop_lang();
return False;
}
}
$itemlink = $a->get_baseurl() . '/notify/view/' . $notify_id;
$msg = replace_macros($epreamble,array('$itemlink' => $itemlink));
$r = q("update notify set msg = '%s' where id = %d and uid = %d",
dbesc($msg),
intval($notify_id),
intval($params['uid'])
);
} }
$itemlink = $a->get_baseurl() . '/notify/view/' . $notify_id;
$msg = replace_macros($epreamble,array('$itemlink' => $itemlink));
$r = q("update notify set msg = '%s' where id = %d and uid = %d",
dbesc($msg),
intval($notify_id),
intval($params['uid'])
);
// send email notification if notification preferences permit // send email notification if notification preferences permit
if((intval($params['notify_flags']) & intval($params['type']))
|| $params['type'] == NOTIFY_SYSTEM
|| $params['type'] == "SYSTEM_EMAIL") {
require_once('include/bbcode.php'); logger('sending notification email');
if((intval($params['notify_flags']) & intval($params['type'])) || $params['type'] == NOTIFY_SYSTEM) {
logger('notification: sending notification email');
if (isset($params['parent']) AND (intval($params['parent']) != 0)) { if (isset($params['parent']) AND (intval($params['parent']) != 0)) {
$id_for_parent = $params['parent']."@".$hostname; $id_for_parent = $params['parent']."@".$hostname;
@ -410,16 +507,18 @@ function notification($params) {
} else { } else {
// If not, just "follow" the thread. // If not, just "follow" the thread.
$additional_mail_header .= "References: <${id_for_parent}>\nIn-Reply-To: <${id_for_parent}>\n"; $additional_mail_header .= "References: <${id_for_parent}>\nIn-Reply-To: <${id_for_parent}>\n";
logger("include/enotify: There's already a notification for this parent:\n" . print_r($r, true), LOGGER_DEBUG); logger("There's already a notification for this parent:\n" . print_r($r, true), LOGGER_DEBUG);
} }
} }
$textversion = strip_tags(html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r", "\\n"), "\n", // textversion keeps linebreaks
$body))),ENT_QUOTES,'UTF-8')); $textversion = strip_tags(str_replace("<br>","\n",html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r", "\\n"), "\n",
$body))),ENT_QUOTES,'UTF-8')));
$htmlversion = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), $htmlversion = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"),
"<br />\n",$body))),ENT_QUOTES,'UTF-8'); "<br />\n",$body))),ENT_QUOTES,'UTF-8');
$datarray = array(); $datarray = array();
$datarray['banner'] = $banner; $datarray['banner'] = $banner;
$datarray['product'] = $product; $datarray['product'] = $product;
@ -494,9 +593,9 @@ function notification($params) {
// logger('text: ' . $email_text_body); // logger('text: ' . $email_text_body);
// use the EmailNotification library to send the message // use the Emailer class to send the message
enotify::send(array( Emailer::send(array(
'fromName' => $sender_name, 'fromName' => $sender_name,
'fromEmail' => $sender_email, 'fromEmail' => $sender_email,
'replyTo' => $sender_email, 'replyTo' => $sender_email,
@ -506,69 +605,11 @@ function notification($params) {
'textVersion' => $email_text_body, 'textVersion' => $email_text_body,
'additionalMailHeader' => $datarray['headers'], 'additionalMailHeader' => $datarray['headers'],
)); ));
return True;
} }
pop_lang(); return False;
} }
require_once('include/email.php');
class enotify {
/**
* Send a multipart/alternative message with Text and HTML versions
*
* @param fromName name of the sender
* @param fromEmail email fo the sender
* @param replyTo replyTo address to direct responses
* @param toEmail destination email address
* @param messageSubject subject of the message
* @param htmlVersion html version of the message
* @param textVersion text only version of the message
* @param additionalMailHeader additions to the smtp mail header
*/
static public function send($params) {
$fromName = email_header_encode(html_entity_decode($params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8');
$messageSubject = email_header_encode(html_entity_decode($params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8');
// generate a mime boundary
$mimeBoundary =rand(0,9)."-"
.rand(10000000000,9999999999)."-"
.rand(10000000000,9999999999)."=:"
.rand(10000,99999);
// generate a multipart/alternative message header
$messageHeader =
$params['additionalMailHeader'] .
"From: $fromName <{$params['fromEmail']}>\n" .
"Reply-To: $fromName <{$params['replyTo']}>\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/alternative; boundary=\"{$mimeBoundary}\"";
// assemble the final multipart message body with the text and html types included
$textBody = chunk_split(base64_encode($params['textVersion']));
$htmlBody = chunk_split(base64_encode($params['htmlVersion']));
$multipartMessageBody =
"--" . $mimeBoundary . "\n" . // plain text section
"Content-Type: text/plain; charset=UTF-8\n" .
"Content-Transfer-Encoding: base64\n\n" .
$textBody . "\n" .
"--" . $mimeBoundary . "\n" . // text/html section
"Content-Type: text/html; charset=UTF-8\n" .
"Content-Transfer-Encoding: base64\n\n" .
$htmlBody . "\n" .
"--" . $mimeBoundary . "--\n"; // message ending
// send the message
$res = mail(
$params['toEmail'], // send to address
$messageSubject, // subject
$multipartMessageBody, // message body
$messageHeader // message headers
);
logger("notification: enotify::send header " . 'To: ' . $params['toEmail'] . "\n" . $messageHeader, LOGGER_DEBUG);
logger("notification: enotify::send returns " . $res, LOGGER_DEBUG);
}
}
?> ?>

View file

@ -3828,6 +3828,7 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
dbesc(datetime_convert()) dbesc(datetime_convert())
); );
} }
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
intval($importer['uid']) intval($importer['uid'])
); );
@ -3841,20 +3842,24 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
if(($r[0]['notify-flags'] & NOTIFY_INTRO) && if(($r[0]['notify-flags'] & NOTIFY_INTRO) &&
(($r[0]['page-flags'] == PAGE_NORMAL) OR ($r[0]['page-flags'] == PAGE_SOAPBOX))) { (($r[0]['page-flags'] == PAGE_NORMAL) OR ($r[0]['page-flags'] == PAGE_SOAPBOX))) {
$email_tpl = get_intltext_template('follow_notify_eml.tpl');
$email = replace_macros($email_tpl, array(
'$requestor' => ((strlen($name)) ? $name : t('[Name Withheld]')),
'$url' => $url, notification(array(
'$myname' => $r[0]['username'], 'type' => NOTIFY_INTRO,
'$siteurl' => $a->get_baseurl(), 'notify_flags' => $r[0]['notify-flags'],
'$sitename' => $a->config['sitename'] 'language' => $r[0]['language'],
'to_name' => $r[0]['username'],
'to_email' => $r[0]['email'],
'uid' => $r[0]['uid'],
'link' => $a->get_baseurl() . '/notifications/intro',
'source_name' => ((strlen(stripslashes($contact_record['name']))) ? stripslashes($contact_record['name']) : t('[Name Withheld]')),
'source_link' => $contact_record['url'],
'source_photo' => $contact_record['photo'],
'verb' => ($sharing ? ACTIVITY_FRIEND : ACTIVITY_FOLLOW),
'otype' => 'intro'
)); ));
$res = mail($r[0]['email'],
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: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
} }
} }

View file

@ -1503,7 +1503,7 @@ function prepare_text($text) {
else else
$s = smilies(bbcode($text)); $s = smilies(bbcode($text));
return $s; return trim($s);
}} }}
@ -2229,3 +2229,22 @@ function is_a_date_arg($s) {
} }
return false; return false;
} }
/**
* remove intentation from a text
*/
function deindent($text, $chr="[\t ]", $count=NULL) {
$text = fix_mce_lf($text);
$lines = explode("\n", $text);
if (is_null($count)) {
$m = array();
$k=0; while($k<count($lines) && strlen($lines[$k])==0) $k++;
preg_match("|^".$chr."*|", $lines[$k], $m);
$count = strlen($m[0]);
}
for ($k=0; $k<count($lines); $k++){
$lines[$k] = preg_replace("|^".$chr."{".$count."}|", "", $lines[$k]);
}
return implode("\n", $lines);
}

View file

@ -6,6 +6,7 @@ require_once('include/plugin.php');
require_once('include/text.php'); require_once('include/text.php');
require_once('include/pgettext.php'); require_once('include/pgettext.php');
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/enotify.php');
function create_user($arr) { function create_user($arr) {
@ -44,7 +45,7 @@ function create_user($arr) {
$result['message'] .= t('Invitation could not be verified.') . EOL; $result['message'] .= t('Invitation could not be verified.') . EOL;
return $result; return $result;
} }
} }
if((! x($username)) || (! x($email)) || (! x($nickname))) { if((! x($username)) || (! x($email)) || (! x($nickname))) {
if($openid_url) { if($openid_url) {
@ -57,17 +58,17 @@ function create_user($arr) {
require_once('library/openid.php'); require_once('library/openid.php');
$openid = new LightOpenID; $openid = new LightOpenID;
$openid->identity = $openid_url; $openid->identity = $openid_url;
$openid->returnUrl = $a->get_baseurl() . '/openid'; $openid->returnUrl = $a->get_baseurl() . '/openid';
$openid->required = array('namePerson/friendly', 'contact/email', 'namePerson'); $openid->required = array('namePerson/friendly', 'contact/email', 'namePerson');
$openid->optional = array('namePerson/first','media/image/aspect11','media/image/default'); $openid->optional = array('namePerson/first','media/image/aspect11','media/image/default');
try { try {
$authurl = $openid->authUrl(); $authurl = $openid->authUrl();
} catch (Exception $e){ } catch (Exception $e){
$result['message'] .= t("We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."). EOL . EOL . t("The error message was:") . $e->getMessage() . EOL; $result['message'] .= t("We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."). EOL . EOL . t("The error message was:") . $e->getMessage() . EOL;
return $result; return $result;
} }
goaway($authurl); goaway($authurl);
// NOTREACHED // NOTREACHED
} }
notice( t('Please enter the required information.') . EOL ); notice( t('Please enter the required information.') . EOL );
@ -90,12 +91,12 @@ function create_user($arr) {
// I don't really like having this rule, but it cuts down // I don't really like having this rule, but it cuts down
// on the number of auto-registrations by Russian spammers // on the number of auto-registrations by Russian spammers
// Using preg_match was completely unreliable, due to mixed UTF-8 regex support // Using preg_match was completely unreliable, due to mixed UTF-8 regex support
// $no_utf = get_config('system','no_utf'); // $no_utf = get_config('system','no_utf');
// $pat = (($no_utf) ? '/^[a-zA-Z]* [a-zA-Z]*$/' : '/^\p{L}* \p{L}*$/u' ); // $pat = (($no_utf) ? '/^[a-zA-Z]* [a-zA-Z]*$/' : '/^\p{L}* \p{L}*$/u' );
// So now we are just looking for a space in the full name. // So now we are just looking for a space in the full name.
$loose_reg = get_config('system','no_regfullname'); $loose_reg = get_config('system','no_regfullname');
if(! $loose_reg) { if(! $loose_reg) {
@ -182,7 +183,7 @@ function create_user($arr) {
* will take several minutes each to process. * will take several minutes each to process.
* *
*/ */
$sres = new_keypair(512); $sres = new_keypair(512);
$sprvkey = $sres['prvkey']; $sprvkey = $sres['prvkey'];
$spubkey = $sres['pubkey']; $spubkey = $sres['pubkey'];
@ -207,7 +208,7 @@ function create_user($arr) {
); );
if($r) { if($r) {
$r = q("SELECT * FROM `user` $r = q("SELECT * FROM `user`
WHERE `username` = '%s' AND `password` = '%s' LIMIT 1", WHERE `username` = '%s' AND `password` = '%s' LIMIT 1",
dbesc($username), dbesc($username),
dbesc($new_password_encoded) dbesc($new_password_encoded)
@ -220,10 +221,10 @@ function create_user($arr) {
else { else {
$result['message'] .= t('An error occurred during registration. Please try again.') . EOL ; $result['message'] .= t('An error occurred during registration. Please try again.') . EOL ;
return $result; return $result;
} }
/** /**
* if somebody clicked submit twice very quickly, they could end up with two accounts * if somebody clicked submit twice very quickly, they could end up with two accounts
* due to race condition. Remove this one. * due to race condition. Remove this one.
*/ */
@ -281,8 +282,8 @@ function create_user($arr) {
dbesc(datetime_convert()) dbesc(datetime_convert())
); );
// Create a group with no members. This allows somebody to use it // Create a group with no members. This allows somebody to use it
// right away as a default group for new contacts. // right away as a default group for new contacts.
require_once('include/group.php'); require_once('include/group.php');
group_add($newuid, t('Friends')); group_add($newuid, t('Friends'));
@ -323,7 +324,7 @@ function create_user($arr) {
// guess mimetype from headers or filename // guess mimetype from headers or filename
$type = guess_image_type($photo,true); $type = guess_image_type($photo,true);
$img = new Photo($img_str, $type); $img = new Photo($img_str, $type);
if($img->is_valid()) { if($img->is_valid()) {
@ -365,3 +366,51 @@ function create_user($arr) {
return $result; return $result;
} }
/*
* send registration confirmation.
* It's here as a function because the mail is sent
* from different parts
*/
function send_register_open_eml($email, $sitename, $siteurl, $username, $password){
$preamble = deindent(t('
Dear %1$s,
Thank you for registering at %2$s. Your account has been created.
'));
$body = deindent(t('
The login details are as follows:
Site Location: %3$s
Login Name: %1$s
Password: %5$
You may change your password from your account "Settings" page after logging
in.
Please take a few moments to review the other account settings on that page.
You may also wish to add some basic information to your default profile
(on the "Profiles" page) so that other people can easily find you.
We recommend setting your full name, adding a profile photo,
adding some profile "keywords" (very useful in making new friends) - and
perhaps what country you live in; if you do not wish to be more specific
than that.
We fully respect your right to privacy, and none of these items are necessary.
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
Thank you and welcome to %2$s.'));
$preamble = sprintf($preamble, $username, $sitename);
$body = sprintf($body, $email, $sitename, $siteurl, $username, $password);
notification(array(
'type' => "SYSTEM_EMAIL",
'to_email' => $email,
'subject'=> sprintf( t('Registration details for %s'), $sitename),
'preamble'=> $preamble,
'body' => $body));
}

View file

@ -4,6 +4,8 @@
* Friendica admin * Friendica admin
*/ */
require_once("include/remoteupdate.php"); require_once("include/remoteupdate.php");
require_once("include/enotify.php");
require_once("include/text.php");
/** /**
@ -419,9 +421,9 @@ function admin_page_site_post(&$a){
set_config('system','banner', $banner); set_config('system','banner', $banner);
} }
if ($info=="") { if ($info=="") {
del_config('config','info'); del_config('config','info');
} else { } else {
set_config('config','info',$info); set_config('config','info',$info);
} }
set_config('system','language', $language); set_config('system','language', $language);
set_config('system','theme', $theme); set_config('system','theme', $theme);
@ -429,12 +431,12 @@ function admin_page_site_post(&$a){
del_config('system','mobile-theme'); del_config('system','mobile-theme');
} else { } else {
set_config('system','mobile-theme', $theme_mobile); set_config('system','mobile-theme', $theme_mobile);
} }
if ( $singleuser === '---' ) { if ( $singleuser === '---' ) {
del_config('system','singleuser'); del_config('system','singleuser');
} else { } else {
set_config('system','singleuser', $singleuser); set_config('system','singleuser', $singleuser);
} }
set_config('system','maximagesize', $maximagesize); set_config('system','maximagesize', $maximagesize);
set_config('system','max_image_length', $maximagelength); set_config('system','max_image_length', $maximagelength);
set_config('system','jpeg_quality', $jpegimagequality); set_config('system','jpeg_quality', $jpegimagequality);
@ -473,7 +475,7 @@ function admin_page_site_post(&$a){
set_config('system','curl_timeout', $timeout); set_config('system','curl_timeout', $timeout);
set_config('system','dfrn_only', $dfrn_only); set_config('system','dfrn_only', $dfrn_only);
set_config('system','ostatus_disabled', $ostatus_disabled); set_config('system','ostatus_disabled', $ostatus_disabled);
set_config('system','ostatus_poll_interval', $ostatus_poll_interval); set_config('system','ostatus_poll_interval', $ostatus_poll_interval);
set_config('system','diaspora_enabled', $diaspora_enabled); set_config('system','diaspora_enabled', $diaspora_enabled);
set_config('config','private_addons', $private_addons); set_config('config','private_addons', $private_addons);
@ -524,32 +526,32 @@ function admin_page_site(&$a) {
foreach($files as $file) { foreach($files as $file) {
$f = basename($file); $f = basename($file);
$theme_name = ((file_exists($file . '/experimental')) ? sprintf("%s - \x28Experimental\x29", $f) : $f); $theme_name = ((file_exists($file . '/experimental')) ? sprintf("%s - \x28Experimental\x29", $f) : $f);
if (file_exists($file . '/mobile')) { if (file_exists($file . '/mobile')) {
$theme_choices_mobile[$f] = $theme_name; $theme_choices_mobile[$f] = $theme_name;
} }
else { else {
$theme_choices[$f] = $theme_name; $theme_choices[$f] = $theme_name;
} }
} }
} }
/* OStatus conversation poll choices */ /* OStatus conversation poll choices */
$ostatus_poll_choices = array( $ostatus_poll_choices = array(
"-2" => t("Never"), "-2" => t("Never"),
"-1" => t("At post arrival"), "-1" => t("At post arrival"),
"0" => t("Frequently"), "0" => t("Frequently"),
"60" => t("Hourly"), "60" => t("Hourly"),
"720" => t("Twice daily"), "720" => t("Twice daily"),
"1440" => t("Daily") "1440" => t("Daily")
); );
/* get user names to make the install a personal install of X */ /* get user names to make the install a personal install of X */
$user_names = array(); $user_names = array();
$user_names['---'] = t('Multi user instance'); $user_names['---'] = t('Multi user instance');
$users = q("SELECT username, nickname FROM `user`"); $users = q("SELECT username, nickname FROM `user`");
foreach ($users as $user) { foreach ($users as $user) {
$user_names[$user['nickname']] = $user['username']; $user_names[$user['nickname']] = $user['username'];
} }
/* Banner */ /* Banner */
$banner = get_config('system','banner'); $banner = get_config('system','banner');
@ -626,9 +628,9 @@ function admin_page_site(&$a) {
'$no_regfullname' => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), t("Force users to register with a space between firstname and lastname in Full name, as an antispam measure")), '$no_regfullname' => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), t("Force users to register with a space between firstname and lastname in Full name, as an antispam measure")),
'$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), t("Use PHP UTF8 regular expressions")), '$no_utf' => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), t("Use PHP UTF8 regular expressions")),
'$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), t("Display a Community page showing all recent public postings on this site.")), '$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), t("Display a Community page showing all recent public postings on this site.")),
'$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")), '$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")),
'$ostatus_poll_interval' => array('ostatus_poll_interval', t("OStatus conversation completion interval"), (string) intval(get_config('system','ostatus_poll_interval')), t("How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."), $ostatus_poll_choices), '$ostatus_poll_interval' => array('ostatus_poll_interval', t("OStatus conversation completion interval"), (string) intval(get_config('system','ostatus_poll_interval')), t("How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."), $ostatus_poll_choices),
'$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")), '$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")),
'$dfrn_only' => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")), '$dfrn_only' => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")),
'$verifyssl' => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.")), '$verifyssl' => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.")),
'$proxyuser' => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""), '$proxyuser' => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
@ -651,7 +653,7 @@ function admin_page_site(&$a) {
'$relocate_url' => array('relocate_url', t("New base url"), $a->get_baseurl(), "Change base url for this server. Sends relocate message to all DFRN contacts of all users."), '$relocate_url' => array('relocate_url', t("New base url"), $a->get_baseurl(), "Change base url for this server. Sends relocate message to all DFRN contacts of all users."),
'$enable_noscrape'=> array('enable_noscrape', t("Enable noscrape"), get_config('system','enable_noscrape'), t("The noscrape feature speeds up directory submissions by using JSON data instead of HTML scraping.")), '$enable_noscrape'=> array('enable_noscrape', t("Enable noscrape"), get_config('system','enable_noscrape'), t("The noscrape feature speeds up directory submissions by using JSON data instead of HTML scraping.")),
'$form_security_token' => get_form_security_token("admin_site") '$form_security_token' => get_form_security_token("admin_site")
)); ));
@ -744,39 +746,61 @@ function admin_page_dbsync(&$a) {
function admin_page_users_post(&$a){ function admin_page_users_post(&$a){
$pending = ( x($_POST, 'pending') ? $_POST['pending'] : Array() ); $pending = ( x($_POST, 'pending') ? $_POST['pending'] : Array() );
$users = ( x($_POST, 'user') ? $_POST['user'] : Array() ); $users = ( x($_POST, 'user') ? $_POST['user'] : Array() );
$nu_name = ( x($_POST, 'new_user_name') ? $_POST['new_user_name'] : ''); $nu_name = ( x($_POST, 'new_user_name') ? $_POST['new_user_name'] : '');
$nu_nickname = ( x($_POST, 'new_user_nickname') ? $_POST['new_user_nickname'] : ''); $nu_nickname = ( x($_POST, 'new_user_nickname') ? $_POST['new_user_nickname'] : '');
$nu_email = ( x($_POST, 'new_user_email') ? $_POST['new_user_email'] : ''); $nu_email = ( x($_POST, 'new_user_email') ? $_POST['new_user_email'] : '');
check_form_security_token_redirectOnErr('/admin/users', 'admin_users'); check_form_security_token_redirectOnErr('/admin/users', 'admin_users');
if (!($nu_name==="") && !($nu_email==="") && !($nu_nickname==="")) { if (!($nu_name==="") && !($nu_email==="") && !($nu_nickname==="")) {
require_once('include/user.php'); require_once('include/user.php');
require_once('include/email.php');
$result = create_user( array('username'=>$nu_name, 'email'=>$nu_email, 'nickname'=>$nu_nickname, 'verified'=>1) ); $result = create_user( array('username'=>$nu_name, 'email'=>$nu_email, 'nickname'=>$nu_nickname, 'verified'=>1) );
if(! $result['success']) { if(! $result['success']) {
notice($result['message']); notice($result['message']);
return; return;
} }
$nu = $result['user']; $nu = $result['user'];
$email_tpl = get_intltext_template("register_adminadd_eml.tpl"); $preamble = deindent(t('
$email_tpl = replace_macros($email_tpl, array( Dear %1$s,
'$sitename' => $a->config['sitename'], the administrator of %2$s has set up an account for you.'));
'$siteurl' => $a->get_baseurl(), $body = deindent(t('
'$username' => $nu['username'], The login details are as follows:
'$email' => $nu['email'],
'$password' => $result['password'], Site Location: %1$s
'$uid' => $nu['uid'] )); Login Name: %2$s
Password: %3$s
$res = mail($nu['email'], email_header_encode( sprintf( t('Registration details for %s'), $a->config['sitename']),'UTF-8'),
$email_tpl, You may change your password from your account "Settings" page after logging
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n" in.
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' ); Please take a few moments to review the other account settings on that page.
if ($res) {
info( t('Registration successful. Email send to user').EOL ); You may also wish to add some basic information to your default profile
} (on the "Profiles" page) so that other people can easily find you.
}
We recommend setting your full name, adding a profile photo,
adding some profile "keywords" (very useful in making new friends) - and
perhaps what country you live in; if you do not wish to be more specific
than that.
We fully respect your right to privacy, and none of these items are necessary.
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
Thank you and welcome to %4$s.'));
$preamble = sprintf($preamble, $nu['username'], $a->config['sitename']);
$body = sprintf($body, $a->get_baseurl(), $nu['email'], $result['password'], $a->config['sitename']);
notification(array(
'type' => "SYSTEM_EMAIL",
'to_email' => $email,
'subject'=> sprintf( t('Registration details for %s'), $a->config['sitename']),
'preamble'=> $preamble,
'body' => $body));
}
if (x($_POST,'page_users_block')){ if (x($_POST,'page_users_block')){
foreach($users as $uid){ foreach($users as $uid){
@ -825,7 +849,7 @@ function admin_page_users(&$a){
} }
switch($a->argv[2]){ switch($a->argv[2]){
case "delete":{ case "delete":{
check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't'); check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
// delete user // delete user
require_once("include/Contact.php"); require_once("include/Contact.php");
user_remove($uid); user_remove($uid);
@ -833,7 +857,7 @@ function admin_page_users(&$a){
notice( sprintf(t("User '%s' deleted"), $user[0]['username']) . EOL); notice( sprintf(t("User '%s' deleted"), $user[0]['username']) . EOL);
}; break; }; break;
case "block":{ case "block":{
check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't'); check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
q("UPDATE `user` SET `blocked`=%d WHERE `uid`=%s", q("UPDATE `user` SET `blocked`=%d WHERE `uid`=%s",
intval( 1-$user[0]['blocked'] ), intval( 1-$user[0]['blocked'] ),
intval( $uid ) intval( $uid )
@ -889,7 +913,7 @@ function admin_page_users(&$a){
t('Normal Account'), t('Normal Account'),
t('Soapbox Account'), t('Soapbox Account'),
t('Community/Celebrity Account'), t('Community/Celebrity Account'),
t('Automatic Friend Account') t('Automatic Friend Account')
); );
$e['page-flags'] = $accounts[$e['page-flags']]; $e['page-flags'] = $accounts[$e['page-flags']];
$e['register_date'] = relative_date($e['register_date']); $e['register_date'] = relative_date($e['register_date']);
@ -1094,7 +1118,7 @@ function admin_page_plugins(&$a){
'$baseurl' => $a->get_baseurl(true), '$baseurl' => $a->get_baseurl(true),
'$function' => 'plugins', '$function' => 'plugins',
'$plugins' => $plugins, '$plugins' => $plugins,
'$form_security_token' => get_form_security_token("admin_themes"), '$form_security_token' => get_form_security_token("admin_themes"),
)); ));
} }
@ -1298,7 +1322,7 @@ function admin_page_themes(&$a){
'$plugins' => $xthemes, '$plugins' => $xthemes,
'$experimental' => t('[Experimental]'), '$experimental' => t('[Experimental]'),
'$unsupported' => t('[Unsupported]'), '$unsupported' => t('[Unsupported]'),
'$form_security_token' => get_form_security_token("admin_themes"), '$form_security_token' => get_form_security_token("admin_themes"),
)); ));
} }
@ -1311,7 +1335,7 @@ function admin_page_themes(&$a){
function admin_page_logs_post(&$a) { function admin_page_logs_post(&$a) {
if (x($_POST,"page_logs")) { if (x($_POST,"page_logs")) {
check_form_security_token_redirectOnErr('/admin/logs', 'admin_logs'); check_form_security_token_redirectOnErr('/admin/logs', 'admin_logs');
$logfile = ((x($_POST,'logfile')) ? notags(trim($_POST['logfile'])) : ''); $logfile = ((x($_POST,'logfile')) ? notags(trim($_POST['logfile'])) : '');
$debugging = ((x($_POST,'debugging')) ? true : false); $debugging = ((x($_POST,'debugging')) ? true : false);
@ -1350,7 +1374,7 @@ function admin_page_logs(&$a){
$data = ''; $data = '';
if(!file_exists($f)) { if(!file_exists($f)) {
$data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is $data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is
readable."); readable.");
} }
else { else {
@ -1390,7 +1414,7 @@ readable.");
'$logfile' => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your Friendica top-level directory.")), '$logfile' => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your Friendica top-level directory.")),
'$loglevel' => array('loglevel', t("Log level"), get_config('system','loglevel'), "", $log_choices), '$loglevel' => array('loglevel', t("Log level"), get_config('system','loglevel'), "", $log_choices),
'$form_security_token' => get_form_security_token("admin_logs"), '$form_security_token' => get_form_security_token("admin_logs"),
)); ));
} }

View file

@ -9,11 +9,13 @@
* 1. A form was submitted by our user approving a friendship that originated elsewhere. * 1. A form was submitted by our user approving a friendship that originated elsewhere.
* This may also be called from dfrn_request to automatically approve a friendship. * This may also be called from dfrn_request to automatically approve a friendship.
* *
* 2. We may be the target or other side of the conversation to scenario 1, and will * 2. We may be the target or other side of the conversation to scenario 1, and will
* interact with that process on our own user's behalf. * interact with that process on our own user's behalf.
* *
*/ */
require_once('include/enotify.php');
function dfrn_confirm_post(&$a,$handsfree = null) { function dfrn_confirm_post(&$a,$handsfree = null) {
if(is_array($handsfree)) { if(is_array($handsfree)) {
@ -35,11 +37,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
/** /**
* *
* Main entry point. Scenario 1. Our user received a friend request notification (perhaps * Main entry point. Scenario 1. Our user received a friend request notification (perhaps
* from another site) and clicked 'Approve'. * from another site) and clicked 'Approve'.
* $POST['source_url'] is not set. If it is, it indicates Scenario 2. * $POST['source_url'] is not set. If it is, it indicates Scenario 2.
* *
* We may also have been called directly from dfrn_request ($handsfree != null) due to * We may also have been called directly from dfrn_request ($handsfree != null) due to
* this being a page type which supports automatic friend acceptance. That is also Scenario 1 * this being a page type which supports automatic friend acceptance. That is also Scenario 1
* since we are operating on behalf of our registered user to approve a friendship. * since we are operating on behalf of our registered user to approve a friendship.
* *
@ -67,7 +69,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
// These data elements may come from either the friend request notification form or $handsfree array. // These data elements may come from either the friend request notification form or $handsfree array.
if(is_array($handsfree)) { if(is_array($handsfree)) {
logger('dfrn_confirm: Confirm in handsfree mode'); logger('Confirm in handsfree mode');
$dfrn_id = $handsfree['dfrn_id']; $dfrn_id = $handsfree['dfrn_id'];
$intro_id = $handsfree['intro_id']; $intro_id = $handsfree['intro_id'];
$duplex = $handsfree['duplex']; $duplex = $handsfree['duplex'];
@ -86,7 +88,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
/** /**
* *
* Ensure that dfrn_id has precedence when we go to find the contact record. * Ensure that dfrn_id has precedence when we go to find the contact record.
* We only want to search based on contact id if there is no dfrn_id, * We only want to search based on contact id if there is no dfrn_id,
* e.g. for OStatus network followers. * e.g. for OStatus network followers.
* *
*/ */
@ -94,15 +96,15 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if(strlen($dfrn_id)) if(strlen($dfrn_id))
$cid = 0; $cid = 0;
logger('dfrn_confirm: Confirming request for dfrn_id (issued) ' . $dfrn_id); logger('Confirming request for dfrn_id (issued) ' . $dfrn_id);
if($cid) if($cid)
logger('dfrn_confirm: Confirming follower with contact_id: ' . $cid); logger('Confirming follower with contact_id: ' . $cid);
/** /**
* *
* The other person will have been issued an ID when they first requested friendship. * The other person will have been issued an ID when they first requested friendship.
* Locate their record. At this time, their record will have both pending and blocked set to 1. * Locate their record. At this time, their record will have both pending and blocked set to 1.
* There won't be any dfrn_id if this is a network follower, so use the contact_id instead. * There won't be any dfrn_id if this is a network follower, so use the contact_id instead.
* *
*/ */
@ -114,7 +116,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
); );
if(! count($r)) { if(! count($r)) {
logger('dfrn_confirm: Contact not found in DB.'); logger('Contact not found in DB.');
notice( t('Contact not found.') . EOL ); notice( t('Contact not found.') . EOL );
notice( t('This may occasionally happen if contact was requested by both persons and it has already been approved.') . EOL ); notice( t('This may occasionally happen if contact was requested by both persons and it has already been approved.') . EOL );
return; return;
@ -127,7 +129,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$site_pubkey = $contact['site-pubkey']; $site_pubkey = $contact['site-pubkey'];
$dfrn_confirm = $contact['confirm']; $dfrn_confirm = $contact['confirm'];
$aes_allow = $contact['aes_allow']; $aes_allow = $contact['aes_allow'];
$network = ((strlen($contact['issued-id'])) ? NETWORK_DFRN : NETWORK_OSTATUS); $network = ((strlen($contact['issued-id'])) ? NETWORK_DFRN : NETWORK_OSTATUS);
if($contact['network']) if($contact['network'])
@ -139,15 +141,16 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
* *
* Generate a key pair for all further communications with this person. * Generate a key pair for all further communications with this person.
* We have a keypair for every contact, and a site key for unknown people. * We have a keypair for every contact, and a site key for unknown people.
* This provides a means to carry on relationships with other people if * This provides a means to carry on relationships with other people if
* any single key is compromised. It is a robust key. We're much more * any single key is compromised. It is a robust key. We're much more
* worried about key leakage than anybody cracking it. * worried about key leakage than anybody cracking it.
* *
*/ */
require_once('include/crypto.php'); require_once('include/crypto.php');
$res = new_keypair(4096); $res = new_keypair(4096);
$private_key = $res['prvkey']; $private_key = $res['prvkey'];
$public_key = $res['pubkey']; $public_key = $res['pubkey'];
@ -156,23 +159,23 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$r = q("UPDATE `contact` SET `prvkey` = '%s' WHERE `id` = %d AND `uid` = %d", $r = q("UPDATE `contact` SET `prvkey` = '%s' WHERE `id` = %d AND `uid` = %d",
dbesc($private_key), dbesc($private_key),
intval($contact_id), intval($contact_id),
intval($uid) intval($uid)
); );
$params = array(); $params = array();
/** /**
* *
* Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our * Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
* site private key (person on the other end can decrypt it with our site public key). * site private key (person on the other end can decrypt it with our site public key).
* Then encrypt our profile URL with the other person's site public key. They can decrypt * Then encrypt our profile URL with the other person's site public key. They can decrypt
* it with their site private key. If the decryption on the other end fails for either * it with their site private key. If the decryption on the other end fails for either
* item, it indicates tampering or key failure on at least one site and we will not be * item, it indicates tampering or key failure on at least one site and we will not be
* able to provide a secure communication pathway. * able to provide a secure communication pathway.
* *
* If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3 * If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3
* or later) then we encrypt the personal public key we send them using AES-256-CBC and a * or later) then we encrypt the personal public key we send them using AES-256-CBC and a
* random key which is encrypted with their site public key. * random key which is encrypted with their site public key.
* *
*/ */
@ -205,7 +208,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($user[0]['page-flags'] == PAGE_PRVGROUP) if($user[0]['page-flags'] == PAGE_PRVGROUP)
$params['page'] = 2; $params['page'] = 2;
logger('dfrn_confirm: Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA); logger('Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA);
/** /**
* *
@ -219,10 +222,10 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$res = post_url($dfrn_confirm,$params); $res = post_url($dfrn_confirm,$params);
logger('dfrn_confirm: Confirm: received data: ' . $res, LOGGER_DATA); logger(' Confirm: received data: ' . $res, LOGGER_DATA);
// Now figure out what they responded. Try to be robust if the remote site is // Now figure out what they responded. Try to be robust if the remote site is
// having difficulty and throwing up errors of some kind. // having difficulty and throwing up errors of some kind.
$leading_junk = substr($res,0,strpos($res,'<?xml')); $leading_junk = substr($res,0,strpos($res,'<?xml'));
@ -232,20 +235,26 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
// No XML at all, this exchange is messed up really bad. // No XML at all, this exchange is messed up really bad.
// We shouldn't proceed, because the xml parser might choke, // We shouldn't proceed, because the xml parser might choke,
// and $status is going to be zero, which indicates success. // and $status is going to be zero, which indicates success.
// We can hardly call this a success. // We can hardly call this a success.
notice( t('Response from remote site was not understood.') . EOL); notice( t('Response from remote site was not understood.') . EOL);
return; return;
} }
if(strlen($leading_junk) && get_config('system','debugging')) { if(strlen($leading_junk) && get_config('system','debugging')) {
// This might be more common. Mixed error text and some XML. // This might be more common. Mixed error text and some XML.
// If we're configured for debugging, show the text. Proceed in either case. // If we're configured for debugging, show the text. Proceed in either case.
notice( t('Unexpected response from remote site: ') . EOL . $leading_junk . EOL ); notice( t('Unexpected response from remote site: ') . EOL . $leading_junk . EOL );
} }
if(stristr($res, "<status")===false) {
// wrong xml! stop here!
notice( t('Unexpected response from remote site: ') . EOL . htmlspecialchars($res) . EOL );
return;
}
$xml = parse_xml_string($res); $xml = parse_xml_string($res);
$status = (int) $xml->status; $status = (int) $xml->status;
$message = unxmlify($xml->message); // human readable text of what may have gone wrong. $message = unxmlify($xml->message); // human readable text of what may have gone wrong.
@ -261,7 +270,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$r = q("UPDATE contact SET `issued-id` = '%s' WHERE `id` = %d AND `uid` = %d", $r = q("UPDATE contact SET `issued-id` = '%s' WHERE `id` = %d AND `uid` = %d",
dbesc($new_dfrn_id), dbesc($new_dfrn_id),
intval($contact_id), intval($contact_id),
intval($uid) intval($uid)
); );
case 2: case 2:
@ -307,7 +316,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
require_once('include/Photo.php'); require_once('include/Photo.php');
$photos = import_profile_photo($contact['photo'],$uid,$contact_id); $photos = import_profile_photo($contact['photo'],$uid,$contact_id);
logger('dfrn_confirm: confirm - imported photos'); logger('dfrn_confirm: confirm - imported photos');
if($network === NETWORK_DFRN) { if($network === NETWORK_DFRN) {
@ -455,7 +464,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if(count($self)) { if(count($self)) {
$arr = array(); $arr = array();
$arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $uid); $arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $uid);
$arr['uid'] = $uid; $arr['uid'] = $uid;
$arr['contact-id'] = $self[0]['id']; $arr['contact-id'] = $self[0]['id'];
$arr['wall'] = 1; $arr['wall'] = 1;
@ -522,7 +531,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
* *
* Begin Scenario 2. This is the remote response to the above scenario. * Begin Scenario 2. This is the remote response to the above scenario.
* This will take place on the site that originally initiated the friend request. * This will take place on the site that originally initiated the friend request.
* In the section above where the confirming party makes a POST and * In the section above where the confirming party makes a POST and
* retrieves xml status information, they are communicating with the following code. * retrieves xml status information, they are communicating with the following code.
* *
*/ */
@ -603,7 +612,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
// this is either a bogus confirmation (?) or we deleted the original introduction. // this is either a bogus confirmation (?) or we deleted the original introduction.
$message = t('Contact record was not found for you on our site.'); $message = t('Contact record was not found for you on our site.');
xml_status(3,$message); xml_status(3,$message);
return; // NOTREACHED return; // NOTREACHED
} }
} }
@ -731,33 +740,21 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$combined = $r[0]; $combined = $r[0];
if((count($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) { if((count($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) {
$mutual = ($new_relation == CONTACT_IS_FRIEND);
push_lang($r[0]['language']); notification(array(
$tpl = (($new_relation == CONTACT_IS_FRIEND) 'type' => NOTIFY_CONFIRM,
? get_intltext_template('friend_complete_eml.tpl') 'notify_flags' => $r[0]['notify-flags'],
: get_intltext_template('intro_complete_eml.tpl')); 'language' => $r[0]['language'],
'to_name' => $r[0]['username'],
$email_tpl = replace_macros($tpl, array( 'to_email' => $r[0]['email'],
'$sitename' => $a->config['sitename'], 'uid' => $r[0]['uid'],
'$siteurl' => $a->get_baseurl(), 'link' => $a->get_baseurl() . '/contacts/' . $dfrn_record,
'$username' => $r[0]['username'], 'source_name' => ((strlen(stripslashes($r[0]['name']))) ? stripslashes($r[0]['name']) : t('[Name Withheld]')),
'$email' => $r[0]['email'], 'source_link' => $r[0]['url'],
'$fn' => $r[0]['name'], 'source_photo' => $r[0]['photo'],
'$dfrn_url' => $r[0]['url'], 'verb' => ($mutual?ACTIVITY_FRIEND:ACTIVITY_FOLLOW),
'$uid' => $newuid ) 'otype' => 'intro'
); ));
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: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
if(!$res) {
// pointless throwing an error here and confusing the person at the other end of the wire.
}
pop_lang();
} }
// Send a new friend post if we are allowed to... // Send a new friend post if we are allowed to...
@ -778,7 +775,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if(count($self)) { if(count($self)) {
$arr = array(); $arr = array();
$arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $local_uid); $arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $local_uid);
$arr['uid'] = $local_uid; $arr['uid'] = $local_uid;
$arr['contact-id'] = $self[0]['id']; $arr['contact-id'] = $self[0]['id'];
$arr['wall'] = 1; $arr['wall'] = 1;

View file

@ -9,6 +9,8 @@
* *
*/ */
require_once('include/enotify.php');
if(! function_exists('dfrn_request_init')) { if(! function_exists('dfrn_request_init')) {
function dfrn_request_init(&$a) { function dfrn_request_init(&$a) {
@ -45,13 +47,13 @@ function dfrn_request_post(&$a) {
if(x($_POST, 'cancel')) { if(x($_POST, 'cancel')) {
goaway(z_root()); goaway(z_root());
} }
/** /**
* *
* Scenario 2: We've introduced ourself to another cell, then have been returned to our own cell * Scenario 2: We've introduced ourself to another cell, then have been returned to our own cell
* to confirm the request, and then we've clicked submit (perhaps after logging in). * to confirm the request, and then we've clicked submit (perhaps after logging in).
* That brings us here: * That brings us here:
* *
*/ */
@ -145,7 +147,7 @@ function dfrn_request_post(&$a) {
*/ */
$r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `nurl`, `name`, `nick`, `photo`, `site-pubkey`, $r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `nurl`, `name`, `nick`, `photo`, `site-pubkey`,
`request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`, `hidden`) `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`, `hidden`)
VALUES ( %d, '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)", VALUES ( %d, '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
intval(local_user()), intval(local_user()),
datetime_convert(), datetime_convert(),
@ -216,17 +218,17 @@ function dfrn_request_post(&$a) {
/** /**
* Otherwise: * Otherwise:
* *
* Scenario 1: * Scenario 1:
* We are the requestee. A person from a remote cell has made an introduction * We are the requestee. A person from a remote cell has made an introduction
* on our profile web page and clicked submit. We will use their DFRN-URL to * on our profile web page and clicked submit. We will use their DFRN-URL to
* figure out how to contact their cell. * figure out how to contact their cell.
* *
* Scrape the originating DFRN-URL for everything we need. Create a contact record * Scrape the originating DFRN-URL for everything we need. Create a contact record
* and an introduction to show our user next time he/she logs in. * and an introduction to show our user next time he/she logs in.
* Finally redirect back to the requestor so that their site can record the request. * Finally redirect back to the requestor so that their site can record the request.
* If our user (the requestee) later confirms this request, a record of it will need * If our user (the requestee) later confirms this request, a record of it will need
* to exist on the requestor's cell in order for the confirmation process to complete.. * to exist on the requestor's cell in order for the confirmation process to complete..
* *
* It's possible that neither the requestor or the requestee are logged in at the moment, * It's possible that neither the requestor or the requestee are logged in at the moment,
* and the requestor does not yet have any credentials to the requestee profile. * and the requestor does not yet have any credentials to the requestee profile.
@ -266,19 +268,19 @@ function dfrn_request_post(&$a) {
notice( t('Spam protection measures have been invoked.') . EOL); notice( t('Spam protection measures have been invoked.') . EOL);
notice( t('Friends are advised to please try again in 24 hours.') . EOL); notice( t('Friends are advised to please try again in 24 hours.') . EOL);
return; return;
} }
} }
/** /**
* *
* Cleanup old introductions that remain blocked. * Cleanup old introductions that remain blocked.
* Also remove the contact record, but only if there is no existing relationship * Also remove the contact record, but only if there is no existing relationship
* Do not remove email contacts as these may be awaiting email verification * Do not remove email contacts as these may be awaiting email verification
*/ */
$r = q("SELECT `intro`.*, `intro`.`id` AS `iid`, `contact`.`id` AS `cid`, `contact`.`rel` $r = q("SELECT `intro`.*, `intro`.`id` AS `iid`, `contact`.`id` AS `cid`, `contact`.`rel`
FROM `intro` LEFT JOIN `contact` on `intro`.`contact-id` = `contact`.`id` FROM `intro` LEFT JOIN `contact` on `intro`.`contact-id` = `contact`.`id`
WHERE `intro`.`blocked` = 1 AND `contact`.`self` = 0 WHERE `intro`.`blocked` = 1 AND `contact`.`self` = 0
AND `contact`.`network` != '%s' AND `contact`.`network` != '%s'
AND `intro`.`datetime` < UTC_TIMESTAMP() - INTERVAL 30 MINUTE ", AND `intro`.`datetime` < UTC_TIMESTAMP() - INTERVAL 30 MINUTE ",
dbesc(NETWORK_MAIL2) dbesc(NETWORK_MAIL2)
@ -401,13 +403,13 @@ function dfrn_request_post(&$a) {
$photo = avatar_img($addr); $photo = avatar_img($addr);
$r = q("UPDATE `contact` SET $r = q("UPDATE `contact` SET
`photo` = '%s', `photo` = '%s',
`thumb` = '%s', `thumb` = '%s',
`micro` = '%s', `micro` = '%s',
`name-date` = '%s', `name-date` = '%s',
`uri-date` = '%s', `uri-date` = '%s',
`avatar-date` = '%s', `avatar-date` = '%s',
`hidden` = 0, `hidden` = 0,
WHERE `id` = %d WHERE `id` = %d
", ",
@ -464,7 +466,7 @@ function dfrn_request_post(&$a) {
if($network === NETWORK_DFRN) { if($network === NETWORK_DFRN) {
$ret = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `self` = 0 LIMIT 1", $ret = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `self` = 0 LIMIT 1",
intval($uid), intval($uid),
dbesc($url) dbesc($url)
); );
@ -506,7 +508,7 @@ function dfrn_request_post(&$a) {
goaway($a->get_baseurl() . '/' . $a->cmd); goaway($a->get_baseurl() . '/' . $a->cmd);
return; // NOTREACHED return; // NOTREACHED
} }
require_once('include/Scrape.php'); require_once('include/Scrape.php');
@ -521,12 +523,12 @@ function dfrn_request_post(&$a) {
notice( t('Warning: profile location has no identifiable owner name.') . EOL ); notice( t('Warning: profile location has no identifiable owner name.') . EOL );
if(! x($parms,'photo')) if(! x($parms,'photo'))
notice( t('Warning: profile location has no profile photo.') . EOL ); notice( t('Warning: profile location has no profile photo.') . EOL );
$invalid = validate_dfrn($parms); $invalid = validate_dfrn($parms);
if($invalid) { if($invalid) {
notice( sprintf( tt("%d required parameter was not found at the given location", notice( sprintf( tt("%d required parameter was not found at the given location",
"%d required parameters were not found at the given location", "%d required parameters were not found at the given location",
$invalid), $invalid) . EOL ); $invalid), $invalid) . EOL );
return; return;
} }
} }
@ -591,7 +593,7 @@ function dfrn_request_post(&$a) {
// This notice will only be seen by the requestor if the requestor and requestee are on the same server. // This notice will only be seen by the requestor if the requestor and requestee are on the same server.
if(! $failed) if(! $failed)
info( t('Your introduction has been sent.') . EOL ); info( t('Your introduction has been sent.') . EOL );
// "Homecoming" - send the requestor back to their site to record the introduction. // "Homecoming" - send the requestor back to their site to record the introduction.
@ -599,21 +601,21 @@ function dfrn_request_post(&$a) {
$dfrn_url = bin2hex($a->get_baseurl() . '/profile/' . $nickname); $dfrn_url = bin2hex($a->get_baseurl() . '/profile/' . $nickname);
$aes_allow = ((function_exists('openssl_encrypt')) ? 1 : 0); $aes_allow = ((function_exists('openssl_encrypt')) ? 1 : 0);
goaway($parms['dfrn-request'] . "?dfrn_url=$dfrn_url" goaway($parms['dfrn-request'] . "?dfrn_url=$dfrn_url"
. '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
. '&confirm_key=' . $hash . '&confirm_key=' . $hash
. (($aes_allow) ? "&aes_allow=1" : "") . (($aes_allow) ? "&aes_allow=1" : "")
); );
// NOTREACHED // NOTREACHED
// END $network === NETWORK_DFRN // END $network === NETWORK_DFRN
} }
elseif($network === NETWORK_OSTATUS) { elseif($network === NETWORK_OSTATUS) {
/** /**
* *
* OStatus network * OStatus network
* Check contact existence * Check contact existence
* Try and scrape together enough information to create a contact record, * Try and scrape together enough information to create a contact record,
* with us as CONTACT_IS_FOLLOWER * with us as CONTACT_IS_FOLLOWER
* Substitute our user's feed URL into $url template * Substitute our user's feed URL into $url template
* Send the subscriber home to subscribe * Send the subscriber home to subscribe
@ -655,7 +657,7 @@ function dfrn_request_content(&$a) {
return login(); return login();
} }
// Edge case, but can easily happen in the wild. This person is authenticated, // Edge case, but can easily happen in the wild. This person is authenticated,
// but not as the person who needs to deal with this request. // but not as the person who needs to deal with this request.
if ($a->user['nickname'] != $a->argv[1]) { if ($a->user['nickname'] != $a->argv[1]) {
@ -683,11 +685,11 @@ function dfrn_request_content(&$a) {
return $o; return $o;
} }
elseif((x($_GET,'confirm_key')) && strlen($_GET['confirm_key'])) { elseif((x($_GET,'confirm_key')) && strlen($_GET['confirm_key'])) {
// we are the requestee and it is now safe to send our user their introduction, // we are the requestee and it is now safe to send our user their introduction,
// We could just unblock it, but first we have to jump through a few hoops to // We could just unblock it, but first we have to jump through a few hoops to
// send an email, or even to find out if we need to send an email. // send an email, or even to find out if we need to send an email.
$intro = q("SELECT * FROM `intro` WHERE `hash` = '%s' LIMIT 1", $intro = q("SELECT * FROM `intro` WHERE `hash` = '%s' LIMIT 1",
dbesc($_GET['confirm_key']) dbesc($_GET['confirm_key'])
@ -707,7 +709,7 @@ function dfrn_request_content(&$a) {
$auto_confirm = true; $auto_confirm = true;
if(! $auto_confirm) { if(! $auto_confirm) {
require_once('include/enotify.php');
notification(array( notification(array(
'type' => NOTIFY_INTRO, 'type' => NOTIFY_INTRO,
'notify_flags' => $r[0]['notify-flags'], 'notify_flags' => $r[0]['notify-flags'],
@ -758,7 +760,7 @@ function dfrn_request_content(&$a) {
/** /**
* Normal web request. Display our user's introduction form. * Normal web request. Display our user's introduction form.
*/ */
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) { if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
if(! get_config('system','local_block')) { if(! get_config('system','local_block')) {
notice( t('Public access denied.') . EOL); notice( t('Public access denied.') . EOL);
@ -793,7 +795,7 @@ function dfrn_request_content(&$a) {
/** /**
* *
* The auto_request form only has the profile address * The auto_request form only has the profile address
* because nobody is going to read the comments and * because nobody is going to read the comments and
* it doesn't matter if they know you or not. * it doesn't matter if they know you or not.
* *
*/ */

View file

@ -1,6 +1,8 @@
<?php <?php
require_once('include/email.php'); require_once('include/email.php');
require_once('include/enotify.php');
require_once('include/text.php');
function lostpass_post(&$a) { function lostpass_post(&$a) {
@ -32,23 +34,47 @@ function lostpass_post(&$a) {
if($r) if($r)
info( t('Password reset request issued. Check your email.') . EOL); info( t('Password reset request issued. Check your email.') . EOL);
$email_tpl = get_intltext_template("lostpass_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
'$username' => $username,
'$email' => $email,
'$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
));
$res = mail($email, email_header_encode(sprintf( t('Password reset requested at %s'),$a->config['sitename']),'UTF-8'), $sitename = $a->config['sitename'];
$email_tpl, $siteurl = $a->get_baseurl();
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n" $resetlink = $a->get_baseurl() . '/lostpass?verify=' . $new_password;
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
$preamble = deindent(t('
Dear %1$s,
A request was recently received at "%2$s" to reset your account
password. In order to confirm this request, please select the verification link
below or paste it into your web browser address bar.
If you did NOT request this change, please DO NOT follow the link
provided and ignore and/or delete this email.
Your password will not be changed unless we can verify that you
issued this request.'));
$body = deindent(t('
Follow this link to verify your identity:
%1$s
You will then receive a follow-up message containing the new password.
You may change that password from your account settings page after logging in.
The login details are as follows:
Site Location: %2$s
Login Name: %3$s'));
$preamble = sprintf($preamble, $username, $sitename);
$body = sprintf($body, $resetlink, $siteurl, $email);
notification(array(
'type' => "SYSTEM_EMAIL",
'to_email' => $email,
'subject'=> sprintf( t('Password reset requested at %s'),$sitename),
'preamble'=> $preamble,
'body' => $body));
goaway(z_root()); goaway(z_root());
} }
@ -63,9 +89,8 @@ function lostpass_content(&$a) {
dbesc($hash) dbesc($hash)
); );
if(! count($r)) { if(! count($r)) {
notice( t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.") . EOL); $o = t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.");
goaway(z_root()); return $o;
return;
} }
$uid = $r[0]['uid']; $uid = $r[0]['uid'];
$username = $r[0]['username']; $username = $r[0]['username'];
@ -94,26 +119,38 @@ function lostpass_content(&$a) {
info("Your password has been reset." . EOL); info("Your password has been reset." . EOL);
$sitename = $a->config['sitename'];
$siteurl = $a->get_baseurl();
// $username, $email, $new_password
$preamble = deindent(t('
Dear %1$s,
Your password has been changed as requested. Please retain this
information for your records (or change your password immediately to
something that you will remember).
'));
$body = deindent(t('
Your login details are as follows:
$email_tpl = get_intltext_template("passchanged_eml.tpl"); Site Location: %1$s
$email_tpl = replace_macros($email_tpl, array( Login Name: %2$s
'$sitename' => $a->config['sitename'], Password: %3$s
'$siteurl' => $a->get_baseurl(),
'$username' => $username,
'$email' => $email,
'$new_password' => $new_password,
'$uid' => $newuid ));
$subject = sprintf( t('Your password has been changed at %s'), $a->config['sitename']); You may change that password from your account settings page after logging in.
'));
$res = mail($email, email_header_encode( $subject, 'UTF-8'), $email_tpl, $preamble = sprintf($preamble, $username);
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n" $body = sprintf($body, $siteurl, $email, $new_password);
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' ); notification(array(
'type' => "SYSTEM_EMAIL",
'to_email' => $email,
'subject'=> sprintf( t('Your password has been changed at %s'),$sitename),
'preamble'=> $preamble,
'body' => $body));
return $o; return $o;
} }
} }
else { else {
$tpl = get_markup_template('lostpass.tpl'); $tpl = get_markup_template('lostpass.tpl');
@ -122,7 +159,7 @@ function lostpass_content(&$a) {
'$title' => t('Forgot your Password?'), '$title' => t('Forgot your Password?'),
'$desc' => t('Enter your email address and submit to have your password reset. Then check your email for further instructions.'), '$desc' => t('Enter your email address and submit to have your password reset. Then check your email for further instructions.'),
'$name' => t('Nickname or Email: '), '$name' => t('Nickname or Email: '),
'$submit' => t('Reset') '$submit' => t('Reset')
)); ));
return $o; return $o;

View file

@ -1,7 +1,8 @@
<?php <?php
require_once('include/email.php'); require_once('include/enotify.php');
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/user.php');
if(! function_exists('register_post')) { if(! function_exists('register_post')) {
function register_post(&$a) { function register_post(&$a) {
@ -45,7 +46,7 @@ function register_post(&$a) {
$verified = 0; $verified = 0;
break; break;
} }
require_once('include/user.php'); require_once('include/user.php');
@ -62,7 +63,7 @@ function register_post(&$a) {
} }
$user = $result['user']; $user = $result['user'];
if($netpublish && $a->config['register_policy'] != REGISTER_APPROVE) { if($netpublish && $a->config['register_policy'] != REGISTER_APPROVE) {
$url = $a->get_baseurl() . '/profile/' . $user['nickname']; $url = $a->get_baseurl() . '/profile/' . $user['nickname'];
proc_run('php',"include/directory.php","$url"); proc_run('php',"include/directory.php","$url");
@ -80,20 +81,12 @@ function register_post(&$a) {
set_pconfig($user['uid'],'system','invites_remaining',$num_invites); set_pconfig($user['uid'],'system','invites_remaining',$num_invites);
} }
$email_tpl = get_intltext_template("register_open_eml.tpl"); send_register_open_eml(
$email_tpl = replace_macros($email_tpl, array( $user['email'],
'$sitename' => $a->config['sitename'], $a->config['sitename'],
'$siteurl' => $a->get_baseurl(), $a->get_baseurl(),
'$username' => $user['username'], $user['username'],
'$email' => $user['email'], $result['password']);
'$password' => $result['password'],
'$uid' => $user['uid'] ));
$res = mail($user['email'], email_header_encode( sprintf( t('Registration details for %s'), $a->config['sitename']),'UTF-8'),
$email_tpl,
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
if($res) { if($res) {
@ -119,46 +112,40 @@ function register_post(&$a) {
dbesc($lang) dbesc($lang)
); );
$adminlist = explode(",", str_replace(" ", "", $a->config['admin_email'])); // invite system
$r = q("SELECT `language` FROM `user` WHERE `email` = '%s' LIMIT 1",
//dbesc($a->config['admin_email'])
dbesc($adminlist[0])
);
if(count($r))
push_lang($r[0]['language']);
else
push_lang('en');
if($using_invites && $invite_id) { if($using_invites && $invite_id) {
q("delete * from register where hash = '%s' limit 1", dbesc($invite_id)); q("delete * from register where hash = '%s' limit 1", dbesc($invite_id));
set_pconfig($user['uid'],'system','invites_remaining',$num_invites); set_pconfig($user['uid'],'system','invites_remaining',$num_invites);
} }
$email_tpl = get_intltext_template("register_verify_eml.tpl"); // send email to admins
$email_tpl = replace_macros($email_tpl, array( $admin_mail_list = "'".implode("','", array_map(dbesc, explode(",", str_replace(" ", "", $a->config['admin_email']))))."'";
'$sitename' => $a->config['sitename'], $adminlist = q("SELECT uid, language, email FROM user WHERE email IN (%s)",
'$siteurl' => $a->get_baseurl(), $admin_mail_list
'$username' => $user['username'], );
'$email' => $user['email'],
'$password' => $result['password'],
'$uid' => $user['uid'],
'$hash' => $hash
));
$res = mail($a->config['admin_email'], email_header_encode( sprintf(t('Registration request at %s'), $a->config['sitename']),'UTF-8'),
$email_tpl,
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
pop_lang(); foreach ($adminlist as $admin) {
notification(array(
if($res) { 'type' => NOTIFY_SYSTEM,
info( t('Your registration is pending approval by the site owner.') . EOL ) ; 'event' => 'SYSTEM_REGISTER_REQUEST',
goaway(z_root()); 'source_name' => $user['username'],
'source_mail' => $user['email'],
'source_nick' => $user['nickname'],
'source_link' => $a->get_baseurl()."/admin/users/",
'link' => $a->get_baseurl()."/admin/users/",
'source_photo' => $a->get_baseurl() . "/photo/avatar/".$user['uid'].".jpg",
'to_email' => $admin['mail'],
'uid' => $admin['uid'],
'language' => ($admin['language']?$admin['language']:'en'))
);
} }
info( t('Your registration is pending approval by the site owner.') . EOL ) ;
goaway(z_root());
} }
return; return;

View file

@ -1,6 +1,6 @@
<?php <?php
require_once('include/email.php'); require_once('include/enotify.php');
function user_allow($hash) { function user_allow($hash) {
@ -41,21 +41,12 @@ function user_allow($hash) {
push_lang($register[0]['language']); push_lang($register[0]['language']);
$email_tpl = get_intltext_template("register_open_eml.tpl"); send_register_open_eml(
$email_tpl = replace_macros($email_tpl, array( $user[0]['email'],
'$sitename' => $a->config['sitename'], $a->config['sitename'],
'$siteurl' => $a->get_baseurl(), $a->get_baseurl(),
'$username' => $user[0]['username'], $user[0]['username'],
'$email' => $user[0]['email'], $register[0]['password']);
'$password' => $register[0]['password'],
'$uid' => $user[0]['uid']
));
$res = mail($user[0]['email'], email_header_encode( sprintf(t('Registration details for %s'), $a->config['sitename']), 'UTF-8'),
$email_tpl,
'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit' );
pop_lang(); pop_lang();

File diff suppressed because it is too large Load diff

View file

@ -1,13 +0,0 @@
Apreciat/da $myname,
Tens un nou seguidor en $sitename - '$requestor'.
Pots visitar el seu perfil en $url.
Iniciï sessió en el seu lloc per a aprovar o rebutjar/cancelar la sol·licitud.
$siteurl
$sitename

View file

@ -1,19 +0,0 @@
Apreciat/da $username,
Grans noticies... '$fn' a '$dfrn_url' ha acceptat la teva sol·licitud de connexió en '$sitename'.
Ara sous amics mutus i podreu intercanviar actualizacions de estatus, fotos, i correu electrónic
sense cap restricció.
Visita la teva pàgina de 'Contactes' en $sitename si desitja realizar qualsevol canvi en aquesta relació.
$siteurl
[Per exemple, pots crear un perfil independent amb informació que no esta disponible al públic en general
- i assignar drets de visualització a '$fn'].
$sitename

View file

@ -1,21 +0,0 @@
Apreciat/da $username,
'$fn' en '$dfrn_url' ha acceptat la teva petició
connexió a '$sitename'.
'$fn' ha optat per acceptar-te com a "fan", que restringeix certes
formes de comunicació, com missatges privats i algunes interaccions
amb el perfil. Si ets una "celebritat" o una pàgina de comunitat,
aquests ajustos s'aplican automàticament
'$fn' pot optar per extendre aixó en una relació més permisiva
en el futur.
Començaràs a rebre les actualizacions públiques de estatus de '$fn',
que apareixeran a la teva pàgina "Xarxa" en
$siteurl
$sitename

View file

@ -1,35 +0,0 @@
Apreciat/da $username,
S'ha rebut una sol·licitud en $sitename recentment per restablir
la teva contrasenya. Per confirmar aquesta sol·licitud, per favor seleccioni l'enllaç de
verificació sota o copia-ho i pega-ho en la barra d'adreces del teu navegador.
Si NO has sol·licitat aquest canvi, per favor NO segueixis l'enllaç indicat i ignora
i/o elimina aquest missatge.
La teva contrasenya no es canviarà tret que puguem verificar que ets la teva qui
va emetre aquesta sol·licitud.
Segueix aquest enllaç per verificar la teva identitat:
$reset_link
A continuació rebràs un missatge amb la nova contrasenya.
Després de accedir, podràs canviar la contrasenya del teu compte a la pàgina de
configuració.
Les dades d'accés són els següents:
Lloc: $siteurl
Nom: $email
Salutacions,
L'administració de $sitename

View file

@ -1,19 +0,0 @@
Apreciat/da $username,
La teva contrasenya ha estat modificada com has sol·licitat. Pren nota d'aquesta informació
(o canvía immediatament la contrasenya amb quelcom que recordis).
Les teves dades d'accés son les següents:
Lloc: $siteurl
Nom: $email
Contrasenya: $new_password
Després d'accedir pots canviar la contrasenya des de la pàgina de configuració del teu perfil.
$sitename

View file

@ -1,22 +0,0 @@
Apreciat/da $username,
Gràcies per registrar-te en $sitename. El teu compte ha estat creat.
Les dades d'accés són les següents:
Lloc: $siteurl
Nom: $email
Contrasenya: $password
Després d'accedir pots canviar la teva contrasenya a la pàgina de "Configuració".
Pren un moment per revisar les altres configuracions del compte en aquesta pàgina.
Gràcies i benvingut/da $sitename.

View file

@ -1,23 +0,0 @@
S'ha rebut la sol·licitud de registre d'un nou usuari en
$sitename que requereix la teva aprovació.
Les dades d'accés són els següents:
Nom Complet: $username
Lloc: $siteurl
Nom: $email
Per aprovar aquesta sol·licitud, visita el següent enllaç:
$siteurl/regmod/allow/$hash
Per denegar la sol·licitud i eliminar el compte, per favor visita:
$siteurl/regmod/deny/$hash
Gràcies.

View file

@ -1,13 +0,0 @@
Apreciat/da $myname,
Acabes de rebre una sol·licitud de connexió de '$requestor' en $sitename.
Pots visitar el seu perfil en $url.
Accedeix al teu lloc per a veure la presentació completa i acceptar o ignorar/cancel·lar la sol·licitud.
$siteurl
$sitename

View file

@ -1,14 +0,0 @@
Apreciat/da {{$myname}},
Tens un nou seguidor en {{$sitename}} - '{{$requestor}}'.
Pots visitar el seu perfil en {{$url}}.
Iniciï sessió en el seu lloc per a aprovar o rebutjar/cancelar la sol·licitud.
{{$siteurl}}
{{$sitename}}

View file

@ -1,20 +0,0 @@
Apreciat/da {{$username}},
Grans noticies... '{{$fn}}' a '{{$dfrn_url}}' ha acceptat la teva sol·licitud de connexió en '{{$sitename}}'.
Ara sous amics mutus i podreu intercanviar actualizacions de estatus, fotos, i correu electrónic
sense cap restricció.
Visita la teva pàgina de 'Contactes' en {{$sitename}} si desitja realizar qualsevol canvi en aquesta relació.
{{$siteurl}}
[Per exemple, pots crear un perfil independent amb informació que no esta disponible al públic en general
- i assignar drets de visualització a '{{$fn}}'].
{{$sitename}}

View file

@ -1,22 +0,0 @@
Apreciat/da {{$username}},
'{{$fn}}' en '{{$dfrn_url}}' ha acceptat la teva petició
connexió a '{{$sitename}}'.
'{{$fn}}' ha optat per acceptar-te com a "fan", que restringeix certes
formes de comunicació, com missatges privats i algunes interaccions
amb el perfil. Si ets una "celebritat" o una pàgina de comunitat,
aquests ajustos s'aplican automàticament
'{{$fn}}' pot optar per extendre aixó en una relació més permisiva
en el futur.
Començaràs a rebre les actualizacions públiques de estatus de '{{$fn}}',
que apareixeran a la teva pàgina "Xarxa" en
{{$siteurl}}
{{$sitename}}

View file

@ -1,36 +0,0 @@
Apreciat/da {{$username}},
S'ha rebut una sol·licitud en {{$sitename}} recentment per restablir
la teva contrasenya. Per confirmar aquesta sol·licitud, per favor seleccioni l'enllaç de
verificació sota o copia-ho i pega-ho en la barra d'adreces del teu navegador.
Si NO has sol·licitat aquest canvi, per favor NO segueixis l'enllaç indicat i ignora
i/o elimina aquest missatge.
La teva contrasenya no es canviarà tret que puguem verificar que ets la teva qui
va emetre aquesta sol·licitud.
Segueix aquest enllaç per verificar la teva identitat:
{{$reset_link}}
A continuació rebràs un missatge amb la nova contrasenya.
Després de accedir, podràs canviar la contrasenya del teu compte a la pàgina de
configuració.
Les dades d'accés són els següents:
Lloc: {{$siteurl}}
Nom: {{$email}}
Salutacions,
L'administració de {{$sitename}}

View file

@ -1,20 +0,0 @@
Apreciat/da {{$username}},
La teva contrasenya ha estat modificada com has sol·licitat. Pren nota d'aquesta informació
(o canvía immediatament la contrasenya amb quelcom que recordis).
Les teves dades d'accés son les següents:
Lloc: {{$siteurl}}
Nom: {{$email}}
Contrasenya: {{$new_password}}
Després d'accedir pots canviar la contrasenya des de la pàgina de configuració del teu perfil.
{{$sitename}}

View file

@ -1,23 +0,0 @@
Apreciat/da {{$username}},
Gràcies per registrar-te en {{$sitename}}. El teu compte ha estat creat.
Les dades d'accés són les següents:
Lloc: {{$siteurl}}
Nom: {{$email}}
Contrasenya: {{$password}}
Després d'accedir pots canviar la teva contrasenya a la pàgina de "Configuració".
Pren un moment per revisar les altres configuracions del compte en aquesta pàgina.
Gràcies i benvingut/da {{$sitename}}.

View file

@ -1,24 +0,0 @@
S'ha rebut la sol·licitud de registre d'un nou usuari en
{{$sitename}} que requereix la teva aprovació.
Les dades d'accés són els següents:
Nom Complet: {{$username}}
Lloc: {{$siteurl}}
Nom: {{$email}}
Per aprovar aquesta sol·licitud, visita el següent enllaç:
{{$siteurl}}/regmod/allow/{{$hash}}
Per denegar la sol·licitud i eliminar el compte, per favor visita:
{{$siteurl}}/regmod/deny/{{$hash}}
Gràcies.

View file

@ -1,14 +0,0 @@
Apreciat/da {{$myname}},
Acabes de rebre una sol·licitud de connexió de '{{$requestor}}' en {{$sitename}}.
Pots visitar el seu perfil en {{$url}}.
Accedeix al teu lloc per a veure la presentació completa i acceptar o ignorar/cancel·lar la sol·licitud.
{{$siteurl}}
{{$sitename}}

View file

@ -1,11 +0,0 @@
Cheic,
Jo soc a $sitename.
Els desenvolupadors de Friendica han alliberat una actualització $update recentment,
però quan vaig intentar actualitzar, quelcom terrible va anar malament.
Això necessita ser reparat aviat i no ho puc fer sol. Per favor, contacta amb
un desenvolupador de Friendica si no em pots ajudar per tu mateix. La meva base de dades es pot corrompre.
El missatge d'error va ser '$error'.
Ho lamento.
El teu servidor friendica a $siteurl

View file

@ -1,14 +0,0 @@
Drahý/Drahá $[myname],
Máte nového následovatele na $[sitename] - '$[requestor]'.
Můžete si zobrazit jeho profil na $[url].
Prosím, přihlaste se na Vašem webu pro odsouhlasení nebo ignorování/zrušení této žádosti
$[siteurl]
S pozdravem
$[sitename] administrátor

View file

@ -1,22 +0,0 @@
Drahý/Drahá $[username],
Skvělé zprávy... '$[fn]' na '$[dfrn_url]' akceptoval
Vaši žádost o spojení na '$[sitename]'.
Jste nyní vzájemnými přáteli a můžete si vyměňovat aktualizace statusu, fotografií a emailů
bez omezení.
Navštivte prosím stránku "Kontakty" na $[sitename] pokud si přejete provést
jakékoliv změny v tomto vztahu.
$[siteurl]
[Například můžete vytvořit separátní profil s informacemi, které nebudou
dostupné pro veřejnost - a přidělit práva k němu pro čtení pro '$[fn]'].
S pozdravem,
$[sitename] administrátor

View file

@ -1,22 +0,0 @@
Drahý/Drahá $[username],
'$[fn]' na '$[dfrn_url]' akceptoval
Vaši žádost o připojení na '$[sitename]'.
'$[fn]' se rozhodl Vás akceptovat jako "fanouška", což omezuje
určité druhy komunikace, jako jsou soukromé zprávy a určité profilové
interakce. Pokud se jedná o účet celebrity nebo o kumunitní stránky, tato nastavení byla
použita automaticky.
'$[fn]' se může rozhodnout rozšířit tento vztah na oboustraný nebo méně restriktivní
vztah v budoucnosti.
Nyní začnete získávat veřejné aktualizace statusu od '$[fn]',
které se objeví na Vaší stránce "Síť" na
$[siteurl]
S pozdravem,
$[sitename] administrátor

View file

@ -1,23 +0,0 @@
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.
Pokud jste o znovunastavení hesla NEŽÁDALI, prosím NEKLIKEJTE na tento odkaz a ignorujte tento e-mail nebo ho rovnou smažte.
Vaše heslo nebude změněno, dokud nebudeme mít potvrzení, že jste o tento požadavek zažádali právě Vy.
Klikněte na tento odkaz pro prověření Vaší identity:
$reset_link
Poté obdržíte další zprávu obsahující nové heslo.
Následně si toto heslo můžete změnit z vašeho účtu na stránce Nastavení.
Přihlašovací údaje jsou tato:
Adresa webu: $siteurl
Přihlašovací jméno: $email
S pozdravem,
$sitename administrátor

View file

@ -1,14 +0,0 @@
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).
Vaše přihlašovací údaje jsou tato:
Adresa webu: $siteurl
Přihlašovací jméno: $email
Heslo: $new_password
Toto heslo si můžete změnit z vašeho účtu na stránce Nastavení poté, co se přihlásíte.
S pozdravem,
$sitename administrátor

View file

@ -1,23 +0,0 @@
Milý/milá $username,
Díky za registraci na $sitename. Váš účet byl vytvořen.
Vaše přihlašovací údaje jsou tato:
Adresa webu: $siteurl
Přihlašovací jméno: $email
Heslo: $password
Toto heslo si můžete změnit z vašeho účtu na stránce "Nastavení" poté, co se přihlásíte.
Věnujte prosím chvíli revizi dalších nastavení Vašeho účtu na této stránce.
Můžete také přidat některé základní informace do Vašeho defaultního profilu (na stránce "Profily"), čímž umožníte jiným lidem Vás snadněji nalézt.
Doporučujeme nastavit celé jméno, přidat profilové foto, přidat nějaká profilová "klíčová slova" (což je velmi užitečné pro hledání nových přátel) a zemi, ve které žijete. Nemusíte zadávat víc informací.
Plně respektujeme Vaše právo na soukromí a žádná z výše uvedených položek není povinná.
Pokud jste nový a neznáte na tomto webu nikoho jiného, zadáním těchto položek můžete získat nové a zajímavé přátele.
Díky a vítejte na $sitename.
S pozdravem,
$sitename administrátor

View file

@ -1,22 +0,0 @@
Na webu $sitename byla vytvořena nová uživatelská registrace, která vyžaduje Vaše schválení.
Přihlašovací údaje jsou tato:
Celé jméno: $username
Adresa webu: $siteurl
Přihlašovací jméno: $email
Pro odsouhlasení tohoto požadavku prosím klikněte na následující odkaz:
$siteurl/regmod/allow/$hash
Pro zamítnutí žádosti a odstranění účtu prosím klikněte na tento odkaz:
$siteurl/regmod/deny/$hash
Díky.

View file

@ -1,15 +0,0 @@
Milý/Milá $username,
Právě jste obdržel/obdržela požadavek na spojení na webu $sitename
od '$requestor'.
Můžete navštívit jeho/její profil na následujícím odkazu $url.
Přihlaste se na Váš web k zobrazení kompletní žádosti a odsouhlaste nebo ignorujte/zrušte tuto žádost.
$siteurl
S pozdravem,
$sitename administrátor

View file

@ -1,15 +0,0 @@
Milý/Milá {{$username}},
Máte nového následovatele na {{$sitename}} - '{{$requestor}}'.
Můžete si prohlédnout jeho/její profil na {{$url}}.
Přihlaste se na váš server k odsouhlasení nebo ignorování/zrušení žádosti.
{{$siteurl}}
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,18 +0,0 @@
Milý/Milá {{$username}},
Skvělé zprávy... '{{$fn}}' na '{{$dfrn_url}}' odsouhlasil Váš požadavek na spojení na '{{$sitename}}'.
Jste nyní přátelé a můžete si vyměňovat aktualizace statusu, fotek a e-mailů bez omezení.
Pokud budete chtít tento vztah jakkoliv upravit, navštivte Vaši stránku "Kontakty" na {{$sitename}}.
{{$siteurl}}
(Nyní můžete například vytvořit separátní profil s informacemi, které nebudou viditelné veřejně, a nastavit právo pro zobrazení tohoto profilu pro '{{$fn}}').
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,18 +0,0 @@
Milý/Milá {{$username}},
'{{$fn}}' na '{{$dfrn_url}}' odsouhlasil Váš požadavek na spojení na '{{$sitename}}'.
'{{$fn}}' Vás označil za svého "fanouška", což jistým způsobem omezuje komunikaci (například v oblasti soukromých zpráv a některých profilových interakcí. Pokud je toto celebritní nebo komunitní stránka, bylo toto nastavení byla přijato automaticky.
'{{$fn}}' může v budoucnu rozšířit toto spojení na oboustranné nebo jinak méně restriktivní.
Nyní začnete dostávat veřejné aktualizace statusu od '{{$fn}}', které se objeví ve Vaší stránce "Síť" na webu
{{$siteurl}}
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,24 +0,0 @@
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.
Pokud jste o znovunastavení hesla NEŽÁDALI, prosím NEKLIKEJTE na tento odkaz a ignorujte tento e-mail nebo ho rovnou smažte.
Vaše heslo nebude změněno, dokud nebudeme mít potvrzení, že jste o tento požadavek zažádali právě Vy.
Klikněte na tento odkaz pro prověření Vaší identity:
{{$reset_link}}
Poté obdržíte další zprávu obsahující nové heslo.
Následně si toto heslo můžete změnit z vašeho účtu na stránce Nastavení.
Přihlašovací údaje jsou tato:
Adresa webu: {{$siteurl}}
Přihlašovací jméno: {{$email}}
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,15 +0,0 @@
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).
Vaše přihlašovací údaje jsou tato:
Adresa webu: {{$siteurl}}
Přihlašovací jméno: {{$email}}
Heslo: {{$new_password}}
Toto heslo si můžete změnit z vašeho účtu na stránce Nastavení poté, co se přihlásíte.
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,32 +0,0 @@
Drahý {{$username}},
administrátor webu {{$sitename}} pro Vás vytvořil uživatelský účet.
Vaše přihlašovací údaje jsou tyto:
Adresa webu: {{$siteurl}}
Uživatelské jméno: {{$email}}
Heslo: {{$password}}
Vaše heslo si můžete po přihlášení změnit na stránce
.
Prosím věnujte chvíli k revizi ostatních nastavení svého účtu.
Můžete také přidat některé základní informace do Vašeho defaultního profilu
(na stránce "Profily"), čímž umožníte jiným lidem Vás snadněji nalézt.
Doporučujeme nastavit celé jméno, přidat profilové foto
, přidat nějaká profilová "klíčová slova" (což je velmi užitečné pro hledání nových přátel) a
zemi, ve které žijete. Nemusíte zadávat víc
informací.
Plně respektujeme Vaše právo na soukromí a žádná z výše uvedených položek není povinná.
Pokud jste nový a neznáte na tomto webu nikoho jiného, zadáním těchto
položek můžete získat nové a zajímavé přátele.
Díky a vítejte na {{$sitename}}.
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,24 +0,0 @@
Milý/milá {{$username}},
Díky za registraci na {{$sitename}}. Váš účet byl vytvořen.
Vaše přihlašovací údaje jsou tato:
Adresa webu: {{$siteurl}}
Přihlašovací jméno: {{$email}}
Heslo: {{$password}}
Toto heslo si můžete změnit z vašeho účtu na stránce "Nastavení" poté, co se přihlásíte.
Věnujte prosím chvíli revizi dalších nastavení Vašeho účtu na této stránce.
Můžete také přidat některé základní informace do Vašeho defaultního profilu (na stránce "Profily"), čímž umožníte jiným lidem Vás snadněji nalézt.
Doporučujeme nastavit celé jméno, přidat profilové foto, přidat nějaká profilová "klíčová slova" (což je velmi užitečné pro hledání nových přátel) a zemi, ve které žijete. Nemusíte zadávat víc informací.
Plně respektujeme Vaše právo na soukromí a žádná z výše uvedených položek není povinná.
Pokud jste nový a neznáte na tomto webu nikoho jiného, zadáním těchto položek můžete získat nové a zajímavé přátele.
Díky a vítejte na {{$sitename}}.
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,23 +0,0 @@
Na webu {{$sitename}} byla vytvořena nová uživatelská registrace, která vyžaduje Vaše schválení.
Přihlašovací údaje jsou tato:
Celé jméno: {{$username}}
Adresa webu: {{$siteurl}}
Přihlašovací jméno: {{$email}}
Pro odsouhlasení tohoto požadavku prosím klikněte na následující odkaz:
{{$siteurl}}/regmod/allow/{{$hash}}
Pro zamítnutí žádosti a odstranění účtu prosím klikněte na tento odkaz:
{{$siteurl}}/regmod/deny/{{$hash}}
Díky.

View file

@ -1,16 +0,0 @@
Milý/Milá {{$username}},
Právě jste obdržel/obdržela požadavek na spojení na webu {{$sitename}}
od '{{$requestor}}'.
Můžete navštívit jeho/její profil na následujícím odkazu {{$url}}.
Přihlaste se na Váš web k zobrazení kompletní žádosti a odsouhlaste nebo ignorujte/zrušte tuto žádost.
{{$siteurl}}
S pozdravem,
{{$sitename}} administrátor

View file

@ -1,11 +0,0 @@
Ahoj,
Já jsem $sitename.
Vývojáři friendica nednávno uvolnili aktualizaci $update,
ale když jsem se ji snažil nainstalovat, nepovedlo se mi to.
Je to třeba rychle opravit a já to sám nedokážu. Prosím kontaktuj
vývojáře friendica, pokud mi nemůžeš pomoct ty sám. Moje databáze může být nekonzistentní.
Chybová zpráva je '$error'.
Je mi líto,
Tvůj web friendica na $siteurl

View file

@ -1,14 +0,0 @@
Hallo $[myname],
Du hast einen neuen Anhänger auf $[sitename] - '$[requestor]'.
Du kannst das Profil unter $[url] besuchen.
Bitte melde dich an um die Anfrage zu bestätigen oder sie zu ignorieren bzw. abzulehnen.
$[siteurl]
beste Grüße,
$[sitename] Administrator

View file

@ -1,22 +0,0 @@
Hallo $[username],
Großartige Neuigkeiten... '$[fn]' auf '$[dfrn_url]' hat
deine Kontaktanfrage auf '$[sitename]' bestätigt.
Ihr seid nun beidseitige Freunde und könnt Statusmitteilungen, Bilder und E-Mails
ohne Einschränkungen austauschen.
Rufe deine 'Kontakte' Seite auf $[sitename] auf, wenn du
Änderungen an diesem Kontakt vornehmen willst.
$[siteurl]
[Du könntest z.B. ein spezielles Profil anlegen, das Informationen enthält,
die nicht für die breite Öffentlichkeit sichtbar sein sollen und es für '$[fn]' zum Betrachten freigeben].
Beste Grüße,
$[sitename] Administrator

View file

@ -1,22 +0,0 @@
Hallo $[username],
'$[fn]' auf '$[dfrn_url]' akzeptierte
deine Verbindungsanfrage auf '$[sitename]'.
'$[fn]' hat entschieden dich als "Fan" zu akzeptieren, was zu einigen
Einschränkungen bei der Kommunikation führt - wie z.B. das Schreiben von privaten Nachrichten und einige Profil
Interaktionen. Sollte dies ein Promi-Konto oder eine Forum-Seite sein, werden die Einstellungen
automatisch angewandt.
'$[fn]' kann wählen, ob die Freundschaft in eine beidseitige oder alles erlaubende
Beziehung in der Zukunft erweitert wird.
Du empfängst ab sofort die öffentlichen Beiträge von '$[fn]',
auf deiner "Netzwerk" Seite.
$[siteurl]
Beste Grüße,
$[sitename] Administrator

View file

@ -1,32 +0,0 @@
Hallo $[username],
Auf $[sitename] wurde eine Anfrage zum Zurücksetzen deines
Passworts empfangen. Um diese zu bestätigen folge bitte dem Link
weiter unten oder kopiere ihn in die Adressleiste deines Browsers.
Wenn du die Anfrage NICHT gesendet haben solltest, dann IGNORIERE
bitte diese E-Mail und den Link.
Dein Passwort wird nicht geändert solange wir nicht überprüfen
konnten, dass du die Anfrage gestellt hast.
Folge diesem Link um deine Identität zu verifizieren:
$[reset_link]
Du wirst eine weitere E-Mail erhalten mit dem neuen Passwort.
Das Passwort kannst du anschließend wie gewohnt in deinen Account Einstellungen ändern.
Die Login-Details sind die folgenden:
Adresse der Seite:»$[siteurl]
Login Name:»$[email]
Grüße,
$[sitename] Administrator

View file

@ -1,20 +0,0 @@
Hallo $[username],
Dein Passwort wurde wie gewünscht geändert. Bitte bewahre diese
Informationen in deinen Unterlagen auf (oder ändere dein Passwort sofort
in etwas, was du dir merken kannst).
Deine Login Daten wurden wie folgt geändert:
Adresse der Seite: $[siteurl]
Login Name: $[email]
Passwort: $[new_password]
Du kannst dein Passwort unter deinen Account-Einstellungen ändern, wenn du angemeldet bist.
Beste Grüße,
$[sitename] Administrator

View file

@ -1,34 +0,0 @@
Hallo $[username],
Danke für deine Anmeldung auf $[sitename]. Dein Account wurde angelegt.
Hier die Login Details:
Adresse der Seite: $[siteurl]
Login Name: $[email]
Passwort: $[password]
Du kannst und solltest das Passwort in den "Einstellungen" zu deinem Account ändern,
nachdem du dich erstmalig eingeloggt hast.
Bitte nimm dir einige Augenblicke Zeit, um die anderen Einstellungen auf der Seite kennenzulernen und zu überprüfen.
Eventuell möchtest du außerdem einige grundlegende Informationen in deinem Standardprofil (auf der "Profile" Seite) eintragen,
damit andere Leute dich einfacher finden können.
Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profilbild hochzuladen,
sowie ein paar "Profil-Schlüsselwörter" einzutragen (um leichter Menschen mit gleichen Interessen zu finden) - und
vielleicht auch in welchen Land du lebst; falls du nicht konkreter
werden möchtest.
Wir respektieren dein Recht auf Privatsphäre und keine dieser Angaben ist notwendig.
Wenn du ganz neu bei Friendica bist und niemanden kennst, werden sie dir aber helfen
ein paar neue und interessante Freunde zu finden.
Danke und willkommen auf $[sitename].
Beste Grüße,
$[sitename] Administrator

View file

@ -1,25 +0,0 @@
Eine Neuanmeldung auf $[sitename] benötigt
deine Aufmerksamkeit.
Die Login-Einzelheiten sind die folgenden:
Kompletter Name: $[username]
Adresse der Seite: $[siteurl]
Login Name: $[email]
Um die Anfrage zu bestätigen besuche bitte:
$[siteurl]/regmod/allow/$[hash]
Um die Anfrage abzulehnen und den Account zu löschen besuche bitte:
$[siteurl]/regmod/deny/$[hash]
Danke!

View file

@ -1,17 +0,0 @@
Hallo $[myname],
du hast eine Kontaktanfrage von '$[requestor]' auf $[sitename]
erhalten.
Du kannst sein/ihr Profil unter $[url] finden.
Bitte melde dich an um die komplette Anfrage einzusehen
und die Kontaktanfrage zu bestätigen oder zu ignorieren oder abzulehnen.
$[siteurl]
Beste Grüße,
$[sitename] Administrator

View file

@ -1,15 +0,0 @@
Hallo {{$myname}},
Du hast einen neuen Anhänger auf {{$sitename}} - '{{$requestor}}'.
Du kannst das Profil unter {{$url}} besuchen.
Bitte melde dich an um die Anfrage zu bestätigen oder sie zu ignorieren bzw. abzulehnen.
{{$siteurl}}
beste Grüße,
{{$sitename}} Administrator

View file

@ -1,23 +0,0 @@
Hallo {{$username}},
Großartige Neuigkeiten... '{{$fn}}' auf '{{$dfrn_url}}' hat
deine Kontaktanfrage auf '{{$sitename}}' bestätigt.
Ihr seid nun beidseitige Freunde und könnt Statusmitteilungen, Bilder und Emails
ohne Einschränkungen austauschen.
Rufe deine 'Kontakte' Seite auf {{$sitename}} auf, wenn du
Änderungen an diesem Kontakt vornehmen willst.
{{$siteurl}}
[Du könntest z.B. ein spezielles Profil anlegen, das Informationen enthält,
die nicht für die breite Öffentlichkeit sichtbar sein sollen und es für '{{$fn}}' zum Betrachten freigeben].
Beste Grüße,
{{$sitename}} Administrator

View file

@ -1,23 +0,0 @@
Hallo {{$username}},
'{{$fn}}' auf '{{$dfrn_url}}' hat deine Verbindungsanfrage
auf '{{$sitename}}' akzeptiert.
'{{$fn}}' hat entschieden Dich als "Fan" zu akzeptieren, was zu einigen
Einschränkungen bei der Kommunikation führt - wie zB das Schreiben von privaten Nachrichten und einige Profil
Interaktionen. Sollte dies ein Promi-Konto oder eine Forum-Seite sein, werden die Einstellungen
automatisch angewandt.
'{{$fn}}' kann wählen, ob die Freundschaft in eine beidseitige oder alles erlaubende
Beziehung in der Zukunft erweitert wird.
Du empfängst ab sofort die öffentlichen Beiträge von '{{$fn}}',
auf deiner "Netzwerk" Seite.
{{$siteurl}}
Beste Grüße,
{{$sitename}} Administrator

View file

@ -1,33 +0,0 @@
Hallo {{$username}},
Auf {{$sitename}} wurde eine Anfrage zum Zurücksetzen deines
Passworts empfangen. Um diese zu bestätigen folge bitte dem Link
weiter unten oder kopiere ihn in die Adressleiste deines Browsers.
Wenn du die Anfrage NICHT gesendet haben solltest, dann IGNORIERE
bitte diese Mail und den Link.
Dein Passwort wird nicht geändert werden solange wir nicht überprüfen
konnten, dass du die Anfrage gestellt hast.
Folge diesem Link um deine Identität zu verifizieren:
{{$reset_link}}
Du wirst eine weitere Email erhalten mit dem neuen Passwort.
Das Passwort kannst du anschließend wie gewohnt in deinen Account Einstellungen ändern.
Die Login-Details sind die folgenden:
Adresse der Seite: {{$siteurl}}
Login Name: {{$email}}
Grüße,
{{$sitename}} Administrator

View file

@ -1,21 +0,0 @@
Hallo {{$username}},
Dein Passwort wurde wie gewünscht geändert. Bitte bewahre diese
Informationen in deinen Unterlagen auf (oder ändere dein Passwort sofort
in etwas, was du dir merken kannst).
Deine Login Daten wurden wie folgt geändert:
Adresse der Seite: {{$siteurl}}
Login Name: {{$email}}
Passwort: {{$new_password}}
Du kannst dein Passwort unter deinen Account-Einstellungen ändern, wenn du angemeldet bist.
Beste Grüße,
{{$sitename}} Administrator

View file

@ -1,32 +0,0 @@
Hallo {{$username}},
der Administrator von {{$sitename}} hat einen Account für dich eingerichtet.
Hier die Login Details:
Adresse der Seite: {{$siteurl}}
Login Name: {{$email}}
Passwort: {{$password}}
Du kannst und solltest das Passwort in den "Einstellungen" zu deinem Account ändern,
nachdem du dich erstmalig eingeloggt hast.
Bitte nimm dir einige Augenblicke Zeit, um die anderen Einstellungen auf der Seite kennenzulernen und zu überprüfen.
Eventuell möchtest du außerdem einige grundlegende Informationen in deinem Standardprofil (auf der "Profile" Seite) eintragen,
damit andere Leute dich einfacher finden können.
Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profilbild hochzuladen,
sowie ein paar "Profil-Schlüsselwörter" einzutragen (um leichter Menschen mit gleichen Interessen zu finden) - und
vielleicht auch in welchen Land du lebst; falls du nicht konkreter
werden möchtest.
Wir respektieren dein Recht auf Privatsphäre und keine dieser Angaben ist notwendig.
Wenn du ganz neu bei Friendica bist und niemanden kennst, werden sie dir aber helfen
ein paar neue und interessante Freunde zu finden.
Danke und willkommen auf {{$sitename}}.
Beste Grüße,
{{$sitename}} Administrator

View file

@ -1,35 +0,0 @@
Hallo {{$username}},
Danke für deine Anmeldung auf {{$sitename}}. Dein Account wurde angelegt.
Hier die Login Details:
Adresse der Seite: {{$siteurl}}
Login Name: {{$email}}
Passwort: {{$password}}
Du kannst und solltest das Passwort in den "Einstellungen" zu deinem Account ändern,
nachdem du dich erstmalig eingeloggt hast.
Bitte nimm dir einige Augenblicke Zeit, um die anderen Einstellungen auf der Seite kennenzulernen und zu überprüfen.
Eventuell möchtest du außerdem einige grundlegende Informationen in deinem Standardprofil (auf der "Profile" Seite) eintragen,
damit andere Leute dich einfacher finden können.
Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profilbild hochzuladen,
sowie ein paar "Profil-Schlüsselwörter" einzutragen (um leichter Menschen mit gleichen Interessen zu finden) - und
vielleicht auch in welchen Land du lebst; falls du nicht konkreter
werden möchtest.
Wir respektieren dein Recht auf Privatsphäre und keine dieser Angaben ist notwendig.
Wenn du ganz neu bei Friendica bist und niemanden kennst, werden sie dir aber helfen
ein paar neue und interessante Freunde zu finden.
Danke und willkommen auf {{$sitename}}.
Beste Grüße,
{{$sitename}} Administrator

View file

@ -1,26 +0,0 @@
Eine Neuanmeldung auf {{$sitename}} benötigt
deine Aufmerksamkeit.
Die Login-Einzelheiten sind die folgenden:
Kompletter Name: {{$username}}
Adresse der Seite: {{$siteurl}}
Login Name: {{$email}}
Um die Anfrage zu bestätigen besuche bitte:
{{$siteurl}}/regmod/allow/{{$hash}}
Um die Anfrage abzulehnen und den Account zu löschen besuche bitte:
{{$siteurl}}/regmod/deny/{{$hash}}
Danke!

View file

@ -1,18 +0,0 @@
Hallo {{$myname}},
du hast eine Kontaktanfrage von '{{$requestor}}' auf {{$sitename}}
erhalten.
Du kannst sein/ihr Profil unter {{$url}} finden.
Bitte melde dich an um die komplette Anfrage einzusehen
und die Anfrage zu bestätigen oder zu ignorieren oder abzulehnen.
{{$siteurl}}
Beste Grüße,
{{$sitename}} Administrator

View file

@ -1,12 +0,0 @@
Hi,
ich bin {{$sitename}}.
Die friendica Entwickler haben jüngst Update {{$update}} veröffentlicht,
aber als ich versucht habe es zu installieren ist etwas schrecklich schief gegangen.
Das sollte schnellst möglichst behoben werden und ich kann das nicht alleine machen.
Bitte wende dich an einen friendica Entwickler, falls du mir nicht alleine helfen kannst. Meine Datenbank könnte unbrauchbar sein.
Die Fehlermeldung lautet '{{$error}}'.
Tut mir Leid!
Deine friendica Instanz auf {{$siteurl}}

View file

@ -1,11 +0,0 @@
Hi,
$sitename
Die friendica Entwickler haben jüngst Update $update veröffentlicht,
aber als ich versucht habe es zu installieren ist etwas schrecklich schief gegangen.
Das sollte schnellst möglich behoben werden und ich kann das nicht alleine machen.
Bitte wende dich an einen friendica Entwickler, falls du mir nicht alleine helfen kannst. Meine Datenbank könnte unbrauchbar sein.
Die Fehlermeldung lautet '$error'.
Tut mir Leid!
Deine friendica Instanz auf $siteurl

View file

@ -1,14 +0,0 @@
Dear $[myname],
You have a new follower at $[sitename] - '$[requestor]'.
You may visit their profile at $[url].
Please login to your site to approve or ignore/cancel the request.
$[siteurl]
Regards,
$[sitename] administrator

View file

@ -1,22 +0,0 @@
Dear $[username],
Great news... '$[fn]' at '$[dfrn_url]' has accepted
your connection request at '$[sitename]'.
You are now mutual friends and may exchange status updates, photos, and email
without restriction.
Please visit your 'Contacts' page at $[sitename] if you wish to make
any changes to this relationship.
$[siteurl]
[For instance, you may create a separate profile with information that is not
available to the general public - and assign viewing rights to '$[fn]'].
Sincerely,
$[sitename] Administrator

View file

@ -1,22 +0,0 @@
Dear $[username],
'$[fn]' at '$[dfrn_url]' has accepted
your connection request at '$[sitename]'.
'$[fn]' has chosen to accept you a "fan", which restricts
some forms of communication - such as private messaging and some profile
interactions. If this is a celebrity or community page, these settings were
applied automatically.
'$[fn]' may choose to extend this into a two-way or more permissive
relationship in the future.
You will start receiving public status updates from '$[fn]',
which will appear on your 'Network' page at
$[siteurl]
Sincerely,
$[sitename] Administrator

View file

@ -1,32 +0,0 @@
Dear $[username],
A request was recently received at $[sitename] to reset your account
password. In order to confirm this request, please select the verification link
below or paste it into your web browser address bar.
If you did NOT request this change, please DO NOT follow the link
provided and ignore and/or delete this email.
Your password will not be changed unless we can verify that you
issued this request.
Follow this link to verify your identity:
$[reset_link]
You will then receive a follow-up message containing the new password.
You may change that password from your account settings page after logging in.
The login details are as follows:
Site Location: $[siteurl]
Login Name: $[email]
Sincerely,
$[sitename] Administrator

View file

@ -1,20 +0,0 @@
Dear $[username],
Your password has been changed as requested. Please retain this
information for your records (or change your password immediately to
something that you will remember).
Your login details are as follows:
Site Location: $[siteurl]
Login Name: $[email]
Password: $[new_password]
You may change that password from your account settings page after logging in.
Sincerely,
$[sitename] Administrator

View file

@ -1,32 +0,0 @@
Dear {{$username}},
the administrator of {{$sitename}} has set up an account for you.
The login details are as follows:
Site Location: {{$siteurl}}
Login Name: {{$email}}
Password: {{$password}}
You may change your password from your account "Settings" page after logging
in.
Please take a few moments to review the other account settings on that page.
You may also wish to add some basic information to your default profile
(on the "Profiles" page) so that other people can easily find you.
We recommend setting your full name, adding a profile photo,
adding some profile "keywords" (very useful in making new friends) - and
perhaps what country you live in; if you do not wish to be more specific
than that.
We fully respect your right to privacy, and none of these items are necessary.
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
Thank you and welcome to {{$sitename}}.
Sincerely,
{{$sitename}} Administrator

View file

@ -1,34 +0,0 @@
Dear $[username],
Thank you for registering at $[sitename]. Your account has been created.
The login details are as follows:
Site Location: $[siteurl]
Login Name: $[email]
Password: $[password]
You may change your password from your account "Settings" page after logging
in.
Please take a few moments to review the other account settings on that page.
You may also wish to add some basic information to your default profile
(on the "Profiles" page) so that other people can easily find you.
We recommend setting your full name, adding a profile photo,
adding some profile "keywords" (very useful in making new friends) - and
perhaps what country you live in; if you do not wish to be more specific
than that.
We fully respect your right to privacy, and none of these items are necessary.
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
Thank you and welcome to $[sitename].
Sincerely,
$[sitename] Administrator

View file

@ -1,26 +0,0 @@
A new user registration request was received at $[sitename] which requires
your approval.
The login details are as follows:
Full Name: $[username]
Site Location: $[siteurl]
Login Name: $[email]
To approve this request please visit the following link:
$[siteurl]/regmod/allow/$[hash]
To deny the request and remove the account, please visit:
$[siteurl]/regmod/deny/$[hash]
Thank you.

View file

@ -1,17 +0,0 @@
Dear $[myname],
You have just received a connection request at $[sitename]
from '$[requestor]'.
You may visit their profile at $[url].
Please login to your site to view the complete introduction
and approve or ignore/cancel the request.
$[siteurl]
Regards,
$[sitename] administrator

View file

@ -1,15 +0,0 @@
Dear {{$myname}},
You have a new follower at {{$sitename}} - '{{$requestor}}'.
You may visit their profile at {{$url}}.
Please login to your site to approve or ignore/cancel the request.
{{$siteurl}}
Regards,
{{$sitename}} administrator

View file

@ -1,23 +0,0 @@
Dear {{$username}},
Great news... '{{$fn}}' at '{{$dfrn_url}}' has accepted
your connection request at '{{$sitename}}'.
You are now mutual friends and may exchange status updates, photos, and email
without restriction.
Please visit your 'Contacts' page at {{$sitename}} if you wish to make
any changes to this relationship.
{{$siteurl}}
[For instance, you may create a separate profile with information that is not
available to the general public - and assign viewing rights to '{{$fn}}'].
Sincerely,
{{$sitename}} Administrator

View file

@ -1,23 +0,0 @@
Dear {{$username}},
'{{$fn}}' at '{{$dfrn_url}}' has accepted
your connection request at '{{$sitename}}'.
'{{$fn}}' has chosen to accept you a "fan", which restricts
some forms of communication - such as private messaging and some profile
interactions. If this is a celebrity or community page, these settings were
applied automatically.
'{{$fn}}' may choose to extend this into a two-way or more permissive
relationship in the future.
You will start receiving public status updates from '{{$fn}}',
which will appear on your 'Network' page at
{{$siteurl}}
Sincerely,
{{$sitename}} Administrator

View file

@ -1,33 +0,0 @@
Dear {{$username}},
A request was recently received at {{$sitename}} to reset your account
password. In order to confirm this request, please select the verification link
below or paste it into your web browser address bar.
If you did NOT request this change, please DO NOT follow the link
provided and ignore and/or delete this email.
Your password will not be changed unless we can verify that you
issued this request.
Follow this link to verify your identity:
{{$reset_link}}
You will then receive a follow-up message containing the new password.
You may change that password from your account settings page after logging in.
The login details are as follows:
Site Location: {{$siteurl}}
Login Name: {{$email}}
Sincerely,
{{$sitename}} Administrator

View file

@ -1,21 +0,0 @@
Dear {{$username}},
Your password has been changed as requested. Please retain this
information for your records (or change your password immediately to
something that you will remember).
Your login details are as follows:
Site Location: {{$siteurl}}
Login Name: {{$email}}
Password: {{$new_password}}
You may change that password from your account settings page after logging in.
Sincerely,
{{$sitename}} Administrator

View file

@ -1,32 +0,0 @@
Dear {{$username}},
the administrator of {{$sitename}} has set up an account for you.
The login details are as follows:
Site Location: {{$siteurl}}
Login Name: {{$email}}
Password: {{$password}}
You may change your password from your account "Settings" page after logging
in.
Please take a few moments to review the other account settings on that page.
You may also wish to add some basic information to your default profile
(on the "Profiles" page) so that other people can easily find you.
We recommend setting your full name, adding a profile photo,
adding some profile "keywords" (very useful in making new friends) - and
perhaps what country you live in; if you do not wish to be more specific
than that.
We fully respect your right to privacy, and none of these items are necessary.
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
Thank you and welcome to {{$sitename}}.
Sincerely,
{{$sitename}} Administrator

View file

@ -1,35 +0,0 @@
Dear {{$username}},
Thank you for registering at {{$sitename}}. Your account has been created.
The login details are as follows:
Site Location: {{$siteurl}}
Login Name: {{$email}}
Password: {{$password}}
You may change your password from your account "Settings" page after logging
in.
Please take a few moments to review the other account settings on that page.
You may also wish to add some basic information to your default profile
(on the "Profiles" page) so that other people can easily find you.
We recommend setting your full name, adding a profile photo,
adding some profile "keywords" (very useful in making new friends) - and
perhaps what country you live in; if you do not wish to be more specific
than that.
We fully respect your right to privacy, and none of these items are necessary.
If you are new and do not know anybody here, they may help
you to make some new and interesting friends.
Thank you and welcome to {{$sitename}}.
Sincerely,
{{$sitename}} Administrator

View file

@ -1,27 +0,0 @@
A new user registration request was received at {{$sitename}} which requires
your approval.
The login details are as follows:
Full Name: {{$username}}
Site Location: {{$siteurl}}
Login Name: {{$email}}
To approve this request please visit the following link:
{{$siteurl}}/regmod/allow/{{$hash}}
To deny the request and remove the account, please visit:
{{$siteurl}}/regmod/deny/{{$hash}}
Thank you.

View file

@ -1,18 +0,0 @@
Dear {{$myname}},
You have just received a connection request at {{$sitename}}
from '{{$requestor}}'.
You may visit their profile at {{$url}}.
Please login to your site to view the complete introduction
and approve or ignore/cancel the request.
{{$siteurl}}
Regards,
{{$sitename}} administrator

View file

@ -1,12 +0,0 @@
Hey,
I'm {{$sitename}};
The friendica developers released update {{$update}} recently,
but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and I can't do it alone. Please contact a
friendica developer if you can not help me on your own. My database might be invalid.
The error message is '{{$error}}'.
I'm sorry,
your friendica server at {{$siteurl}}

View file

@ -1,11 +0,0 @@
Hey,
I'm $sitename;
The friendica developers released update $update recently,
but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and I can't do it alone. Please contact a
friendica developer if you can not help me on your own. My database might be invalid.
The error message is '$error'.
I'm sorry,
your friendica server at $siteurl

View file

@ -1,14 +0,0 @@
Kara $[myname],
Vi havas novan abonanton ĉe $[sitename] - '$[requestor]'.
Vi povas viziti ilian profilon ĉe $[url].
Bonvolu ensaluti en vian retejon por aprobi au malaprobi/nuligi la peton.
$[siteurl]
Salutoj,
[$sitename] administranto

View file

@ -1,22 +0,0 @@
Kara $[username],
Boegaj novaĵoj.... '$[fn]' ĉe '$[dfrn_url]' aprobis
vian kontaktpeton ĉe '$[sitename]'.
Vi nun estas reciprokaj amikoj kaj povas interŝanĝi afiŝojn, bildojn kaj mesaĝojn
senkatene.
Bonvolu viziti vian 'Kontaktoj' paĝon ĉe $[sitename] se vi volas
ŝangi la rilaton.
$[siteurl]
[Ekzempe, vi eble volas krei disiĝintan profilon kun informoj kiu ne
haveblas al la komuna publiko - kaj rajtigi '$[fn]' al ĝi]'
Salutoj,
$[sitename] administranto

View file

@ -1,22 +0,0 @@
Kara $[username],
'$[fn]' ĉe '$[dfrn_url]' akceptis
vian kontaktpeton ĉe '$[sitename]'.
'$[fn]' elektis vin kiel "admiranto", kio malpermesas
kelkajn komunikilojn - ekzemple privataj mesaĝoj kaj kelkaj profilrilataj
agoj. Se tio estas konto de komunumo aŭ de eminentulo, tiaj agordoj
aŭtomate aktiviĝis.
'$[fn]' eblas konverti la rilaton al ambaŭdirekta rilato
aŭ apliki pli da permesoj.
Vi ekricevos publikajn afiŝojn de '$[fn]',
kiuj aperos sur via 'Reto' paĝo ĉe
$[siteurl]
Salutoj,
$[sitename] administranto

View file

@ -1,32 +0,0 @@
Kara $[username],
$[sitename] ricevis peton por rekomencigi vian pasvorton.
Por konfirmi la peton, bonvolu klaki la sekvantan konfirmligilon
aŭ alglui ĝin en la adreskampo de via retumilo.
Se vi NE petis tiun ŝanĝon, bonvolu NE KLAKU la
sekvantan ligilon kaj ignoru aŭ forvisu ĉi-mesaĝon.
Ni ne ŝanĝu vian pasvorton se ni ne povas kontroli ĉu estas vi
kiu petis la ŝanĝon.
Sekvu ĉi tion ligilon por konfirmi vian identecon:
$[reset_link]
Poste, vi ricevos mesaĝon enhavonte la novan pasvorton.
Vi eblas ŝangi la pasvorton ĉe viaj kontdoagordoj paĝo post ensaluti.
La akreditaĵoj estas:
Retejo:»$[siteurl]
Salutnomo:»$[email]
Salutoj,
$[sitename] administranto

View file

@ -1,20 +0,0 @@
Kara $[username],
Via pasvorto estas ŝanĝita laŭ via peto. Bonvolu konservi ĉi tiun
informon (aŭ tuj ŝanĝu vian pasvorton al
iu kiun vi povas memori).
Jen viaj legitimaĵoj:
Retejo:»$[siteurl]
Salutnomo:»$[email]
Pasvorto:»$[new_password]
Vi eblas ŝanĝi la pasvorton ĉe la paĝo Agordoj -> Konto kiam vi estas ensalutita.
Salutoj,
$[sitename] administranto

View file

@ -1,34 +0,0 @@
Kara $[username],
Dankon pro via registrado ĉe $[sitename]. Vian konton estas kreita.
Jen viaj legitimaĵoj:
Retejo:»$[siteurl]
Salutnomo:»$[email]
Pasvorto:»$[password]
Vi eblas ŝanĝi la pasvorton ĉe la paĝo Agordoj -> Konto kiam vi estas
ensalutita.
Bonvolu preni kelkajn momentoj por kontroli la aliajn kontaktagordojn.
Eble vi volas aldoni kelkajn bazajn informojn al via profilo
(ĉe la paĝo "Profiloj"), tial vi troveblas al aliaj uzantoj.
Ni rekomendas agordi vian plenan noman, aldoni profilbildon,
kaj aldojo kelkajn ŝlosilvortojn (tre utila por trovi novajn amikojn) - kaj
eble en kiu lando vi loĝas, se vi ne volas pli specifa
ol tio.
Ni tute respektas vian privatecon, kaj neniu de tiuj agordoj necesas.
Se vi novas kaj ne konas iun ĉi tie, ili eble helpas
vin trovi novajn kaj interesajn amikojn.
Dankon kaj bonvenon ĉe $[sitename].
Salutoj,
$[sitename] administranto

View file

@ -1,25 +0,0 @@
Nova peto por registrado atendas ĉe $[sitename]
kaj bezonas vian aprobon.
Jen la detaloj de la peto:
Plena Nomo:»$[username]
Retejo:»$[siteurl]
Salutnomo:»$[email]
Aprobonte la peton, bonvolu klaki tiun ligilon:
$[siteurl]/regmod/allow/$[hash]
Malaprobonte kaj forviŝonte la konton, bonvolu klaki:
$[siteurl]/regmod/deny/$[hash]
Dankon!

View file

@ -1,17 +0,0 @@
Kara $[myname],
Vi ĵus ricevis kontaktpeton ĉe $[sitename]
de '$[requestor]'.
Vi eblas viziti la profilon de la petanto ĉe $[url].
Bonvolu ensaluti en la retejo por vidi la plenan prezenton
kaj aprobi aŭ ignori/nuligi la peton.
$[siteurl]
Salutoj,
$[sitename] administranto

View file

@ -1,15 +0,0 @@
Kara {{$myname}},
Vi havas novan abonanton ĉe {{$sitename}} - '{{$requestor}}'.
Vi povas viziti ilian profilon ĉe {{$url}}.
Bonvolu ensaluti en vian retejon por aprobi au malaprobi/nuligi la peton.
{{$siteurl}}
Salutoj,
[{{$sitename}}] administranto

View file

@ -1,23 +0,0 @@
Kara {{$username}},
Boegaj novaĵoj.... '{{$fn}}' ĉe '{{$dfrn_url}}' aprobis
vian kontaktpeton ĉe '{{$sitename}}'.
Vi nun estas reciprokaj amikoj kaj povas interŝanĝi afiŝojn, bildojn kaj mesaĝojn
senkatene.
Bonvolu viziti vian 'Kontaktoj' paĝon ĉe {{$sitename}} se vi volas
ŝangi la rilaton.
{{$siteurl}}
[Ekzempe, vi eble volas krei disiĝintan profilon kun informoj kiu ne
haveblas al la komuna publiko - kaj rajtigi '{{$fn}}' al ĝi]'
Salutoj,
{{$sitename}} administranto

View file

@ -1,23 +0,0 @@
Kara {{$username}},
'{{$fn}}' ĉe '{{$dfrn_url}}' akceptis
vian kontaktpeton ĉe '{{$sitename}}'.
'{{$fn}}' elektis vin kiel "admiranto", kio malpermesas
kelkajn komunikilojn - ekzemple privataj mesaĝoj kaj kelkaj profilrilataj
agoj. Se tio estas konto de komunumo aŭ de eminentulo, tiaj agordoj
aŭtomate aktiviĝis.
'{{$fn}}' eblas konverti la rilaton al ambaŭdirekta rilato
aŭ apliki pli da permesoj.
Vi ekricevos publikajn afiŝojn de '{{$fn}}',
kiuj aperos sur via 'Reto' paĝo ĉe
{{$siteurl}}
Salutoj,
{{$sitename}} administranto

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