From a6a056026d645154e7172b47a046d7ba91d74d65 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 4 Mar 2010 17:33:56 +0000 Subject: Dropping the earlier PubSubHubbub plugin; OStatus plugin is taking that portion over (with both internal and external hub options for user and group feeds). Todo: add support for other feeds to OStatus PuSH hub implementation. --- plugins/PubSubHubBub/PubSubHubBubPlugin.php | 285 ---------------------------- plugins/PubSubHubBub/publisher.php | 86 --------- 2 files changed, 371 deletions(-) delete mode 100644 plugins/PubSubHubBub/PubSubHubBubPlugin.php delete mode 100644 plugins/PubSubHubBub/publisher.php (limited to 'plugins') diff --git a/plugins/PubSubHubBub/PubSubHubBubPlugin.php b/plugins/PubSubHubBub/PubSubHubBubPlugin.php deleted file mode 100644 index a880dc866..000000000 --- a/plugins/PubSubHubBub/PubSubHubBubPlugin.php +++ /dev/null @@ -1,285 +0,0 @@ -. - * - * @category Plugin - * @package StatusNet - * @author Craig Andrews - * @copyright 2009 Craig Andrews http://candrews.integralblue.com - * @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')) { - exit(1); -} - -define('DEFAULT_HUB', 'http://pubsubhubbub.appspot.com'); - -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 - * @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 -{ - /** - * URL of the hub to advertise and publish to. - */ - - public $hub = DEFAULT_HUB; - - /** - * Default constructor. - */ - - function __construct() - { - parent::__construct(); - } - - /** - * Check if plugin should be active; may be mass-enabled. - * @return boolean - */ - - function enabled() - { - if (common_config('site', 'private')) { - // PuSH relies on public feeds - return false; - } - // @fixme check for being on a private network? - return true; - } - - /** - * 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) - { - if ($this->enabled()) { - $action->element('link', array('rel' => 'hub', 'href' => $this->hub), null); - } - return true; - } - - /** - * 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) - { - if ($this->enabled()) { - $action->element('atom:link', array('rel' => 'hub', - 'href' => $this->hub), - null); - } - return true; - } - - /** - * 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) - { - if (!$this->enabled()) { - return false; - } - $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')); - - //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')); - - //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')); - } - } - - //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')); - } - } - - //feed of each user that subscribes to the notice's author - - $ni = $notice->whoGets(); - - foreach (array_keys($ni) as $user_id) { - $user = User::staticGet('id', $user_id); - if (empty($user)) { - continue; - } - $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 - 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); - - 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) - { - $about = _m('The PubSubHubBub plugin pushes RSS/Atom updates '. - 'to a PubSubHubBub hub.'); - if (!$this->enabled()) { - $about = '' . $about . ' ' . - _m('(inactive on private site)'); - } - $versions[] = array('name' => 'PubSubHubBub', - 'version' => STATUSNET_VERSION, - 'author' => 'Craig Andrews', - 'homepage' => - 'http://status.net/wiki/Plugin:PubSubHubBub', - 'rawdescription' => - $about); - - return true; - } -} diff --git a/plugins/PubSubHubBub/publisher.php b/plugins/PubSubHubBub/publisher.php deleted file mode 100644 index f176a9b8a..000000000 --- a/plugins/PubSubHubBub/publisher.php +++ /dev/null @@ -1,86 +0,0 @@ -hub_url = $hub_url; - } - - // accepts either a single url or an array of urls - public function publish_update($topic_urls, $http_function = false) { - if (!isset($topic_urls)) - throw new Exception('Please specify a topic url'); - - // check that we're working with an array - if (!is_array($topic_urls)) { - $topic_urls = array($topic_urls); - } - - // set the mode to publish - $post_string = "hub.mode=publish"; - // loop through each topic url - foreach ($topic_urls as $topic_url) { - - // lightweight check that we're actually working w/ a valid url - if (!preg_match("|^https?://|i",$topic_url)) - throw new Exception('The specified topic url does not appear to be valid: '.$topic_url); - - // append the topic url parameters - $post_string .= "&hub.url=".urlencode($topic_url); - } - - // make the http post request and return true/false - // easy to over-write to use your own http function - if ($http_function) - return $http_function($this->hub_url,$post_string); - else - return $this->http_post($this->hub_url,$post_string); - } - - // returns any error message from the latest request - public function last_response() { - return $this->last_response; - } - - // default http function that uses curl to post to the hub endpoint - private function http_post($url, $post_string) { - - // add any additional curl options here - $options = array(CURLOPT_URL => $url, - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => $post_string, - CURLOPT_USERAGENT => "PubSubHubbub-Publisher-PHP/1.0"); - - $ch = curl_init(); - curl_setopt_array($ch, $options); - - $response = curl_exec($ch); - $this->last_response = $response; - $info = curl_getinfo($ch); - - curl_close($ch); - - // all good - if ($info['http_code'] == 204) - return true; - return false; - } -} - -?> \ No newline at end of file -- cgit v1.2.3-54-g00ecf