From edb0986d17f09ec7cb08ebb888109ec513f3dd6f Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 30 Dec 2023 21:58:17 +0000 Subject: [PATCH] Use the post-counts table to display content --- src/Content/Conversation.php | 56 +++++++--- src/Model/Item.php | 17 ++- src/Model/Post/Counts.php | 43 ++++++- src/Model/Verb.php | 19 +++- src/Module/Conversation/Timeline.php | 10 ++ src/Object/Post.php | 7 +- view/lang/C/messages.po | 161 ++++++++++++++------------- 7 files changed, 202 insertions(+), 111 deletions(-) diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 303850d9d9..fa89ac7dac 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -96,8 +96,6 @@ class Conversation private $session; /** @var Repository\UserGServer */ private $userGServer; - /** @var Array */ - private $blockList; public function __construct(Repository\UserGServer $userGServer, LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\Page $page, App\Mode $mode, App $app, IHandleUserSessions $session) { @@ -868,6 +866,7 @@ class Conversation $emojis = $this->getEmojis($uriids); $quoteshares = $this->getQuoteShares($uriids); + $counts = $this->getCounts($uriids); if (!$this->config->get('system', 'legacy_activities')) { $condition = DBA::mergeConditions($condition, ["(`gravity` != ? OR `origin`)", ItemModel::GRAVITY_ACTIVITY]); @@ -992,6 +991,7 @@ class Conversation foreach ($items as $key => $row) { $items[$key]['emojis'] = $emojis[$key] ?? []; + $items[$key]['counts'] = $counts[$key] ?? 0; $items[$key]['quoteshares'] = $quoteshares[$key] ?? []; $always_display = in_array($mode, [self::MODE_CONTACTS, self::MODE_CONTACT_POSTS]); @@ -1025,6 +1025,16 @@ class Conversation */ private function getEmojis(array $uriids): array { + $emojis = []; + + foreach (Post\Counts::get(['parent-uri-id' => $uriids]) as $count) { + $emojis[$count['uri-id']][$count['reaction']]['emoji'] = $count['reaction']; + $emojis[$count['uri-id']][$count['reaction']]['verb'] = Verb::getByID($count['vid']); + $emojis[$count['uri-id']][$count['reaction']]['total'] = $count['count']; + $emojis[$count['uri-id']][$count['reaction']]['title'] = []; + } + + // @todo The following code should be removed, once that we display activity authors on demand $activity_emoji = [ Activity::LIKE => '👍', Activity::DISLIKE => '👎', @@ -1033,42 +1043,52 @@ class Conversation Activity::ATTENDNO => '❌', Activity::ANNOUNCE => '♻', Activity::VIEW => '📺', + Activity::READ => '📖', ]; - $index_list = array_values($activity_emoji); - $verbs = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT, Activity::POST]); - + $verbs = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT, Activity::POST]); $condition = DBA::mergeConditions(['parent-uri-id' => $uriids, 'gravity' => [ItemModel::GRAVITY_ACTIVITY, ItemModel::GRAVITY_COMMENT], 'verb' => $verbs], ["NOT `deleted`"]); $separator = chr(255) . chr(255) . chr(255); - $sql = "SELECT `thr-parent-id`, `body`, `verb`, `gravity`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`author-name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-view` WHERE " . array_shift($condition) . " GROUP BY `thr-parent-id`, `verb`, `body`, `gravity`"; - - $emojis = []; + $sql = "SELECT `parent-uri-id`, `thr-parent-id`, `body`, `verb`, `gravity`, GROUP_CONCAT(REPLACE(`author-name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-view` WHERE " . array_shift($condition) . " GROUP BY `parent-uri-id`, `thr-parent-id`, `verb`, `body`, `gravity`"; $rows = DBA::p($sql, $condition); while ($row = DBA::fetch($rows)) { if ($row['gravity'] == ItemModel::GRAVITY_ACTIVITY) { - $row['verb'] = $row['body'] ? Activity::EMOJIREACT : $row['verb']; - $emoji = $row['body'] ?: $activity_emoji[$row['verb']]; + $emoji = $row['body'] ?: $activity_emoji[$row['verb']]; } else { $emoji = ''; } - if (!isset($index_list[$emoji])) { - $index_list[] = $emoji; + if (isset($emojis[$row['thr-parent-id']][$emoji]['title'])) { + $emojis[$row['thr-parent-id']][$emoji]['title'] = array_unique(array_merge($emojis[$row['thr-parent-id']][$emoji]['title'] ?? [], explode($separator, $row['title']))); + } else { + Post\Counts::updateForPost($row['thr-parent-id'], $row['parent-uri-id']); + $this->logger->debug('Add missing counts', ['thr-parent-id' => $row['thr-parent-id'], 'parent-uri-id' => $row['parent-uri-id'], 'emoji' => $emoji]); } - $index = array_search($emoji, $index_list); - - $emojis[$row['thr-parent-id']][$index]['emoji'] = $emoji; - $emojis[$row['thr-parent-id']][$index]['verb'] = $row['verb']; - $emojis[$row['thr-parent-id']][$index]['total'] = ($emojis[$row['thr-parent-id']][$index]['total'] ?? 0) + $row['total']; - $emojis[$row['thr-parent-id']][$index]['title'] = array_unique(array_merge($emojis[$row['thr-parent-id']][$index]['title'] ?? [], explode($separator, $row['title']))); } DBA::close($rows); return $emojis; } + /** + * Fetch comment counts from the conversation + * + * @param array $uriids + * @return array + */ + private function getCounts(array $uriids): array + { + $counts = []; + + foreach (Post\Counts::get(['parent-uri-id' => $uriids, 'vid' => Verb::getID(Activity::POST)]) as $count) { + $counts[$count['parent-uri-id']] = ($counts[$count['parent-uri-id']] ?? 0) + $count['count']; + } + + return $counts; + } + /** * Fetch quote shares from the conversation * diff --git a/src/Model/Item.php b/src/Model/Item.php index b52f065b04..1c29716129 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1427,16 +1427,15 @@ class Item Worker::add(['priority' => $priority, 'dont_fork' => true], 'Notifier', $notify_type, (int)$posted_item['uri-id'], (int)$posted_item['uid']); } - // Fill the cache with the rendered content. - if (in_array($posted_item['gravity'], [self::GRAVITY_PARENT, self::GRAVITY_COMMENT]) && ($posted_item['uid'] == 0)) { - self::updateDisplayCache($posted_item['uri-id']); - } - - if (in_array($posted_item['gravity'], [self::GRAVITY_ACTIVITY, self::GRAVITY_COMMENT]) && ($posted_item['uid'] == 0)) { - Post\Counts::update($posted_item['thr-parent-id'], $posted_item['parent-uri-id'], $posted_item['vid'], $posted_item['verb'], $posted_item['body']); - } - if ($inserted) { + // Fill the cache with the rendered content. + if (in_array($posted_item['gravity'], [self::GRAVITY_PARENT, self::GRAVITY_COMMENT])) { + self::updateDisplayCache($posted_item['uri-id']); + } + + if (in_array($posted_item['gravity'], [self::GRAVITY_ACTIVITY, self::GRAVITY_COMMENT])) { + Post\Counts::update($posted_item['thr-parent-id'], $posted_item['parent-uri-id'], $posted_item['vid'], $posted_item['verb'], $posted_item['body']); + } Post\Engagement::storeFromItem($posted_item); } diff --git a/src/Model/Post/Counts.php b/src/Model/Post/Counts.php index 2d6f671d7d..e119b0b858 100644 --- a/src/Model/Post/Counts.php +++ b/src/Model/Post/Counts.php @@ -38,11 +38,20 @@ class Counts */ public static function update(int $uri_id, int $parent_uri_id, int $vid, string $verb, string $body = null) { + if (!in_array($verb, [Activity::POST, Activity::LIKE, Activity::DISLIKE, + Activity::ATTEND, Activity::ATTENDMAYBE, Activity::ATTENDNO, + Activity::EMOJIREACT, Activity::ANNOUNCE, Activity::VIEW, Activity::READ])) { + return true; + } + $condition = ['thr-parent-id' => $uri_id, 'vid' => $vid]; if ($body == $verb) { $condition['body'] = null; $body = ''; + } elseif ($verb == Activity::POST) { + $condition['gravity'] = Item::GRAVITY_COMMENT; + $body = ''; } elseif (($verb != Activity::POST) && (mb_strlen($body) == 1) && Smilies::isEmojiPost($body)) { $condition['body'] = $body; } else { @@ -76,14 +85,40 @@ class Counts } /** - * Retrieves counts of the given uri-id + * Retrieves counts of the given condition * - * @param int $uriId + * @param array $condition * * @return array */ - public static function getByURIId(int $uriId): array + public static function get(array $condition): array { - return DBA::selectToArray('post-counts', [], ['uri-id' => $uriId]); + $counts = []; + + $activity_emoji = [ + Verb::getID(Activity::LIKE) => '👍', + Verb::getID(Activity::DISLIKE) => '👎', + Verb::getID(Activity::ATTEND) => '✔️', + Verb::getID(Activity::ATTENDMAYBE) => '❓', + Verb::getID(Activity::ATTENDNO) => '❌', + Verb::getID(Activity::ANNOUNCE) => '♻', + Verb::getID(Activity::VIEW) => '📺', + Verb::getID(Activity::READ) => '📖', + ]; + + $vids = array_merge(array_keys($activity_emoji), [Verb::getID(Activity::EMOJIREACT), Verb::getID(Activity::POST)]); + + $condition = DBA::mergeConditions($condition, ['vid' => $vids]); + $countquery = DBA::select('post-counts', [], $condition); + while ($count = DBA::fetch($countquery)) { + if (!empty($count['reaction'])) { + $count['vid'] = Verb::getID(Activity::EMOJIREACT); + } elseif (!empty($activity_emoji[$count['vid']])) { + $count['reaction'] = $activity_emoji[$count['vid']]; + } + $counts[] = $count; + } + DBA::close($counts); + return $counts; } } diff --git a/src/Model/Verb.php b/src/Model/Verb.php index 488715b287..72759834ec 100644 --- a/src/Model/Verb.php +++ b/src/Model/Verb.php @@ -26,6 +26,8 @@ use Friendica\Database\DBA; class Verb { + static $verbs = []; + /** * Insert a verb record and return its id * @@ -40,14 +42,23 @@ class Verb return 0; } + $id = array_search($verb, self::$verbs); + if ($id !== false) { + return $id; + } + $verb_record = DBA::selectFirst('verb', ['id'], ['name' => $verb]); if (DBA::isResult($verb_record)) { + self::$verbs[$verb_record['id']] = $verb; return $verb_record['id']; } DBA::insert('verb', ['name' => $verb], Database::INSERT_IGNORE); - return DBA::lastInsertId(); + $id = DBA::lastInsertId(); + self::$verbs[$id] = $verb; + return $id; + } /** @@ -62,11 +73,17 @@ class Verb return ''; } + if (!empty(self::$verbs[$id])) { + return self::$verbs[$id]; + } + $verb_record = DBA::selectFirst('verb', ['name'], ['id' => $id]); if (!DBA::isResult($verb_record)) { return ''; } + self::$verbs[$id] = $verb_record['name']; + return $verb_record['name']; } } diff --git a/src/Module/Conversation/Timeline.php b/src/Module/Conversation/Timeline.php index 1e49970e65..4936c0d5c2 100644 --- a/src/Module/Conversation/Timeline.php +++ b/src/Module/Conversation/Timeline.php @@ -41,7 +41,9 @@ use Friendica\Database\DBA; use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\Post\Engagement; +use Friendica\Model\Verb; use Friendica\Module\Response; +use Friendica\Protocol\Activity; use Friendica\Util\DateTimeFormat; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; @@ -626,6 +628,8 @@ class Timeline extends BaseModule $result = Post::selectThreadForUser($this->session->getLocalUserId() ?: 0, ['uri-id', 'received', 'author-id', 'author-gsid'], $condition, $params); while ($item = $this->database->fetch($result)) { + $item['comments'] = 0; + $items[$item['uri-id']] = $item; } $this->database->close($result); @@ -634,6 +638,12 @@ class Timeline extends BaseModule return []; } + $uriids = array_keys($items); + + foreach (Post\Counts::get(['parent-uri-id' => $uriids, 'vid' => Verb::getID(Activity::POST)]) as $count) { + $items[$count['parent-uri-id']]['comments'] += $count['count']; + } + // Previous page case: once we get the relevant items closest to min_id, we need to restore the expected display order if (empty($this->itemUriId) && isset($this->minId) && !isset($this->maxId)) { $items = array_reverse($items); diff --git a/src/Object/Post.php b/src/Object/Post.php index d52a05dddc..0176e49ad7 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -201,7 +201,7 @@ class Post $indent = ''; $shiny = ''; $osparkle = ''; - $total_children = $this->countDescendants(); + $total_children = $item['counts'] ?? $this->countDescendants(); $conv = $this->getThread(); @@ -697,6 +697,11 @@ class Post $icon = ['fa' => 'fa-eye', 'icon' => 'icon-eye-open']; break; + case Activity::READ: + $title = DI::l10n()->t('Read by: %s', $actors); + $icon = ['fa' => 'fa-book', 'icon' => 'icon-book']; + break; + case Activity::LIKE: $title = DI::l10n()->t('Liked by: %s', $actors); $icon = ['fa' => 'fa-thumbs-up', 'icon' => 'icon-thumbs-up']; diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index bcd02c885b..a812ef31fb 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2024.03-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-25 10:16+0000\n" +"POT-Creation-Date: 2023-12-30 21:51+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -293,7 +293,7 @@ msgid "Insert web link" msgstr "" #: mod/message.php:201 mod/message.php:357 mod/photos.php:1301 -#: src/Content/Conversation.php:401 src/Content/Conversation.php:1604 +#: src/Content/Conversation.php:401 src/Content/Conversation.php:1589 #: src/Module/Item/Compose.php:206 src/Module/Post/Edit.php:145 #: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:609 msgid "Please wait" @@ -318,7 +318,7 @@ msgstr "" #: src/Module/Profile/Profile.php:274 src/Module/Profile/UnkMail.php:155 #: src/Module/Settings/Profile/Index.php:257 #: src/Module/Settings/Server/Action.php:79 src/Module/User/Delegation.php:189 -#: src/Object/Post.php:1149 view/theme/duepuntozero/config.php:85 +#: src/Object/Post.php:1154 view/theme/duepuntozero/config.php:85 #: view/theme/frio/config.php:171 view/theme/quattro/config.php:87 #: view/theme/vier/config.php:135 msgid "Submit" @@ -603,34 +603,34 @@ msgstr "" #: mod/photos.php:1139 mod/photos.php:1195 mod/photos.php:1275 #: src/Module/Contact.php:618 src/Module/Item/Compose.php:188 -#: src/Object/Post.php:1146 +#: src/Object/Post.php:1151 msgid "This is you" msgstr "" #: mod/photos.php:1141 mod/photos.php:1197 mod/photos.php:1277 #: src/Module/Moderation/Reports.php:95 src/Object/Post.php:603 -#: src/Object/Post.php:1148 +#: src/Object/Post.php:1153 msgid "Comment" msgstr "" #: mod/photos.php:1143 mod/photos.php:1199 mod/photos.php:1279 #: src/Content/Conversation.php:416 src/Module/Calendar/Event/Form.php:248 #: src/Module/Item/Compose.php:201 src/Module/Post/Edit.php:165 -#: src/Object/Post.php:1162 +#: src/Object/Post.php:1167 msgid "Preview" msgstr "" #: mod/photos.php:1144 src/Content/Conversation.php:369 -#: src/Module/Post/Edit.php:130 src/Object/Post.php:1150 +#: src/Module/Post/Edit.php:130 src/Object/Post.php:1155 msgid "Loading..." msgstr "" -#: mod/photos.php:1236 src/Content/Conversation.php:1519 +#: mod/photos.php:1236 src/Content/Conversation.php:1504 #: src/Object/Post.php:261 msgid "Select" msgstr "" -#: mod/photos.php:1237 src/Content/Conversation.php:1520 +#: mod/photos.php:1237 src/Content/Conversation.php:1505 #: src/Module/Moderation/Users/Active.php:136 #: src/Module/Moderation/Users/Blocked.php:136 #: src/Module/Moderation/Users/Index.php:151 @@ -1244,7 +1244,7 @@ msgid "Visible to everybody" msgstr "" #: src/Content/Conversation.php:339 src/Module/Item/Compose.php:200 -#: src/Object/Post.php:1161 +#: src/Object/Post.php:1166 msgid "Please enter a image/video/audio/webpage URL:" msgstr "" @@ -1289,52 +1289,52 @@ msgid "attach file" msgstr "" #: src/Content/Conversation.php:374 src/Module/Item/Compose.php:190 -#: src/Module/Post/Edit.php:171 src/Object/Post.php:1151 +#: src/Module/Post/Edit.php:171 src/Object/Post.php:1156 msgid "Bold" msgstr "" #: src/Content/Conversation.php:375 src/Module/Item/Compose.php:191 -#: src/Module/Post/Edit.php:172 src/Object/Post.php:1152 +#: src/Module/Post/Edit.php:172 src/Object/Post.php:1157 msgid "Italic" msgstr "" #: src/Content/Conversation.php:376 src/Module/Item/Compose.php:192 -#: src/Module/Post/Edit.php:173 src/Object/Post.php:1153 +#: src/Module/Post/Edit.php:173 src/Object/Post.php:1158 msgid "Underline" msgstr "" #: src/Content/Conversation.php:377 src/Module/Item/Compose.php:193 -#: src/Module/Post/Edit.php:174 src/Object/Post.php:1155 +#: src/Module/Post/Edit.php:174 src/Object/Post.php:1160 msgid "Quote" msgstr "" #: src/Content/Conversation.php:378 src/Module/Item/Compose.php:194 -#: src/Module/Post/Edit.php:175 src/Object/Post.php:1156 +#: src/Module/Post/Edit.php:175 src/Object/Post.php:1161 msgid "Add emojis" msgstr "" #: src/Content/Conversation.php:379 src/Module/Item/Compose.php:195 -#: src/Object/Post.php:1154 +#: src/Object/Post.php:1159 msgid "Content Warning" msgstr "" #: src/Content/Conversation.php:380 src/Module/Item/Compose.php:196 -#: src/Module/Post/Edit.php:176 src/Object/Post.php:1157 +#: src/Module/Post/Edit.php:176 src/Object/Post.php:1162 msgid "Code" msgstr "" #: src/Content/Conversation.php:381 src/Module/Item/Compose.php:197 -#: src/Object/Post.php:1158 +#: src/Object/Post.php:1163 msgid "Image" msgstr "" #: src/Content/Conversation.php:382 src/Module/Item/Compose.php:198 -#: src/Module/Post/Edit.php:177 src/Object/Post.php:1159 +#: src/Module/Post/Edit.php:177 src/Object/Post.php:1164 msgid "Link" msgstr "" #: src/Content/Conversation.php:383 src/Module/Item/Compose.php:199 -#: src/Module/Post/Edit.php:178 src/Object/Post.php:1160 +#: src/Module/Post/Edit.php:178 src/Object/Post.php:1165 msgid "Link or Media" msgstr "" @@ -1404,116 +1404,116 @@ msgstr "" msgid "Delete Selected Items" msgstr "" -#: src/Content/Conversation.php:756 src/Content/Conversation.php:759 -#: src/Content/Conversation.php:762 src/Content/Conversation.php:765 -#: src/Content/Conversation.php:768 +#: src/Content/Conversation.php:729 src/Content/Conversation.php:732 +#: src/Content/Conversation.php:735 src/Content/Conversation.php:738 +#: src/Content/Conversation.php:741 #, php-format msgid "You had been addressed (%s)." msgstr "" -#: src/Content/Conversation.php:771 +#: src/Content/Conversation.php:744 #, php-format msgid "You are following %s." msgstr "" -#: src/Content/Conversation.php:776 +#: src/Content/Conversation.php:749 #, php-format msgid "You subscribed to %s." msgstr "" -#: src/Content/Conversation.php:778 +#: src/Content/Conversation.php:751 msgid "You subscribed to one or more tags in this post." msgstr "" -#: src/Content/Conversation.php:798 +#: src/Content/Conversation.php:771 #, php-format msgid "%s reshared this." msgstr "" -#: src/Content/Conversation.php:800 +#: src/Content/Conversation.php:773 msgid "Reshared" msgstr "" -#: src/Content/Conversation.php:800 +#: src/Content/Conversation.php:773 #, php-format msgid "Reshared by %s <%s>" msgstr "" -#: src/Content/Conversation.php:803 +#: src/Content/Conversation.php:776 #, php-format msgid "%s is participating in this thread." msgstr "" -#: src/Content/Conversation.php:806 +#: src/Content/Conversation.php:779 msgid "Stored for general reasons" msgstr "" -#: src/Content/Conversation.php:809 +#: src/Content/Conversation.php:782 msgid "Global post" msgstr "" -#: src/Content/Conversation.php:812 +#: src/Content/Conversation.php:785 msgid "Sent via an relay server" msgstr "" -#: src/Content/Conversation.php:812 +#: src/Content/Conversation.php:785 #, php-format msgid "Sent via the relay server %s <%s>" msgstr "" -#: src/Content/Conversation.php:815 +#: src/Content/Conversation.php:788 msgid "Fetched" msgstr "" -#: src/Content/Conversation.php:815 +#: src/Content/Conversation.php:788 #, php-format msgid "Fetched because of %s <%s>" msgstr "" -#: src/Content/Conversation.php:818 +#: src/Content/Conversation.php:791 msgid "Stored because of a child post to complete this thread." msgstr "" -#: src/Content/Conversation.php:821 +#: src/Content/Conversation.php:794 msgid "Local delivery" msgstr "" -#: src/Content/Conversation.php:824 +#: src/Content/Conversation.php:797 msgid "Stored because of your activity (like, comment, star, ...)" msgstr "" -#: src/Content/Conversation.php:827 +#: src/Content/Conversation.php:800 msgid "Distributed" msgstr "" -#: src/Content/Conversation.php:830 +#: src/Content/Conversation.php:803 msgid "Pushed to us" msgstr "" -#: src/Content/Conversation.php:1547 src/Object/Post.php:248 +#: src/Content/Conversation.php:1532 src/Object/Post.php:248 msgid "Pinned item" msgstr "" -#: src/Content/Conversation.php:1564 src/Object/Post.php:548 +#: src/Content/Conversation.php:1549 src/Object/Post.php:548 #: src/Object/Post.php:549 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: src/Content/Conversation.php:1577 src/Object/Post.php:536 +#: src/Content/Conversation.php:1562 src/Object/Post.php:536 msgid "Categories:" msgstr "" -#: src/Content/Conversation.php:1578 src/Object/Post.php:537 +#: src/Content/Conversation.php:1563 src/Object/Post.php:537 msgid "Filed under:" msgstr "" -#: src/Content/Conversation.php:1586 src/Object/Post.php:562 +#: src/Content/Conversation.php:1571 src/Object/Post.php:562 #, php-format msgid "%s from %s" msgstr "" -#: src/Content/Conversation.php:1602 +#: src/Content/Conversation.php:1587 msgid "View in context" msgstr "" @@ -1770,7 +1770,7 @@ msgstr "" msgid "Create new group" msgstr "" -#: src/Content/Item.php:332 src/Model/Item.php:3159 +#: src/Content/Item.php:332 src/Model/Item.php:3162 msgid "event" msgstr "" @@ -1778,7 +1778,7 @@ msgstr "" msgid "status" msgstr "" -#: src/Content/Item.php:341 src/Model/Item.php:3161 +#: src/Content/Item.php:341 src/Model/Item.php:3164 #: src/Module/Post/Tag/Add.php:123 msgid "photo" msgstr "" @@ -2190,8 +2190,8 @@ msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:994 src/Model/Item.php:3892 -#: src/Model/Item.php:3898 src/Model/Item.php:3899 +#: src/Content/Text/BBCode.php:994 src/Model/Item.php:3895 +#: src/Model/Item.php:3901 src/Model/Item.php:3902 msgid "Link to source" msgstr "" @@ -3408,91 +3408,91 @@ msgstr "" msgid "Happy Birthday %s" msgstr "" -#: src/Model/Item.php:2210 +#: src/Model/Item.php:2213 #, php-format msgid "%s (%s - %s): %s" msgstr "" -#: src/Model/Item.php:2212 +#: src/Model/Item.php:2215 #, php-format msgid "%s (%s): %s" msgstr "" -#: src/Model/Item.php:2215 +#: src/Model/Item.php:2218 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:3163 +#: src/Model/Item.php:3166 msgid "activity" msgstr "" -#: src/Model/Item.php:3165 +#: src/Model/Item.php:3168 msgid "comment" msgstr "" -#: src/Model/Item.php:3168 src/Module/Post/Tag/Add.php:123 +#: src/Model/Item.php:3171 src/Module/Post/Tag/Add.php:123 msgid "post" msgstr "" -#: src/Model/Item.php:3338 +#: src/Model/Item.php:3341 #, php-format msgid "%s is blocked" msgstr "" -#: src/Model/Item.php:3340 +#: src/Model/Item.php:3343 #, php-format msgid "%s is ignored" msgstr "" -#: src/Model/Item.php:3342 +#: src/Model/Item.php:3345 #, php-format msgid "Content from %s is collapsed" msgstr "" -#: src/Model/Item.php:3346 +#: src/Model/Item.php:3349 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3799 +#: src/Model/Item.php:3802 msgid "bytes" msgstr "" -#: src/Model/Item.php:3830 +#: src/Model/Item.php:3833 #, php-format msgid "%2$s (%3$d%%, %1$d vote)" msgid_plural "%2$s (%3$d%%, %1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3832 +#: src/Model/Item.php:3835 #, php-format msgid "%2$s (%1$d vote)" msgid_plural "%2$s (%1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3837 +#: src/Model/Item.php:3840 #, php-format msgid "%d voter. Poll end: %s" msgid_plural "%d voters. Poll end: %s" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3839 +#: src/Model/Item.php:3842 #, php-format msgid "%d voter." msgid_plural "%d voters." msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3841 +#: src/Model/Item.php:3844 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3875 src/Model/Item.php:3876 +#: src/Model/Item.php:3878 src/Model/Item.php:3879 msgid "View on separate page" msgstr "" @@ -7019,15 +7019,15 @@ msgstr "" msgid "Network feed not available." msgstr "" -#: src/Module/Conversation/Timeline.php:166 +#: src/Module/Conversation/Timeline.php:168 msgid "Own Contacts" msgstr "" -#: src/Module/Conversation/Timeline.php:170 +#: src/Module/Conversation/Timeline.php:172 msgid "Include" msgstr "" -#: src/Module/Conversation/Timeline.php:171 +#: src/Module/Conversation/Timeline.php:173 msgid "Hide" msgstr "" @@ -12415,40 +12415,45 @@ msgstr "" #: src/Object/Post.php:701 #, php-format -msgid "Liked by: %s" +msgid "Read by: %s" msgstr "" #: src/Object/Post.php:706 #, php-format -msgid "Disliked by: %s" +msgid "Liked by: %s" msgstr "" #: src/Object/Post.php:711 #, php-format -msgid "Attended by: %s" +msgid "Disliked by: %s" msgstr "" #: src/Object/Post.php:716 #, php-format -msgid "Maybe attended by: %s" +msgid "Attended by: %s" msgstr "" #: src/Object/Post.php:721 #, php-format -msgid "Not attended by: %s" +msgid "Maybe attended by: %s" msgstr "" #: src/Object/Post.php:726 #, php-format -msgid "Commented by: %s" +msgid "Not attended by: %s" msgstr "" #: src/Object/Post.php:731 #, php-format +msgid "Commented by: %s" +msgstr "" + +#: src/Object/Post.php:736 +#, php-format msgid "Reacted with %s by: %s" msgstr "" -#: src/Object/Post.php:754 +#: src/Object/Post.php:759 #, php-format msgid "Quote shared by: %s" msgstr ""