]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
Diaspora: set plink to the original url from the origin server
[friendica.git] / include / diaspora.php
index dcbe0fadaa9d141fe58349cb572d50e08df69320..f8d72a2f80d14a4a05b4b2d42e24d19b52a158c8 100755 (executable)
@@ -16,7 +16,9 @@ function diaspora_dispatch_public($msg) {
                return;
        }
 
-       $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 AND `account_removed` = 0 ",
+       $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN
+               ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' )
+               AND `account_expired` = 0 AND `account_removed` = 0 ",
                dbesc(NETWORK_DIASPORA),
                dbesc($msg['author'])
        );
@@ -32,7 +34,7 @@ function diaspora_dispatch_public($msg) {
 
 
 
-function diaspora_dispatch($importer,$msg) {
+function diaspora_dispatch($importer,$msg,$attempt=1) {
 
        $ret = 0;
 
@@ -88,7 +90,7 @@ function diaspora_dispatch($importer,$msg) {
                $ret = diaspora_signed_retraction($importer,$xmlbase->relayable_retraction,$msg);
        }
        elseif($xmlbase->photo) {
-               $ret = diaspora_photo($importer,$xmlbase->photo,$msg);
+               $ret = diaspora_photo($importer,$xmlbase->photo,$msg,$attempt);
        }
        elseif($xmlbase->conversation) {
                $ret = diaspora_conversation($importer,$xmlbase->conversation,$msg);
@@ -557,7 +559,7 @@ function diaspora_decode($importer,$xml) {
 
 }
 
-       
+
 function diaspora_request($importer,$xml) {
 
        $a = get_app();
@@ -567,7 +569,7 @@ function diaspora_request($importer,$xml) {
 
        if(! $sender_handle || ! $recipient_handle)
                return;
-        
+
        $contact = diaspora_get_contact_by_handle($importer['uid'],$sender_handle);
 
        if($contact) {
@@ -640,7 +642,7 @@ function diaspora_request($importer,$xml) {
 
                return;
        }
-       
+
        $ret = find_diaspora_person_by_handle($sender_handle);
 
 
@@ -752,7 +754,21 @@ function diaspora_request($importer,$xml) {
 }
 
 function diaspora_post_allow($importer,$contact) {
-       if(($contact['blocked']) || ($contact['readonly']))
+
+       // perhaps we were already sharing with this person. Now they're sharing with us.
+       // That makes us friends.
+       // Normally this should have handled by getting a request - but this could get lost
+       if($contact['rel'] == CONTACT_IS_FOLLOWER && $importer['page-flags'] != PAGE_COMMUNITY) {
+               q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                       intval(CONTACT_IS_FRIEND),
+                       intval($contact['id']),
+                       intval($importer['uid'])
+               );
+               $contact['rel'] = CONTACT_IS_FRIEND;
+               logger('diaspora_post_allow: defining user '.$contact["nick"].' as friend');
+       }
+
+       if(($contact['blocked']) || ($contact['readonly']) || ($contact['archive']))
                return false;
        if($contact['rel'] == CONTACT_IS_SHARING || $contact['rel'] == CONTACT_IS_FRIEND)
                return true;
@@ -845,18 +861,22 @@ function diaspora_post($importer,$xml,$msg) {
                foreach($matches as $mtch) {
                        if(strlen($str_tags))
                                $str_tags .= ',';
-                       $str_tags .= '@[url=' . $mtch[1] . '[/url]';    
+                       $str_tags .= '@[url=' . $mtch[1] . '[/url]';
                }
        }
 
+       $plink = 'https://'.substr($diaspora_handle,strpos($diaspora_handle,'@')+1).'/posts/'.$guid;
+
        $datarray['uid'] = $importer['uid'];
        $datarray['contact-id'] = $contact['id'];
        $datarray['wall'] = 0;
+       $datarray['network']  = NETWORK_DIASPORA;
        $datarray['guid'] = $guid;
        $datarray['uri'] = $datarray['parent-uri'] = $message_id;
        $datarray['created'] = $datarray['edited'] = datetime_convert('UTC','UTC',$created);
        $datarray['private'] = $private;
        $datarray['parent'] = 0;
+       $datarray['plink'] = $plink;
        $datarray['owner-name'] = $contact['name'];
        $datarray['owner-link'] = $contact['url'];
        //$datarray['owner-avatar'] = $contact['thumb'];
@@ -874,12 +894,12 @@ function diaspora_post($importer,$xml,$msg) {
 
        $message_id = item_store($datarray);
 
-       if($message_id) {
-               q("update item set plink = '%s' where id = %d limit 1",
-                       dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
-                       intval($message_id)
-               );
-       }
+       //if($message_id) {
+       //      q("update item set plink = '%s' where id = %d limit 1",
+       //              dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
+       //              intval($message_id)
+       //      );
+       //}
 
        return;
 
@@ -1013,22 +1033,26 @@ function diaspora_reshare($importer,$xml,$msg) {
                }
        }
 
+       $plink = 'https://'.substr($diaspora_handle,strpos($diaspora_handle,'@')+1).'/posts/'.$guid;
+
        $datarray['uid'] = $importer['uid'];
        $datarray['contact-id'] = $contact['id'];
        $datarray['wall'] = 0;
+       $datarray['network']  = NETWORK_DIASPORA;
        $datarray['guid'] = $guid;
        $datarray['uri'] = $datarray['parent-uri'] = $message_id;
        $datarray['created'] = $datarray['edited'] = datetime_convert('UTC','UTC',$created);
        $datarray['private'] = $private;
        $datarray['parent'] = 0;
+       $datarray['plink'] = $plink;
        $datarray['owner-name'] = $contact['name'];
        $datarray['owner-link'] = $contact['url'];
        $datarray['owner-avatar'] = ((x($contact,'thumb')) ? $contact['thumb'] : $contact['photo']);
-       if (intval(get_config('system','new_share'))) {
-               $prefix = "[share author='".str_replace("'", "'",$person['name']).
+       if (!intval(get_config('system','wall-to-wall_share'))) {
+               $prefix = "[share author='".str_replace(array("'", "[", "]"), array("'", "[", "]"),$person['name']).
                                "' profile='".$person['url'].
                                "' avatar='".((x($person,'thumb')) ? $person['thumb'] : $person['photo']).
-                               "' link='".$orig_url."']";
+                               "' link='".str_replace(array("'", "[", "]"), array("'", "[", "]"),$orig_url)."']";
                $datarray['author-name'] = $contact['name'];
                $datarray['author-link'] = $contact['url'];
                $datarray['author-avatar'] = $contact['thumb'];
@@ -1046,12 +1070,12 @@ function diaspora_reshare($importer,$xml,$msg) {
 
        $message_id = item_store($datarray);
 
-       if($message_id) {
-               q("update item set plink = '%s' where id = %d limit 1",
-                       dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
-                       intval($message_id)
-               );
-       }
+       //if($message_id) {
+       //      q("update item set plink = '%s' where id = %d limit 1",
+       //              dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
+       //              intval($message_id)
+       //      );
+       //}
 
        return;
 
@@ -1118,17 +1142,20 @@ function diaspora_asphoto($importer,$xml,$msg) {
                return;
        }
 
+       $plink = 'https://'.substr($diaspora_handle,strpos($diaspora_handle,'@')+1).'/posts/'.$guid;
+
        $datarray = array();
 
-       
        $datarray['uid'] = $importer['uid'];
        $datarray['contact-id'] = $contact['id'];
        $datarray['wall'] = 0;
+       $datarray['network']  = NETWORK_DIASPORA;
        $datarray['guid'] = $guid;
        $datarray['uri'] = $datarray['parent-uri'] = $message_id;
        $datarray['created'] = $datarray['edited'] = datetime_convert('UTC','UTC',$created);
        $datarray['private'] = $private;
        $datarray['parent'] = 0;
+       $datarray['plink'] = $plink;
        $datarray['owner-name'] = $contact['name'];
        $datarray['owner-link'] = $contact['url'];
        //$datarray['owner-avatar'] = $contact['thumb'];
@@ -1137,17 +1164,17 @@ function diaspora_asphoto($importer,$xml,$msg) {
        $datarray['author-link'] = $contact['url'];
        $datarray['author-avatar'] = $contact['thumb'];
        $datarray['body'] = $body;
-       
+
        $datarray['app']  = 'Diaspora/Cubbi.es';
 
        $message_id = item_store($datarray);
 
-       if($message_id) {
-               q("update item set plink = '%s' where id = %d limit 1",
-                       dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
-                       intval($message_id)
-               );
-       }
+       //if($message_id) {
+       //      q("update item set plink = '%s' where id = %d limit 1",
+       //              dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
+       //              intval($message_id)
+       //      );
+       //}
 
        return;
 
@@ -1296,6 +1323,7 @@ function diaspora_comment($importer,$xml,$msg) {
        $datarray['contact-id'] = $contact['id'];
        $datarray['type'] = 'remote-comment';
        $datarray['wall'] = $parent_item['wall'];
+       $datarray['network']  = NETWORK_DIASPORA;
        $datarray['gravity'] = GRAVITY_COMMENT;
        $datarray['guid'] = $guid;
        $datarray['uri'] = $message_id;
@@ -1316,7 +1344,7 @@ function diaspora_comment($importer,$xml,$msg) {
        $datarray['tag'] = $str_tags;
 
        // We can't be certain what the original app is if the message is relayed.
-       if(($parent_item['origin']) && (! $parent_author_signature)) 
+       if(($parent_item['origin']) && (! $parent_author_signature))
                $datarray['app']  = 'Diaspora';
 
        $message_id = item_store($datarray);
@@ -1655,7 +1683,7 @@ function diaspora_message($importer,$xml,$msg) {
 }
 
 
-function diaspora_photo($importer,$xml,$msg) {
+function diaspora_photo($importer,$xml,$msg,$attempt=1) {
 
        $a = get_app();
 
@@ -1693,7 +1721,14 @@ function diaspora_photo($importer,$xml,$msg) {
                dbesc($status_message_guid)
        );
        if(! count($r)) {
-               logger('diaspora_photo: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid);
+               if($attempt <= 3) {
+                       q("INSERT INTO dsprphotoq (uid, msg, attempt) VALUES (%d, '%s', %d)",
+                          intval($importer['uid']),
+                          dbesc(serialize($msg)),
+                          intval($attempt + 1)
+                       );
+               }
+               logger('diaspora_photo: attempt = ' . $attempt . '; status message not found: ' . $status_message_guid . ' for photo: ' . $guid);
                return;
        }
 
@@ -1871,6 +1906,7 @@ EOT;
        $arr['uri'] = $uri;
        $arr['uid'] = $importer['uid'];
        $arr['guid'] = $guid;
+       $arr['network']  = NETWORK_DIASPORA;
        $arr['contact-id'] = $contact['id'];
        $arr['type'] = 'activity';
        $arr['wall'] = $parent_item['wall'];
@@ -1886,7 +1922,7 @@ EOT;
        $arr['author-name'] = $person['name'];
        $arr['author-link'] = $person['url'];
        $arr['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
-       
+
        $ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
        $alink = '[url=' . $parent_item['author-link'] . ']' . $parent_item['author-name'] . '[/url]';
        $plink = '[url=' . $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $parent_item['id'] . ']' . $post_type . '[/url]';
@@ -2094,7 +2130,9 @@ function diaspora_profile($importer,$xml,$msg) {
        if($name === '') {
                $name = $handle_parts[0];
        }
-       if(strpos($image_url, $handle_parts[1]) === false) {
+       
+        
+       if( preg_match("|^https?://|", $image_url) === 0) {
                $image_url = "http://" . $handle_parts[1] . $image_url;
        }
 
@@ -2319,13 +2357,15 @@ 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'];
 
-       // Diaspora doesn't support threaded comments
-       /*if($item['thr-parent']) {
+       // Diaspora doesn't support threaded comments, but some
+       // versions of Diaspora (i.e. Diaspora-pistos) support
+       // likes on comments
+       if($item['verb'] === ACTIVITY_LIKE && $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.
@@ -2333,7 +2373,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
                        intval($item['parent']),
                        intval($item['parent'])
                );
-       //}
+       }
        if(count($p))
                $parent = $p[0];
        else
@@ -2395,13 +2435,15 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
        $body = $item['body'];
        $text = html_entity_decode(bb2diaspora($body));
 
-       // Diaspora doesn't support threaded comments
-       /*if($item['thr-parent']) {
+       // Diaspora doesn't support threaded comments, but some
+       // versions of Diaspora (i.e. Diaspora-pistos) support
+       // likes on comments
+       if($item['verb'] === ACTIVITY_LIKE && $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.
@@ -2409,7 +2451,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
                       intval($item['parent']),
                       intval($item['parent'])
                      );
-       //}
+       }
        if(count($p))
                $parent = $p[0];
        else
@@ -2638,16 +2680,15 @@ function diaspora_transmit($owner,$contact,$slap,$public_batch,$queue_run=false)
                $return_code = 0;
        }
        else {
-               if(! intval(get_config('system','diaspora_test'))) {
+               if (!intval(get_config('system','diaspora_test'))) {
                        post_url($dest_url . '/', $slap);
                        $return_code = $a->get_curl_code();
-               }
-               else {
+               } else {
                        logger('diaspora_transmit: test_mode');
                        return 200;
                }
        }
-       
+
        logger('diaspora_transmit: ' . $logid . ' returns: ' . $return_code);
 
        if((! $return_code) || (($return_code == 503) && (stristr($a->get_curl_headers(),'retry-after')))) {