]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
Merge remote-tracking branch 'upstream/develop' into 1502-altpager-default
[friendica.git] / include / diaspora.php
index 0cc97713ee4c00ea49472ee1e60a2ec6b8380639..f7537ef633aca07d442046a74bf0e49bb42d80e1 100755 (executable)
@@ -589,7 +589,7 @@ function diaspora_request($importer,$xml) {
                        intval($importer['uid'])
                );
 
-               if((count($r)) && (! $r[0]['hide-friends']) && (! $contact['hidden'])) {
+               if((count($r)) && (!$r[0]['hide-friends']) && (!$contact['hidden']) && intval(get_pconfig($importer['uid'],'system','post_newfriend'))) {
                        require_once('include/items.php');
 
                        $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
@@ -895,19 +895,92 @@ function diaspora_post($importer,$xml,$msg) {
 
        $datarray['visible'] = ((strlen($body)) ? 1 : 0);
 
+       DiasporaFetchGuid($datarray);
        $message_id = item_store($datarray);
 
-       //if($message_id) {
-       //      q("update item set plink = '%s' where id = %d",
-       //              dbesc($a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $message_id),
-       //              intval($message_id)
-       //      );
-       //}
-
        return;
 
 }
 
+function DiasporaFetchGuid($item) {
+       preg_replace_callback("&\[url=/posts/([^\[\]]*)\](.*)\[\/url\]&Usi",
+               function ($match) use ($item){
+                       return(DiasporaFetchGuidSub($match, $item));
+               },$item["body"]);
+}
+
+function DiasporaFetchGuidSub($match, $item) {
+       $a = get_app();
+
+       $author = parse_url($item["author-link"]);
+       $authorserver = $author["scheme"]."://".$author["host"];
+
+       $owner = parse_url($item["owner-link"]);
+       $ownerserver = $owner["scheme"]."://".$owner["host"];
+
+       if (!diaspora_store_by_guid($match[1], $authorserver))
+               diaspora_store_by_guid($match[1], $ownerserver);
+}
+
+function diaspora_store_by_guid($guid, $server) {
+       require_once("include/Contact.php");
+
+       logger("fetching item ".$guid." from ".$server, LOGGER_DEBUG);
+
+       $item = diaspora_fetch_message($guid, $server);
+
+       if (!$item)
+               return false;
+
+       $body = $item["body"];
+       $str_tags = $item["tag"];
+       $app = $item["app"];
+       $created = $item["created"];
+       $author = $item["author"];
+       $guid = $item["guid"];
+       $private = $item["private"];
+
+       $message_id = $author.':'.$guid;
+       $r = q("SELECT `id` FROM `item` WHERE `uid` = 0 AND `uri` = '%s' AND `guid` = '%s' LIMIT 1",
+               dbesc($message_id),
+               dbesc($guid)
+       );
+       if(count($r))
+               return $r[0]["id"];
+
+       $person = find_diaspora_person_by_handle($author);
+
+        $datarray = array();
+       $datarray['uid'] = 0;
+       $datarray['contact-id'] = get_contact($person['url'], 0);
+       $datarray['wall'] = 0;
+       $datarray['network']  = NETWORK_DIASPORA;
+       $datarray['guid'] = $guid;
+       $datarray['uri'] = $datarray['parent-uri'] = $message_id;
+       $datarray['changed'] = $datarray['created'] = $datarray['edited'] = datetime_convert('UTC','UTC',$created);
+       $datarray['private'] = $private;
+       $datarray['parent'] = 0;
+       $datarray['plink'] = 'https://'.substr($author,strpos($author,'@')+1).'/posts/'.$guid;
+       $datarray['author-name'] = $person['name'];
+       $datarray['author-link'] = $person['url'];
+       $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
+       $datarray['owner-name'] = $datarray['author-name'];
+       $datarray['owner-link'] = $datarray['author-link'];
+       $datarray['owner-avatar'] = $datarray['author-avatar'];
+       $datarray['body'] = $body;
+       $datarray['tag'] = $str_tags;
+       $datarray['app']  = $app;
+       $datarray['visible'] = ((strlen($body)) ? 1 : 0);
+
+       DiasporaFetchGuid($datarray);
+       $message_id = item_store($datarray);
+
+       // To-Do:
+       // Looking if there is some subscribe mechanism in Diaspora to get all comments for this post
+
+       return $message_id;
+}
+
 function diaspora_fetch_message($guid, $server, $level = 0) {
 
        if ($level > 5)
@@ -1102,7 +1175,8 @@ function diaspora_reshare($importer,$xml,$msg) {
                        $orig_created = $item["created"];
                        $orig_author = $item["author"];
                        $orig_guid = $item["guid"];
-                       //$create_original_post = ($body != "");
+                       $create_original_post = ($body != "");
+                       $orig_url = $a->get_baseurl()."/display/".$orig_guid;
                }
        }
 
@@ -1164,12 +1238,13 @@ function diaspora_reshare($importer,$xml,$msg) {
        $datarray['visible'] = ((strlen($body)) ? 1 : 0);
 
        // Store the original item of a reshare
-       // Deactivated by now. Items without a matching contact can't be shown via "mod/display.php" by now.
        if ($create_original_post) {
+               require_once("include/Contact.php");
+
                $datarray2 = $datarray;
 
                $datarray2['uid'] = 0;
-               $datarray2['contact-id'] = 0;
+               $datarray2['contact-id'] = get_contact($person['url'], 0);
                $datarray2['guid'] = $orig_guid;
                $datarray2['uri'] = $datarray2['parent-uri'] = $orig_author.':'.$orig_guid;
                $datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = datetime_convert('UTC','UTC',$orig_created);
@@ -1183,11 +1258,13 @@ function diaspora_reshare($importer,$xml,$msg) {
                $datarray2['owner-avatar'] = $datarray2['author-avatar'];
                $datarray2['body'] = $body;
 
+               DiasporaFetchGuid($datarray2);
                $message_id = item_store($datarray2);
 
                logger("Store original item ".$orig_guid." under message id ".$message_id);
        }
 
+       DiasporaFetchGuid($datarray);
        $message_id = item_store($datarray);
 
        return;
@@ -1280,6 +1357,7 @@ function diaspora_asphoto($importer,$xml,$msg) {
 
        $datarray['app']  = 'Diaspora/Cubbi.es';
 
+       DiasporaFetchGuid($datarray);
        $message_id = item_store($datarray);
 
        //if($message_id) {
@@ -1460,6 +1538,7 @@ function diaspora_comment($importer,$xml,$msg) {
        if(($parent_item['origin']) && (! $parent_author_signature))
                $datarray['app']  = 'Diaspora';
 
+       DiasporaFetchGuid($datarray);
        $message_id = item_store($datarray);
 
        //if($message_id) {
@@ -2252,7 +2331,19 @@ function diaspora_profile($importer,$xml,$msg) {
        $birthday = unxmlify($xml->birthday);
        $location = diaspora2bb(unxmlify($xml->location));
        $about = diaspora2bb(unxmlify($xml->bio));
+       $gender = unxmlify($xml->gender);
+       $tags = unxmlify($xml->tag_string);
+
+       $tags = explode("#", $tags);
+
+       $keywords = array();
+       foreach ($tags as $tag) {
+               $tag = trim(strtolower($tag));
+               if ($tag != "")
+                       $keywords[] = $tag;
+       }
 
+       $keywords = implode(", ", $keywords);
 
        $handle_parts = explode("@", $diaspora_handle);
        if($name === '') {
@@ -2288,7 +2379,7 @@ function diaspora_profile($importer,$xml,$msg) {
        // TODO: update name on item['author-name'] if the name changed. See consume_feed()
        // Not doing this currently because D* protocol is scheduled for revision soon.
 
-       $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s', `location` = '%s', `about` = '%s' WHERE `id` = %d AND `uid` = %d",
+       $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `id` = %d AND `uid` = %d",
                dbesc($name),
                dbesc(datetime_convert()),
                dbesc($images[0]),
@@ -2298,10 +2389,18 @@ function diaspora_profile($importer,$xml,$msg) {
                dbesc($birthday),
                dbesc($location),
                dbesc($about),
+               dbesc($keywords),
+               dbesc($gender),
                intval($contact['id']),
                intval($importer['uid'])
        );
 
+       if (unxmlify($xml->searchable) == "true") {
+               require_once('include/socgraph.php');
+               poco_check($contact['url'], $name, NETWORK_DIASPORA, $images[0], $about, $location, $gender, $keywords, "",
+                       datetime_convert(), $contact['id'], $importer['uid']);
+       }
+
        $profileurl = "";
        $author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
                        dbesc(normalise_link($contact['url'])));