Ensure parent exists before adding reply to elements in OStatus and Feed

- Address https://github.com/friendica/friendica/issues/10474#issuecomment-927118628
This commit is contained in:
Hypolite Petovan 2021-09-25 20:42:51 -04:00
parent 1cf759d414
commit 9d77958247
2 changed files with 39 additions and 31 deletions

View file

@ -1146,27 +1146,31 @@ class Feed
if ($item['gravity'] != GRAVITY_PARENT) { if ($item['gravity'] != GRAVITY_PARENT) {
$parent = Post::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]); $parent = Post::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]);
$thrparent = Post::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $item['thr-parent']]); $thrparent = Post::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'];
$mentioned[$thrparent["owner-link"]] = $thrparent["owner-link"]; $mentioned[$thrparent['owner-link']] = $thrparent['owner-link'];
$parent_plink = $thrparent["plink"]; $parent_plink = $thrparent['plink'];
} elseif (DBA::isResult($parent)) {
$mentioned[$parent['author-link']] = $parent['author-link'];
$mentioned[$parent['owner-link']] = $parent['owner-link'];
$parent_plink = DI::baseUrl() . '/display/' . $parent['guid'];
} else { } else {
$mentioned[$parent["author-link"]] = $parent["author-link"]; DI::logger()->notice('Missing parent and thr-parent for child item', ['item' => $item]);
$mentioned[$parent["owner-link"]] = $parent["owner-link"];
$parent_plink = DI::baseUrl()."/display/".$parent["guid"];
} }
if (isset($parent_plink)) {
$attributes = [ $attributes = [
"ref" => $item['thr-parent'], '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);
$attributes = [ $attributes = [
"rel" => "related", 'rel' => 'related',
"href" => $parent_plink]; 'href' => $parent_plink];
XML::addElement($doc, $entry, "link", "", $attributes); XML::addElement($doc, $entry, 'link', '', $attributes);
}
} }
// uri-id isn't present for follow entry pseudo-items // uri-id isn't present for follow entry pseudo-items
@ -1177,7 +1181,7 @@ class Feed
foreach ($tags as $tag) { foreach ($tags as $tag) {
if ($tag['type'] == Tag::HASHTAG) { if ($tag['type'] == Tag::HASHTAG) {
XML::addElement($doc, $entry, "category", "", ["term" => $tag['name']]); XML::addElement($doc, $entry, 'category', '', ['term' => $tag['name']]);
} }
} }

View file

@ -1931,27 +1931,31 @@ class OStatus
if ($item['gravity'] != GRAVITY_PARENT) { if ($item['gravity'] != GRAVITY_PARENT) {
$parent = Post::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]); $parent = Post::selectFirst(['guid', 'author-link', 'owner-link'], ['id' => $item['parent']]);
$thrparent = Post::selectFirst(['guid', 'author-link', 'owner-link', 'plink'], ['uid' => $owner["uid"], 'uri' => $item['thr-parent']]); $thrparent = Post::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'];
$mentioned[$thrparent["owner-link"]] = $thrparent["owner-link"]; $mentioned[$thrparent['owner-link']] = $thrparent['owner-link'];
$parent_plink = $thrparent["plink"]; $parent_plink = $thrparent['plink'];
} elseif (DBA::isResult($parent)) {
$mentioned[$parent['author-link']] = $parent['author-link'];
$mentioned[$parent['owner-link']] = $parent['owner-link'];
$parent_plink = DI::baseUrl() . '/display/' . $parent['guid'];
} else { } else {
$mentioned[$parent["author-link"]] = $parent["author-link"]; DI::logger()->notice('Missing parent and thr-parent for child item', ['item' => $item]);
$mentioned[$parent["owner-link"]] = $parent["owner-link"];
$parent_plink = DI::baseUrl()."/display/".$parent["guid"];
} }
if (isset($parent_plink)) {
$attributes = [ $attributes = [
"ref" => $item['thr-parent'], '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);
$attributes = [ $attributes = [
"rel" => "related", 'rel' => 'related',
"href" => $parent_plink]; 'href' => $parent_plink];
XML::addElement($doc, $entry, "link", "", $attributes); XML::addElement($doc, $entry, 'link', '', $attributes);
}
} }
if (intval($item['parent']) > 0) { if (intval($item['parent']) > 0) {