diff --git a/wp-content/plugins/pubsubhubbub/publisher.php b/wp-content/plugins/pubsubhubbub/publisher.php new file mode 100644 index 0000000000000000000000000000000000000000..ee4b6f4e19a4c9049a79f5df2921893c386f2593 --- /dev/null +++ b/wp-content/plugins/pubsubhubbub/publisher.php @@ -0,0 +1,90 @@ +<?php +// a PHP client library for pubsubhubbub +// as defined at http://code.google.com/p/pubsubhubbub/ +// written by Josh Fraser | joshfraser.com | josh@eventvue.com +// modified by Matthias Pfefferle | notizblog.org | matthias@pfefferle.org +// Released under Apache License 2.0 + +/** + * a pubsubhubbub publisher + * + * @author Josh Fraser + * @author Matthias Pfefferle + */ +class PshbPublisher { + protected $hub_url; + protected $last_response; + + // create a new Publisher + public function __construct($hub_url) { + + if (!isset($hub_url)) + throw new Exception('Please specify a hub url'); + + if (!preg_match("|^https?://|i",$hub_url)) + throw new Exception('The specified hub url does not appear to be valid: '.$hub_url); + + $this->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_RETURNTRANSFER => true, + 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; + } +} +?> diff --git a/wp-content/plugins/pubsubhubbub/pubsubhubbub.php b/wp-content/plugins/pubsubhubbub/pubsubhubbub.php index 528b294d9b3b2e4bae123c60f382bdf2f8b7c74a..5741548b527498147a5a93d1e4da06621168e7db 100755 --- a/wp-content/plugins/pubsubhubbub/pubsubhubbub.php +++ b/wp-content/plugins/pubsubhubbub/pubsubhubbub.php @@ -3,14 +3,13 @@ Plugin Name: PubSubHubbub Plugin URI: http://code.google.com/p/pubsubhubbub/ Description: A better way to tell the world when your blog is updated. -Version: 1.6.3 +Version: 1.6.5 Author: Josh Fraser, Matthias Pfefferle Author Email: joshfraz@gmail.com Author URI: http://wordpress.org/extend/plugins/pubsubhubbub/ */ -include("pubsubhubbub-php/publisher.php"); -include("pubsubhubbub-php/subscriber.php"); +include("publisher.php"); // the ability for other plugins to hook into the PuSH code based on a // fix by Stephen Paul Weber (http://singpolyma.net) @@ -29,58 +28,10 @@ function pshb_publish_to_hub($feed_urls) { } } -// subscribe to a feed -// NOTE! THIS IS BETA STATE -function pshb_subscribe($url) { - try { - $s = new PshbSubscriber(site_url("/?pubsubhubbub=endpoint")); - $s->find_hub($url); - - $subscriptions = get_option('pubsub_subscribe'); - $subscriptions[] = $s->get_topic_url(); - update_option('pubsub_subscribe', array_unique($subscriptions)); - - if ($s->subscribe($s->get_topic_url()) !== false) { - return true; - } - } catch (Exception $e) { - return $e->getMessage(); - } - - return false; -} - -// unsubscribe from a feed -// NOTE! THIS IS BETA STATE -function pshb_unsubscribe($url) { - try { - $s = new PshbSubscriber(site_url("/?pubsubhubbub=endpoint")); - $s->find_hub($url); - - $to_unsubscribe = get_option('pubsub_unsubscribe'); - $to_unsubscribe[] = $s->get_topic_url(); - update_option('pubsub_unsubscribe', array_unique($to_unsubscribe)); - - if ($s->unsubscribe($s->get_topic_url()) !== false) { - return true; - } - } catch (Exception $e) { - return $e->getMessage(); - } - - return false; -} - // function that is called whenever a new post is published function pshb_publish_post($post_id) { - // we want to notify the hub for every feed - $feed_urls = array(); - $feed_urls[] = get_bloginfo('atom_url'); - $feed_urls[] = get_bloginfo('rss_url'); - $feed_urls[] = get_bloginfo('rdf_url'); - $feed_urls[] = get_bloginfo('rss2_url'); // customize default feeds - $feed_urls = apply_filters('pshb_feed_urls', $feed_urls); + $feed_urls = pshb_get_feed_urls(); pshb_publish_to_hub($feed_urls); @@ -90,12 +41,8 @@ add_action('publish_post', 'pshb_publish_post'); // function that is called whenever a new comment is published function pshb_publish_comment($comment_id) { - // we want to notify the hub for every feed - $feed_urls = array(); - $feed_urls[] = get_bloginfo('comments_atom_url'); - $feed_urls[] = get_bloginfo('comments_rss2_url'); // customize default feeds - $feed_urls = apply_filters('pshb_comment_feed_urls', $feed_urls); + $feed_urls = pshb_get_comment_feed_urls(); pshb_publish_to_hub($feed_urls); @@ -130,7 +77,6 @@ function pshb_add_rdf_ns_link() { } add_action('rdf_ns', 'pshb_add_rdf_ns_link'); - // hack to add the atom definition to the RSS feed // start capturing the feed output. this is run at priority 9 (before output) function pshb_start_rss_link_tag() { @@ -151,7 +97,7 @@ add_action('do_feed_rss', 'pshb_end_rss_link_tag', 11); // run after output // add a link to our settings page in the WP menu function pshb_add_plugin_menu() { - add_options_page('PubSubHubbub Settings', 'PubSubHubbub', 'administrator', __FILE__, 'pshb_add_settings_page'); + add_options_page('PubSubHubbub Settings', 'PubSubHubbub', 'administrator', 'pubsubhubbub', 'pshb_add_settings_page'); } add_action('admin_menu', 'pshb_add_plugin_menu'); @@ -179,6 +125,28 @@ function pshb_get_pubsub_endpoints() { return $hub_urls; } +// helper function to get feed urls +function pshb_get_feed_urls() { + // we want to notify the hub for every feed + $feed_urls = array(); + $feed_urls[] = get_bloginfo('atom_url'); + $feed_urls[] = get_bloginfo('rss_url'); + $feed_urls[] = get_bloginfo('rdf_url'); + $feed_urls[] = get_bloginfo('rss2_url'); + + return apply_filters('pshb_feed_urls', $feed_urls); +} + +// helper function to get comment-feed urls +function pshb_get_comment_feed_urls() { + // we want to notify the hub for every feed + $feed_urls = array(); + $feed_urls[] = get_bloginfo('comments_atom_url'); + $feed_urls[] = get_bloginfo('comments_rss2_url'); + + return apply_filters('pshb_comment_feed_urls', $feed_urls); +} + // write the content for our settings page that allows you to define your endpoints function pshb_add_settings_page() { ?> <div class="wrap"> @@ -231,7 +199,7 @@ function pshb_add_settings_page() { ?> // add a settings link next to deactive / edit function pshb_add_settings_link( $links, $file ) { if( $file == 'pubsubhubbub/pubsubhubbub.php' && function_exists( "admin_url" ) ) { - $settings_link = '<a href="' . admin_url( 'options-general.php?page=pubsubhubbub/pubsubhubbub' ) . '">' . __('Settings') . '</a>'; + $settings_link = '<a href="' . admin_url( 'options-general.php?page=pubsubhubbub' ) . '">' . __('Settings') . '</a>'; array_unshift( $links, $settings_link ); // before other links } return $links; @@ -249,57 +217,23 @@ function pshb_query_var($vars) { } add_filter('query_vars', 'pshb_query_var'); -// parses the request -function pshb_parse_request() { - global $wp_query, $wp; - $query_vars = $wp->query_vars; - - // handle (un)subscribe requests - if (array_key_exists('hub_mode', $query_vars) - && in_array($query_vars['hub_mode'], array("subscribe", "unsubscribe")) - && isset($query_vars['hub_challenge'])) { - $list = get_option('pubsub_'.$query_vars['hub_mode']); - if (is_array($list) && in_array($query_vars['hub_topic'], $list)) { - // remove urls from option lists when unsubscribing - if ($query_vars['hub_mode'] == "unsubscribe") { - pshb_remove_from_option($query_vars['hub_topic'], "unsubscribe"); - pshb_remove_from_option($query_vars['hub_topic'], "subscribe"); - } - echo $query_vars['hub_challenge']; - exit; - } - // handle pushes - } elseif (array_key_exists('pubsubhubbub', $query_vars) - && $query_vars['pubsubhubbub'] == "endpoint" - && $request_body = @file_get_contents('php://input')) { - do_action('pshb_push', $request_body); - exit; - } -} -add_action('parse_request', 'pshb_parse_request'); - -// remove something from the option list -function pshb_remove_from_option($url, $option) { - if (!in_array($option, array("subscribe", "unsubscribe"))) { - return false; - } - - $list = get_option('pubsub_'.$option); - $key = array_search($url, $list); - unset($list[$key]); - update_option('pubsub_'.$option, $list); -} - // adds link headers as defined in the curren v0.4 draft // https://github.com/pubsubhubbub/PubSubHubbub/issues/2 function pshb_template_redirect() { - if ((is_comment_feed() && !is_singular()) - || (is_feed() && !is_comment_feed() && !is_archive())) { + global $wp; + + $feed_urls = pshb_get_feed_urls(); + $comment_feed_urls = pshb_get_comment_feed_urls(); + + $urls = array_unique(array_merge($feed_urls, $comment_feed_urls)); + $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + + if (in_array($current_url, $urls)) { $hub_urls = pshb_get_pubsub_endpoints(); foreach ($hub_urls as $hub_url) { - header('Link: <'.$hub_url.'>; rel=hub', false); + header('Link: <'.$hub_url.'>; rel="hub"', false); } - header('Link: <'.( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'].'>; rel=self', false); + header('Link: <'.$current_url.'>; rel="self"', false); } } add_action('template_redirect', 'pshb_template_redirect'); @@ -316,4 +250,4 @@ add_action('admin_init', 'pshb_register_my_settings'); */ function publish_to_hub($deprecated = null, $feed_urls) { pshb_publish_to_hub($feed_urls); -} \ No newline at end of file +} diff --git a/wp-content/plugins/pubsubhubbub/readme.txt b/wp-content/plugins/pubsubhubbub/readme.txt index 9d464ce0a78582f7fa7e72e0c160500f718227a5..3a3a0199af875bb444e3e5704eed9171a9dabad5 100644 --- a/wp-content/plugins/pubsubhubbub/readme.txt +++ b/wp-content/plugins/pubsubhubbub/readme.txt @@ -2,8 +2,8 @@ Contributors: joshfraz, pfefferle Tags: pubsubhubbub Requires at least: 2.5 -Tested up to: 3.5.1 -Stable tag: 1.6.3 +Tested up to: 3.6.1 +Stable tag: 1.6.5 A better way to tell the world when your blog is updated. @@ -17,6 +17,7 @@ This plugin: * Supports multi-user installations (Wordpress MU) * Supports multiple hubs * Supports all of the feed formats used by WordPress, not just ATOM and RSS2 +* Supports latest spec ([Version 0.4](https://pubsubhubbub.googlecode.com/git/pubsubhubbub-core-0.4.html)) * Announces which hubs you are using by adding `<link rel="hub" ...>` declarations to your template header and ATOM feed * Adds `<atom:link rel="hub" ...>` to your RSS feeds along with the necessary XMLNS declaration for RSS 0.92/1.0 @@ -50,6 +51,14 @@ and [Matthias Pfefferle](http://pfefferle.org "Matthias Pfefferle") at [Notizblo == Changelog == += 1.6.5 = +* hotfix + += 1.6.4 = +* removed pubsubhubbub client +* improvements for a better PuSH v0.4 support +* fixed small bugs + = 1.6.3 = * Update hub URL for SuperFeedr (now pubsubhubbub.superfeedr.com) * Update credits and documentation