diff --git a/classes/Profile.php b/classes/Profile.php index 0d0463b730..d7617f0b74 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -464,11 +464,9 @@ class Profile extends Memcached_DataObject $sub = new Subscription(); $sub->subscribed = $this->id; - + $sub->whereAdd('subscriber != subscribed'); $cnt = (int) $sub->count('distinct subscriber'); - $cnt = ($cnt > 0) ? $cnt - 1 : $cnt; - if (!empty($c)) { $c->set(common_cache_key('profile:subscriber_count:'.$this->id), $cnt); } diff --git a/lib/default.php b/lib/default.php index e0081f3165..76e4e44cf2 100644 --- a/lib/default.php +++ b/lib/default.php @@ -321,6 +321,7 @@ $default = 'maxlength' => 25, 'maxnoticelength' => -1), 'http' => // HTTP client settings when contacting other sites - array('ssl_cafile' => false // To enable SSL cert validation, point to a CA bundle (eg '/usr/lib/ssl/certs/ca-certificates.crt') + array('ssl_cafile' => false, // To enable SSL cert validation, point to a CA bundle (eg '/usr/lib/ssl/certs/ca-certificates.crt') + 'curl' => false, // Use CURL backend for HTTP fetches if available. (If not, PHP's socket streams will be used.) ), ); diff --git a/lib/httpclient.php b/lib/httpclient.php index b69f718e5f..514a5afeb2 100644 --- a/lib/httpclient.php +++ b/lib/httpclient.php @@ -145,6 +145,10 @@ class HTTPClient extends HTTP_Request2 $this->config['ssl_verify_peer'] = false; } + if (common_config('http', 'curl') && extension_loaded('curl')) { + $this->config['adapter'] = 'HTTP_Request2_Adapter_Curl'; + } + parent::__construct($url, $method, $config); $this->setHeader('User-Agent', $this->userAgent()); } @@ -204,6 +208,15 @@ class HTTPClient extends HTTP_Request2 protected function doRequest($url, $method, $headers) { $this->setUrl($url); + + // Workaround for HTTP_Request2 not setting up SNI in socket contexts; + // This fixes cert validation for SSL virtual hosts using SNI. + // Requires PHP 5.3.2 or later and OpenSSL with SNI support. + if ($this->url->getScheme() == 'https' && defined('OPENSSL_TLSEXT_SERVER_NAME')) { + $this->config['ssl_SNI_enabled'] = true; + $this->config['ssl_SNI_server_name'] = $this->url->getHost(); + } + $this->setMethod($method); if ($headers) { foreach ($headers as $header) { diff --git a/lib/mailbox.php b/lib/mailbox.php index 90a58b4c48..2b00f5ffde 100644 --- a/lib/mailbox.php +++ b/lib/mailbox.php @@ -224,6 +224,7 @@ class MailboxAction extends CurrentUserDesignAction if ($message->source) { $this->elementStart('span', 'source'); + // FIXME: bad i18n. Device should be a parameter (from %s). $this->text(_('from')); $this->element('span', 'device', $this->showSource($message->source)); $this->elementEnd('span'); diff --git a/lib/noticelist.php b/lib/noticelist.php index 252e1ca900..dbc5bfb519 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -502,6 +502,7 @@ class NoticeListItem extends Widget $source_name = (empty($ns->name)) ? _($ns->code) : _($ns->name); $this->out->text(' '); $this->out->elementStart('span', 'source'); + // FIXME: probably i18n issue. If "from" is followed by text, that should be a parameter to "from" (from %s). $this->out->text(_('from')); $this->out->text(' '); diff --git a/locale/af/LC_MESSAGES/statusnet.po b/locale/af/LC_MESSAGES/statusnet.po index a1a8a6801c..2e4b6b0574 100644 --- a/locale/af/LC_MESSAGES/statusnet.po +++ b/locale/af/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:38+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:23:59+0000\n" "Language-Team: Afrikaans\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: af\n" "X-Message-Group: out-statusnet\n" @@ -4726,21 +4726,21 @@ msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index c5e7f56b8d..e0d4701a3a 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:39+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:01+0000\n" "Language-Team: Arabic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ar\n" "X-Message-Group: out-statusnet\n" @@ -4740,21 +4740,21 @@ msgstr "مشكلة أثناء حفظ الإشعار." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "آر تي @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po index dc05558481..0b06f2817f 100644 --- a/locale/arz/LC_MESSAGES/statusnet.po +++ b/locale/arz/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:41+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:02+0000\n" "Language-Team: Egyptian Spoken Arabic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: arz\n" "X-Message-Group: out-statusnet\n" @@ -4768,21 +4768,21 @@ msgstr "مشكله أثناء حفظ الإشعار." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "آر تى @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index 4661bc824a..3b78847b5b 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:42+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:08+0000\n" "Language-Team: Bulgarian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: bg\n" "X-Message-Group: out-statusnet\n" @@ -4920,21 +4920,21 @@ msgstr "Проблем при записване на бележката." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index 676ef5a27a..2b12d7f566 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:44+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:10+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: out-statusnet\n" @@ -354,9 +354,8 @@ msgid "Could not delete favorite." msgstr "Diposupl eo dilemel ar pennroll-mañ." #: actions/apifriendshipscreate.php:109 -#, fuzzy msgid "Could not follow user: profile not found." -msgstr "Diposupl eo heuliañ an implijer : N'eo ket bet kavet an implijer." +msgstr "Dibosupl eo heuliañ an implijer : n'eo ket bet kavet ar profil." #: actions/apifriendshipscreate.php:118 #, php-format @@ -503,9 +502,8 @@ msgid "groups on %s" msgstr "strolladoù war %s" #: actions/apimediaupload.php:99 -#, fuzzy msgid "Upload failed." -msgstr "C'hwitet en deus an urzhiad" +msgstr "Enporzhiadenn c'hwitet." #: actions/apioauthauthorize.php:101 msgid "No oauth_token parameter provided." @@ -720,7 +718,7 @@ msgstr "Hizivadennoù merket gant %1$s e %2$s !" #: actions/apitrends.php:87 msgid "API method under construction." -msgstr "" +msgstr "Hentenn API war sevel." #: actions/attachment.php:73 msgid "No such attachment." @@ -756,7 +754,7 @@ msgstr "" #: actions/grouplogo.php:181 actions/remotesubscribe.php:191 #: actions/userauthorization.php:72 actions/userrss.php:108 msgid "User without matching profile." -msgstr "" +msgstr "Implijer hep profil klotus." #: actions/avatarsettings.php:119 actions/avatarsettings.php:197 #: actions/grouplogo.php:254 @@ -2782,6 +2780,9 @@ msgid "" "Search for people on %%site.name%% by their name, location, or interests. " "Separate the terms by spaces; they must be 3 characters or more." msgstr "" +"Klask tud e %%site.name%% dre o anv, o lec'hiadur pe o diduadennoù. " +"Dispartiañ termenoù ar c'hlask gant esaouennoù. Ret eo e vefe da nebeutañ 3 " +"arouezenn." #: actions/peoplesearch.php:58 msgid "People search" @@ -3233,6 +3234,8 @@ msgstr "Postel" #: actions/register.php:446 actions/register.php:450 msgid "Used only for updates, announcements, and password recovery" msgstr "" +"Implijet hepken evit an hizivadennoù, ar c'hemennoù, pe adtapout gerioù-" +"tremen" #: actions/register.php:457 msgid "Longer name, preferably your \"real\" name" @@ -3242,22 +3245,22 @@ msgstr "Anv hiroc'h, ho anv \"gwir\" a zo gwelloc'h" #, php-format msgid "" "I understand that content and data of %1$s are private and confidential." -msgstr "" +msgstr "Kompren a ran ez eo prevez danvez ha roadennoù %1$s." #: actions/register.php:528 #, php-format msgid "My text and files are copyright by %1$s." -msgstr "" +msgstr "Ma zestenn ha ma restroù a zo gwarezet dre copyright gant %1$s." #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved with ownership left to contributors. #: actions/register.php:532 msgid "My text and files remain under my own copyright." -msgstr "" +msgstr "Ma zestenn ha ma restroù a chom dindan ma gwirioù oberour." #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved. #: actions/register.php:535 msgid "All rights reserved." -msgstr "" +msgstr "Holl gwrioù miret strizh." #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses. #: actions/register.php:540 @@ -4702,12 +4705,12 @@ msgstr "" #. TRANS: Client exception thrown if a notice contains too many characters. #: classes/Notice.php:260 msgid "Problem saving notice. Too long." -msgstr "" +msgstr "Ur gudenn a zo bet e-pad enrolladenn ar c'hemenn. Re hir." #. TRANS: Client exception thrown when trying to save a notice for an unknown user. #: classes/Notice.php:265 msgid "Problem saving notice. Unknown user." -msgstr "" +msgstr "Ur gudenn a zo bet e-pad enrolladenn ar c'hemenn. Implijer dianav." #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame. #: classes/Notice.php:271 @@ -4745,36 +4748,34 @@ msgstr "Ur gudenn 'zo bet pa veze enrollet boest degemer ar strollad." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" #. TRANS: Exception thrown when a right for a non-existing user profile is checked. #: classes/Remote_profile.php:54 -#, fuzzy msgid "Missing profile." -msgstr "An implijer-mañ n'eus profil ebet dezhañ." +msgstr "Mankout a ra ar profil." #. TRANS: Exception thrown when a tag cannot be saved. #: classes/Status_network.php:346 -#, fuzzy msgid "Unable to save tag." -msgstr "Diposubl eo enrollañ ali al lec'hienn." +msgstr "Dibosupl eo enrollañ an tikedenn." #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing. #: classes/Subscription.php:75 lib/oauthstore.php:465 @@ -4810,9 +4811,8 @@ msgstr "Diposubl eo dilemel ar postel kadarnadur." #. TRANS: Exception thrown when a subscription could not be deleted on the server. #: classes/Subscription.php:218 -#, fuzzy msgid "Could not delete subscription." -msgstr "Dibosupl eo paouez gant ar c'houmanant." +msgstr "Dibosupl eo dilemel ar c'houmanant." #. TRANS: Notice given on user registration. #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname. @@ -5558,7 +5558,7 @@ msgstr "" #: lib/command.php:634 #, php-format msgid "Subscribed to %s" -msgstr "" +msgstr "Koumanantet da %s" #: lib/command.php:655 lib/command.php:754 msgid "Specify the name of the user to unsubscribe from" @@ -5567,7 +5567,7 @@ msgstr "" #: lib/command.php:664 #, php-format msgid "Unsubscribed from %s" -msgstr "" +msgstr "Digoumanantiñ da %s" #: lib/command.php:682 lib/command.php:705 msgid "Command not yet implemented." @@ -5579,7 +5579,7 @@ msgstr "Kemennoù diweredekaet." #: lib/command.php:687 msgid "Can't turn off notification." -msgstr "" +msgstr "Dibosupl eo diweredekaat ar c'hemennoù." #: lib/command.php:708 msgid "Notification on." @@ -5587,7 +5587,7 @@ msgstr "Kemennoù gweredekaet" #: lib/command.php:710 msgid "Can't turn on notification." -msgstr "" +msgstr "Dibosupl eo gweredekaat ar c'hemennoù." #: lib/command.php:723 msgid "Login command is disabled" @@ -5596,7 +5596,7 @@ msgstr "Diweredekaet eo an urzhiad evit digeriñ un dalc'h" #: lib/command.php:734 #, php-format msgid "This link is useable only once, and is good for only 2 minutes: %s" -msgstr "" +msgstr "Implijadus eo al liamm-se ur wech hepken, hag e-pad 2 vunutenn : %s" #: lib/command.php:761 #, php-format @@ -5605,7 +5605,7 @@ msgstr "Digoumanantet eus %s" #: lib/command.php:778 msgid "You are not subscribed to anyone." -msgstr "" +msgstr "N'hoc'h ket koumanantet da zen ebet." #: lib/command.php:780 #, fuzzy @@ -5616,7 +5616,7 @@ msgstr[1] "You are subscribed to these people:" #: lib/command.php:800 msgid "No one is subscribed to you." -msgstr "" +msgstr "Den n'eo koumanantet deoc'h." #: lib/command.php:802 #, fuzzy @@ -5680,7 +5680,7 @@ msgstr "" #: lib/common.php:135 msgid "No configuration file found. " -msgstr "" +msgstr "N'eo bet kavet restr kefluniadur ebet. " #: lib/common.php:136 msgid "I looked for configuration files in the following places: " @@ -5716,11 +5716,11 @@ msgstr "" #: lib/dberroraction.php:60 msgid "Database error" -msgstr "" +msgstr "Fazi bank roadennoù" #: lib/designsettings.php:105 msgid "Upload file" -msgstr "" +msgstr "Enporzhiañ ar restr" #: lib/designsettings.php:109 msgid "" @@ -5733,15 +5733,15 @@ msgstr "" #: lib/disfavorform.php:114 lib/disfavorform.php:140 msgid "Disfavor this notice" -msgstr "" +msgstr "Tennañ eus ar pennrolloù" #: lib/favorform.php:114 lib/favorform.php:140 msgid "Favor this notice" -msgstr "" +msgstr "Ouzhpennañ d'ar pennrolloù" #: lib/favorform.php:140 msgid "Favor" -msgstr "" +msgstr "Pennrolloù" #: lib/feed.php:85 msgid "RSS 1.0" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index 94bca4e7f0..d7de3b4d6b 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:45+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:12+0000\n" "Language-Team: Catalan\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: out-statusnet\n" @@ -4992,21 +4992,21 @@ msgstr "S'ha produït un problema en desar la safata d'entrada del grup." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index 0834169e90..8df43a7890 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:47+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:14+0000\n" "Language-Team: Czech\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: out-statusnet\n" @@ -4954,21 +4954,21 @@ msgstr "Problém při ukládání sdělení" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/da/LC_MESSAGES/statusnet.po b/locale/da/LC_MESSAGES/statusnet.po index 772ca0e56c..f68253d226 100644 --- a/locale/da/LC_MESSAGES/statusnet.po +++ b/locale/da/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:48+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:15+0000\n" "Language-Team: Danish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: da\n" "X-Message-Group: out-statusnet\n" @@ -4728,21 +4728,21 @@ msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 8154220b72..5a52a7c0cb 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -16,12 +16,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:49+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:17+0000\n" "Language-Team: German\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: out-statusnet\n" @@ -5003,14 +5003,14 @@ msgstr "Problem bei Speichern der Nachricht." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" @@ -5019,7 +5019,7 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po index 704ae6c2a7..841e3172cb 100644 --- a/locale/el/LC_MESSAGES/statusnet.po +++ b/locale/el/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:51+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:18+0000\n" "Language-Team: Greek\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: el\n" "X-Message-Group: out-statusnet\n" @@ -4879,21 +4879,21 @@ msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index d4d793a362..6eee49858e 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:52+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:20+0000\n" "Language-Team: British English\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: out-statusnet\n" @@ -4894,21 +4894,21 @@ msgstr "Problem saving group inbox." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index ae6f2929a8..f7e57911c2 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -15,12 +15,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:54+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:22+0000\n" "Language-Team: Spanish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: out-statusnet\n" @@ -4990,21 +4990,21 @@ msgstr "Hubo un problema al guarda la bandeja de entrada del grupo." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "No se puede revocar rol \"%1$s\" para usuario #%2$d; no existe." #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index 685d96e4af..c5303e3415 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:57+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:25+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" "X-Language-Code: fa\n" "X-Message-Group: out-statusnet\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" #. TRANS: Page title @@ -4934,21 +4934,21 @@ msgstr "هنگام ذخیرهٔ صندوق ورودی گروه مشکلی رخ #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index a087c57775..5b1465bc5f 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:55+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:23+0000\n" "Language-Team: Finnish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: out-statusnet\n" @@ -5057,21 +5057,21 @@ msgstr "Ongelma päivityksen tallentamisessa." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index 3246555e1a..e9890ef360 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -15,12 +15,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:21:58+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:27+0000\n" "Language-Team: French\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: out-statusnet\n" @@ -4940,7 +4940,7 @@ msgstr "Impossible de créer le jeton d’identification pour %s" #. TRANS: Exception thrown when database name or Data Source Name could not be found. #: classes/Memcached_DataObject.php:533 msgid "No database name or DSN found anywhere." -msgstr "Aucune base de données de nom ou DSN trouvée nulle part." +msgstr "Aucun nom de base de données ou DSN trouvé nulle part." #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them. #: classes/Message.php:46 @@ -5020,14 +5020,14 @@ msgstr "Problème lors de l’enregistrement de la boîte de réception du group #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" @@ -5036,7 +5036,7 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po index dc3c53286d..8d30fb8296 100644 --- a/locale/ga/LC_MESSAGES/statusnet.po +++ b/locale/ga/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:00+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:29+0000\n" "Language-Team: Irish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ga\n" "X-Message-Group: out-statusnet\n" @@ -5114,21 +5114,21 @@ msgstr "Aconteceu un erro ó gardar o chío." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/gl/LC_MESSAGES/statusnet.po b/locale/gl/LC_MESSAGES/statusnet.po index 40e79f7822..68434b085f 100644 --- a/locale/gl/LC_MESSAGES/statusnet.po +++ b/locale/gl/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:01+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:30+0000\n" "Language-Team: Galician\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: out-statusnet\n" @@ -166,7 +166,7 @@ msgstr "" #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@" #: actions/all.php:146 -#, fuzzy, php-format +#, php-format msgid "" "You can try to [nudge %1$s](../%2$s) from their profile or [post something " "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)." @@ -176,7 +176,7 @@ msgstr "" "status_textarea=%3$s)." #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211 -#, fuzzy, php-format +#, php-format msgid "" "Why not [register an account](%%%%action.register%%%%) and then nudge %s or " "post a notice to them." @@ -512,9 +512,8 @@ msgid "groups on %s" msgstr "grupos en %s" #: actions/apimediaupload.php:99 -#, fuzzy msgid "Upload failed." -msgstr "Cargar un ficheiro" +msgstr "Houbo un erro durante a carga." #: actions/apioauthauthorize.php:101 msgid "No oauth_token parameter provided." @@ -663,7 +662,7 @@ msgstr "Non se atopou ningún estado con esa ID." #: actions/apistatusesupdate.php:221 msgid "Client must provide a 'status' parameter with a value." -msgstr "" +msgstr "O cliente debe proporcionar un parámetro de \"estado\" cun valor." #: actions/apistatusesupdate.php:242 actions/newnotice.php:155 #: lib/mailhandler.php:60 @@ -3555,7 +3554,7 @@ msgid "Replies feed for %s (Atom)" msgstr "Fonte de novas coas respostas a %s (Atom)" #: actions/replies.php:199 -#, fuzzy, php-format +#, php-format msgid "" "This is the timeline showing replies to %1$s but %2$s hasn't received a " "notice to them yet." @@ -3573,7 +3572,7 @@ msgstr "" "grupos](%%action.groups%%)." #: actions/replies.php:206 -#, fuzzy, php-format +#, php-format msgid "" "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action." "newnotice%%%%?status_textarea=%3$s)." @@ -3953,7 +3952,7 @@ msgstr "" "bo momento para comezar :)" #: actions/showstream.php:207 -#, fuzzy, php-format +#, php-format msgid "" "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%" "%?status_textarea=%2$s)." @@ -4843,12 +4842,12 @@ msgstr "Autores" #: classes/File.php:143 #, php-format msgid "Cannot process URL '%s'" -msgstr "" +msgstr "Non se pode procesar o URL \"%s\"" #. TRANS: Server exception thrown when... Robin thinks something is impossible! #: classes/File.php:175 msgid "Robin thinks something is impossible." -msgstr "" +msgstr "Robin pensa que algo é imposible." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. @@ -4878,9 +4877,8 @@ msgstr "Un ficheiro deste tamaño excedería a súa cota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:248 classes/File.php:263 -#, fuzzy msgid "Invalid filename." -msgstr "Tamaño non válido." +msgstr "Nome de ficheiro incorrecto." #. TRANS: Exception thrown when joining a group fails. #: classes/Group_member.php:42 @@ -4912,7 +4910,7 @@ msgstr "Non se puido crear un pase de sesión para %s" #. TRANS: Exception thrown when database name or Data Source Name could not be found. #: classes/Memcached_DataObject.php:533 msgid "No database name or DSN found anywhere." -msgstr "" +msgstr "Non se atopou por ningures o nome da base de datos ou DSN." #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them. #: classes/Message.php:46 @@ -4932,9 +4930,9 @@ msgstr "Non se puido actualizar a mensaxe co novo URI." #. TRANS: Server exception thrown when a user profile for a notice cannot be found. #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number). #: classes/Notice.php:98 -#, fuzzy, php-format +#, php-format msgid "No such profile (%1$d) for notice (%2$d)." -msgstr "Non existe tal perfil (%d) para a nota (%d)" +msgstr "Non existe tal perfil (%1$d) para a nota (%2$d)." #. TRANS: Server exception. %s are the error details. #: classes/Notice.php:190 @@ -4983,7 +4981,7 @@ msgstr "Houbo un problema ao gardar a nota." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:892 msgid "Bad type provided to saveKnownGroups" -msgstr "" +msgstr "O tipo dado para saveKnownGroups era incorrecto" #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:991 @@ -4992,30 +4990,31 @@ msgstr "Houbo un problema ao gardar a caixa de entrada do grupo." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "♻ @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" +"Non se pode revogar o rol \"%1$s\" do usuario #%2$d: o usuario non existe." #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" +"Non se pode revogar o rol \"%1$s\" do usuario #%2$d: erro na base de datos." #. TRANS: Exception thrown when a right for a non-existing user profile is checked. #: classes/Remote_profile.php:54 -#, fuzzy msgid "Missing profile." -msgstr "O usuario non ten perfil." +msgstr "Falta o perfil de usuario." #. TRANS: Exception thrown when a tag cannot be saved. #: classes/Status_network.php:346 @@ -5044,19 +5043,16 @@ msgstr "Non está subscrito!" #. TRANS: Exception thrown when trying to unsubscribe a user from themselves. #: classes/Subscription.php:178 -#, fuzzy msgid "Could not delete self-subscription." msgstr "Non se puido borrar a subscrición a si mesmo." #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server. #: classes/Subscription.php:206 -#, fuzzy msgid "Could not delete subscription OMB token." msgstr "Non se puido borrar o pase de subscrición OMB." #. TRANS: Exception thrown when a subscription could not be deleted on the server. #: classes/Subscription.php:218 -#, fuzzy msgid "Could not delete subscription." msgstr "Non se puido borrar a subscrición." diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po index d8d60e7296..64c36e84ee 100644 --- a/locale/he/LC_MESSAGES/statusnet.po +++ b/locale/he/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:03+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:32+0000\n" "Language-Team: Hebrew\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: he\n" "X-Message-Group: out-statusnet\n" @@ -4957,21 +4957,21 @@ msgstr "בעיה בשמירת ההודעה." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index e0cc3dc431..860efa66ec 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:04+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:33+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hsb\n" "X-Message-Group: out-statusnet\n" @@ -4705,21 +4705,21 @@ msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index e0961e4475..82541026bc 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:07+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:35+0000\n" "Language-Team: Interlingua\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: out-statusnet\n" @@ -3734,24 +3734,24 @@ msgstr "" "mitter los in evidentia." #: actions/showfavorites.php:208 -#, fuzzy, php-format +#, php-format msgid "" "%s hasn't added any favorite notices yet. Post something interesting they " "would add to their favorites :)" msgstr "" -"%s non ha ancora addite alcun nota a su favorites. Publica alique " -"interessante que ille favoritisarea :)" +"%s non ha ancora addite un nota favorite. Publica alique interessante que " +"ille adderea a su favorites :)" #: actions/showfavorites.php:212 -#, fuzzy, php-format +#, php-format msgid "" "%s hasn't added any favorite notices yet. Why not [register an account](%%%%" "action.register%%%%) and then post something interesting they would add to " "their favorites :)" msgstr "" -"%s non ha ancora addite alcun nota a su favorites. Proque non [registrar un " -"conto](%%%%action.register%%%%) e postea publicar alique interessante que " -"ille favoritisarea :)" +"%s non ha ancora addite un nota favorite. Proque non [crear un conto](%%%%" +"action.register%%%%) e postea publicar alique interessante que ille adderea " +"a su favorites :)" #: actions/showfavorites.php:243 msgid "This is a way to share what you like." @@ -3931,13 +3931,13 @@ msgstr "" "alcun nota, dunque iste es un bon momento pro comenciar :)" #: actions/showstream.php:207 -#, fuzzy, php-format +#, php-format msgid "" "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%" "%?status_textarea=%2$s)." msgstr "" -"Tu pote tentar pulsar %1$s o [publicar un nota a su attention](%%%%action." -"newnotice%%%%?status_textarea=%2$s)." +"Tu pote tentar dar un pulsata a %1$s o [publicar un nota a su attention](%%%%" +"action.newnotice%%%%?status_textarea=%2$s)." #: actions/showstream.php:243 #, php-format @@ -4817,23 +4817,23 @@ msgstr "Autor(es)" #: classes/File.php:143 #, php-format msgid "Cannot process URL '%s'" -msgstr "" +msgstr "Impossibile processar le URL '%s'" #. TRANS: Server exception thrown when... Robin thinks something is impossible! #: classes/File.php:175 msgid "Robin thinks something is impossible." -msgstr "" +msgstr "Robin pensa que alique es impossibile." #. TRANS: Message given if an upload is larger than the configured maximum. #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file. #: classes/File.php:190 -#, fuzzy, php-format +#, php-format msgid "" "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. " "Try to upload a smaller version." msgstr "" -"Nulle file pote esser plus grande que %d bytes e le file que tu inviava ha %" -"d bytes. Tenta incargar un version minus grande." +"Nulle file pote esser plus grande que %1$d bytes e le file que tu inviava ha " +"%2$d bytes. Tenta incargar un version minus grande." #. TRANS: Message given if an upload would exceed user quota. #. TRANS: %d (number) is the user quota in bytes. @@ -4851,9 +4851,8 @@ msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes." #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:248 classes/File.php:263 -#, fuzzy msgid "Invalid filename." -msgstr "Dimension invalide." +msgstr "Nomine de file invalide." #. TRANS: Exception thrown when joining a group fails. #: classes/Group_member.php:42 @@ -4885,7 +4884,7 @@ msgstr "Non poteva crear indicio de identification pro %s" #. TRANS: Exception thrown when database name or Data Source Name could not be found. #: classes/Memcached_DataObject.php:533 msgid "No database name or DSN found anywhere." -msgstr "" +msgstr "Nulle nomine de base de datos o DSN trovate." #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them. #: classes/Message.php:46 @@ -4907,7 +4906,7 @@ msgstr "Non poteva actualisar message con nove URI." #: classes/Notice.php:98 #, php-format msgid "No such profile (%1$d) for notice (%2$d)." -msgstr "" +msgstr "Nulle profilo (%1$d) trovate pro le nota (%2$d)." #. TRANS: Server exception. %s are the error details. #: classes/Notice.php:190 @@ -4956,7 +4955,7 @@ msgstr "Problema salveguardar nota." #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). #: classes/Notice.php:892 msgid "Bad type provided to saveKnownGroups" -msgstr "" +msgstr "Mal typo fornite a saveKnownGroups" #. TRANS: Server exception thrown when an update for a group inbox fails. #: classes/Notice.php:991 @@ -4965,36 +4964,36 @@ msgstr "Problema salveguardar le cassa de entrata del gruppo." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." -msgstr "" +msgstr "Non pote revocar le rolo \"%1$s\" del usator #%2$d; non existe." #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" +"Non pote revocar le rolo \"%1$s\" del usator #%2$d; error in le base de " +"datos." #. TRANS: Exception thrown when a right for a non-existing user profile is checked. #: classes/Remote_profile.php:54 -#, fuzzy msgid "Missing profile." -msgstr "Le usator non ha un profilo." +msgstr "Profilo mancante." #. TRANS: Exception thrown when a tag cannot be saved. #: classes/Status_network.php:346 -#, fuzzy msgid "Unable to save tag." -msgstr "Impossibile salveguardar le aviso del sito." +msgstr "Impossibile salveguardar le etiquetta." #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing. #: classes/Subscription.php:75 lib/oauthstore.php:465 @@ -5018,19 +5017,16 @@ msgstr "Non subscribite!" #. TRANS: Exception thrown when trying to unsubscribe a user from themselves. #: classes/Subscription.php:178 -#, fuzzy msgid "Could not delete self-subscription." msgstr "Non poteva deler auto-subscription." #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server. #: classes/Subscription.php:206 -#, fuzzy msgid "Could not delete subscription OMB token." msgstr "Non poteva deler le indicio OMB del subscription." #. TRANS: Exception thrown when a subscription could not be deleted on the server. #: classes/Subscription.php:218 -#, fuzzy msgid "Could not delete subscription." msgstr "Non poteva deler subscription." diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po index 963d214244..701d0f1d45 100644 --- a/locale/is/LC_MESSAGES/statusnet.po +++ b/locale/is/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:08+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:37+0000\n" "Language-Team: Icelandic\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: is\n" "X-Message-Group: out-statusnet\n" @@ -5009,21 +5009,21 @@ msgstr "Vandamál komu upp við að vista babl." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 401889a5cf..5bb079af7e 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:10+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:38+0000\n" "Language-Team: Italian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: out-statusnet\n" @@ -4968,21 +4968,21 @@ msgstr "Problema nel salvare la casella della posta del gruppo." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 1141b34279..fab6b3d780 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:11+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:41+0000\n" "Language-Team: Japanese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: out-statusnet\n" @@ -5001,21 +5001,21 @@ msgstr "グループ受信箱を保存する際に問題が発生しました。 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index c40002fc53..5b5bb04249 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:13+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:43+0000\n" "Language-Team: Korean\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: out-statusnet\n" @@ -4982,21 +4982,21 @@ msgstr "통지를 저장하는데 문제가 발생했습니다." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 383d7a91a9..551c61dce7 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:14+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:45+0000\n" "Language-Team: Macedonian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: out-statusnet\n" @@ -4983,14 +4983,14 @@ msgstr "Проблем при зачувувањето на групното п #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" @@ -4999,7 +4999,7 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index 6616a6a6b6..ab0506e347 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:16+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:47+0000\n" "Language-Team: Norwegian (bokmål)‬\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: out-statusnet\n" @@ -4895,21 +4895,21 @@ msgstr "Problem ved lagring av gruppeinnboks." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index c98e1d84ac..8c432b7b17 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:19+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:50+0000\n" "Language-Team: Dutch\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: out-statusnet\n" @@ -4907,7 +4907,7 @@ msgstr "" #. TRANS: Client exception thrown if a file upload does not have a valid name. #: classes/File.php:248 classes/File.php:263 msgid "Invalid filename." -msgstr "Ongeldig bestandsnaam." +msgstr "Ongeldige bestandsnaam." #. TRANS: Exception thrown when joining a group fails. #: classes/Group_member.php:42 @@ -5026,14 +5026,14 @@ msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" @@ -5042,7 +5042,7 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po index 9d1c47205f..08b25c9e6b 100644 --- a/locale/nn/LC_MESSAGES/statusnet.po +++ b/locale/nn/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:17+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:48+0000\n" "Language-Team: Norwegian Nynorsk\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nn\n" "X-Message-Group: out-statusnet\n" @@ -5047,21 +5047,21 @@ msgstr "Eit problem oppstod ved lagring av notis." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index fe0581a69b..89da186ca7 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:20+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:52+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: out-statusnet\n" @@ -4955,21 +4955,21 @@ msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "Nie można unieważnić roli \"\"%1$s\" użytkownika #%2$d; nie istnieje." #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index f7e4791546..ab309b7b3a 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:22+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:54+0000\n" "Language-Team: Portuguese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: out-statusnet\n" @@ -4959,14 +4959,14 @@ msgstr "Problema na gravação da caixa de entrada do grupo." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" @@ -4974,7 +4974,7 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index cb77836d45..53468a0649 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -13,12 +13,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:23+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:55+0000\n" "Language-Team: Brazilian Portuguese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: out-statusnet\n" @@ -4995,21 +4995,21 @@ msgstr "Problema no salvamento das mensagens recebidas do grupo." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 8692129457..7027150bdf 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -12,12 +12,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:25+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:57+0000\n" "Language-Team: Russian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: out-statusnet\n" @@ -4971,14 +4971,14 @@ msgstr "Проблемы с сохранением входящих сообще #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" @@ -4987,7 +4987,7 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/statusnet.pot b/locale/statusnet.pot index 9618100557..81c5a97c4d 100644 --- a/locale/statusnet.pot +++ b/locale/statusnet.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -4679,21 +4679,21 @@ msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 68ba9a6a9a..16a0858ea7 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -10,12 +10,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:26+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:24:59+0000\n" "Language-Team: Swedish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: out-statusnet\n" @@ -4957,21 +4957,21 @@ msgstr "Problem med att spara gruppinkorg." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index e83ab4a304..bd506b98a0 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:28+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:25:01+0000\n" "Language-Team: Telugu\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: out-statusnet\n" @@ -4842,21 +4842,21 @@ msgstr "సందేశాన్ని భద్రపరచడంలో పొ #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index 18140c3e02..029f36db16 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:29+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:25:03+0000\n" "Language-Team: Turkish\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: out-statusnet\n" @@ -4960,21 +4960,21 @@ msgstr "Durum mesajını kaydederken hata oluştu." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index 73ae721663..8e1e37ced9 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:31+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:25:05+0000\n" "Language-Team: Ukrainian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: out-statusnet\n" @@ -4960,21 +4960,21 @@ msgstr "Проблема при збереженні вхідних дописі #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "RT @%1$s %2$s" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "Не вдалося скасувати роль «%s» для користувача #%2$s; не існує." #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" @@ -6210,17 +6210,17 @@ msgid "" "Thanks for your time, \n" "%s\n" msgstr "" -"Агов, %s.\n" +"Агов, %s!\n" "\n" "Хтось щойно ввів цю електронну адресу на %s.\n" "\n" -"Якщо то були Ви, мусите це підтвердити використовуючи посилання:\n" +"Якщо то були Ви, мусите це підтвердити, використовуючи посилання:\n" "\n" -"\t%s\n" +"%s\n" "\n" -"А якщо ні, то просто проігноруйте це повідомлення.\n" +"А якщо ні, просто ігноруйте це повідомлення.\n" "\n" -"Дякуємо за Ваш час \n" +"Вибачте за турботу, \n" "%s\n" #. TRANS: Subject of new-subscriber notification e-mail diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po index 60164da4d2..c82d34e663 100644 --- a/locale/vi/LC_MESSAGES/statusnet.po +++ b/locale/vi/LC_MESSAGES/statusnet.po @@ -8,12 +8,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:32+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:25:06+0000\n" "Language-Team: Vietnamese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: vi\n" "X-Message-Group: out-statusnet\n" @@ -5103,21 +5103,21 @@ msgstr "Có lỗi xảy ra khi lưu tin nhắn." #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%s (%s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index bd331de651..9de9d8e750 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -11,12 +11,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:34+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:25:08+0000\n" "Language-Team: Simplified Chinese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: out-statusnet\n" @@ -5045,21 +5045,21 @@ msgstr "保存通告时出错。" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, fuzzy, php-format msgid "RT @%1$s %2$s" msgstr "%1$s (%2$s)" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po index 1e5b44ae63..be09ed6d75 100644 --- a/locale/zh_TW/LC_MESSAGES/statusnet.po +++ b/locale/zh_TW/LC_MESSAGES/statusnet.po @@ -7,12 +7,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-03 13:21+0000\n" -"PO-Revision-Date: 2010-08-03 13:22:35+0000\n" +"POT-Creation-Date: 2010-08-07 16:23+0000\n" +"PO-Revision-Date: 2010-08-07 16:25:10+0000\n" "Language-Team: Traditional Chinese\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.17alpha (r70381); Translate extension (2010-07-21)\n" +"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hant\n" "X-Message-Group: out-statusnet\n" @@ -4868,21 +4868,21 @@ msgstr "儲存使用者發生錯誤" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1614 +#: classes/Notice.php:1745 #, php-format msgid "RT @%1$s %2$s" msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:740 +#: classes/Profile.php:737 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:749 +#: classes/Profile.php:746 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 70971c5b34..3b073a5d13 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -479,6 +479,24 @@ class OStatusPlugin extends Plugin } } + /** + * Tell the FeedSub infrastructure whether we have any active OStatus + * usage for the feed; if not it'll be able to garbage-collect the + * feed subscription. + * + * @param FeedSub $feedsub + * @param integer $count in/out + * @return mixed hook return code + */ + function onFeedSubSubscriberCount($feedsub, &$count) + { + $oprofile = Ostatus_profile::staticGet('feeduri', $feedsub->uri); + if ($oprofile) { + $count += $oprofile->subscriberCount(); + } + return true; + } + /** * When about to subscribe to a remote user, start a server-to-server * PuSH subscription if needed. If we can't establish that, abort. diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php index b10509dae6..9cd35e29c9 100644 --- a/plugins/OStatus/classes/FeedSub.php +++ b/plugins/OStatus/classes/FeedSub.php @@ -255,6 +255,9 @@ class FeedSub extends Memcached_DataObject /** * Send a PuSH unsubscription request to the hub for this feed. * The hub will later send us a confirmation POST to /main/push/callback. + * Warning: this will cancel the subscription even if someone else in + * the system is using it. Most callers will want garbageCollect() instead, + * which confirms there's no uses left. * * @return bool true on success, false on failure * @throws ServerException if feed state is not valid @@ -275,6 +278,33 @@ class FeedSub extends Memcached_DataObject return $this->doSubscribe('unsubscribe'); } + /** + * Check if there are any active local uses of this feed, and if not then + * make sure it's inactive, unsubscribing if necessary. + * + * @return boolean true if the subscription is now inactive, false if still active. + */ + public function garbageCollect() + { + if ($this->sub_state == '' || $this->sub_state == 'inactive') { + // No active PuSH subscription, we can just leave it be. + return true; + } else { + // PuSH subscription is either active or in an indeterminate state. + // Check if we're out of subscribers, and if so send an unsubscribe. + $count = 0; + Event::handle('FeedSubSubscriberCount', array($this, &$count)); + + if ($count) { + common_log(LOG_INFO, __METHOD__ . ': ok, ' . $count . ' user(s) left for ' . $this->uri); + return false; + } else { + common_log(LOG_INFO, __METHOD__ . ': unsubscribing, no users left for ' . $this->uri); + return $this->unsubscribe(); + } + } + } + protected function doSubscribe($mode) { $orig = clone($this); diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php index 5d3f37cd07..2d7c632e63 100644 --- a/plugins/OStatus/classes/Ostatus_profile.php +++ b/plugins/OStatus/classes/Ostatus_profile.php @@ -215,22 +215,13 @@ class Ostatus_profile extends Memcached_DataObject } /** - * Send a PuSH unsubscription request to the hub for this feed. - * The hub will later send us a confirmation POST to /main/push/callback. + * Check if this remote profile has any active local subscriptions, and + * if not drop the PuSH subscription feed. * * @return bool true on success, false on failure - * @throws ServerException if feed state is not valid */ public function unsubscribe() { - $feedsub = FeedSub::staticGet('uri', $this->feeduri); - if (!$feedsub || $feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') { - // No active PuSH subscription, we can just leave it be. - return true; - } else { - // PuSH subscription is either active or in an indeterminate state. - // Send an unsubscribe. - return $feedsub->unsubscribe(); - } + $this->garbageCollect(); } /** @@ -240,6 +231,21 @@ class Ostatus_profile extends Memcached_DataObject * @return boolean */ public function garbageCollect() + { + $feedsub = FeedSub::staticGet('uri', $this->feeduri); + return $feedsub->garbageCollect(); + } + + /** + * Check if this remote profile has any active local subscriptions, so the + * PuSH subscription layer can decide if it can drop the feed. + * + * This gets called via the FeedSubSubscriberCount event when running + * FeedSub::garbageCollect(). + * + * @return int + */ + public function subscriberCount() { if ($this->isGroup()) { $members = $this->localGroup()->getMembers(0, 1); @@ -247,13 +253,14 @@ class Ostatus_profile extends Memcached_DataObject } else { $count = $this->localProfile()->subscriberCount(); } - if ($count == 0) { - common_log(LOG_INFO, "Unsubscribing from now-unused remote feed $this->feeduri"); - $this->unsubscribe(); - return true; - } else { - return false; - } + common_log(LOG_INFO, __METHOD__ . " SUB COUNT BEFORE: $count"); + + // Other plugins may be piggybacking on OStatus without having + // an active group or user-to-user subscription we know about. + Event::handle('Ostatus_profileSubscriberCount', array($this, &$count)); + common_log(LOG_INFO, __METHOD__ . " SUB COUNT AFTER: $count"); + + return $count; } /** diff --git a/plugins/OStatus/lib/magicenvelope.php b/plugins/OStatus/lib/magicenvelope.php index 3bdf24b317..967e5f6d17 100644 --- a/plugins/OStatus/lib/magicenvelope.php +++ b/plugins/OStatus/lib/magicenvelope.php @@ -210,13 +210,13 @@ class MagicEnvelope } $data_element = $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'data')->item(0); - + $sig_element = $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'sig')->item(0); return array( - 'data' => trim($data_element->nodeValue), + 'data' => preg_replace('/\s/', '', $data_element->nodeValue), 'data_type' => $data_element->getAttribute('type'), 'encoding' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'encoding')->item(0)->nodeValue, 'alg' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'alg')->item(0)->nodeValue, - 'sig' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'sig')->item(0)->nodeValue, + 'sig' => preg_replace('/\s/', '', $sig_element->nodeValue), ); } diff --git a/plugins/SubMirror/SubMirrorPlugin.php b/plugins/SubMirror/SubMirrorPlugin.php new file mode 100644 index 0000000000..7289e77938 --- /dev/null +++ b/plugins/SubMirror/SubMirrorPlugin.php @@ -0,0 +1,165 @@ +. + */ + +/** + * @package SubMirrorPlugin + * @maintainer Brion Vibber + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } + + +class SubMirrorPlugin extends Plugin +{ + /** + * Hook for RouterInitialized event. + * + * @param Net_URL_Mapper $m path-to-action mapper + * @return boolean hook return + */ + function onRouterInitialized($m) + { + $m->connect('settings/mirror', + array('action' => 'mirrorsettings')); + $m->connect('settings/mirror/add', + array('action' => 'addmirror')); + $m->connect('settings/mirror/edit', + array('action' => 'editmirror')); + return true; + } + + /** + * Automatically load the actions and libraries used by the plugin + * + * @param Class $cls the class + * + * @return boolean hook return + * + */ + function onAutoload($cls) + { + $base = dirname(__FILE__); + $lower = strtolower($cls); + $files = array("$base/lib/$lower.php", + "$base/classes/$cls.php"); + if (substr($lower, -6) == 'action') { + $files[] = "$base/actions/" . substr($lower, 0, -6) . ".php"; + } + foreach ($files as $file) { + if (file_exists($file)) { + include_once $file; + return false; + } + } + return true; + } + + function handle($notice) + { + // Is anybody mirroring? + $mirror = new SubMirror(); + $mirror->subscribed = $notice->profile_id; + if ($mirror->find()) { + while ($mirror->fetch()) { + $mirror->repeat($notice); + } + } + } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'SubMirror', + 'version' => STATUSNET_VERSION, + 'author' => 'Brion Vibber', + 'homepage' => 'http://status.net/wiki/Plugin:SubMirror', + 'rawdescription' => + _m('Pull feeds into your timeline!')); + + return true; + } + + /** + * Menu item for settings + * + * @param Action &$action Action being executed + * + * @return boolean hook return + */ + + function onEndAccountSettingsNav(&$action) + { + $action_name = $action->trimmed('action'); + + $action->menuItem(common_local_url('mirrorsettings'), + // TRANS: SubMirror plugin menu item on user settings page. + _m('MENU', 'Mirroring'), + // TRANS: SubMirror plugin tooltip for user settings menu item. + _m('Configure mirroring of posts from other feeds'), + $action_name === 'mirrorsettings'); + + return true; + } + + function onCheckSchema() + { + $schema = Schema::get(); + $schema->ensureTable('submirror', SubMirror::schemaDef()); + return true; + } + + /** + * Set up queue handlers for outgoing hub pushes + * @param QueueManager $qm + * @return boolean hook return + */ + function onEndInitializeQueueManager(QueueManager $qm) + { + // After each notice save, check if there's any repeat mirrors. + $qm->connect('mirror', 'MirrorQueueHandler'); + return true; + } + + function onStartEnqueueNotice($notice, &$transports) + { + $transports[] = 'mirror'; + } + + /** + * Let the OStatus subscription garbage collection know if we're + * making use of a remote feed, so it doesn't get dropped out + * from under us. + * + * @param Ostatus_profile $oprofile + * @param int $count in/out + * @return mixed hook return value + */ + function onOstatus_profileSubscriberCount($oprofile, &$count) + { + if ($oprofile->profile_id) { + $mirror = new SubMirror(); + $mirror->subscribed = $oprofile->profile_id; + if ($mirror->find()) { + while ($mirror->fetch()) { + $count++; + } + } + } + return true; + } +} diff --git a/plugins/SubMirror/actions/addmirror.php b/plugins/SubMirror/actions/addmirror.php new file mode 100644 index 0000000000..5acdf1dfe4 --- /dev/null +++ b/plugins/SubMirror/actions/addmirror.php @@ -0,0 +1,77 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Takes parameters: + * + * - feed: a profile ID + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class AddMirrorAction extends BaseMirrorAction +{ + var $feedurl; + + /** + * Check pre-requisites and instantiate attributes + * + * @param Array $args array of arguments (URL, GET, POST) + * + * @return boolean success flag + */ + + function prepare($args) + { + parent::prepare($args); + $this->feedurl = $this->validateFeedUrl($this->trimmed('feedurl')); + $this->profile = $this->profileForFeed($this->feedurl); + return true; + } + + function saveMirror() + { + if ($this->oprofile->subscribe()) { + SubMirror::saveMirror($this->user, $this->profile); + } else { + $this->serverError(_m("Could not subscribe to feed.")); + } + } +} diff --git a/plugins/SubMirror/actions/basemirror.php b/plugins/SubMirror/actions/basemirror.php new file mode 100644 index 0000000000..5be0699f09 --- /dev/null +++ b/plugins/SubMirror/actions/basemirror.php @@ -0,0 +1,169 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Takes parameters: + * + * - feed: a profile ID + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +abstract class BaseMirrorAction extends Action +{ + var $user; + var $profile; + + /** + * Check pre-requisites and instantiate attributes + * + * @param Array $args array of arguments (URL, GET, POST) + * + * @return boolean success flag + */ + + function prepare($args) + { + parent::prepare($args); + return $this->sharedBoilerplate(); + } + + protected function validateFeedUrl($url) + { + if (common_valid_http_url($url)) { + return $url; + } else { + $this->clientError(_m("Invalid feed URL.")); + } + } + + protected function validateProfile($id) + { + $id = intval($id); + $profile = Profile::staticGet('id', $id); + if ($profile && $profile->id != $this->user->id) { + return $profile; + } + // TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. + $this->clientError(_m("Invalid profile for mirroring.")); + } + + /** + * + * @param string $url + * @return Profile + */ + protected function profileForFeed($url) + { + $oprofile = Ostatus_profile::ensureProfileURL($url); + if ($oprofile->isGroup()) { + $this->clientError(_m("Can't mirror a StatusNet group at this time.")); + } + $this->oprofile = $oprofile; // @fixme ugly side effect :D + return $oprofile->localProfile(); + } + + /** + * @fixme none of this belongs in end classes + * this stuff belongs in shared code! + */ + function sharedBoilerplate() + { + // Only allow POST requests + + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + $this->clientError(_('This action only accepts POST requests.')); + return false; + } + + // CSRF protection + + $token = $this->trimmed('token'); + + if (!$token || $token != common_session_token()) { + $this->clientError(_('There was a problem with your session token.'. + ' Try again, please.')); + return false; + } + + // Only for logged-in users + + $this->user = common_current_user(); + + if (empty($this->user)) { + $this->clientError(_('Not logged in.')); + return false; + } + return true; + } + + /** + * Handle request + * + * Does the subscription and returns results. + * + * @param Array $args unused. + * + * @return void + */ + + function handle($args) + { + // Throws exception on error + $this->saveMirror(); + + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + $this->element('title', null, _('Subscribed')); + $this->elementEnd('head'); + $this->elementStart('body'); + $unsubscribe = new EditMirrorForm($this, $this->profile); + $unsubscribe->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + $url = common_local_url('mirrorsettings'); + common_redirect($url, 303); + } + } + + abstract function saveMirror(); +} diff --git a/plugins/SubMirror/actions/editmirror.php b/plugins/SubMirror/actions/editmirror.php new file mode 100644 index 0000000000..c7fdab0d67 --- /dev/null +++ b/plugins/SubMirror/actions/editmirror.php @@ -0,0 +1,112 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Takes parameters: + * + * - feed: a profile ID + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +class EditMirrorAction extends BaseMirrorAction +{ + + /** + * Check pre-requisites and instantiate attributes + * + * @param Array $args array of arguments (URL, GET, POST) + * + * @return boolean success flag + */ + + function prepare($args) + { + parent::prepare($args); + + $this->profile = $this->validateProfile($this->trimmed('profile')); + + $this->mirror = SubMirror::pkeyGet(array('subscriber' => $this->user->id, + 'subscribed' => $this->profile->id)); + + if (!$this->mirror) { + $this->clientError(_m("Requested invalid profile to edit.")); + } + + $this->style = $this->validateStyle($this->trimmed('style')); + + // DO NOT change to $this->boolean(), it will be wrong. + // We're checking for the presence of the setting, not its value. + $this->delete = (bool)$this->arg('delete'); + + return true; + } + + protected function validateStyle($style) + { + $allowed = array('repeat', 'copy'); + if (in_array($style, $allowed)) { + return $style; + } else { + $this->clientError(_m("Bad form data.")); + } + } + + function saveMirror() + { + $mirror = SubMirror::getMirror($this->user, $this->profile); + if (!$mirror) { + $this->clientError(_m('Requested edit of missing mirror')); + } + + if ($this->delete) { + $mirror->delete(); + $oprofile = Ostatus_profile::staticGet('profile_id', $this->profile->id); + if ($oprofile) { + $oprofile->garbageCollect(); + } + } else if ($this->style != $mirror->style) { + $orig = clone($mirror); + $mirror->style = $this->style; + $mirror->modified = common_sql_now(); + $mirror->update($orig); + } + } +} diff --git a/plugins/SubMirror/actions/mirrorsettings.php b/plugins/SubMirror/actions/mirrorsettings.php new file mode 100644 index 0000000000..5463a8dc0c --- /dev/null +++ b/plugins/SubMirror/actions/mirrorsettings.php @@ -0,0 +1,106 @@ +. + * + * @category Plugins + * @package StatusNet + * @author Brion Vibber + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +class MirrorSettingsAction extends AccountSettingsAction +{ + /** + * Title of the page + * + * @return string Page title + */ + + function title() + { + return _m('Feed mirror settings'); + } + + /** + * Instructions for use + * + * @return string Instructions for use + */ + + function getInstructions() + { + return _m('You can mirror updates from many RSS and Atom feeds ' . + 'into your StatusNet timeline!'); + } + + /** + * Show the form for OpenID management + * + * We have one form with a few different submit buttons to do different things. + * + * @return void + */ + + function showContent() + { + $user = common_current_user(); + + $this->showAddFeedForm(); + + $mirror = new SubMirror(); + $mirror->subscriber = $user->id; + if ($mirror->find()) { + while ($mirror->fetch()) { + $this->showFeedForm($mirror); + } + } + } + + function showFeedForm($mirror) + { + $profile = Profile::staticGet('id', $mirror->subscribed); + if ($profile) { + $form = new EditMirrorForm($this, $profile); + $form->show(); + } + } + + function showAddFeedForm() + { + $form = new AddMirrorForm($this); + $form->show(); + } + + /** + * Handle a POST request + * + * Muxes to different sub-functions based on which button was pushed + * + * @return void + */ + + function handlePost() + { + } +} diff --git a/plugins/SubMirror/classes/SubMirror.php b/plugins/SubMirror/classes/SubMirror.php new file mode 100644 index 0000000000..4e7e005db2 --- /dev/null +++ b/plugins/SubMirror/classes/SubMirror.php @@ -0,0 +1,213 @@ +. + */ + +/** + * @package SubMirrorPlugin + * @maintainer Brion Vibber + */ + +class SubMirror extends Memcached_DataObject +{ + public $__table = 'submirror'; + + public $subscriber; + public $subscribed; + + public $style; + + public $created; + public $modified; + + public /*static*/ function staticGet($k, $v=null) + { + return parent::staticGet(__CLASS__, $k, $v); + } + + /** + * return table definition for DB_DataObject + * + * DB_DataObject needs to know something about the table to manipulate + * instances. This method provides all the DB_DataObject needs to know. + * + * @return array array of column definitions + */ + + function table() + { + return array('subscriber' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, + 'subscribed' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, + + 'style' => DB_DATAOBJECT_STR, + + 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL, + 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL); + } + + static function schemaDef() + { + // @fixme need a reverse key on (subscribed, subscriber) as well + return array(new ColumnDef('subscriber', 'integer', + null, false, 'PRI'), + new ColumnDef('subscribed', 'integer', + null, false, 'PRI'), + + new ColumnDef('style', 'varchar', + 16, true), + + new ColumnDef('created', 'datetime', + null, false), + new ColumnDef('modified', 'datetime', + null, false)); + } + + /** + * return key definitions for DB_DataObject + * + * DB_DataObject needs to know about keys that the table has; this function + * defines them. + * + * @return array key definitions + */ + + function keys() + { + return array_keys($this->keyTypes()); + } + + /** + * return key definitions for Memcached_DataObject + * + * Our caching system uses the same key definitions, but uses a different + * method to get them. + * + * @return array key definitions + */ + + function keyTypes() + { + // @fixme keys + // need a sane key for reverse lookup too + return array('subscriber' => 'K', 'subscribed' => 'K'); + } + + function sequenceKey() + { + return array(false, false, false); + } + + /** + * @param Profile $subscribed + * @param Profile $subscribed + * @return SubMirror + * @throws ServerException + */ + public static function saveMirror($subscriber, $subscribed, $style='repeat') + { + // @fixme make sure they're subscribed! + $mirror = new SubMirror(); + + $mirror->subscriber = $subscriber->id; + $mirror->subscribed = $subscribed->id; + $mirror->style = $style; + + $mirror->created = common_sql_now(); + $mirror->modified = common_sql_now(); + $mirror->insert(); + + return $mirror; + } + + /** + * @param Notice $notice + * @return mixed Notice on successful mirroring, boolean if not + */ + public function mirrorNotice($notice) + { + $profile = Profile::staticGet('id', $this->subscriber); + if (!$profile) { + common_log(LOG_ERROR, "SubMirror plugin skipping auto-repeat of notice $notice->id for missing user $profile->id"); + return false; + } + + if ($this->style == 'copy') { + return $this->copyNotice($profile, $notice); + } else { // default to repeat mode + return $this->repeatNotice($profile, $notice); + } + } + + /** + * Mirror a notice using StatusNet's repeat functionality. + * This retains attribution within the site, and other nice things, + * but currently ends up looking like 'RT @foobar bla bla' when + * bridged out over OStatus or TwitterBridge. + * + * @param Notice $notice + * @return mixed Notice on successful repeat, true if already repeated, false on failure + */ + protected function repeatNotice($profile, $notice) + { + if($profile->hasRepeated($notice->id)) { + common_log(LOG_INFO, "SubMirror plugin skipping auto-repeat of notice $notice->id for user $profile->id; already repeated."); + return true; + } else { + common_log(LOG_INFO, "SubMirror plugin auto-repeating notice $notice->id for $profile->id"); + return $notice->repeat($profile->id, 'mirror'); + } + } + + /** + * Mirror a notice by emitting a new notice with the same contents. + * Kind of dirty, but if pulling an external data feed into an account + * that may be what you want. + * + * @param Notice $notice + * @return mixed Notice on successful repeat, true if already repeated, false on failure + */ + protected function copyNotice($profile, $notice) + { + $options = array('is_local' => Notice::LOCAL_PUBLIC, + 'url' => $notice->bestUrl(), // pass through the foreign link... + 'rendered' => $notice->rendered); + + $saved = Notice::saveNew($profile->id, + $notice->content, + 'feed', + $options); + return $saved; + } + + public /*static*/ function pkeyGet($v) + { + return parent::pkeyGet(__CLASS__, $v); + } + + /** + * Get the mirroring setting for a pair of profiles, if existing. + * + * @param Profile $subscriber + * @param Profile $subscribed + * @return mixed Profile or empty + */ + public static function getMirror($subscriber, $subscribed) + { + return self::pkeyGet(array('subscriber' => $subscriber->id, + 'subscribed' => $subscribed->id)); + } +} diff --git a/plugins/SubMirror/lib/addmirrorform.php b/plugins/SubMirror/lib/addmirrorform.php new file mode 100644 index 0000000000..0a798c9eaf --- /dev/null +++ b/plugins/SubMirror/lib/addmirrorform.php @@ -0,0 +1,141 @@ +. + * + * @package StatusNet + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +class AddMirrorForm extends Form +{ + + /** + * Name of the form + * + * Sub-classes should overload this with the name of their form. + * + * @return void + */ + + function formLegend() + { + } + + /** + * Visible or invisible data elements + * + * Display the form fields that make up the data of the form. + * Sub-classes should overload this to show their data. + * + * @return void + */ + + function formData() + { + $this->out->elementStart('fieldset'); + + $this->out->elementStart('ul'); + + $this->li(); + $this->doInput('addmirror-feedurl', + 'feedurl', + _m('Web page or feed URL:'), + $this->out->trimmed('feedurl')); + $this->unli(); + + $this->li(); + $this->out->submit('addmirror-save', _m('Add feed')); + $this->unli(); + $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); + } + + private function doInput($id, $name, $label, $value=null, $instructions=null) + { + $this->out->element('label', array('for' => $id), $label); + $attrs = array('name' => $name, + 'type' => 'text', + 'id' => $id, + 'style' => 'width: 80%'); + if ($value) { + $attrs['value'] = $value; + } + $this->out->element('input', $attrs); + if ($instructions) { + $this->out->element('p', 'form_guide', $instructions); + } + } + + /** + * Buttons for form actions + * + * Submit and cancel buttons (or whatever) + * Sub-classes should overload this to show their own buttons. + * + * @return void + */ + + function formActions() + { + } + + /** + * ID of the form + * + * Should be unique on the page. Sub-classes should overload this + * to show their own IDs. + * + * @return string ID of the form + */ + + function id() + { + return 'add-mirror-form'; + } + + /** + * Action of the form. + * + * URL to post to. Should be overloaded by subclasses to give + * somewhere to post to. + * + * @return string URL to post to + */ + + function action() + { + return common_local_url('addmirror'); + } + + /** + * Class of the form. + * + * @return string the form's class + */ + + function formClass() + { + return 'form_settings'; + } + +} diff --git a/plugins/SubMirror/lib/editmirrorform.php b/plugins/SubMirror/lib/editmirrorform.php new file mode 100644 index 0000000000..8236da3896 --- /dev/null +++ b/plugins/SubMirror/lib/editmirrorform.php @@ -0,0 +1,189 @@ +. + * + * @package StatusNet + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +class EditMirrorForm extends Form +{ + function __construct($action, $profile) + { + parent::__construct($action); + + $this->profile = clone($profile); + $this->user = common_current_user(); + $this->mirror = SubMirror::pkeyGet(array('subscriber' => $this->user->id, + 'subscribed' => $this->profile->id)); + } + + /** + * Name of the form + * + * Sub-classes should overload this with the name of their form. + * + * @return void + */ + + function formLegend() + { + } + + /** + * Visible or invisible data elements + * + * Display the form fields that make up the data of the form. + * Sub-classes should overload this to show their data. + * + * @return void + */ + + function formData() + { + $this->out->elementStart('fieldset'); + + $this->out->hidden('profile', $this->profile->id); + + $this->out->elementStart('div', array('style' => 'float: left; width: 80px;')); + $img = $this->getAvatar($this->profile); + $feed = $this->getFeed($this->profile); + $this->out->elementStart('a', array('href' => $this->profile->profileurl)); + $this->out->element('img', array('src' => $img, 'style' => 'float: left')); + $this->out->elementEnd('a'); + $this->out->elementEnd('div'); + + + $this->out->elementStart('div', array('style' => 'margin-left: 80px; margin-right: 20px')); + $this->out->elementStart('p'); + $this->out->elementStart('div'); + $this->out->element('a', array('href' => $this->profile->profileurl), $this->profile->getBestName()); + $this->out->elementEnd('div'); + $this->out->elementStart('div'); + if ($feed) { + $this->out->text(_m('LABEL', 'Remote feed:') . ' '); + //$this->out->element('a', array('href' => $feed), $feed); + $this->out->element('input', array('value' => $feed, 'readonly' => 'readonly', 'style' => 'width: 100%')); + } else { + $this->out->text(_m('LABEL', 'Local user')); + } + $this->out->elementEnd('div'); + $this->out->elementEnd('p'); + + $this->out->elementStart('fieldset', array('style' => 'margin-top: 20px')); + $this->out->element('legend', false, _m("Mirroring style")); + + $styles = array('repeat' => _m("Repeat: reference the original user's post (sometimes shows as 'RT @blah')"), + 'copy' => _m("Repost the content under my account")); + foreach ($styles as $key => $label) { + $this->out->elementStart('div'); + $attribs = array('type' => 'radio', + 'value' => $key, + 'name' => 'style', + 'id' => $this->id() . '-style'); + if ($key == $this->mirror->style || ($key == 'repeat' && empty($this->mirror->style))) { + $attribs['checked'] = 'checked'; + } + $this->out->element('input', $attribs); + $this->out->element('span', false, $label); // @fixme should be label, but the styles muck it up for now + $this->out->elementEnd('div'); + + } + $this->out->elementEnd('fieldset'); + + + $this->out->elementStart('div'); + $this->out->submit($this->id() . '-save', _m('Save')); + $this->out->element('input', array('type' => 'submit', + 'value' => _m('Stop mirroring'), + 'name' => 'delete', + 'class' => 'submit')); + $this->out->elementEnd('div'); + + $this->out->elementEnd('div'); + $this->out->elementEnd('fieldset'); + } + + private function getAvatar($profile) + { + $avatar = $this->profile->getAvatar(48); + if ($avatar) { + return $avatar->displayUrl(); + } else { + return Avatar::defaultImage(48); + } + } + + private function getFeed($profile) + { + // Ok this is a bit of a hack. ;) + if (class_exists('Ostatus_profile')) { + $oprofile = Ostatus_profile::staticGet('profile_id', $profile->id); + if ($oprofile) { + return $oprofile->feeduri; + } + } + var_dump('wtf'); + return false; + } + + /** + * ID of the form + * + * Should be unique on the page. Sub-classes should overload this + * to show their own IDs. + * + * @return string ID of the form + */ + + function id() + { + return 'edit-mirror-form-' . $this->profile->id; + } + + /** + * Action of the form. + * + * URL to post to. Should be overloaded by subclasses to give + * somewhere to post to. + * + * @return string URL to post to + */ + + function action() + { + return common_local_url('editmirror'); + } + + /** + * Class of the form. + * + * @return string the form's class + */ + + function formClass() + { + return 'form_settings'; + } + +} diff --git a/plugins/SubMirror/lib/mirrorqueuehandler.php b/plugins/SubMirror/lib/mirrorqueuehandler.php new file mode 100644 index 0000000000..92b36b5ebf --- /dev/null +++ b/plugins/SubMirror/lib/mirrorqueuehandler.php @@ -0,0 +1,45 @@ +. + */ + +/** + * Check for subscription mirroring options on each newly seen post! + * + * @package SubMirror + * @author Brion Vibber + */ + +class MirrorQueueHandler extends QueueHandler +{ + function transport() + { + return 'mirror'; + } + + function handle($notice) + { + $mirror = new SubMirror(); + $mirror->subscribed = $notice->profile_id; + if ($mirror->find()) { + while ($mirror->fetch()) { + $mirror->mirrorNotice($notice); + } + } + return true; + } +}