X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fconversation.php;h=85938ca0f0d6316e542a5bdb5daf829a7c8ae30c;hb=5e3a55915d7fdd554d711b2b5b619552a492c090;hp=60646e1a013a0a1edc9350cf32e79c204a4d51cb;hpb=a0fddca407f3594758bd09209aaf9e2075794137;p=friendica.git diff --git a/include/conversation.php b/include/conversation.php index 60646e1a01..85938ca0f0 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -788,6 +788,46 @@ function conversation(App $a, array $items, Pager $pager, $mode, $update, $previ return $o; } +/** + * Fetch all comments from a query. Additionally set the newest resharer as thread owner. + * + * @param $thread_items Database statement with thread posts + * @return array items with parents and comments + */ +function conversation_fetch_comments($thread_items) { + $comments = []; + $parentlines = []; + $lineno = 0; + $actor = []; + $created = ''; + + while ($row = Item::fetch($thread_items)) { + if (($row['verb'] == ACTIVITY2_ANNOUNCE) && !empty($row['contact-uid']) && ($row['created'] > $created) && ($row['thr-parent'] == $row['parent-uri'])) { + $actor = ['link' => $row['author-link'], 'avatar' => $row['author-avatar'], 'name' => $row['author-name']]; + $created = $row['created']; + } + + if ((($row['gravity'] == GRAVITY_PARENT) && !$row['origin'] && !in_array($row['network'], [Protocol::DIASPORA])) && + (empty($row['contact-uid']) || !in_array($row['network'], Protocol::NATIVE_SUPPORT))) { + $parentlines[] = $lineno; + } + + $comments[] = $row; + $lineno++; + } + + DBA::close($thread_items); + + if (!empty($actor)) { + foreach ($parentlines as $line) { + $comments[$line]['owner-link'] = $actor['link']; + $comments[$line]['owner-avatar'] = $actor['avatar']; + $comments[$line]['owner-name'] = $actor['name']; + } + } + return $comments; +} + /** * @brief Add comments to top level entries that had been fetched before * @@ -819,9 +859,10 @@ function conversation_add_children(array $parents, $block_authors, $order, $uid) if ($block_authors) { $condition[0] .= "AND NOT `author`.`hidden`"; } - $thread_items = Item::selectForUser(local_user(), [], $condition, $params); - $comments = Item::inArray($thread_items); + $thread_items = Item::selectForUser(local_user(), array_merge(Item::DISPLAY_FIELDLIST, ['contact-uid', 'gravity']), $condition, $params); + + $comments = conversation_fetch_comments($thread_items); if (count($comments) != 0) { $items = array_merge($items, $comments);