]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
give post a chance to arrive before rejecting photos from Diaspora
[friendica.git] / include / diaspora.php
index 497bc7f39f524e2fac26848775e9673897445c63..4b81efef8172faac9bed6384f5924be1770d4bc9 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 ",
+       $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);
@@ -141,6 +143,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;
 }
 
@@ -741,7 +754,7 @@ function diaspora_request($importer,$xml) {
 }
 
 function diaspora_post_allow($importer,$contact) {
-       if(($contact['blocked']) || ($contact['readonly']))
+       if(($contact['blocked']) || ($contact['readonly']) || ($contact['archive']))
                return false;
        if($contact['rel'] == CONTACT_IS_SHARING || $contact['rel'] == CONTACT_IS_FRIEND)
                return true;
@@ -848,7 +861,8 @@ function diaspora_post($importer,$xml,$msg) {
        $datarray['parent'] = 0;
        $datarray['owner-name'] = $contact['name'];
        $datarray['owner-link'] = $contact['url'];
-       $datarray['owner-avatar'] = $contact['thumb'];
+       //$datarray['owner-avatar'] = $contact['thumb'];
+       $datarray['owner-avatar'] = ((x($contact,'thumb')) ? $contact['thumb'] : $contact['photo']);
        $datarray['author-name'] = $contact['name'];
        $datarray['author-link'] = $contact['url'];
        $datarray['author-avatar'] = $contact['thumb'];
@@ -911,6 +925,7 @@ function diaspora_reshare($importer,$xml,$msg) {
        $orig_guid = notags(unxmlify($xml->root_guid));
 
        $source_url = 'https://' . substr($orig_author,strpos($orig_author,'@')+1) . '/p/' . $orig_guid . '.xml';
+       $orig_url = 'https://'.substr($orig_author,strpos($orig_author,'@')+1).'/posts/'.$orig_guid;
        $x = fetch_url($source_url);
        if(! $x)
                $x = fetch_url(str_replace('https://','http://',$source_url));
@@ -947,12 +962,12 @@ function diaspora_reshare($importer,$xml,$msg) {
 
        $person = find_diaspora_person_by_handle($orig_author);
 
-       if(is_array($person) && x($person,'name') && x($person,'url'))
+       /*if(is_array($person) && x($person,'name') && x($person,'url'))
                $details = '[url=' . $person['url'] . ']' . $person['name'] . '[/url]';
        else
                $details = $orig_author;
-       
-       $prefix = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8') . $details . "\n"; 
+
+       $prefix = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8') . $details . "\n";*/
 
 
        // allocate a guid on our system - we aren't fixing any collisions.
@@ -999,7 +1014,7 @@ function diaspora_reshare($importer,$xml,$msg) {
                        }
                }
        }
-       
+
        $datarray['uid'] = $importer['uid'];
        $datarray['contact-id'] = $contact['id'];
        $datarray['wall'] = 0;
@@ -1010,11 +1025,24 @@ function diaspora_reshare($importer,$xml,$msg) {
        $datarray['parent'] = 0;
        $datarray['owner-name'] = $contact['name'];
        $datarray['owner-link'] = $contact['url'];
-       $datarray['owner-avatar'] = $contact['thumb'];
-       $datarray['author-name'] = $contact['name'];
-       $datarray['author-link'] = $contact['url'];
-       $datarray['author-avatar'] = $contact['thumb'];
-       $datarray['body'] = $prefix . $body;
+       $datarray['owner-avatar'] = ((x($contact,'thumb')) ? $contact['thumb'] : $contact['photo']);
+       if (intval(get_config('system','new_share'))) {
+               $prefix = "[share author='".str_replace("'", "'",$person['name']).
+                               "' profile='".$person['url'].
+                               "' avatar='".((x($person,'thumb')) ? $person['thumb'] : $person['photo']).
+                               "' link='".$orig_url."']";
+               $datarray['author-name'] = $contact['name'];
+               $datarray['author-link'] = $contact['url'];
+               $datarray['author-avatar'] = $contact['thumb'];
+               $datarray['body'] = $prefix.$body."[/share]";
+       } else {
+               // Let reshared messages look like wall-to-wall posts
+               $datarray['author-name'] = $person['name'];
+               $datarray['author-link'] = $person['url'];
+               $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
+               $datarray['body'] = $body;
+       }
+
        $datarray['tag'] = $str_tags;
        $datarray['app']  = 'Diaspora';
 
@@ -1105,7 +1133,8 @@ function diaspora_asphoto($importer,$xml,$msg) {
        $datarray['parent'] = 0;
        $datarray['owner-name'] = $contact['name'];
        $datarray['owner-link'] = $contact['url'];
-       $datarray['owner-avatar'] = $contact['thumb'];
+       //$datarray['owner-avatar'] = $contact['thumb'];
+       $datarray['owner-avatar'] = ((x($contact,'thumb')) ? $contact['thumb'] : $contact['photo']);
        $datarray['author-name'] = $contact['name'];
        $datarray['author-link'] = $contact['url'];
        $datarray['author-avatar'] = $contact['thumb'];
@@ -1628,7 +1657,7 @@ function diaspora_message($importer,$xml,$msg) {
 }
 
 
-function diaspora_photo($importer,$xml,$msg) {
+function diaspora_photo($importer,$xml,$msg,$attempt=1) {
 
        $a = get_app();
 
@@ -1666,7 +1695,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;
        }
 
@@ -1853,7 +1889,8 @@ EOT;
 
        $arr['owner-name'] = $parent_item['name'];
        $arr['owner-link'] = $parent_item['url'];
-       $arr['owner-avatar'] = $parent_item['thumb'];
+       //$arr['owner-avatar'] = $parent_item['thumb'];
+       $arr['owner-avatar'] = ((x($parent_item,'thumb')) ? $parent_item['thumb'] : $parent_item['photo']);
 
        $arr['author-name'] = $person['name'];
        $arr['author-link'] = $person['url'];
@@ -1949,7 +1986,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;
        }
 
@@ -2169,7 +2206,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
        $images = array();
 
        $title = $item['title'];
-       $body = $item['body'];
+       $body = fix_private_photos($item['body'], $owner['uid'], $item, $contact['id']);
 
 /*
        // We're trying to match Diaspora's split message/photo protocol but
@@ -2292,12 +2329,12 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
 //     $theiraddr = $contact['addr'];
 
        // Diaspora doesn't support threaded comments
-       /*if($item['thr-parent']) {
+       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.
@@ -2305,7 +2342,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
                        intval($item['parent']),
                        intval($item['parent'])
                );
-       //}
+       }
        if(count($p))
                $parent = $p[0];
        else
@@ -2368,12 +2405,12 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
        $text = html_entity_decode(bb2diaspora($body));
 
        // Diaspora doesn't support threaded comments
-       /*if($item['thr-parent']) {
+       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.
@@ -2381,7 +2418,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
                       intval($item['parent']),
                       intval($item['parent'])
                      );
-       //}
+       }
        if(count($p))
                $parent = $p[0];
        else