X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FDiaspora.php;h=20d1d74fea12ad99133019a3b72f537815e24181;hb=e3ee9ee501f6a02ba64b95cd593f7f2cbffa1631;hp=e8cfbf511352f8552256019a4b36cad46150fe5d;hpb=ec626fb76cc139a20d4ace890fa3136f770e67e8;p=friendica.git diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index e8cfbf5113..20d1d74fea 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1602,11 +1602,21 @@ class Diaspora */ private static function getUriFromGuid($author, $guid, $onlyfound = false) { - $r = q("SELECT `uri` FROM `item` WHERE `guid` = '%s' LIMIT 1", dbesc($guid)); - if (DBM::is_result($r)) { - return $r[0]["uri"]; + $item = dba::selectFirst('item', ['uri'], ['guid' => $guid]); + if (DBM::is_result($item)) { + return $item["uri"]; } elseif (!$onlyfound) { - return $author.":".$guid; + $contact = Contact::getDetailsByAddr($author, 0); + if (!empty($contact['network'])) { + $prefix = 'urn:X-' . $contact['network'] . ':'; + } else { + // This fallback should happen most unlikely + $prefix = 'urn:X-dspr:'; + } + + $author_parts = explode('@', $author); + + return $prefix . $author_parts[1] . ':' . $author_parts[0] . ':'. $guid; } return ""; @@ -1747,6 +1757,12 @@ class Diaspora self::fetchGuid($datarray); + // If we are the origin of the parent we store the original data. + // We notify our followers during the item storage. + if ($parent_item["origin"]) { + $datarray['diaspora_signed_text'] = json_encode($data); + } + $message_id = Item::insert($datarray); if ($message_id <= 0) { @@ -1756,20 +1772,10 @@ class Diaspora if ($message_id) { logger("Stored comment ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG); if ($datarray['uid'] == 0) { - Item::distribute($message_id); + Item::distribute($message_id, json_encode($data)); } } - // If we are the origin of the parent we store the original data and notify our followers - if ($message_id && $parent_item["origin"]) { - // Formerly we stored the signed text, the signature and the author in different fields. - // We now store the raw data so that we are more flexible. - dba::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($data)]); - - // notify others - Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $message_id); - } - return true; } @@ -2071,6 +2077,20 @@ class Diaspora $datarray["body"] = self::constructLikeBody($contact, $parent_item, $guid); + // like on comments have the comment as parent. So we need to fetch the toplevel parent + if ($parent_item["id"] != $parent_item["parent"]) { + $toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]); + $origin = $toplevel["origin"]; + } else { + $origin = $parent_item["origin"]; + } + + // If we are the origin of the parent we store the original data. + // We notify our followers during the item storage. + if ($origin) { + $datarray['diaspora_signed_text'] = json_encode($data); + } + $message_id = Item::insert($datarray); if ($message_id <= 0) { @@ -2080,28 +2100,10 @@ class Diaspora if ($message_id) { logger("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG); if ($datarray['uid'] == 0) { - Item::distribute($message_id); + Item::distribute($message_id, json_encode($data)); } } - // like on comments have the comment as parent. So we need to fetch the toplevel parent - if ($parent_item["id"] != $parent_item["parent"]) { - $toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]); - $origin = $toplevel["origin"]; - } else { - $origin = $parent_item["origin"]; - } - - // If we are the origin of the parent we store the original data and notify our followers - if ($message_id && $origin) { - // Formerly we stored the signed text, the signature and the author in different fields. - // We now store the raw data so that we are more flexible. - dba::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($data)]); - - // notify others - Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $message_id); - } - return true; } @@ -2394,78 +2396,6 @@ class Diaspora ['id' => $contact["id"], 'uid' => $importer["uid"]] ); } - // send notification - - $r = q( - "SELECT `hide-friends` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1", - intval($importer["uid"]) - ); - - if ($r && !$r[0]["hide-friends"] && !$contact["hidden"] && intval(PConfig::get($importer["uid"], "system", "post_newfriend"))) { - $self = q( - "SELECT * FROM `contact` WHERE `self` AND `uid` = %d LIMIT 1", - intval($importer["uid"]) - ); - - // they are not CONTACT_IS_FOLLOWER anymore but that's what we have in the array - - if ($self && $contact["rel"] == CONTACT_IS_FOLLOWER) { - $arr = []; - $arr["protocol"] = PROTOCOL_DIASPORA; - $arr["uri"] = $arr["parent-uri"] = item_new_uri($a->get_hostname(), $importer["uid"]); - $arr["uid"] = $importer["uid"]; - $arr["contact-id"] = $self[0]["id"]; - $arr["wall"] = 1; - $arr["type"] = 'wall'; - $arr["gravity"] = 0; - $arr["origin"] = 1; - $arr["author-name"] = $arr["owner-name"] = $self[0]["name"]; - $arr["author-link"] = $arr["owner-link"] = $self[0]["url"]; - $arr["author-avatar"] = $arr["owner-avatar"] = $self[0]["thumb"]; - $arr["verb"] = ACTIVITY_FRIEND; - $arr["object-type"] = ACTIVITY_OBJ_PERSON; - - $A = "[url=".$self[0]["url"]."]".$self[0]["name"]."[/url]"; - $B = "[url=".$contact["url"]."]".$contact["name"]."[/url]"; - $BPhoto = "[url=".$contact["url"]."][img]".$contact["thumb"]."[/img][/url]"; - $arr["body"] = L10n::t('%1$s is now friends with %2$s', $A, $B)."\n\n\n".$BPhoto; - - $arr["object"] = self::constructNewFriendObject($contact); - - $user = dba::selectFirst('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]]); - - $arr["allow_cid"] = $user["allow_cid"]; - $arr["allow_gid"] = $user["allow_gid"]; - $arr["deny_cid"] = $user["deny_cid"]; - $arr["deny_gid"] = $user["deny_gid"]; - - $i = Item::insert($arr); - if ($i) { - Worker::add(PRIORITY_HIGH, "Notifier", "activity", $i); - } - } - } - } - - /** - * @brief Creates a XML object for a "new friend" message - * - * @param array $contact Array of the contact - * - * @return string The XML - */ - private static function constructNewFriendObject($contact) - { - $objtype = ACTIVITY_OBJ_PERSON; - $link = ''."\n". - ''."\n"; - - $xmldata = ["object" => ["type" => $objtype, - "title" => $contact["name"], - "id" => $contact["url"]."/".$contact["name"], - "link" => $link]]; - - return XML::fromArray($xmldata, $xml, true); } /** @@ -2865,7 +2795,7 @@ class Diaspora while ($item = dba::fetch($r)) { // Fetch the parent item - $parent = dba::selectFirst('item', ['author-link', 'origin'], ['id' => $item["parent"]]); + $parent = dba::selectFirst('item', ['author-link'], ['id' => $item["parent"]]); // Only delete it if the parent author really fits if (!link_compare($parent["author-link"], $contact["url"]) && !link_compare($item["author-link"], $contact["url"])) { @@ -2873,15 +2803,9 @@ class Diaspora continue; } - Item::deleteById($item["id"]); + Item::delete(['id' => $item['id']]); logger("Deleted target ".$target_guid." (".$item["id"].") from user ".$item["uid"]." parent: ".$item["parent"], LOGGER_DEBUG); - - // Now check if the retraction needs to be relayed by us - if ($parent["origin"]) { - // notify others - Worker::add(PRIORITY_HIGH, "Notifier", "drop", $item["id"]); - } } return true; @@ -3515,6 +3439,10 @@ class Diaspora $ret["root_handle"] = self::handleFromContact($item["contact-id"]); $ret["root_guid"] = $guid; return $ret; + } elseif ($complete) { + // We are resharing something that isn't a DFRN or Diaspora post. + // So we have to return "false" on "$complete" to not trigger a reshare. + return false; } } elseif (($guid == "") && $complete) { return false;