]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
modified: view/theme/smoothly/style.css
[friendica.git] / include / diaspora.php
index a23c11bd2161f947d50361602e6ce7601601d507..c5b724509c0d5858b63ba8686d819297c035edbc 100755 (executable)
@@ -102,6 +102,37 @@ function diaspora_dispatch($importer,$msg) {
        return $ret;
 }
 
+function diaspora_handle_from_contact($contact_id) {
+       $handle = False;
+
+       logger("diaspora_handle_from_contact: contact id is " . $contact_id, LOGGER_DEBUG);
+
+       $r = q("SELECT network, addr, self, url, nick FROM contact WHERE id = %d",
+              intval($contact_id)
+       );
+       if($r) {
+               $contact = $r[0];
+
+               logger("diaspora_handle_from_contact: contact 'self' = " . $contact['self'] . " 'url' = " . $contact['url'], LOGGER_DEBUG);
+
+               if($contact['network'] === NETWORK_DIASPORA) {
+                       $handle = $contact['addr'];
+
+//                     logger("diaspora_handle_from_contact: contact id is a Diaspora person, handle = " . $handle, LOGGER_DEBUG);
+               }
+               elseif(($contact['network'] === NETWORK_DFRN) || ($contact['self'] == 1)) {
+                       $baseurl_start = strpos($contact['url'],'://') + 3;
+                       $baseurl_length = strpos($contact['url'],'/profile') - $baseurl_start; // allows installations in a subdirectory--not sure how Diaspora will handle
+                       $baseurl = substr($contact['url'], $baseurl_start, $baseurl_length);
+                       $handle = $contact['nick'] . '@' . $baseurl;
+
+//                     logger("diaspora_handle_from_contact: contact id is a DFRN person, handle = " . $handle, LOGGER_DEBUG);
+               }
+       }
+
+       return $handle;
+}
+
 function diaspora_get_contact_by_handle($uid,$handle) {
        $r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1",
                dbesc(NETWORK_DIASPORA),
@@ -110,6 +141,17 @@ function diaspora_get_contact_by_handle($uid,$handle) {
        );
        if($r && count($r))
                return $r[0];
+
+       $handle_parts = explode("@", $handle);
+       $nurl_sql = '%%://' . $handle_parts[1] . '%%/profile/' . $handle_parts[0];
+       $r = q("SELECT * FROM contact WHERE network = '%s' AND uid = %d AND nurl LIKE '%s' LIMIT 1",
+              dbesc(NETWORK_DFRN),
+              intval($uid),
+              dbesc($nurl_sql)
+       );
+       if($r && count($r))
+               return $r[0];
+
        return false;
 }
 
@@ -1282,7 +1324,7 @@ function diaspora_comment($importer,$xml,$msg) {
                // the existence of parent_author_signature means the parent_author or owner
                // is already relaying.
 
-               proc_run('php','include/notifier.php','comment',$message_id);
+               proc_run('php','include/notifier.php','comment-import',$message_id);
        }
 
        $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ",
@@ -1319,7 +1361,7 @@ function diaspora_comment($importer,$xml,$msg) {
                                'verb'         => ACTIVITY_POST,
                                'otype'        => 'item',
                                'parent'       => $conv_parent,
-
+                               'parent_uri'   => $parent_uri
                        ));
 
                        // only send one notification
@@ -1867,7 +1909,7 @@ EOT;
        // is already relaying. The parent_item['origin'] indicates the message was created on our system
 
        if(($parent_item['origin']) && (! $parent_author_signature))
-               proc_run('php','include/notifier.php','comment',$message_id);
+               proc_run('php','include/notifier.php','comment-import',$message_id);
 
        return;
 }
@@ -1918,7 +1960,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
 
        $contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle);
        if(! $contact) {
-               logger('diaspora_signed_retraction: no contact');
+               logger('diaspora_signed_retraction: no contact ' . $diaspora_handle . ' for ' . $importer['uid']);
                return;
        }
 
@@ -1993,7 +2035,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
                                                // is already relaying.
                                                logger('diaspora_signed_retraction: relaying relayable_retraction');
 
-                                               proc_run('php','include/notifier.php','relayable_retraction',$r[0]['id']);
+                                               proc_run('php','include/notifier.php','drop',$r[0]['id']);
                                        }
                                }
                        }
@@ -2030,11 +2072,20 @@ function diaspora_profile($importer,$xml,$msg) {
        $image_url = unxmlify($xml->image_url);
        $birthday = unxmlify($xml->birthday);
 
-       $r = q("SELECT DISTINCT ( `resource-id` ) FROM `photo` WHERE  `uid` = %d AND `contact-id` = %d AND `album` = 'Contact Photos' ",
+
+       $handle_parts = explode("@", $diaspora_handle);
+       if($name === '') {
+               $name = $handle_parts[0];
+       }
+       if(strpos($image_url, $handle_parts[1]) === false) {
+               $image_url = "http://" . $handle_parts[1] . $image_url;
+       }
+
+/*     $r = q("SELECT DISTINCT ( `resource-id` ) FROM `photo` WHERE  `uid` = %d AND `contact-id` = %d AND `album` = 'Contact Photos' ",
                intval($importer['uid']),
                intval($contact['id'])
        );
-       $oldphotos = ((count($r)) ? $r : null);
+       $oldphotos = ((count($r)) ? $r : null);*/
 
        require_once('include/Photo.php');
 
@@ -2067,7 +2118,7 @@ function diaspora_profile($importer,$xml,$msg) {
                intval($importer['uid'])
        ); 
 
-       if($r) {
+/*     if($r) {
                if($oldphotos) {
                        foreach($oldphotos as $ph) {
                                q("DELETE FROM `photo` WHERE `uid` = %d AND `contact-id` = %d AND `album` = 'Contact Photos' AND `resource-id` = '%s' ",
@@ -2077,7 +2128,7 @@ function diaspora_profile($importer,$xml,$msg) {
                                );
                        }
                }
-       }       
+       }       */
 
        return;
 
@@ -2153,12 +2204,6 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
                }
        }
 */
-       /**
-        * Transform #tags, strip off the [url] and replace spaces with underscore
-        */
-       $body = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match',
-               'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
-       ), $body);
 
        //if(strlen($title))
        //      $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body;
@@ -2257,12 +2302,13 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
        $myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
 //     $theiraddr = $contact['addr'];
 
-       if($item['thr-parent']) {
+       // Diaspora doesn't support threaded comments
+       /*if($item['thr-parent']) {
                $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1",
                        dbesc($item['thr-parent'])
                      );
        }
-       else {
+       else {*/
                // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
                // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
                // The only item with `parent` and `id` as the parent id is the parent item.
@@ -2270,7 +2316,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
                        intval($item['parent']),
                        intval($item['parent'])
                );
-       }
+       //}
        if(count($p))
                $parent = $p[0];
        else
@@ -2332,21 +2378,21 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
        $body = $item['body'];
        $text = html_entity_decode(bb2diaspora($body));
 
-
-       if($item['thr-parent']) {
+       // Diaspora doesn't support threaded comments
+       /*if($item['thr-parent']) {
                $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1",
                        dbesc($item['thr-parent'])
                      );
        }
-       else {
+       else {*/
                // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
                // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
                // The only item with `parent` and `id` as the parent id is the parent item.
                $p = q("select guid, type, uri, `parent-uri` from item where parent = %d and id = %d limit 1",
-                       intval($item['parent']),
-                       intval($item['parent'])
+                      intval($item['parent']),
+                      intval($item['parent'])
                      );
-       }
+       //}
        if(count($p))
                $parent = $p[0];
        else
@@ -2367,7 +2413,6 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
                $like = true;
 
                $target_type = ( $parent['uri'] === $parent['parent-uri']  ? 'Post' : 'Comment');
-//             $target_type = (strpos($parent['type'], 'comment') ? 'Comment' : 'Post');
 //             $positive = (($item['deleted']) ? 'false' : 'true');
                $positive = 'true';
 
@@ -2381,7 +2426,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
        // fetch the original signature if the relayable was created by a Diaspora
        // or DFRN user. Relayables for other networks are not supported.
 
-       $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1",
+/*     $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1",
                intval($item['id'])
        );
        if(count($r)) { 
@@ -2397,7 +2442,25 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
                // function is called
                logger('diaspora_send_relay: original author signature not found, cannot send relayable');
                return;
-       }
+       }*/
+
+       /* Since the author signature is only checked by the parent, not by the relay recipients,
+        * I think it may not be necessary for us to do so much work to preserve all the original
+        * signatures. The important thing that Diaspora DOES need is the original creator's handle.
+        * Let's just generate that and forget about all the original author signature stuff.
+        *
+        * Note: this might be more of an problem if we want to support likes on comments for older
+        * versions of Diaspora (diaspora-pistos), but since there are a number of problems with
+        * doing that, let's ignore it for now.
+        *
+        * Currently, only DFRN contacts are supported. StatusNet shouldn't be hard, but it hasn't
+        * been done yet
+        */
+
+       $handle = diaspora_handle_from_contact($item['contact-id']);
+       if(! $handle)
+               return;
+
 
        if($relay_retract)
                $sender_signed_text = $item['guid'] . ';' . $target_type;