GitHost.io will be shut down on June 1, 2019. At that point this instance will be unreachable and all data will be irrevocably deleted. More details at https://about.gitlab.com/gitlab-hosted/#githost-is-shutting-down-on-june-1st-2019

Commit 2640232c authored by Siebrand Mazeland's avatar Siebrand Mazeland

Update translator documentation.

L10n and i18n updates.
Break long lines in README before or at 80 characters.
Superfluous whitespace removed.
parent f9f437f5
...@@ -108,6 +108,7 @@ class EchoPlugin extends Plugin ...@@ -108,6 +108,7 @@ class EchoPlugin extends Plugin
'author' => 'Zach Copley', 'author' => 'Zach Copley',
'homepage' => 'http://status.net/wiki/Plugin:Echo', 'homepage' => 'http://status.net/wiki/Plugin:Echo',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('Use <a href="http://aboutecho.com/">Echo</a>'. _m('Use <a href="http://aboutecho.com/">Echo</a>'.
' to add commenting to notice pages.')); ' to add commenting to notice pages.'));
return true; return true;
......
...@@ -57,6 +57,7 @@ class EmailAuthenticationPlugin extends Plugin ...@@ -57,6 +57,7 @@ class EmailAuthenticationPlugin extends Plugin
'author' => 'Craig Andrews', 'author' => 'Craig Andrews',
'homepage' => 'http://status.net/wiki/Plugin:EmailAuthentication', 'homepage' => 'http://status.net/wiki/Plugin:EmailAuthentication',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('The Email Authentication plugin allows users to login using their email address.')); _m('The Email Authentication plugin allows users to login using their email address.'));
return true; return true;
} }
......
The Email Authentication plugin allows users to login using their email address. The Email Authentication plugin allows users to login using their email address.
The provided email address is used to lookup the user's nickname, then that nickname and the provided password is checked. The provided email address is used to lookup the user's nickname, then that
nickname and the provided password is checked.
Installation Installation
============ ============
add "addPlugin('emailAuthentication');" to the bottom of your config.php add "addPlugin('emailAuthentication');" to the bottom of your config.php.
...@@ -43,7 +43,6 @@ if (!defined('STATUSNET')) { ...@@ -43,7 +43,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class EmailSummaryPlugin extends Plugin class EmailSummaryPlugin extends Plugin
{ {
/** /**
...@@ -51,13 +50,11 @@ class EmailSummaryPlugin extends Plugin ...@@ -51,13 +50,11 @@ class EmailSummaryPlugin extends Plugin
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onCheckSchema() function onCheckSchema()
{ {
$schema = Schema::get(); $schema = Schema::get();
// For storing user-submitted flags on profiles // For storing user-submitted flags on profiles
$schema->ensureTable('email_summary_status', $schema->ensureTable('email_summary_status',
array(new ColumnDef('user_id', 'integer', null, array(new ColumnDef('user_id', 'integer', null,
false, 'PRI'), false, 'PRI'),
...@@ -80,9 +77,8 @@ class EmailSummaryPlugin extends Plugin ...@@ -80,9 +77,8 @@ class EmailSummaryPlugin extends Plugin
* @param string $cls Name of the class to be loaded * @param string $cls Name of the class to be loaded
* *
* @return boolean hook value; true means continue processing, false means stop. * @return boolean hook value; true means continue processing, false means stop.
* *
*/ */
function onAutoload($cls) function onAutoload($cls)
{ {
$dir = dirname(__FILE__); $dir = dirname(__FILE__);
...@@ -107,9 +103,7 @@ class EmailSummaryPlugin extends Plugin ...@@ -107,9 +103,7 @@ class EmailSummaryPlugin extends Plugin
* @param array &$versions array of version data * @param array &$versions array of version data
* *
* @return boolean hook value; true means continue processing, false means stop. * @return boolean hook value; true means continue processing, false means stop.
*
*/ */
function onPluginVersion(&$versions) function onPluginVersion(&$versions)
{ {
$versions[] = array('name' => 'EmailSummary', $versions[] = array('name' => 'EmailSummary',
...@@ -117,86 +111,84 @@ class EmailSummaryPlugin extends Plugin ...@@ -117,86 +111,84 @@ class EmailSummaryPlugin extends Plugin
'author' => 'Evan Prodromou', 'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:EmailSummary', 'homepage' => 'http://status.net/wiki/Plugin:EmailSummary',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('Send an email summary of the inbox to users.')); _m('Send an email summary of the inbox to users.'));
return true; return true;
} }
/** /**
* Register our queue handlers * Register our queue handlers
* *
* @param QueueManager $qm Current queue manager * @param QueueManager $qm Current queue manager
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onEndInitializeQueueManager($qm) function onEndInitializeQueueManager($qm)
{ {
$qm->connect('sitesum', 'SiteEmailSummaryHandler'); $qm->connect('sitesum', 'SiteEmailSummaryHandler');
$qm->connect('usersum', 'UserEmailSummaryHandler'); $qm->connect('usersum', 'UserEmailSummaryHandler');
return true; return true;
} }
/** /**
* Add a checkbox to turn off email summaries * Add a checkbox to turn off email summaries
* *
* @param Action $action Action being executed (emailsettings) * @param Action $action Action being executed (emailsettings)
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onEndEmailFormData($action) function onEndEmailFormData($action)
{ {
$user = common_current_user(); $user = common_current_user();
$action->elementStart('li'); $action->elementStart('li');
$action->checkbox('emailsummary', $action->checkbox('emailsummary',
// TRANS: Checkbox label in e-mail preferences form. // TRANS: Checkbox label in e-mail preferences form.
_m('Send me a periodic summary of updates from my network.'), _m('Send me a periodic summary of updates from my network'),
Email_summary_status::getSendSummary($user->id)); Email_summary_status::getSendSummary($user->id));
$action->elementEnd('li'); $action->elementEnd('li');
return true; return true;
} }
/** /**
* Add a checkbox to turn off email summaries * Add a checkbox to turn off email summaries
* *
* @param Action $action Action being executed (emailsettings) * @param Action $action Action being executed (emailsettings)
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onEndEmailSaveForm($action) function onEndEmailSaveForm($action)
{ {
$sendSummary = $action->boolean('emailsummary'); $sendSummary = $action->boolean('emailsummary');
$user = common_current_user(); $user = common_current_user();
if (!empty($user)) { if (!empty($user)) {
$ess = Email_summary_status::staticGet('user_id', $user->id); $ess = Email_summary_status::staticGet('user_id', $user->id);
if (empty($ess)) { if (empty($ess)) {
$ess = new Email_summary_status(); $ess = new Email_summary_status();
$ess->user_id = $user->id; $ess->user_id = $user->id;
$ess->send_summary = $sendSummary; $ess->send_summary = $sendSummary;
$ess->created = common_sql_now(); $ess->created = common_sql_now();
$ess->modified = common_sql_now(); $ess->modified = common_sql_now();
$ess->insert(); $ess->insert();
} else { } else {
$orig = clone($ess); $orig = clone($ess);
$ess->send_summary = $sendSummary; $ess->send_summary = $sendSummary;
$ess->modified = common_sql_now(); $ess->modified = common_sql_now();
$ess->update($orig); $ess->update($orig);
} }
} }
return true; return true;
} }
} }
...@@ -35,7 +35,7 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; ...@@ -35,7 +35,7 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
/** /**
* Data class for email summaries * Data class for email summaries
* *
* Email summary information for users * Email summary information for users
* *
* @category Action * @category Action
...@@ -46,7 +46,6 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; ...@@ -46,7 +46,6 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
* *
* @see DB_DataObject * @see DB_DataObject
*/ */
class Email_summary_status extends Memcached_DataObject class Email_summary_status extends Memcached_DataObject
{ {
public $__table = 'email_summary_status'; // table name public $__table = 'email_summary_status'; // table name
...@@ -78,7 +77,6 @@ class Email_summary_status extends Memcached_DataObject ...@@ -78,7 +77,6 @@ class Email_summary_status extends Memcached_DataObject
* *
* @return array array of column definitions * @return array array of column definitions
*/ */
function table() function table()
{ {
return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
...@@ -93,7 +91,6 @@ class Email_summary_status extends Memcached_DataObject ...@@ -93,7 +91,6 @@ class Email_summary_status extends Memcached_DataObject
* *
* @return array list of key field names * @return array list of key field names
*/ */
function keys() function keys()
{ {
return array_keys($this->keyTypes()); return array_keys($this->keyTypes());
...@@ -121,7 +118,6 @@ class Email_summary_status extends Memcached_DataObject ...@@ -121,7 +118,6 @@ class Email_summary_status extends Memcached_DataObject
* *
* @return array magic three-false array that stops auto-incrementing. * @return array magic three-false array that stops auto-incrementing.
*/ */
function sequenceKey() function sequenceKey()
{ {
return array(false, false, false); return array(false, false, false);
...@@ -134,7 +130,6 @@ class Email_summary_status extends Memcached_DataObject ...@@ -134,7 +130,6 @@ class Email_summary_status extends Memcached_DataObject
* *
* @return int flag for whether to send this user a summary email * @return int flag for whether to send this user a summary email
*/ */
static function getSendSummary($user_id) static function getSendSummary($user_id)
{ {
$ess = Email_summary_status::staticGet('user_id', $user_id); $ess = Email_summary_status::staticGet('user_id', $user_id);
...@@ -153,11 +148,10 @@ class Email_summary_status extends Memcached_DataObject ...@@ -153,11 +148,10 @@ class Email_summary_status extends Memcached_DataObject
* *
* @return Email_summary_status instance for this user, with count already incremented. * @return Email_summary_status instance for this user, with count already incremented.
*/ */
static function getLastSummaryID($user_id) static function getLastSummaryID($user_id)
{ {
$ess = Email_summary_status::staticGet('user_id', $user_id); $ess = Email_summary_status::staticGet('user_id', $user_id);
if (!empty($ess)) { if (!empty($ess)) {
return $ess->last_summary_id; return $ess->last_summary_id;
} else { } else {
......
<?php <?php
/* /*
* StatusNet - the distributed open-source microblogging tool * StatusNet - the distributed open-source microblogging tool
* *
* Handler for queue items of type 'sitesum', sends email summaries * Handler for queue items of type 'sitesum', sends email summaries
* to all users on the site. * to all users on the site.
* *
...@@ -31,7 +31,7 @@ if (!defined('STATUSNET')) { ...@@ -31,7 +31,7 @@ if (!defined('STATUSNET')) {
} }
/** /**
* *
* Handler for queue items of type 'sitesum', sends email summaries * Handler for queue items of type 'sitesum', sends email summaries
* to all users on the site. * to all users on the site.
* *
...@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) { ...@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class SiteEmailSummaryHandler extends QueueHandler class SiteEmailSummaryHandler extends QueueHandler
{ {
...@@ -55,7 +54,6 @@ class SiteEmailSummaryHandler extends QueueHandler ...@@ -55,7 +54,6 @@ class SiteEmailSummaryHandler extends QueueHandler
* *
* @return string * @return string
*/ */
function transport() function transport()
{ {
return 'sitesum'; return 'sitesum';
...@@ -63,21 +61,20 @@ class SiteEmailSummaryHandler extends QueueHandler ...@@ -63,21 +61,20 @@ class SiteEmailSummaryHandler extends QueueHandler
/** /**
* Handle the site * Handle the site
* *
* @param mixed $object * @param mixed $object
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
function handle($object) function handle($object)
{ {
$qm = QueueManager::get(); $qm = QueueManager::get();
try { try {
// Enqueue a summary for all users // Enqueue a summary for all users
$user = new User(); $user = new User();
$user->find(); $user->find();
while ($user->fetch()) { while ($user->fetch()) {
try { try {
$qm->enqueue($user->id, 'usersum'); $qm->enqueue($user->id, 'usersum');
...@@ -89,8 +86,7 @@ class SiteEmailSummaryHandler extends QueueHandler ...@@ -89,8 +86,7 @@ class SiteEmailSummaryHandler extends QueueHandler
} catch (Exception $e) { } catch (Exception $e) {
common_log(LOG_WARNING, $e->getMessage()); common_log(LOG_WARNING, $e->getMessage());
} }
return true; return true;
} }
} }
<?php <?php
/** /**
* StatusNet - the distributed open-source microblogging tool * StatusNet - the distributed open-source microblogging tool
* *
* Handler for queue items of type 'usersum', sends an email summaries * Handler for queue items of type 'usersum', sends an email summaries
* to a particular user. * to a particular user.
* *
...@@ -41,13 +41,11 @@ if (!defined('STATUSNET')) { ...@@ -41,13 +41,11 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class UserEmailSummaryHandler extends QueueHandler class UserEmailSummaryHandler extends QueueHandler
{ {
// Maximum number of notices to include by default. This is probably too much. // Maximum number of notices to include by default. This is probably too much.
const MAX_NOTICES = 200; const MAX_NOTICES = 200;
/** /**
* Return transport keyword which identifies items this queue handler * Return transport keyword which identifies items this queue handler
* services; must be defined for all subclasses. * services; must be defined for all subclasses.
...@@ -57,7 +55,6 @@ class UserEmailSummaryHandler extends QueueHandler ...@@ -57,7 +55,6 @@ class UserEmailSummaryHandler extends QueueHandler
* *
* @return string * @return string
*/ */
function transport() function transport()
{ {
return 'sitesum'; return 'sitesum';
...@@ -65,47 +62,46 @@ class UserEmailSummaryHandler extends QueueHandler ...@@ -65,47 +62,46 @@ class UserEmailSummaryHandler extends QueueHandler
/** /**
* Send a summary email to the user * Send a summary email to the user
* *
* @param mixed $object * @param mixed $object
* @return boolean true on success, false on failure * @return boolean true on success, false on failure
*/ */
function handle($user_id) function handle($user_id)
{ {
// Skip if they've asked not to get summaries // Skip if they've asked not to get summaries
$ess = Email_summary_status::staticGet('user_id', $user_id); $ess = Email_summary_status::staticGet('user_id', $user_id);
if (!empty($ess) && !$ess->send_summary) { if (!empty($ess) && !$ess->send_summary) {
common_log(LOG_INFO, sprintf('Not sending email summary for user %s by request.', $user_id)); common_log(LOG_INFO, sprintf('Not sending email summary for user %s by request.', $user_id));
return true; return true;
} }
$since_id = null; $since_id = null;
if (!empty($ess)) { if (!empty($ess)) {
$since_id = $ess->last_summary_id; $since_id = $ess->last_summary_id;
} }
$user = User::staticGet('id', $user_id); $user = User::staticGet('id', $user_id);
if (empty($user)) { if (empty($user)) {
common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no such user.', $user_id)); common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no such user.', $user_id));
return true; return true;
} }
if (empty($user->email)) { if (empty($user->email)) {
common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no email address.', $user_id)); common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no email address.', $user_id));
return true; return true;
} }
$profile = $user->getProfile(); $profile = $user->getProfile();
if (empty($profile)) { if (empty($profile)) {
common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no profile.', $user_id)); common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no profile.', $user_id));
return true; return true;
} }
$notice = $user->ownFriendsTimeline(0, self::MAX_NOTICES, $since_id); $notice = $user->ownFriendsTimeline(0, self::MAX_NOTICES, $since_id);
if (empty($notice) || $notice->N == 0) { if (empty($notice) || $notice->N == 0) {
...@@ -117,18 +113,20 @@ class UserEmailSummaryHandler extends QueueHandler ...@@ -117,18 +113,20 @@ class UserEmailSummaryHandler extends QueueHandler
// figuring out a better way. -ESP // figuring out a better way. -ESP
$new_top = null; $new_top = null;
if ($notice instanceof ArrayWrapper) { if ($notice instanceof ArrayWrapper) {
$new_top = $notice->_items[0]->id; $new_top = $notice->_items[0]->id;
} }
$out = new XMLStringer(); $out = new XMLStringer();
$out->elementStart('div', array('width' => '100%', $out->elementStart('div', array('width' => '100%',
'style' => 'background-color: #ffffff; border: 4px solid #4c609a; padding: 10px;')); 'style' => 'background-color: #ffffff; border: 4px solid #4c609a; padding: 10px;'));
$out->elementStart('div', array('style' => 'color: #ffffff; background-color: #4c609a; font-weight: bold; margin-bottom: 10px; padding: 4px;')); $out->elementStart('div', array('style' => 'color: #ffffff; background-color: #4c609a; font-weight: bold; margin-bottom: 10px; padding: 4px;'));
$out->raw(sprintf(_m('Recent updates from %1s for %2s:'), // TRANS: Text in e-mail summary.
// TRANS: %1$s is the StatusNet sitename, %2$s is the recipient's profile name.
$out->raw(sprintf(_m('Recent updates from %1$s for %2s:'),
common_config('site', 'name'), common_config('site', 'name'),
$profile->getBestName())); $profile->getBestName()));
$out->elementEnd('div'); $out->elementEnd('div');
...@@ -137,13 +135,12 @@ class UserEmailSummaryHandler extends QueueHandler ...@@ -137,13 +135,12 @@ class UserEmailSummaryHandler extends QueueHandler
'style' => 'border: none; border-collapse: collapse;', 'cellpadding' => '6')); 'style' => 'border: none; border-collapse: collapse;', 'cellpadding' => '6'));
while ($notice->fetch()) { while ($notice->fetch()) {
$profile = Profile::staticGet('id', $notice->profile_id); $profile = Profile::staticGet('id', $notice->profile_id);
if (empty($profile)) { if (empty($profile)) {
continue; continue;
} }
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
$out->elementStart('tr'); $out->elementStart('tr');
...@@ -191,7 +188,7 @@ class UserEmailSummaryHandler extends QueueHandler ...@@ -191,7 +188,7 @@ class UserEmailSummaryHandler extends QueueHandler
$out->elementEnd('td'); $out->elementEnd('td');
$out->elementEnd('tr'); $out->elementEnd('tr');
} }
$out->elementEnd('table'); $out->elementEnd('table');
$out->raw(sprintf(_m('<p><a href="%1s">change your email settings for %2s</a></p>'), $out->raw(sprintf(_m('<p><a href="%1s">change your email settings for %2s</a></p>'),
...@@ -199,35 +196,32 @@ class UserEmailSummaryHandler extends QueueHandler ...@@ -199,35 +196,32 @@ class UserEmailSummaryHandler extends QueueHandler
common_config('site', 'name'))); common_config('site', 'name')));
$out->elementEnd('div'); $out->elementEnd('div');
$body = $out->getString(); $body = $out->getString();
// FIXME: do something for people who don't like HTML email // FIXME: do something for people who don't like HTML email
mail_to_user($user, _m('Updates from your network'), $body, mail_to_user($user, _m('Updates from your network'), $body,
array('Content-Type' => 'text/html; charset=UTF-8')); array('Content-Type' => 'text/html; charset=UTF-8'));
if (empty($ess)) { if (empty($ess)) {
$ess = new Email_summary_status(); $ess = new Email_summary_status();
$ess->user_id = $user_id; $ess->user_id = $user_id;
$ess->created = common_sql_now(); $ess->created = common_sql_now();
$ess->last_summary_id = $new_top; $ess->last_summary_id = $new_top;
$ess->modified = common_sql_now(); $ess->modified = common_sql_now();
$ess->insert(); $ess->insert();
} else { } else {
$orig = clone($ess); $orig = clone($ess);
$ess->last_summary_id = $new_top; $ess->last_summary_id = $new_top;
$ess->modified = common_sql_now(); $ess->modified = common_sql_now();
$ess->update($orig); $ess->update($orig);
} }
return true; return true;
} }
} }
...@@ -23,7 +23,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { ...@@ -23,7 +23,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
/** /**
* Queue handler for watching new notices and posting to enjit. * Queue handler for watching new notices and posting to enjit.