]> git.mxchange.org Git - friendica.git/commitdiff
pull out follow, unfollow and as:actor for handling
authorMike Macgirvin <mike@macgirvin.com>
Fri, 22 Oct 2010 04:48:22 +0000 (21:48 -0700)
committerMike Macgirvin <mike@macgirvin.com>
Fri, 22 Oct 2010 04:48:22 +0000 (21:48 -0700)
boot.php
include/items.php
include/salmon.php

index 6b23d38e0422dd5fb9990c89e12a87f560ea0941..c8649f2d6d12ac010e1b335caf9faa30551362e3 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -64,6 +64,8 @@ define ( 'ACTIVITY_DISLIKE',     NAMESPACE_DFRN            . '/dislike' );
 define ( 'ACTIVITY_OBJ_HEART',   NAMESPACE_DFRN            . '/heart' );
 
 define ( 'ACTIVITY_FRIEND',      NAMESPACE_ACTIVITY_SCHEMA . 'make-friend' );
+define ( 'ACTIVITY_FOLLOW',      NAMESPACE_ACTIVITY_SCHEMA . 'follow' );
+define ( 'ACTIVITY_UNFOLLOW',    NAMESPACE_ACTIVITY_SCHEMA . 'unfollow' );
 define ( 'ACTIVITY_POST',        NAMESPACE_ACTIVITY_SCHEMA . 'post' );
 define ( 'ACTIVITY_UPDATE',      NAMESPACE_ACTIVITY_SCHEMA . 'update' );
 
index b4c2da0ca8cf67af5b5ef08cba369c83e9ef3486..e44892316b462a0ff3cefdf7fb546ce759d33430 100644 (file)
@@ -362,6 +362,19 @@ function get_atom_elements($item) {
        if($rawgeo)
                $res['coord'] = unxmlify($rawgeo[0]['data']);
 
+       $rawactor = $item->get_item_tags(NAMESPACE_ACTIVITY, 'object');
+       if($rawactor && $rawactor[0]['child'][NAMESPACE_ACTIVITY]['object-type'][0]['data'] === ACTIVITY_OBJ_PERSON) {
+               $base = $rawactor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
+               if($base && count($base)) {
+                       foreach($base as $link) {
+                               if($link['attribs']['']['rel'] === 'alternate' && (! $res['author-link']))
+                                       $res['author-link'] = unxmlify($link['attribs']['']['href']);
+                               if($link['attribs']['']['rel'] === 'avatar' && (! $res['author-avatar']))
+                                       $res['author-avatar'] = unxmlify($link['attribs']['']['href']);
+                       }
+               }
+       }
+
        $rawverb = $item->get_item_tags(NAMESPACE_ACTIVITY, 'verb');
        // select between supported verbs
        if($rawverb)
@@ -369,7 +382,6 @@ function get_atom_elements($item) {
 
        $rawobj = $item->get_item_tags(NAMESPACE_ACTIVITY, 'object');
 
-
        if($rawobj) {
                $res['object'] = '<object>' . "\n";
                if($rawobj[0]['child'][NAMESPACE_ACTIVITY]['object-type'][0]['data']) {
@@ -610,6 +622,22 @@ function dfrn_deliver($owner,$contact,$atom,$debugging = false) {
 }
 
 
+/*
+ *
+ * consume_feed - process atom feed and update anything/everything we might need to update
+ *
+ * $xml = the (atom) feed to consume - no RSS spoken here, it might partially work since simplepie 
+ *        handles both, but we don't claim it will work well, and are reasonably certain it won't.
+ * $importer = the contact_record (joined to user_record) of the local user who owns this relationship.
+ *             It is this person's stuff that is going to be updated.
+ * $contact =  the person who is sending us stuff. If not set, we MAY be processing a "follow" activity
+ *             from an external network and MAY create an appropriate contact record. Otherwise, we MUST 
+ *             have a contact record.
+ * $hub = should wefind ahub declation in the feed, pass it back to our calling process, who might (or 
+ *        might not) try and subscribe to it.
+ *
+ */
+
 function consume_feed($xml,$importer,$contact, &$hub) {
 
        require_once('simplepie/simplepie.inc');
@@ -651,7 +679,7 @@ function consume_feed($xml,$importer,$contact, &$hub) {
                        $photo_url = $feed->get_image_url();
                }
        }
-       if(($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) {
+       if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $contact['avatar-date'])) {
 
                require_once("Photo.php");
                $photo_failure = false;
@@ -688,7 +716,7 @@ function consume_feed($xml,$importer,$contact, &$hub) {
                }
        }
 
-       if(($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
+       if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
                q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
                        dbesc(notags(trim($new_name))),
                        dbesc(datetime_convert()),
@@ -714,10 +742,11 @@ function consume_feed($xml,$importer,$contact, &$hub) {
                                else
                                        $when = datetime_convert('UTC','UTC','now','Y-m-d H:i:s');
                        }
-                       if($deleted) {
-                               $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+                       if($deleted && is_array($contact)) {
+                               $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `contact-id` = %d LIMIT 1",
                                        dbesc($uri),
-                                       intval($importer['uid'])
+                                       intval($importer['uid']),
+                                       intval($contact['id'])
                                );
                                if(count($r)) {
                                        $item = $r[0];
@@ -774,7 +803,7 @@ function consume_feed($xml,$importer,$contact, &$hub) {
                        }
 
 
-                       if($is_reply) {
+                       if(($is_reply) && is_array($contact)) {
        
                                // Have we seen it? If not, import it.
        
@@ -837,6 +866,16 @@ function consume_feed($xml,$importer,$contact, &$hub) {
                                        continue;
                                }
                                $datarray = get_atom_elements($item);
+                               if(($datarray['verb'] === ACTIVITY_FOLLOW) && (! is_array($contact))) {
+                                       new_follower($importer,$datarray);
+                                       return;
+                               }
+                               if($datarray['verb'] === ACTIVITY_UNFOLLOW)  {
+                                       lose_follower($importer,$contact,$datarray);
+                                       return;
+                               }
+                               if(! is_array($contact))
+                                       return;
                                $datarray['parent-uri'] = $item_id;
                                $datarray['uid'] = $importer['uid'];
                                $datarray['contact-id'] = $contact['id'];
@@ -849,6 +888,16 @@ function consume_feed($xml,$importer,$contact, &$hub) {
 
 }
 
+function new_follower($importer,$datarray) {
+
+
+}
+
+function lose_follower($importer,$contact,$datarray) {
+
+
+}
+
 
 function subscribe_to_hub($url,$importer,$contact) {
 
index 52810426f69e3d8724eb90f9f2e0d5a5d590a296..92ec571b38f6e9b44cd4b85719cd3d4561dd7de6 100644 (file)
@@ -48,6 +48,7 @@ function get_salmon_key($uri,$keyhash) {
                $l = explode("\n",$h);
                if(count($l)) {
                        foreach($l as $line) {                          
+                               // TODO alter the following regex to support multiple relations (space separated)
                                if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) {
                                        $link = $matches[1];
                                        if($debugging)