aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/items.php41
-rw-r--r--include/notifier.php2
-rw-r--r--include/poller.php8
-rw-r--r--mod/pubsub.php3
4 files changed, 50 insertions, 4 deletions
diff --git a/include/items.php b/include/items.php
index 688ef244a..d726e961c 100644
--- a/include/items.php
+++ b/include/items.php
@@ -577,7 +577,7 @@ function dfrn_deliver($contact,$atom,$debugging = false) {
}
-function consume_feed($xml,$importer,$contact) {
+function consume_feed($xml,$importer,$contact, &$hub) {
require_once('simplepie/simplepie.inc');
@@ -593,6 +593,12 @@ function consume_feed($xml,$importer,$contact) {
$photo_timestamp = '';
$photo_url = '';
+
+ $foundhub = $feed->get_link(0,'hub');
+
+ if(strlen($foundhub))
+ $hub = $foundhub;
+
$rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
if($rawtags) {
$elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
@@ -808,4 +814,37 @@ function consume_feed($xml,$importer,$contact) {
}
}
+}
+
+
+function subscribe_to_hub($url,$importer,$contact) {
+
+ if(is_array($importer)) {
+ $r = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",
+ intval($importer['uid'])
+ );
+ }
+ if(! count($r))
+ return;
+
+ $params = array();
+
+ $push_url = get_config('system','url') . '/pubsub/' . $r[0]['nickname'] . '/' . $contact['id'];
+
+ $verify_token = random_string();
+
+ $params['hub.mode'] = 'subscribe';
+ $params['hub.callback'] = urlencode($push_url);
+ $params['hub.topic'] = urlencode($contact['poll']);
+ $params['hub.verify'] = 'async';
+ $params['hub.verify_token'] = $verify_token;
+
+ $r = q("UPDATE `contact` SET `hub-verify` = '%s' WHERE `id` = %d LIMIT 1",
+ dbesc($verify_token),
+ intval($contact['id'])
+ );
+
+ post_url($url,$params);
+ return;
+
} \ No newline at end of file
diff --git a/include/notifier.php b/include/notifier.php
index c339d2fb3..b8b07ab58 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -303,7 +303,7 @@
}
if((strlen($hub)) && ($cmd !== 'mail') && (followup == false)) {
- $params = array('hub.mode' => 'publish', 'hub.url' => $a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] );
+ $params = array('hub.mode' => 'publish', 'hub.url' => urlencode($a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] ));
post_url($hub,$params);
}
diff --git a/include/poller.php b/include/poller.php
index b9ef0d93a..fc77946f9 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -161,7 +161,13 @@
continue;
- consume_feed($xml,$importer,$contact);
+ consume_feed($xml,$importer,$contact,$hub);
+
+
+ if($contact['usehub'] && strlen($hub)) {
+ subscribe_to_hub($hub,$importer,$contact);
+ }
+
$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
dbesc(datetime_convert()),
diff --git a/mod/pubsub.php b/mod/pubsub.php
index 1e6add935..fa092049f 100644
--- a/mod/pubsub.php
+++ b/mod/pubsub.php
@@ -102,7 +102,8 @@ function pubsub_post(&$a) {
$contact = $r[0];
- consume_feed($xml,$importer,$contact);
+ $feedhub = '';
+ consume_feed($xml,$importer,$contact,$feedhub);
hub_post_return();