diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/Enjit/enjitqueuehandler.php | 9 | ||||
-rw-r--r-- | plugins/Facebook/facebookqueuehandler.php | 2 | ||||
-rw-r--r-- | plugins/Imap/ImapPlugin.php | 2 | ||||
-rw-r--r-- | plugins/MobileProfile/mp-screen.css | 33 | ||||
-rw-r--r-- | plugins/PubSubHubBub/PubSubHubBubPlugin.php | 196 | ||||
-rw-r--r-- | plugins/README-plugins | 21 | ||||
-rw-r--r-- | plugins/RSSCloud/RSSCloudPlugin.php | 41 | ||||
-rw-r--r--[-rwxr-xr-x] | plugins/RSSCloud/RSSCloudQueueHandler.php | 50 | ||||
-rw-r--r-- | plugins/Recaptcha/RecaptchaPlugin.php | 14 | ||||
-rw-r--r-- | plugins/TwitterBridge/twitterqueuehandler.php | 2 |
10 files changed, 233 insertions, 137 deletions
diff --git a/plugins/Enjit/enjitqueuehandler.php b/plugins/Enjit/enjitqueuehandler.php index f0e706b92..14085cc5e 100644 --- a/plugins/Enjit/enjitqueuehandler.php +++ b/plugins/Enjit/enjitqueuehandler.php @@ -32,14 +32,7 @@ class EnjitQueueHandler extends QueueHandler return 'enjit'; } - function start() - { - $this->log(LOG_INFO, "Starting EnjitQueueHandler"); - $this->log(LOG_INFO, "Broadcasting to ".common_config('enjit', 'apiurl')); - return true; - } - - function handle_notice($notice) + function handle($notice) { $profile = Profile::staticGet($notice->profile_id); diff --git a/plugins/Facebook/facebookqueuehandler.php b/plugins/Facebook/facebookqueuehandler.php index 1778690e5..524af7bc4 100644 --- a/plugins/Facebook/facebookqueuehandler.php +++ b/plugins/Facebook/facebookqueuehandler.php @@ -28,7 +28,7 @@ class FacebookQueueHandler extends QueueHandler return 'facebook'; } - function handle_notice($notice) + function handle($notice) { if ($this->_isLocal($notice)) { return facebookBroadcastNotice($notice); diff --git a/plugins/Imap/ImapPlugin.php b/plugins/Imap/ImapPlugin.php index 89a775a16..d1e920b00 100644 --- a/plugins/Imap/ImapPlugin.php +++ b/plugins/Imap/ImapPlugin.php @@ -86,7 +86,7 @@ class ImapPlugin extends Plugin } } - function onStartIoManagerClasses(&$classes) + function onStartQueueDaemonIoManagers(&$classes) { $classes[] = new ImapManager($this); } diff --git a/plugins/MobileProfile/mp-screen.css b/plugins/MobileProfile/mp-screen.css index 472fbb001..04fa5fb00 100644 --- a/plugins/MobileProfile/mp-screen.css +++ b/plugins/MobileProfile/mp-screen.css @@ -176,15 +176,25 @@ margin-bottom:0; .profile { padding-top:4px; padding-bottom:4px; +min-height:65px; } -.notice div.entry-content { +#content .notice .entry-title { +float:left; +width:100%; +margin-left:0; +} +#content .notice .author .photo { +position:static; +float:left; +} +#content .notice div.entry-content { margin-left:0; width:75%; max-width:100%; min-width:0; } .notice-options { -width:50px; +width:43px; margin-right:1%; } @@ -192,6 +202,13 @@ margin-right:1%; width:16px; height:16px; } +.notice-options form.processing { +background-image:none; +} +#wrap .notice-options form.processing input.submit { +background-position:0 47%; +} + .notice .notice-options a, .notice .notice-options input { box-shadow:none; @@ -202,16 +219,16 @@ box-shadow:none; .notice .notice-options form { margin:-4px 0 0 0; } -.notice .notice-options .notice_repeat, +.notice .notice-options .form_repeat, .notice .notice-options .notice_delete { -margin-top:18px; +margin-top:11px; } -.notice .notice-options .notice_reply, -.notice .notice-options .notice_repeat { -margin-left:18px; +.notice .notice-options .form_favor, +.notice .notice-options .form_disfavor, +.notice .notice-options .form_repeat { +margin-right:11px; } - .notice .notice-options .notice_delete { float:left; } diff --git a/plugins/PubSubHubBub/PubSubHubBubPlugin.php b/plugins/PubSubHubBub/PubSubHubBubPlugin.php index 367b35403..ce6086df9 100644 --- a/plugins/PubSubHubBub/PubSubHubBubPlugin.php +++ b/plugins/PubSubHubBub/PubSubHubBubPlugin.php @@ -31,66 +31,152 @@ if (!defined('STATUSNET')) { exit(1); } -define('DEFAULT_HUB','http://pubsubhubbub.appspot.com'); +define('DEFAULT_HUB', 'http://pubsubhubbub.appspot.com'); -require_once(INSTALLDIR.'/plugins/PubSubHubBub/publisher.php'); +require_once INSTALLDIR.'/plugins/PubSubHubBub/publisher.php'; + +/** + * Plugin to provide publisher side of PubSubHubBub (PuSH) + * relationship. + * + * PuSH is a real-time or near-real-time protocol for Atom + * and RSS feeds. More information here: + * + * http://code.google.com/p/pubsubhubbub/ + * + * To enable, add the following line to your config.php: + * + * addPlugin('PubSubHubBub'); + * + * This will use the Google default hub. If you'd like to use + * another, try: + * + * addPlugin('PubSubHubBub', + * array('hub' => 'http://yourhub.example.net/')); + * + * @category Plugin + * @package StatusNet + * @author Craig Andrews <candrews@integralblue.com> + * @copyright 2009 Craig Andrews http://candrews.integralblue.com + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ class PubSubHubBubPlugin extends Plugin { - private $hub; + /** + * URL of the hub to advertise and publish to. + */ + + public $hub = DEFAULT_HUB; + + /** + * Default constructor. + */ function __construct() { parent::__construct(); } - function onInitializePlugin(){ - $this->hub = common_config('PubSubHubBub', 'hub'); - if(empty($this->hub)){ - $this->hub = DEFAULT_HUB; - } - } + /** + * Hooks the StartApiAtom event + * + * Adds the necessary bits to advertise PubSubHubBub + * for the Atom feed. + * + * @param Action $action The API action being shown. + * + * @return boolean hook value + */ - function onStartApiAtom($action){ - $action->element('link',array('rel'=>'hub','href'=>$this->hub),null); + function onStartApiAtom($action) + { + $action->element('link', array('rel' => 'hub', 'href' => $this->hub), null); + + return true; } - function onStartApiRss($action){ - $action->element('atom:link',array('rel'=>'hub','href'=>$this->hub),null); + /** + * Hooks the StartApiRss event + * + * Adds the necessary bits to advertise PubSubHubBub + * for the RSS 2.0 feeds. + * + * @param Action $action The API action being shown. + * + * @return boolean hook value + */ + + function onStartApiRss($action) + { + $action->element('atom:link', array('rel' => 'hub', + 'href' => $this->hub), + null); + return true; } - function onHandleQueuedNotice($notice){ + /** + * Hook for a queued notice. + * + * When a notice has been queued, will ping the + * PuSH hub for each Atom and RSS feed in which + * the notice appears. + * + * @param Notice $notice The notice that's been queued + * + * @return boolean hook value + */ + + function onHandleQueuedNotice($notice) + { $publisher = new Publisher($this->hub); $feeds = array(); //public timeline feeds - $feeds[]=common_local_url('ApiTimelinePublic',array('format' => 'rss')); - $feeds[]=common_local_url('ApiTimelinePublic',array('format' => 'atom')); + $feeds[] = common_local_url('ApiTimelinePublic', array('format' => 'rss')); + $feeds[] = common_local_url('ApiTimelinePublic', array('format' => 'atom')); //author's own feeds - $user = User::staticGet('id',$notice->profile_id); - $feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'rss')); - $feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'atom')); + $user = User::staticGet('id', $notice->profile_id); + + $feeds[] = common_local_url('ApiTimelineUser', + array('id' => $user->nickname, + 'format' => 'rss')); + $feeds[] = common_local_url('ApiTimelineUser', + array('id' => $user->nickname, + 'format' => 'atom')); //tag feeds $tag = new Notice_tag(); + $tag->notice_id = $notice->id; if ($tag->find()) { while ($tag->fetch()) { - $feeds[]=common_local_url('ApiTimelineTag',array('tag'=>$tag->tag, 'format'=>'rss')); - $feeds[]=common_local_url('ApiTimelineTag',array('tag'=>$tag->tag, 'format'=>'atom')); + $feeds[] = common_local_url('ApiTimelineTag', + array('tag' => $tag->tag, + 'format' => 'rss')); + $feeds[] = common_local_url('ApiTimelineTag', + array('tag' => $tag->tag, + 'format' => 'atom')); } } //group feeds $group_inbox = new Group_inbox(); + $group_inbox->notice_id = $notice->id; if ($group_inbox->find()) { while ($group_inbox->fetch()) { - $group = User_group::staticGet('id',$group_inbox->group_id); - $feeds[]=common_local_url('ApiTimelineGroup',array('id' => $group->nickname,'format'=>'rss')); - $feeds[]=common_local_url('ApiTimelineGroup',array('id' => $group->nickname,'format'=>'atom')); + $group = User_group::staticGet('id', $group_inbox->group_id); + + $feeds[] = common_local_url('ApiTimelineGroup', + array('id' => $group->nickname, + 'format' => 'rss')); + $feeds[] = common_local_url('ApiTimelineGroup', + array('id' => $group->nickname, + 'format' => 'atom')); } } @@ -103,32 +189,70 @@ class PubSubHubBubPlugin extends Plugin if (empty($user)) { continue; } - $feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'rss')); - $feeds[]=common_local_url('ApiTimelineUser',array('id' => $user->nickname, 'format'=>'atom')); + $feeds[] = common_local_url('ApiTimelineFriends', + array('id' => $user->nickname, + 'format' => 'rss')); + $feeds[] = common_local_url('ApiTimelineFriends', + array('id' => $user->nickname, + 'format' => 'atom')); } + $replies = $notice->getReplies(); + //feed of user replied to - if($notice->reply_to){ - $user = User::staticGet('id',$notice->reply_to); - $feeds[]=common_local_url('ApiTimelineMentions',array('id' => $user->nickname,'format'=>'rss')); - $feeds[]=common_local_url('ApiTimelineMentions',array('id' => $user->nickname,'format'=>'atom')); + foreach ($replies as $recipient) { + $user = User::staticGet('id', $recipient); + if (!empty($user)) { + $feeds[] = common_local_url('ApiTimelineMentions', + array('id' => $user->nickname, + 'format' => 'rss')); + $feeds[] = common_local_url('ApiTimelineMentions', + array('id' => $user->nickname, + 'format' => 'atom')); + } } + $feeds = array_unique($feeds); - foreach(array_unique($feeds) as $feed){ - if(! $publisher->publish_update($feed)){ - common_log_line(LOG_WARNING,$feed.' was not published to hub at '.$this->hub.':'.$publisher->last_response()); - } + ob_start(); + $ok = $publisher->publish_update($feeds); + $push_last_response = ob_get_clean(); + + if (!$ok) { + common_log(LOG_WARNING, + 'Failure publishing ' . count($feeds) . ' feeds to hub at '. + $this->hub.': '.$push_last_response); + } else { + common_log(LOG_INFO, + 'Published ' . count($feeds) . ' feeds to hub at '. + $this->hub.': '.$push_last_response); } + + return true; } + /** + * Provide version information + * + * Adds this plugin's version data to the global + * version array, for e.g. displaying on the version page. + * + * @param array &$versions array of array of versions + * + * @return boolean hook value + */ + function onPluginVersion(&$versions) { $versions[] = array('name' => 'PubSubHubBub', 'version' => STATUSNET_VERSION, 'author' => 'Craig Andrews', - 'homepage' => 'http://status.net/wiki/Plugin:PubSubHubBub', + 'homepage' => + 'http://status.net/wiki/Plugin:PubSubHubBub', 'rawdescription' => - _m('The PubSubHubBub plugin pushes RSS/Atom updates to a <a href="http://pubsubhubbub.googlecode.com/">PubSubHubBub</a> hub.')); + _m('The PubSubHubBub plugin pushes RSS/Atom updates '. + 'to a <a href = "'. + 'http://pubsubhubbub.googlecode.com/'. + '">PubSubHubBub</a> hub.')); return true; } diff --git a/plugins/README-plugins b/plugins/README-plugins new file mode 100644 index 000000000..cdce7eb18 --- /dev/null +++ b/plugins/README-plugins @@ -0,0 +1,21 @@ +Several example plugins are included in the plugins/ directory. You +can enable a plugin with the following line in config.php: + + addPlugin('Example', array('param1' => 'value1', + 'param2' => 'value2')); + +This will look for and load files named 'ExamplePlugin.php' or +'Example/ExamplePlugin.php' either in the plugins/ directory (for +plugins that ship with StatusNet) or in the local/ directory (for +plugins you write yourself or that you get from somewhere else) or +local/plugins/. + +Plugins are documented in their own directories. + + +Additional information on using and developing plugins can be found +on the StatusNet wiki: + +http://status.net/wiki/Plugins +http://status.net/wiki/Plugin_development + diff --git a/plugins/RSSCloud/RSSCloudPlugin.php b/plugins/RSSCloud/RSSCloudPlugin.php index 2de162628..9f444c8bb 100644 --- a/plugins/RSSCloud/RSSCloudPlugin.php +++ b/plugins/RSSCloud/RSSCloudPlugin.php @@ -138,6 +138,9 @@ class RSSCloudPlugin extends Plugin case 'RSSCloudNotifier': include_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudNotifier.php'; return false; + case 'RSSCloudQueueHandler': + include_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudQueueHandler.php'; + return false; case 'RSSCloudRequestNotifyAction': case 'LoggingAggregatorAction': include_once INSTALLDIR . '/plugins/RSSCloud/' . @@ -194,32 +197,6 @@ class RSSCloudPlugin extends Plugin } /** - * broadcast the message when not using queuehandler - * - * @param Notice &$notice the notice - * @param array $queue destination queue - * - * @return boolean hook return - */ - - function onUnqueueHandleNotice(&$notice, $queue) - { - if (($queue == 'rsscloud') && ($this->_isLocal($notice))) { - - common_debug('broadcasting rssCloud bound notice ' . $notice->id); - - $profile = $notice->getProfile(); - - $notifier = new RSSCloudNotifier(); - $notifier->notify($profile); - - return false; - } - - return true; - } - - /** * Determine whether the notice was locally created * * @param Notice $notice the notice in question @@ -261,19 +238,15 @@ class RSSCloudPlugin extends Plugin } /** - * Add RSSCloudQueueHandler to the list of valid daemons to - * start + * Register RSSCloud notice queue handler * - * @param array $daemons the list of daemons to run + * @param QueueManager $manager * * @return boolean hook return - * */ - - function onGetValidDaemons($daemons) + function onEndInitializeQueueManager($manager) { - array_push($daemons, INSTALLDIR . - '/plugins/RSSCloud/RSSCloudQueueHandler.php'); + $manager->connect('rsscloud', 'RSSCloudQueueHandler'); return true; } diff --git a/plugins/RSSCloud/RSSCloudQueueHandler.php b/plugins/RSSCloud/RSSCloudQueueHandler.php index 693dd27c1..295c26189 100755..100644 --- a/plugins/RSSCloud/RSSCloudQueueHandler.php +++ b/plugins/RSSCloud/RSSCloudQueueHandler.php @@ -1,4 +1,3 @@ -#!/usr/bin/env php <?php /* * StatusNet - the distributed open-source microblogging tool @@ -18,61 +17,20 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..')); - -$shortoptions = 'i::'; -$longoptions = array('id::'); - -$helptext = <<<END_OF_ENJIT_HELP -Daemon script for pushing new notices to RSSCloud subscribers. - - -i --id Identity (default none) - -END_OF_ENJIT_HELP; - -require_once INSTALLDIR . '/scripts/commandline.inc'; -require_once INSTALLDIR . '/lib/queuehandler.php'; -require_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudNotifier.php'; -require_once INSTALLDIR . '/plugins/RSSCloud/RSSCloudSubscription.php'; +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } class RSSCloudQueueHandler extends QueueHandler { - var $notifier = null; - function transport() { return 'rsscloud'; } - function start() - { - $this->log(LOG_INFO, "INITIALIZE"); - $this->notifier = new RSSCloudNotifier(); - return true; - } - - function handle_notice($notice) + function handle($notice) { $profile = $notice->getProfile(); - return $this->notifier->notify($profile); - } - - function finish() - { + $notifier = new RSSCloudNotifier(); + return $notifier->notify($profile); } - -} - -if (have_option('i')) { - $id = get_option_value('i'); -} else if (have_option('--id')) { - $id = get_option_value('--id'); -} else if (count($args) > 0) { - $id = $args[0]; -} else { - $id = null; } -$handler = new RSSCloudQueueHandler($id); - -$handler->runOnce(); diff --git a/plugins/Recaptcha/RecaptchaPlugin.php b/plugins/Recaptcha/RecaptchaPlugin.php index 3665214f8..c585da43c 100644 --- a/plugins/Recaptcha/RecaptchaPlugin.php +++ b/plugins/Recaptcha/RecaptchaPlugin.php @@ -31,8 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -define('RECAPTCHA', '0.2'); - require_once(INSTALLDIR.'/plugins/Recaptcha/recaptchalib.php'); class RecaptchaPlugin extends Plugin @@ -88,4 +86,16 @@ class RecaptchaPlugin extends Plugin return false; } } + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'Recaptcha', + 'version' => STATUSNET_VERSION, + 'author' => 'Eric Helgeson', + 'homepage' => 'http://status.net/wiki/Plugin:Recaptcha', + 'rawdescription' => + _m('Uses <a href="http://recaptcha.org/">Recaptcha</a> service to add a '. + 'captcha to the registration page.')); + return true; + } } diff --git a/plugins/TwitterBridge/twitterqueuehandler.php b/plugins/TwitterBridge/twitterqueuehandler.php index 5089ca7b7..b5a624e83 100644 --- a/plugins/TwitterBridge/twitterqueuehandler.php +++ b/plugins/TwitterBridge/twitterqueuehandler.php @@ -28,7 +28,7 @@ class TwitterQueueHandler extends QueueHandler return 'twitter'; } - function handle_notice($notice) + function handle($notice) { return broadcast_twitter($notice); } |