From ad7623a87fe5277706470c43fe357363891326c9 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 30 Sep 2010 19:18:46 -0700 Subject: [PATCH 1/8] Add a $config['plugins']['locale_path'] which can be set to override the individual plugins' locale subdirectories. This will apply to *ALL* plugins in *ALL* languages, so should probably only be used when doing site customization... You'd probably do: $config['site']['locale_path'] = '/srv/awesome/data/locale'; $config['plugins']['locale_path'] = '/srv/awesome/data/locale'; with a structure like: srv/ awesome/ data/ locale/ en/ LC_MESSAGES/ statusnet.po OpenID.po AnonymousFave.po etc, all alongside each other. You could separate plugins from the core if you like. Where locale files have not already been generated, you can build one for a plugin like so: php scripts/update_po_templates.php --plugin=MyPlugin and pull out the template file: plugins/MyPlugin/locale/MyPlugin.pot Edit that (make sure you at least set the CHARSET, probably to UTF-8) and save your customized .po files into the structure as above, and use msgfmt to generate .mo files for final output. --- lib/default.php | 1 + lib/plugin.php | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/default.php b/lib/default.php index 6200abada1..45e35e83d3 100644 --- a/lib/default.php +++ b/lib/default.php @@ -298,6 +298,7 @@ $default = 'WikiHashtags' => null, 'RSSCloud' => null, 'OpenID' => null), + 'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories ), 'admin' => array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license')), diff --git a/lib/plugin.php b/lib/plugin.php index ee57f59043..3f84afa27e 100644 --- a/lib/plugin.php +++ b/lib/plugin.php @@ -88,7 +88,12 @@ class Plugin $class = get_class($this); if (substr($class, -6) == 'Plugin') { $name = substr($class, 0, -6); - $path = INSTALLDIR . "/plugins/$name/locale"; + $path = common_config('plugins', 'locale_path'); + if (!$path) { + // @fixme this will fail for things installed in local/plugins + // ... but then so will web links so far. + $path = INSTALLDIR . "/plugins/$name/locale"; + } if (file_exists($path) && is_dir($path)) { bindtextdomain($name, $path); bind_textdomain_codeset($name, 'UTF-8'); From 12f68c4ff243829a435f774e4d486ccfb381a11d Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 1 Oct 2010 11:05:15 -0700 Subject: [PATCH 2/8] Throw in a quick event hook to override the profile list type on showstream (should be made more general in future). Replace with a NoticeList to have output include avatar and username -- but CSS still hides them in default theme. Event::addHandler('ShowStreamNoticeList', 'awesome'); function awesome($notice, $action, &$pnl) { $pnl = new NoticeList($notice, $action); return false; } --- actions/showstream.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/actions/showstream.php b/actions/showstream.php index 2476f19fab..e9f117afc4 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -222,7 +222,10 @@ class ShowstreamAction extends ProfileAction ? $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1) : $this->user->getTaggedNotices($this->tag, ($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null); - $pnl = new ProfileNoticeList($notice, $this); + $pnl = null; + if (Event::handle('ShowStreamNoticeList', array($notice, $this, &$pnl))) { + $pnl = new ProfileNoticeList($notice, $this); + } $cnt = $pnl->show(); if (0 == $cnt) { $this->showEmptyListMessage(); From 8439774cf7cc2c352cbdfa0020f9345bc9741302 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 1 Oct 2010 11:12:53 -0700 Subject: [PATCH 3/8] Allow turning off Anonymous Favoring for specific users' notices --- plugins/AnonymousFave/AnonymousFavePlugin.php | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/plugins/AnonymousFave/AnonymousFavePlugin.php b/plugins/AnonymousFave/AnonymousFavePlugin.php index 72093e7f7e..a0aa126268 100644 --- a/plugins/AnonymousFave/AnonymousFavePlugin.php +++ b/plugins/AnonymousFave/AnonymousFavePlugin.php @@ -1,11 +1,19 @@ array('spock', 'kirk', 'bones')) + * ); + * + * * PHP version 5 * * This program is free software: you can redistribute it and/or modify @@ -48,7 +56,13 @@ define('ANONYMOUS_FAVE_PLUGIN_VERSION', '0.1'); * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ -class AnonymousFavePlugin extends Plugin { + +class AnonymousFavePlugin extends Plugin +{ + + // Array of users who should not have anon faving. The default is + // that anonymous faving is allowed for all users. + public $restricted = array(); function onArgsInitialize() { // We always want a session because we're tracking anon users @@ -128,16 +142,16 @@ class AnonymousFavePlugin extends Plugin { } } - function onStartInitializeRouter($m) { - + function onStartInitializeRouter($m) + { $m->connect('main/anonfavor', array('action' => 'AnonFavor')); $m->connect('main/anondisfavor', array('action' => 'AnonDisFavor')); return true; } - function onStartShowNoticeOptions($item) { - + function onStartShowNoticeOptions($item) + { if (!common_logged_in()) { $item->out->elementStart('div', 'notice-options'); $item->showFaveForm(); @@ -147,9 +161,9 @@ class AnonymousFavePlugin extends Plugin { return true; } - function onStartShowFaveForm($item) { - - if (!common_logged_in()) { + function onStartShowFaveForm($item) + { + if (!common_logged_in() && $this->hasAnonFaving($item)) { $profile = AnonymousFavePlugin::getAnonProfile(); if (!empty($profile)) { @@ -203,8 +217,8 @@ class AnonymousFavePlugin extends Plugin { $tally = Fave_tally::decrement($notice->id); } - static function createAnonProfile() { - + static function createAnonProfile() + { // Get the anon user's IP, and turn it into a nickname list($proxy, $ip) = common_client_ip(); @@ -240,7 +254,8 @@ class AnonymousFavePlugin extends Plugin { return $profile; } - static function getAnonProfile() { + static function getAnonProfile() + { $token = $_SESSION['anon_token']; $anon = base64_decode($token); @@ -261,6 +276,26 @@ class AnonymousFavePlugin extends Plugin { return $profile; } + /** + * Determine whether a given NoticeListItem should have the + * anonymous fave/disfave form + * + * @param NoticeListItem $item + * + * @return boolean false if the profile associated with the notice is + * in the list of restricted profiles, otherwise + * return true + */ + function hasAnonFaving($item) + { + $profile = Profile::staticGet('id', $item->notice->profile_id); + if (in_array($profile->nickname, $this->restricted)) { + return false; + } + + return true; + } + /** * Provide plugin version information. * From 33b16be0a40e78dee3cf25ab27ea95202f0e772e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 1 Oct 2010 11:31:44 -0700 Subject: [PATCH 4/8] Better markup for anon fave tally --- plugins/AnonymousFave/AnonymousFavePlugin.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/AnonymousFave/AnonymousFavePlugin.php b/plugins/AnonymousFave/AnonymousFavePlugin.php index a0aa126268..be93c1704f 100644 --- a/plugins/AnonymousFave/AnonymousFavePlugin.php +++ b/plugins/AnonymousFave/AnonymousFavePlugin.php @@ -202,7 +202,12 @@ class AnonymousFavePlugin extends Plugin 'class' => 'notice-tally' ) ); - $out->raw(sprintf(_m("favored %d times"), $tally->count)); + $out->elementStart('span', array('class' => 'fave-tally-title')); + $out->raw(sprintf(_m("Favored"))); + $out->elementEnd('span'); + $out->elementStart('span', array('class' => 'fave-tally')); + $out->raw($tally->count); + $out->elementEnd('span'); $out->elementEnd('div'); } } From 5c19d33b27e44449e72e5c4b8f3d21c98b31f63a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 1 Oct 2010 14:42:12 -0700 Subject: [PATCH 5/8] Bugfix in FB-sharing header for empty profile avatar --- actions/shownotice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/shownotice.php b/actions/shownotice.php index 005335e3b4..c5180568b3 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -303,7 +303,7 @@ class ShownoticeAction extends OwnerDesignAction $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); $avatarUrl = ($avatar) ? $avatar->displayUrl() : - Avatar::defaultImage($avatar_size); + Avatar::defaultImage(AVATAR_PROFILE_SIZE); $this->element('meta', array('property' => 'og:image', 'content' => $avatarUrl)); $this->element('meta', array('property' => 'og:description', From 5c2b073a50341be024a87f5f17f72684d3004b55 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 1 Oct 2010 17:54:47 -0700 Subject: [PATCH 6/8] NoticeTitle plugin: link the post title to detail view of the post --- plugins/NoticeTitle/NoticeTitlePlugin.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/NoticeTitle/NoticeTitlePlugin.php b/plugins/NoticeTitle/NoticeTitlePlugin.php index 269f061893..a3b4489f2c 100644 --- a/plugins/NoticeTitle/NoticeTitlePlugin.php +++ b/plugins/NoticeTitle/NoticeTitlePlugin.php @@ -221,7 +221,9 @@ class NoticeTitlePlugin extends Plugin $title = Notice_title::fromNotice($nli->notice); if (!empty($title)) { - $nli->out->element('h4', array('class' => 'notice_title'), $title); + $nli->out->elementStart('h4', array('class' => 'notice_title')); + $nli->out->element('a', array('href' => $nli->notice->bestUrl()), $title); + $nli->out->elementEnd('h4'); } return true; From 5dee862b2cb9cbcb0e73842802dc2387c8e84825 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 4 Oct 2010 10:27:03 -0700 Subject: [PATCH 7/8] Fix broken code in OStatus feed maint/test scripts (using field name from older dev code, would load up wrong record) --- plugins/OStatus/scripts/resub-feed.php | 4 ++-- plugins/OStatus/scripts/testfeed.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/OStatus/scripts/resub-feed.php b/plugins/OStatus/scripts/resub-feed.php index 121d12109a..8803c0118b 100644 --- a/plugins/OStatus/scripts/resub-feed.php +++ b/plugins/OStatus/scripts/resub-feed.php @@ -38,7 +38,7 @@ if (empty($args[0]) || !Validate::uri($args[0])) { $feedurl = $args[0]; -$sub = FeedSub::staticGet('topic', $feedurl); +$sub = FeedSub::staticGet('uri', $feedurl); if (!$sub) { print "Feed $feedurl is not subscribed.\n"; exit(1); @@ -57,7 +57,7 @@ if ($ok) { print "Could not confirm.\n"; } -$sub2 = FeedSub::staticGet('topic', $feedurl); +$sub2 = FeedSub::staticGet('uri', $feedurl); print "\n"; print "New state:\n"; diff --git a/plugins/OStatus/scripts/testfeed.php b/plugins/OStatus/scripts/testfeed.php index 82a1c65865..149bcc343f 100644 --- a/plugins/OStatus/scripts/testfeed.php +++ b/plugins/OStatus/scripts/testfeed.php @@ -45,7 +45,7 @@ $skip = have_option('skip') ? intval(get_option_value('skip')) : 0; $count = have_option('count') ? intval(get_option_value('count')) : 0; -$sub = FeedSub::staticGet('topic', $feedurl); +$sub = FeedSub::staticGet('uri', $feedurl); if (!$sub) { print "Feed $feedurl is not subscribed.\n"; exit(1); From de185a14057e52d6acd306a643eb8f38cd83973e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 4 Oct 2010 13:05:49 -0700 Subject: [PATCH 8/8] Fix stray newlines on a few messages (fixed on translatewiki.net as well) --- locale/zh_CN/LC_MESSAGES/statusnet.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index eec90e3c45..3fdee114cb 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -7348,13 +7348,13 @@ msgstr "%s不是有效的颜色!应使用3或6个十六进制字符。" #: scripts/restoreuser.php:82 #, php-format msgid "Backup file for user %s (%s)" -msgstr "用户 %s (%s) 的备份文件\n" +msgstr "用户 %s (%s) 的备份文件" #: scripts/restoreuser.php:88 msgid "No user specified; using backup user." -msgstr "没有用户被指定;使用备份用户。\n" +msgstr "没有用户被指定;使用备份用户。" #: scripts/restoreuser.php:94 #, php-format msgid "%d entries in backup." -msgstr "备份中有 %d 个条目。\n" +msgstr "备份中有 %d 个条目。"