Replace confusing uses of item.parent-uri with expected item.thr-parent

This commit is contained in:
Hypolite Petovan 2020-11-11 02:47:48 -05:00
parent 0c3a5c815e
commit 0f2a5daf09
7 changed files with 74 additions and 81 deletions

View File

@ -605,8 +605,7 @@ function item_post(App $a) {
$datarray['pubmail'] = $pubmail_enabled; $datarray['pubmail'] = $pubmail_enabled;
$datarray['attach'] = $attachments; $datarray['attach'] = $attachments;
// This is not a bug. The item store function changes 'parent-uri' to 'thr-parent' and fetches 'parent-uri' new. (We should change this) $datarray['thr-parent'] = $thr_parent_uri;
$datarray['parent-uri'] = $thr_parent_uri;
$datarray['postopts'] = $postopts; $datarray['postopts'] = $postopts;
$datarray['origin'] = $origin; $datarray['origin'] = $origin;
@ -627,7 +626,7 @@ function item_post(App $a) {
// This field is for storing the raw conversation data // This field is for storing the raw conversation data
$datarray['protocol'] = Conversation::PARCEL_DFRN; $datarray['protocol'] = Conversation::PARCEL_DFRN;
$conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $datarray['parent-uri']]); $conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $datarray['thr-parent']]);
if (DBA::isResult($conversation)) { if (DBA::isResult($conversation)) {
if ($conversation['conversation-uri'] != '') { if ($conversation['conversation-uri'] != '') {
$datarray['conversation-uri'] = $conversation['conversation-uri']; $datarray['conversation-uri'] = $conversation['conversation-uri'];

View File

@ -136,7 +136,7 @@ EOT;
$arr['wall'] = $item['wall']; $arr['wall'] = $item['wall'];
$arr['gravity'] = GRAVITY_COMMENT; $arr['gravity'] = GRAVITY_COMMENT;
$arr['parent'] = $item['id']; $arr['parent'] = $item['id'];
$arr['parent-uri'] = $item['uri']; $arr['thr-parent'] = $item['uri'];
$arr['owner-name'] = $item['author-name']; $arr['owner-name'] = $item['author-name'];
$arr['owner-link'] = $item['author-link']; $arr['owner-link'] = $item['author-link'];
$arr['owner-avatar'] = $item['author-avatar']; $arr['owner-avatar'] = $item['author-avatar'];

View File

@ -438,7 +438,7 @@ class DFRN
$mail->appendChild($sender); $mail->appendChild($sender);
XML::addElement($doc, $mail, "dfrn:id", $item['uri']); XML::addElement($doc, $mail, "dfrn:id", $item['uri']);
XML::addElement($doc, $mail, "dfrn:in-reply-to", $item['parent-uri']); XML::addElement($doc, $mail, "dfrn:in-reply-to", $item['thr-parent']);
XML::addElement($doc, $mail, "dfrn:sentdate", DateTimeFormat::utc($item['created'] . '+00:00', DateTimeFormat::ATOM)); XML::addElement($doc, $mail, "dfrn:sentdate", DateTimeFormat::utc($item['created'] . '+00:00', DateTimeFormat::ATOM));
XML::addElement($doc, $mail, "dfrn:subject", $item['title']); XML::addElement($doc, $mail, "dfrn:subject", $item['title']);
XML::addElement($doc, $mail, "dfrn:content", $item['body']); XML::addElement($doc, $mail, "dfrn:content", $item['body']);
@ -956,10 +956,9 @@ class DFRN
$entry->appendChild($dfrnowner); $entry->appendChild($dfrnowner);
if ($item['gravity'] != GRAVITY_PARENT) { if ($item['gravity'] != GRAVITY_PARENT) {
$parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']); $parent = Item::selectFirst(['guid', 'plink'], ['uri' => $item['thr-parent'], 'uid' => $item['uid']]);
$parent = Item::selectFirst(['guid', 'plink'], ['uri' => $parent_item, 'uid' => $item['uid']]);
if (DBA::isResult($parent)) { if (DBA::isResult($parent)) {
$attributes = ["ref" => $parent_item, "type" => "text/html", $attributes = ["ref" => $item['thr-parent'], "type" => "text/html",
"href" => $parent['plink'], "href" => $parent['plink'],
"dfrn:diaspora_guid" => $parent['guid']]; "dfrn:diaspora_guid" => $parent['guid']];
XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes); XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes);
@ -971,7 +970,7 @@ class DFRN
$conversation_uri = $conversation_href; $conversation_uri = $conversation_href;
if (isset($parent_item)) { if (isset($parent_item)) {
$conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $item['parent-uri']]); $conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $item['thr-parent']]);
if (DBA::isResult($conversation)) { if (DBA::isResult($conversation)) {
if ($conversation['conversation-uri'] != '') { if ($conversation['conversation-uri'] != '') {
$conversation_uri = $conversation['conversation-uri']; $conversation_uri = $conversation['conversation-uri'];
@ -1768,7 +1767,7 @@ class DFRN
$msg["from-photo"] = XML::getFirstValue($xpath, "dfrn:sender/dfrn:avatar/text()", $mail); $msg["from-photo"] = XML::getFirstValue($xpath, "dfrn:sender/dfrn:avatar/text()", $mail);
$msg["contact-id"] = $importer["id"]; $msg["contact-id"] = $importer["id"];
$msg["uri"] = XML::getFirstValue($xpath, "dfrn:id/text()", $mail); $msg["uri"] = XML::getFirstValue($xpath, "dfrn:id/text()", $mail);
$msg["parent-uri"] = XML::getFirstValue($xpath, "dfrn:in-reply-to/text()", $mail); $msg["thr-parent"] = XML::getFirstValue($xpath, "dfrn:in-reply-to/text()", $mail);
$msg["created"] = DateTimeFormat::utc(XML::getFirstValue($xpath, "dfrn:sentdate/text()", $mail)); $msg["created"] = DateTimeFormat::utc(XML::getFirstValue($xpath, "dfrn:sentdate/text()", $mail));
$msg["title"] = XML::getFirstValue($xpath, "dfrn:subject/text()", $mail); $msg["title"] = XML::getFirstValue($xpath, "dfrn:subject/text()", $mail);
$msg["body"] = XML::getFirstValue($xpath, "dfrn:content/text()", $mail); $msg["body"] = XML::getFirstValue($xpath, "dfrn:content/text()", $mail);
@ -1918,7 +1917,7 @@ class DFRN
*/ */
private static function getEntryType($importer, $item) private static function getEntryType($importer, $item)
{ {
if ($item["parent-uri"] != $item["uri"]) { if ($item["thr-parent"] != $item["uri"]) {
$community = false; $community = false;
if ($importer["page-flags"] == User::PAGE_FLAGS_COMMUNITY || $importer["page-flags"] == User::PAGE_FLAGS_PRVGROUP) { if ($importer["page-flags"] == User::PAGE_FLAGS_COMMUNITY || $importer["page-flags"] == User::PAGE_FLAGS_PRVGROUP) {
@ -1934,18 +1933,18 @@ class DFRN
$is_a_remote_action = false; $is_a_remote_action = false;
$parent = Item::selectFirst(['parent-uri'], ['uri' => $item["parent-uri"]]); $parent = Item::selectFirst(['thr-parent'], ['uri' => $item["thr-parent"]]);
if (DBA::isResult($parent)) { if (DBA::isResult($parent)) {
$r = q( $r = q(
"SELECT `item`.`forum_mode`, `item`.`wall` FROM `item` "SELECT `item`.`forum_mode`, `item`.`wall` FROM `item`
INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uri` = '%s' AND (`item`.`parent-uri` = '%s' OR `item`.`thr-parent` = '%s') WHERE `item`.`uri` = '%s' AND (`item`.`thr-parent` = '%s' OR `item`.`thr-parent` = '%s')
AND `item`.`uid` = %d AND `item`.`uid` = %d
$sql_extra $sql_extra
LIMIT 1", LIMIT 1",
DBA::escape($parent["parent-uri"]), DBA::escape($parent["thr-parent"]),
DBA::escape($parent["parent-uri"]), DBA::escape($parent["thr-parent"]),
DBA::escape($parent["parent-uri"]), DBA::escape($parent["thr-parent"]),
intval($importer["importer_uid"]) intval($importer["importer_uid"])
); );
if (DBA::isResult($r)) { if (DBA::isResult($r)) {
@ -2008,7 +2007,7 @@ class DFRN
if ($Blink && Strings::compareLink($Blink, DI::baseUrl() . "/profile/" . $importer["nickname"])) { if ($Blink && Strings::compareLink($Blink, DI::baseUrl() . "/profile/" . $importer["nickname"])) {
$author = DBA::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item['author-id']]); $author = DBA::selectFirst('contact', ['name', 'thumb', 'url'], ['id' => $item['author-id']]);
$parent = Item::selectFirst(['id'], ['uri' => $item['parent-uri'], 'uid' => $importer["importer_uid"]]); $parent = Item::selectFirst(['id'], ['uri' => $item['thr-parent'], 'uid' => $importer["importer_uid"]]);
$item['parent'] = $parent['id']; $item['parent'] = $parent['id'];
// send a notification // send a notification
@ -2090,15 +2089,15 @@ class DFRN
$is_like = true; $is_like = true;
$item["gravity"] = GRAVITY_ACTIVITY; $item["gravity"] = GRAVITY_ACTIVITY;
// only one like or dislike per person // only one like or dislike per person
// splitted into two queries for performance issues // split into two queries for performance issues
$condition = ['uid' => $item["uid"], 'author-id' => $item["author-id"], 'gravity' => GRAVITY_ACTIVITY, $condition = ['uid' => $item["uid"], 'author-id' => $item["author-id"], 'gravity' => GRAVITY_ACTIVITY,
'verb' => $item["verb"], 'parent-uri' => $item["parent-uri"]]; 'verb' => $item['verb'], 'parent-uri' => $item['thr-parent']];
if (Item::exists($condition)) { if (Item::exists($condition)) {
return false; return false;
} }
$condition = ['uid' => $item["uid"], 'author-id' => $item["author-id"], 'gravity' => GRAVITY_ACTIVITY, $condition = ['uid' => $item["uid"], 'author-id' => $item["author-id"], 'gravity' => GRAVITY_ACTIVITY,
'verb' => $item["verb"], 'thr-parent' => $item["parent-uri"]]; 'verb' => $item['verb'], 'thr-parent' => $item['thr-parent']];
if (Item::exists($condition)) { if (Item::exists($condition)) {
return false; return false;
} }
@ -2370,19 +2369,19 @@ class DFRN
} }
// Is it a reply or a top level posting? // Is it a reply or a top level posting?
$item["parent-uri"] = $item["uri"]; $item['thr-parent'] = $item['uri'];
$inreplyto = $xpath->query("thr:in-reply-to", $entry); $inreplyto = $xpath->query("thr:in-reply-to", $entry);
if (is_object($inreplyto->item(0))) { if (is_object($inreplyto->item(0))) {
foreach ($inreplyto->item(0)->attributes as $attributes) { foreach ($inreplyto->item(0)->attributes as $attributes) {
if ($attributes->name == "ref") { if ($attributes->name == "ref") {
$item["parent-uri"] = $attributes->textContent; $item['thr-parent'] = $attributes->textContent;
} }
} }
} }
// Check if the message is wanted // Check if the message is wanted
if (($importer["importer_uid"] == 0) && ($item['uri'] == $item['parent-uri'])) { if (($importer['importer_uid'] == 0) && ($item['uri'] == $item['thr-parent'])) {
if (!self::isSolicitedMessage($item)) { if (!self::isSolicitedMessage($item)) {
DBA::delete('item-uri', ['uri' => $item['uri']]); DBA::delete('item-uri', ['uri' => $item['uri']]);
return 403; return 403;
@ -2760,7 +2759,7 @@ class DFRN
// check that the message originated elsewhere and is a top-level post // check that the message originated elsewhere and is a top-level post
if ($item['wall'] || $item['origin'] || ($item['uri'] != $item['parent-uri'])) { if ($item['wall'] || $item['origin'] || ($item['uri'] != $item['thr-parent'])) {
return false; return false;
} }

View File

@ -1697,9 +1697,9 @@ class Diaspora
if (isset($data->thread_parent_guid)) { if (isset($data->thread_parent_guid)) {
$thread_parent_guid = Strings::escapeTags(XML::unescape($data->thread_parent_guid)); $thread_parent_guid = Strings::escapeTags(XML::unescape($data->thread_parent_guid));
$thr_uri = self::getUriFromGuid("", $thread_parent_guid, true); $thr_parent = self::getUriFromGuid("", $thread_parent_guid, true);
} else { } else {
$thr_uri = ""; $thr_parent = "";
} }
$contact = self::allowedContactByHandle($importer, $sender, true); $contact = self::allowedContactByHandle($importer, $sender, true);
@ -1712,8 +1712,8 @@ class Diaspora
return true; return true;
} }
$parent_item = self::parentItem($importer["uid"], $parent_guid, $author, $contact); $toplevel_parent_item = self::parentItem($importer["uid"], $parent_guid, $author, $contact);
if (!$parent_item) { if (!$toplevel_parent_item) {
return false; return false;
} }
@ -1754,11 +1754,8 @@ class Diaspora
$datarray["verb"] = Activity::POST; $datarray["verb"] = Activity::POST;
$datarray["gravity"] = GRAVITY_COMMENT; $datarray["gravity"] = GRAVITY_COMMENT;
if ($thr_uri != "") { $datarray['thr-parent'] = $thr_parent ?: $toplevel_parent_item['uri'];
$datarray["parent-uri"] = $thr_uri; $datarray['parent-uri'] = $toplevel_parent_item['uri'];
} else {
$datarray["parent-uri"] = $parent_item["uri"];
}
$datarray["object-type"] = Activity\ObjectType::COMMENT; $datarray["object-type"] = Activity\ObjectType::COMMENT;
@ -1767,7 +1764,7 @@ class Diaspora
$datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at; $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at;
$datarray["plink"] = self::plink($author, $guid, $parent_item['guid']); $datarray["plink"] = self::plink($author, $guid, $toplevel_parent_item['guid']);
$body = Markdown::toBBCode($text); $body = Markdown::toBBCode($text);
$datarray["body"] = self::replacePeopleGuid($body, $person["url"]); $datarray["body"] = self::replacePeopleGuid($body, $person["url"]);
@ -1779,7 +1776,7 @@ class Diaspora
// If we are the origin of the parent we store the original data. // If we are the origin of the parent we store the original data.
// We notify our followers during the item storage. // We notify our followers during the item storage.
if ($parent_item["origin"]) { if ($toplevel_parent_item["origin"]) {
$datarray['diaspora_signed_text'] = json_encode($data); $datarray['diaspora_signed_text'] = json_encode($data);
} }
@ -1953,8 +1950,8 @@ class Diaspora
return true; return true;
} }
$parent_item = self::parentItem($importer["uid"], $parent_guid, $author, $contact); $toplevel_parent_item = self::parentItem($importer["uid"], $parent_guid, $author, $contact);
if (!$parent_item) { if (!$toplevel_parent_item) {
return false; return false;
} }
@ -1991,7 +1988,7 @@ class Diaspora
$datarray["verb"] = $verb; $datarray["verb"] = $verb;
$datarray["gravity"] = GRAVITY_ACTIVITY; $datarray["gravity"] = GRAVITY_ACTIVITY;
$datarray["parent-uri"] = $parent_item["uri"]; $datarray['thr-parent'] = $toplevel_parent_item['uri'];
$datarray["object-type"] = Activity\ObjectType::NOTE; $datarray["object-type"] = Activity\ObjectType::NOTE;
@ -2001,11 +1998,11 @@ class Diaspora
$datarray["changed"] = $datarray["created"] = $datarray["edited"] = DateTimeFormat::utcNow(); $datarray["changed"] = $datarray["created"] = $datarray["edited"] = DateTimeFormat::utcNow();
// like on comments have the comment as parent. So we need to fetch the toplevel parent // like on comments have the comment as parent. So we need to fetch the toplevel parent
if ($parent_item['gravity'] != GRAVITY_PARENT) { if ($toplevel_parent_item['gravity'] != GRAVITY_PARENT) {
$toplevel = Item::selectFirst(['origin'], ['id' => $parent_item['parent']]); $toplevel = Item::selectFirst(['origin'], ['id' => $toplevel_parent_item['parent']]);
$origin = $toplevel["origin"]; $origin = $toplevel["origin"];
} else { } else {
$origin = $parent_item["origin"]; $origin = $toplevel_parent_item["origin"];
} }
// If we are the origin of the parent we store the original data. // If we are the origin of the parent we store the original data.
@ -2116,16 +2113,16 @@ class Diaspora
return true; return true;
} }
$parent_item = self::parentItem($importer["uid"], $parent_guid, $author, $contact); $toplevel_parent_item = self::parentItem($importer["uid"], $parent_guid, $author, $contact);
if (!$parent_item) { if (!$toplevel_parent_item) {
return false; return false;
} }
if (!$parent_item['origin']) { if (!$toplevel_parent_item['origin']) {
Logger::info('Not our origin. Participation is ignored', ['parent_guid' => $parent_guid, 'guid' => $guid, 'author' => $author]); Logger::info('Not our origin. Participation is ignored', ['parent_guid' => $parent_guid, 'guid' => $guid, 'author' => $author]);
} }
if (!in_array($parent_item['private'], [Item::PUBLIC, Item::UNLISTED])) { if (!in_array($toplevel_parent_item['private'], [Item::PUBLIC, Item::UNLISTED])) {
Logger::info('Item is not public, participation is ignored', ['parent_guid' => $parent_guid, 'guid' => $guid, 'author' => $author]); Logger::info('Item is not public, participation is ignored', ['parent_guid' => $parent_guid, 'guid' => $guid, 'author' => $author]);
return false; return false;
} }
@ -2155,7 +2152,8 @@ class Diaspora
$datarray["verb"] = Activity::FOLLOW; $datarray["verb"] = Activity::FOLLOW;
$datarray["gravity"] = GRAVITY_ACTIVITY; $datarray["gravity"] = GRAVITY_ACTIVITY;
$datarray["parent-uri"] = $parent_item["uri"]; $datarray['thr-parent'] = $toplevel_parent_item['uri'];
$datarray['parent-uri'] = $toplevel_parent_item['parent-uri'];
$datarray["object-type"] = Activity\ObjectType::NOTE; $datarray["object-type"] = Activity\ObjectType::NOTE;
@ -2170,7 +2168,7 @@ class Diaspora
// Send all existing comments and likes to the requesting server // Send all existing comments and likes to the requesting server
$comments = Item::select(['id', 'uri-id', 'parent-author-network', 'author-network', 'verb'], $comments = Item::select(['id', 'uri-id', 'parent-author-network', 'author-network', 'verb'],
['parent' => $parent_item['id'], 'gravity' => [GRAVITY_COMMENT, GRAVITY_ACTIVITY]]); ['parent' => $toplevel_parent_item['id'], 'gravity' => [GRAVITY_COMMENT, GRAVITY_ACTIVITY]]);
while ($comment = Item::fetch($comments)) { while ($comment = Item::fetch($comments)) {
if (in_array($comment['verb'], [Activity::FOLLOW, Activity::TAG])) { if (in_array($comment['verb'], [Activity::FOLLOW, Activity::TAG])) {
Logger::info('participation messages are not relayed', ['item' => $comment['id']]); Logger::info('participation messages are not relayed', ['item' => $comment['id']]);
@ -2547,7 +2545,8 @@ class Diaspora
$datarray['guid'] = $parent['guid'] . '-' . $guid; $datarray['guid'] = $parent['guid'] . '-' . $guid;
$datarray['uri'] = self::getUriFromGuid($author, $datarray['guid']); $datarray['uri'] = self::getUriFromGuid($author, $datarray['guid']);
$datarray['parent-uri'] = $parent['uri']; $datarray['thr-parent'] = $parent['uri'];
$datarray['parent-uri'] = $parent['parent-uri'];
$datarray['verb'] = $datarray['body'] = Activity::ANNOUNCE; $datarray['verb'] = $datarray['body'] = Activity::ANNOUNCE;
$datarray['gravity'] = GRAVITY_ACTIVITY; $datarray['gravity'] = GRAVITY_ACTIVITY;
@ -2618,7 +2617,7 @@ class Diaspora
$datarray["owner-id"] = $datarray["author-id"]; $datarray["owner-id"] = $datarray["author-id"];
$datarray["guid"] = $guid; $datarray["guid"] = $guid;
$datarray["uri"] = $datarray["parent-uri"] = self::getUriFromGuid($author, $guid); $datarray["uri"] = $datarray["thr-parent"] = self::getUriFromGuid($author, $guid);
$datarray['uri-id'] = ItemURI::insert(['uri' => $datarray['uri'], 'guid' => $datarray['guid']]); $datarray['uri-id'] = ItemURI::insert(['uri' => $datarray['uri'], 'guid' => $datarray['guid']]);
$datarray["verb"] = Activity::POST; $datarray["verb"] = Activity::POST;
@ -2703,7 +2702,7 @@ class Diaspora
} }
// Fetch items that are about to be deleted // Fetch items that are about to be deleted
$fields = ['uid', 'id', 'parent', 'parent-uri', 'author-link', 'file']; $fields = ['uid', 'id', 'parent', 'author-link', 'file'];
// When we receive a public retraction, we delete every item that we find. // When we receive a public retraction, we delete every item that we find.
if ($importer['uid'] == 0) { if ($importer['uid'] == 0) {
@ -2872,7 +2871,7 @@ class Diaspora
$datarray = []; $datarray = [];
$datarray["guid"] = $guid; $datarray["guid"] = $guid;
$datarray["uri"] = $datarray["parent-uri"] = self::getUriFromGuid($author, $guid); $datarray["uri"] = $datarray["thr-parent"] = self::getUriFromGuid($author, $guid);
$datarray['uri-id'] = ItemURI::insert(['uri' => $datarray['uri'], 'guid' => $datarray['guid']]); $datarray['uri-id'] = ItemURI::insert(['uri' => $datarray['uri'], 'guid' => $datarray['guid']]);
// Attach embedded pictures to the body // Attach embedded pictures to the body
@ -3681,12 +3680,12 @@ class Diaspora
*/ */
private static function constructLike(array $item, array $owner) private static function constructLike(array $item, array $owner)
{ {
$parent = Item::selectFirst(['guid', 'uri', 'parent-uri'], ['uri' => $item["thr-parent"]]); $parent = Item::selectFirst(['guid', 'uri', 'thr-parent'], ['uri' => $item["thr-parent"]]);
if (!DBA::isResult($parent)) { if (!DBA::isResult($parent)) {
return false; return false;
} }
$target_type = ($parent["uri"] === $parent["parent-uri"] ? "Post" : "Comment"); $target_type = ($parent["uri"] === $parent["thr-parent"] ? "Post" : "Comment");
$positive = null; $positive = null;
if ($item['verb'] === Activity::LIKE) { if ($item['verb'] === Activity::LIKE) {
$positive = "true"; $positive = "true";
@ -3713,7 +3712,7 @@ class Diaspora
*/ */
private static function constructAttend(array $item, array $owner) private static function constructAttend(array $item, array $owner)
{ {
$parent = Item::selectFirst(['guid', 'uri', 'parent-uri'], ['uri' => $item["thr-parent"]]); $parent = Item::selectFirst(['guid'], ['uri' => $item['thr-parent']]);
if (!DBA::isResult($parent)) { if (!DBA::isResult($parent)) {
return false; return false;
} }
@ -4242,10 +4241,7 @@ class Diaspora
return false; return false;
} }
// This is a workaround for the behaviour of the "insert" function, see mod/item.php $parent = Item::selectFirst(['parent-uri'], ['uri' => $item['thr-parent']]);
$item['thr-parent'] = $item['parent-uri'];
$parent = Item::selectFirst(['parent-uri'], ['uri' => $item['parent-uri']]);
if (!DBA::isResult($parent)) { if (!DBA::isResult($parent)) {
return; return;
} }

View File

@ -354,7 +354,7 @@ class Feed
$item["plink"] = DI::httpRequest()->finalUrl($item["plink"]); $item["plink"] = DI::httpRequest()->finalUrl($item["plink"]);
$item["parent-uri"] = $item["uri"]; $item["thr-parent"] = $item["uri"];
$item["title"] = XML::getFirstNodeValue($xpath, 'atom:title/text()', $entry); $item["title"] = XML::getFirstNodeValue($xpath, 'atom:title/text()', $entry);
@ -602,6 +602,7 @@ class Feed
if ($notify) { if ($notify) {
$item['guid'] = Item::guidFromUri($orig_plink, DI::baseUrl()->getHostname()); $item['guid'] = Item::guidFromUri($orig_plink, DI::baseUrl()->getHostname());
unset($item['uri']); unset($item['uri']);
unset($item['thr-parent']);
unset($item['parent-uri']); unset($item['parent-uri']);
// Set the delivery priority for "remote self" to "medium" // Set the delivery priority for "remote self" to "medium"
@ -1108,9 +1109,8 @@ class Feed
if ($item['gravity'] != GRAVITY_PARENT) { if ($item['gravity'] != GRAVITY_PARENT) {
$parent = Item::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]); $parent = Item::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]);
$parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
$thrparent = Item::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $parent_item]); $thrparent = Item::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $item['thr-parent']]);
if (DBA::isResult($thrparent)) { if (DBA::isResult($thrparent)) {
$mentioned[$thrparent["author-link"]] = $thrparent["author-link"]; $mentioned[$thrparent["author-link"]] = $thrparent["author-link"];
@ -1123,7 +1123,7 @@ class Feed
} }
$attributes = [ $attributes = [
"ref" => $parent_item, "ref" => $item['thr-parent'],
"href" => $parent_plink]; "href" => $parent_plink];
XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes); XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes);

View File

@ -482,7 +482,7 @@ class OStatus
Logger::log("Favorite ".$orig_uri." ".print_r($item, true)); Logger::log("Favorite ".$orig_uri." ".print_r($item, true));
$item["verb"] = Activity::LIKE; $item["verb"] = Activity::LIKE;
$item["parent-uri"] = $orig_uri; $item["thr-parent"] = $orig_uri;
$item["gravity"] = GRAVITY_ACTIVITY; $item["gravity"] = GRAVITY_ACTIVITY;
$item["object-type"] = Activity\ObjectType::NOTE; $item["object-type"] = Activity\ObjectType::NOTE;
} }
@ -495,7 +495,7 @@ class OStatus
self::processPost($xpath, $entry, $item, $importer); self::processPost($xpath, $entry, $item, $importer);
if ($initialize && (count(self::$itemlist) > 0)) { if ($initialize && (count(self::$itemlist) > 0)) {
if (self::$itemlist[0]['uri'] == self::$itemlist[0]['parent-uri']) { if (self::$itemlist[0]['uri'] == self::$itemlist[0]['thr-parent']) {
// We will import it everytime, when it is started by our contacts // We will import it everytime, when it is started by our contacts
$valid = Contact::isSharingByURL(self::$itemlist[0]['author-link'], self::$itemlist[0]['uid']); $valid = Contact::isSharingByURL(self::$itemlist[0]['author-link'], self::$itemlist[0]['uid']);
@ -523,9 +523,9 @@ class OStatus
} }
} else { } else {
// But we will only import complete threads // But we will only import complete threads
$valid = Item::exists(['uid' => $importer["uid"], 'uri' => self::$itemlist[0]['parent-uri']]); $valid = Item::exists(['uid' => $importer["uid"], 'uri' => self::$itemlist[0]['thr-parent']]);
if ($valid) { if ($valid) {
Logger::log("Item with uri ".self::$itemlist[0]["uri"]." belongs to parent ".self::$itemlist[0]['parent-uri']." of user ".$importer["uid"].". It will be imported.", Logger::DEBUG); Logger::log("Item with uri ".self::$itemlist[0]["uri"]." belongs to parent ".self::$itemlist[0]['thr-parent']." of user ".$importer["uid"].". It will be imported.", Logger::DEBUG);
} }
} }
@ -621,7 +621,7 @@ class OStatus
if (is_object($inreplyto->item(0))) { if (is_object($inreplyto->item(0))) {
foreach ($inreplyto->item(0)->attributes as $attributes) { foreach ($inreplyto->item(0)->attributes as $attributes) {
if ($attributes->name == "ref") { if ($attributes->name == "ref") {
$item["parent-uri"] = $attributes->textContent; $item["thr-parent"] = $attributes->textContent;
} }
if ($attributes->name == "href") { if ($attributes->name == "href") {
$related = $attributes->textContent; $related = $attributes->textContent;
@ -702,16 +702,16 @@ class OStatus
self::fetchConversation($item['conversation-href'], $item['conversation-uri']); self::fetchConversation($item['conversation-href'], $item['conversation-uri']);
} }
if (isset($item["parent-uri"])) { if (isset($item["thr-parent"])) {
if (!Item::exists(['uid' => $importer["uid"], 'uri' => $item['parent-uri']])) { if (!Item::exists(['uid' => $importer["uid"], 'uri' => $item['thr-parent']])) {
if ($related != '') { if ($related != '') {
self::fetchRelated($related, $item["parent-uri"], $importer); self::fetchRelated($related, $item["thr-parent"], $importer);
} }
} else { } else {
Logger::log('Reply with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', Logger::DEBUG); Logger::log('Reply with URI '.$item["uri"].' already existed for user '.$importer["uid"].'.', Logger::DEBUG);
} }
} else { } else {
$item["parent-uri"] = $item["uri"]; $item["thr-parent"] = $item["uri"];
$item["gravity"] = GRAVITY_PARENT; $item["gravity"] = GRAVITY_PARENT;
} }
@ -1074,7 +1074,7 @@ class OStatus
if (is_object($inreplyto->item(0))) { if (is_object($inreplyto->item(0))) {
foreach ($inreplyto->item(0)->attributes as $attributes) { foreach ($inreplyto->item(0)->attributes as $attributes) {
if ($attributes->name == "ref") { if ($attributes->name == "ref") {
$item["parent-uri"] = $attributes->textContent; $item["thr-parent"] = $attributes->textContent;
} }
} }
} }
@ -1126,8 +1126,8 @@ class OStatus
break; break;
case "related": case "related":
if ($item["object-type"] != Activity\ObjectType::BOOKMARK) { if ($item["object-type"] != Activity\ObjectType::BOOKMARK) {
if (!isset($item["parent-uri"])) { if (!isset($item["thr-parent"])) {
$item["parent-uri"] = $attribute['href']; $item["thr-parent"] = $attribute['href'];
} }
$link_data['related'] = $attribute['href']; $link_data['related'] = $attribute['href'];
} else { } else {
@ -1934,9 +1934,8 @@ class OStatus
if ($item['gravity'] != GRAVITY_PARENT) { if ($item['gravity'] != GRAVITY_PARENT) {
$parent = Item::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]); $parent = Item::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]);
$parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
$thrparent = Item::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $parent_item]); $thrparent = Item::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $item['thr-parent']]);
if (DBA::isResult($thrparent)) { if (DBA::isResult($thrparent)) {
$mentioned[$thrparent["author-link"]] = $thrparent["author-link"]; $mentioned[$thrparent["author-link"]] = $thrparent["author-link"];
@ -1949,7 +1948,7 @@ class OStatus
} }
$attributes = [ $attributes = [
"ref" => $parent_item, "ref" => $item['thr-parent'],
"href" => $parent_plink]; "href" => $parent_plink];
XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes); XML::addElement($doc, $entry, "thr:in-reply-to", "", $attributes);
@ -1960,7 +1959,7 @@ class OStatus
} }
if (intval($item['parent']) > 0) { if (intval($item['parent']) > 0) {
$conversation_href = $conversation_uri = str_replace('/objects/', '/context/', $item['parent-uri']); $conversation_href = $conversation_uri = str_replace('/objects/', '/context/', $item['thr-parent']);
if (isset($parent_item)) { if (isset($parent_item)) {
$conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $parent_item]); $conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $parent_item]);

View File

@ -622,8 +622,8 @@ class OnePoll
} }
} }
if (empty($datarray['parent-uri'])) { if (!empty($datarray['parent-uri'])) {
$datarray['parent-uri'] = $datarray['uri']; $datarray['thr-parent'] = $datarray['parent-uri'];
} }
unset($datarray['parent-uri']); unset($datarray['parent-uri']);
@ -664,7 +664,7 @@ class OnePoll
$datarray['owner-link'] = "mailto:".$contact['addr']; $datarray['owner-link'] = "mailto:".$contact['addr'];
$datarray['owner-avatar'] = $contact['photo']; $datarray['owner-avatar'] = $contact['photo'];
if ($datarray['parent-uri'] === $datarray['uri']) { if ($datarray['thr-parent'] === $datarray['uri']) {
$datarray['private'] = Item::PRIVATE; $datarray['private'] = Item::PRIVATE;
} }