X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdiaspora.php;h=1202a3a5521bbc54fae0d0749020deaaac9012a0;hb=dbe8275ae5de7610ce21c90088b94a1e18d02921;hp=9edda5a9efce0f39193a6533ddeda899e4671822;hpb=b41d14afe34d3b692a398f3923f5a48712d2aef9;p=friendica.git diff --git a/include/diaspora.php b/include/diaspora.php index 9edda5a9ef..1202a3a552 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -833,31 +833,6 @@ function diaspora_post($importer,$xml,$msg) { $str_tags = ''; - $tags = get_tags($body); - - if(count($tags)) { - foreach($tags as $tag) { - if(strpos($tag,'#') === 0) { - if(strpos($tag,'[url=')) - continue; - - // don't link tags that are already embedded in links - - if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body)) - continue; - if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body)) - continue; - - $basetag = str_replace('_',' ',substr($tag,1)); - $body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body); - if(strlen($str_tags)) - $str_tags .= ','; - $str_tags .= '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; - continue; - } - } - } - $cnt = preg_match_all('/@\[url=(.*?)\[\/url\]/ism',$body,$matches,PREG_SET_ORDER); if($cnt) { foreach($matches as $mtch) { @@ -895,19 +870,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) @@ -981,34 +1029,8 @@ function diaspora_fetch_message($guid, $server, $level = 0) { return false; $item["tag"] = ''; - - $tags = get_tags($body); - - if(count($tags)) { - foreach($tags as $tag) { - if(strpos($tag,'#') === 0) { - if(strpos($tag,'[url=')) - continue; - - // don't link tags that are already embedded in links - - if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body)) - continue; - if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body)) - continue; - - - $basetag = str_replace('_',' ',substr($tag,1)); - $body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body); - if(strlen($item["tag"])) - $item["tag"] .= ','; - $item["tag"] .= '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; - continue; - } - } - } - $item["body"] = $body; + return $item; } @@ -1102,7 +1124,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; } } @@ -1144,6 +1167,8 @@ function diaspora_reshare($importer,$xml,$msg) { $prefix = "[share author='".str_replace(array("'", "[", "]"), array("'", "[", "]"),$person['name']). "' profile='".$person['url']. "' avatar='".((x($person,'thumb')) ? $person['thumb'] : $person['photo']). + "' guid='".$orig_guid. + "' posted='".$orig_created. "' link='".str_replace(array("'", "[", "]"), array("'", "[", "]"),$orig_url)."']"; $datarray['author-name'] = $contact['name']; $datarray['author-link'] = $contact['url']; @@ -1164,12 +1189,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 +1209,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 +1308,7 @@ function diaspora_asphoto($importer,$xml,$msg) { $datarray['app'] = 'Diaspora/Cubbi.es'; + DiasporaFetchGuid($datarray); $message_id = item_store($datarray); //if($message_id) { @@ -1403,34 +1432,6 @@ function diaspora_comment($importer,$xml,$msg) { $datarray = array(); - $str_tags = ''; - - $tags = get_tags($body); - - if(count($tags)) { - foreach($tags as $tag) { - if(strpos($tag,'#') === 0) { - if(strpos($tag,'[url=')) - continue; - - // don't link tags that are already embedded in links - - if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body)) - continue; - if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body)) - continue; - - - $basetag = str_replace('_',' ',substr($tag,1)); - $body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body); - if(strlen($str_tags)) - $str_tags .= ','; - $str_tags .= '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; - continue; - } - } - } - $datarray['uid'] = $importer['uid']; $datarray['contact-id'] = $contact['id']; $datarray['type'] = 'remote-comment'; @@ -1454,12 +1455,12 @@ function diaspora_comment($importer,$xml,$msg) { $datarray['author-link'] = $person['url']; $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']); $datarray['body'] = $body; - $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)) $datarray['app'] = 'Diaspora'; + DiasporaFetchGuid($datarray); $message_id = item_store($datarray); //if($message_id) { @@ -2319,7 +2320,7 @@ function diaspora_profile($importer,$xml,$msg) { 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']); + datetime_convert(), 2, $contact['id'], $importer['uid']); } $profileurl = "";