summaryrefslogtreecommitdiff
path: root/plugins/RSSCloud/RSSCloudNotifier.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/RSSCloud/RSSCloudNotifier.php')
-rw-r--r--plugins/RSSCloud/RSSCloudNotifier.php52
1 files changed, 49 insertions, 3 deletions
diff --git a/plugins/RSSCloud/RSSCloudNotifier.php b/plugins/RSSCloud/RSSCloudNotifier.php
index 909cf5c9f..485c4dcdf 100644
--- a/plugins/RSSCloud/RSSCloudNotifier.php
+++ b/plugins/RSSCloud/RSSCloudNotifier.php
@@ -31,10 +31,29 @@ if (!defined('STATUSNET')) {
exit(1);
}
+/**
+ * Class for notifying cloud-enabled RSS aggregators that StatusNet
+ * feeds have been updated.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ **/
class RSSCloudNotifier {
const MAX_FAILURES = 3;
+ /**
+ * Send an HTTP GET to the notification handler with a
+ * challenge string to see if it repsonds correctly.
+ *
+ * @param String $endpoint URL of the notification handler
+ * @param String $feed the feed being subscribed to
+ *
+ * @return boolean success
+ */
function challenge($endpoint, $feed)
{
$code = common_confirmation_code(128);
@@ -60,7 +79,7 @@ class RSSCloudNotifier {
// NOTE: the spec says that the body must contain the string
// challenge. It doesn't say that the body must contain the
// challenge string ONLY, although that seems to be the way
- // the other implementations have interpreted it.
+ // the other implementors have interpreted it.
if (strpos($body, $code) !== false) {
common_log(LOG_INFO, 'RSSCloud plugin - ' .
@@ -82,6 +101,15 @@ class RSSCloudNotifier {
}
}
+ /**
+ * HTTP POST a notification that a feed has been updated
+ * ('ping the cloud').
+ *
+ * @param String $endpoint URL of the notification handler
+ * @param String $feed the feed being subscribed to
+ *
+ * @return boolean success
+ */
function postUpdate($endpoint, $feed) {
$headers = array();
@@ -111,6 +139,14 @@ class RSSCloudNotifier {
}
}
+ /**
+ * Notify all subscribers to a profile feed that it has changed.
+ *
+ * @param Profile $profile the profile whose feed has been
+ * updated
+ *
+ * @return boolean success
+ */
function notify($profile)
{
$feed = common_path('api/statuses/user_timeline/') .
@@ -131,6 +167,18 @@ class RSSCloudNotifier {
return true;
}
+ /**
+ * Handle problems posting cloud notifications. Increment the failure
+ * count, or delete the subscription if the maximum number of failures
+ * is exceeded.
+ *
+ * XXX: Redo with proper DB_DataObject methods once I figure out what
+ * what the problem is with pluginized DB_DataObjects. -Z
+ *
+ * @param RSSCloudSubscription $cloudSub the subscription in question
+ *
+ * @return boolean success
+ */
function handleFailure($cloudSub)
{
$failCnt = $cloudSub->failures + 1;
@@ -172,8 +220,6 @@ class RSSCloudNotifier {
' WHERE subscribed = ' . $cloudSub->subscribed .
' AND url = \'' . $cloudSub->url . '\'';
- common_debug($qry);
-
$result = $cloudSub->query($qry);
if (!$result) {