diff --git a/include/items.php b/include/items.php index 688ef244ab..d726e961c9 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 c339d2fb38..b8b07ab580 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 b9ef0d93a9..fc77946f92 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 1e6add9355..fa092049f4 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();