Merge pull request #13605 from annando/button-counter

Frio: The activity buttons now have got counters
This commit is contained in:
Hypolite Petovan 2023-11-04 15:36:22 -07:00 committed by GitHub
commit 19c5667d9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 387 additions and 282 deletions

View file

@ -891,6 +891,7 @@ class Conversation
if ($this->config->get('system', 'emoji_activities')) {
$emojis = $this->getEmojis($uriids);
$quoteshares = $this->getQuoteShares($uriids);
$condition = DBA::mergeConditions($condition, ["(`gravity` != ? OR `origin`)", ItemModel::GRAVITY_ACTIVITY]);
}
@ -1013,6 +1014,7 @@ class Conversation
foreach ($items as $key => $row) {
$items[$key]['emojis'] = $emojis[$key] ?? [];
$items[$key]['quoteshares'] = $quoteshares[$key] ?? [];
$always_display = in_array($mode, [self::MODE_CONTACTS, self::MODE_CONTACT_POSTS]);
@ -1056,19 +1058,24 @@ class Conversation
];
$index_list = array_values($activity_emoji);
$verbs = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT]);
$verbs = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT, Activity::POST]);
$condition = DBA::mergeConditions(['parent-uri-id' => $uriids, 'gravity' => ItemModel::GRAVITY_ACTIVITY, 'verb' => $verbs], ["NOT `deleted`"]);
$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`, 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`";
$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 = [];
$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']];
} else {
$emoji = '';
}
if (!isset($index_list[$emoji])) {
$index_list[] = $emoji;
}
@ -1084,6 +1091,31 @@ class Conversation
return $emojis;
}
/**
* Fetch quote shares from the conversation
*
* @param array $uriids
* @return array
*/
private function getQuoteShares(array $uriids): array
{
$condition = DBA::mergeConditions(['quote-uri-id' => $uriids], ["NOT `quote-uri-id` IS NULL"]);
$separator = chr(255) . chr(255) . chr(255);
$sql = "SELECT `quote-uri-id`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-content` INNER JOIN `post` ON `post`.`uri-id` = `post-content`.`uri-id` INNER JOIN `contact` ON `post`.`author-id` = `contact`.`id` WHERE " . array_shift($condition) . " GROUP BY `quote-uri-id`";
$quotes = [];
$rows = DBA::p($sql, $condition);
while ($row = DBA::fetch($rows)) {
$quotes[$row['quote-uri-id']]['total'] = $row['total'];
$quotes[$row['quote-uri-id']]['title'] = array_unique(explode($separator, $row['title']));
}
DBA::close($rows);
return $quotes;
}
/**
* Plucks the children of the given parent from a given item list.
*

View file

@ -636,7 +636,7 @@ class Event
{
$fmt = DI::l10n()->t('l, F j');
$item = Post::selectFirst(['plink', 'author-name', 'author-network', 'author-id', 'author-avatar', 'author-link', 'private', 'uri-id'], ['id' => $event['itemid']]);
$item = Post::selectFirst(['plink', 'author-name', 'author-network', 'author-id', 'author-avatar', 'author-link', 'author-alias', 'private', 'uri-id'], ['id' => $event['itemid']]);
if (empty($item)) {
// Using default values when no item had been found
$item = ['plink' => '', 'author-name' => '', 'author-avatar' => '', 'author-link' => '', 'private' => Item::PUBLIC, 'uri-id' => ($event['uri-id'] ?? 0)];

View file

@ -320,7 +320,7 @@ class Post
$location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: '');
// process action responses - e.g. like/dislike/attend/agree/whatever
$response_verbs = ['like', 'dislike', 'announce'];
$response_verbs = ['like', 'dislike', 'announce', 'comment'];
$isevent = false;
$attend = [];
@ -335,14 +335,31 @@ class Post
}
}
$emojis = $this->getEmojis($item);
$verbs = [
'like' => Activity::LIKE,
'dislike' => Activity::DISLIKE,
'announce' => Activity::ANNOUNCE,
'comment' => Activity::POST,
'attendyes' => Activity::ATTEND,
'attendno' => Activity::ATTENDNO,
'attendmaybe' => Activity::ATTENDMAYBE,
];
$reactions = $emojis;
$responses = [];
foreach ($response_verbs as $value => $verb) {
$responses[$verb] = [
'self' => $conv_responses[$verb][$item['uri-id']]['self'] ?? 0,
'output' => !empty($conv_responses[$verb][$item['uri-id']]) ? DI::conversation()->formatActivity($conv_responses[$verb][$item['uri-id']]['links'], $verb, $item['uri-id']) : '',
'total' => $emojis[$verbs[$verb]]['total'] ?? '',
'title' => $emojis[$verbs[$verb]]['title'] ?? '',
];
unset($reactions[$verbs[$verb]]);
}
unset($emojis[Activity::POST]);
/*
* We should avoid doing this all the time, but it depends on the conversation mode
* And the conv mode may change when we change the conv, or it changes its mode
@ -576,7 +593,9 @@ class Post
'vote' => $buttons,
'like_html' => $responses['like']['output'],
'dislike_html' => $responses['dislike']['output'],
'emojis' => $this->getEmojis($item),
'emojis' => $emojis,
'quoteshares' => $this->getQuoteShares($item['quoteshares']),
'reactions' => $reactions,
'responses' => $responses,
'switchcomment' => DI::l10n()->t('Comment'),
'reply_label' => DI::l10n()->t('Reply to %s', $profile_name),
@ -662,6 +681,7 @@ class Post
$emojis = [];
foreach ($item['emojis'] as $index => $element) {
$key = $element['verb'];
$actors = implode(', ', $element['title']);
switch ($element['verb']) {
case Activity::ANNOUNCE:
@ -699,18 +719,38 @@ class Post
$icon = ['fa' => 'fa-times', 'icon' => 'icon-remove'];
break;
case Activity::POST:
$title = DI::l10n()->t('Commented by: %s', $actors);
$icon = ['fa' => 'fa-commenting', 'icon' => 'icon-commenting'];
break;
default:
$title = DI::l10n()->t('Reacted with %s by: %s', $element['emoji'], $actors);
$icon = [];
$key = $element['emoji'];
break;
}
$emojis[$index] = ['emoji' => $element['emoji'], 'total' => $element['total'], 'title' => $title, 'icon' => $icon];
$emojis[$key] = ['emoji' => $element['emoji'], 'total' => $element['total'], 'title' => $title, 'icon' => $icon];
}
ksort($emojis);
return $emojis;
}
/**
* Fetch quote shares
*
* @param array $quoteshares
* @return array
*/
private function getQuoteShares($quoteshares)
{
if (empty($quoteshares)) {
return [];
}
return ['total' => $quoteshares['total'], 'title' => DI::l10n()->t('Quote shared by: %s', implode(', ', $quoteshares['title']))];
}
/**
* @return integer
*/

View file

@ -110,6 +110,12 @@ span.connector {
margin: 0;
}
.wall-item-response {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.type-link blockquote, .type-video blockquote {
margin-left: 0px;
max-height: 160px;

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2023.09-rc\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-03 05:35+0000\n"
"POT-Creation-Date: 2023-11-04 14:11+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -293,9 +293,9 @@ msgid "Insert web link"
msgstr ""
#: mod/message.php:201 mod/message.php:357 mod/photos.php:1301
#: src/Content/Conversation.php:399 src/Content/Conversation.php:1549
#: src/Content/Conversation.php:399 src/Content/Conversation.php:1581
#: src/Module/Item/Compose.php:206 src/Module/Post/Edit.php:145
#: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:587
#: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:606
msgid "Please wait"
msgstr ""
@ -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:1106 view/theme/duepuntozero/config.php:85
#: src/Object/Post.php:1153 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:1103
#: src/Object/Post.php:1150
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:581
#: src/Object/Post.php:1105
#: src/Module/Moderation/Reports.php:95 src/Object/Post.php:600
#: src/Object/Post.php:1152
msgid "Comment"
msgstr ""
#: mod/photos.php:1143 mod/photos.php:1199 mod/photos.php:1279
#: src/Content/Conversation.php:414 src/Module/Calendar/Event/Form.php:248
#: src/Module/Item/Compose.php:201 src/Module/Post/Edit.php:165
#: src/Object/Post.php:1119
#: src/Object/Post.php:1166
msgid "Preview"
msgstr ""
#: mod/photos.php:1144 src/Content/Conversation.php:367
#: src/Module/Post/Edit.php:130 src/Object/Post.php:1107
#: src/Module/Post/Edit.php:130 src/Object/Post.php:1154
msgid "Loading..."
msgstr ""
#: mod/photos.php:1236 src/Content/Conversation.php:1464
#: mod/photos.php:1236 src/Content/Conversation.php:1496
#: src/Object/Post.php:261
msgid "Select"
msgstr ""
#: mod/photos.php:1237 src/Content/Conversation.php:1465
#: mod/photos.php:1237 src/Content/Conversation.php:1497
#: src/Module/Moderation/Users/Active.php:136
#: src/Module/Moderation/Users/Blocked.php:136
#: src/Module/Moderation/Users/Index.php:151
@ -639,19 +639,19 @@ msgstr ""
msgid "Delete"
msgstr ""
#: mod/photos.php:1298 src/Object/Post.php:409
#: mod/photos.php:1298 src/Object/Post.php:426
msgid "Like"
msgstr ""
#: mod/photos.php:1299 src/Object/Post.php:409
#: mod/photos.php:1299 src/Object/Post.php:426
msgid "I like this (toggle)"
msgstr ""
#: mod/photos.php:1300 src/Object/Post.php:410
#: mod/photos.php:1300 src/Object/Post.php:427
msgid "Dislike"
msgstr ""
#: mod/photos.php:1302 src/Object/Post.php:410
#: mod/photos.php:1302 src/Object/Post.php:427
msgid "I don't like this (toggle)"
msgstr ""
@ -961,7 +961,7 @@ msgstr ""
msgid "Enter user nickname: "
msgstr ""
#: src/Console/User.php:182 src/Model/User.php:736
#: src/Console/User.php:182 src/Model/User.php:776
#: src/Module/Api/Twitter/ContactEndpoint.php:74
#: src/Module/Moderation/Users/Active.php:71
#: src/Module/Moderation/Users/Blocked.php:71
@ -1244,7 +1244,7 @@ msgid "Visible to <strong>everybody</strong>"
msgstr ""
#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:200
#: src/Object/Post.php:1118
#: src/Object/Post.php:1165
msgid "Please enter a image/video/audio/webpage URL:"
msgstr ""
@ -1289,52 +1289,52 @@ msgid "attach file"
msgstr ""
#: src/Content/Conversation.php:372 src/Module/Item/Compose.php:190
#: src/Module/Post/Edit.php:171 src/Object/Post.php:1108
#: src/Module/Post/Edit.php:171 src/Object/Post.php:1155
msgid "Bold"
msgstr ""
#: src/Content/Conversation.php:373 src/Module/Item/Compose.php:191
#: src/Module/Post/Edit.php:172 src/Object/Post.php:1109
#: src/Module/Post/Edit.php:172 src/Object/Post.php:1156
msgid "Italic"
msgstr ""
#: src/Content/Conversation.php:374 src/Module/Item/Compose.php:192
#: src/Module/Post/Edit.php:173 src/Object/Post.php:1110
#: src/Module/Post/Edit.php:173 src/Object/Post.php:1157
msgid "Underline"
msgstr ""
#: src/Content/Conversation.php:375 src/Module/Item/Compose.php:193
#: src/Module/Post/Edit.php:174 src/Object/Post.php:1112
#: src/Module/Post/Edit.php:174 src/Object/Post.php:1159
msgid "Quote"
msgstr ""
#: src/Content/Conversation.php:376 src/Module/Item/Compose.php:194
#: src/Module/Post/Edit.php:175 src/Object/Post.php:1113
#: src/Module/Post/Edit.php:175 src/Object/Post.php:1160
msgid "Add emojis"
msgstr ""
#: src/Content/Conversation.php:377 src/Module/Item/Compose.php:195
#: src/Object/Post.php:1111
#: src/Object/Post.php:1158
msgid "Content Warning"
msgstr ""
#: src/Content/Conversation.php:378 src/Module/Item/Compose.php:196
#: src/Module/Post/Edit.php:176 src/Object/Post.php:1114
#: src/Module/Post/Edit.php:176 src/Object/Post.php:1161
msgid "Code"
msgstr ""
#: src/Content/Conversation.php:379 src/Module/Item/Compose.php:197
#: src/Object/Post.php:1115
#: src/Object/Post.php:1162
msgid "Image"
msgstr ""
#: src/Content/Conversation.php:380 src/Module/Item/Compose.php:198
#: src/Module/Post/Edit.php:177 src/Object/Post.php:1116
#: src/Module/Post/Edit.php:177 src/Object/Post.php:1163
msgid "Link"
msgstr ""
#: src/Content/Conversation.php:381 src/Module/Item/Compose.php:199
#: src/Module/Post/Edit.php:178 src/Object/Post.php:1117
#: src/Module/Post/Edit.php:178 src/Object/Post.php:1164
msgid "Link or Media"
msgstr ""
@ -1490,30 +1490,30 @@ msgstr ""
msgid "Pushed to us"
msgstr ""
#: src/Content/Conversation.php:1492 src/Object/Post.php:248
#: src/Content/Conversation.php:1524 src/Object/Post.php:248
msgid "Pinned item"
msgstr ""
#: src/Content/Conversation.php:1509 src/Object/Post.php:530
#: src/Object/Post.php:531
#: src/Content/Conversation.php:1541 src/Object/Post.php:547
#: src/Object/Post.php:548
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
#: src/Content/Conversation.php:1522 src/Object/Post.php:518
#: src/Content/Conversation.php:1554 src/Object/Post.php:535
msgid "Categories:"
msgstr ""
#: src/Content/Conversation.php:1523 src/Object/Post.php:519
#: src/Content/Conversation.php:1555 src/Object/Post.php:536
msgid "Filed under:"
msgstr ""
#: src/Content/Conversation.php:1531 src/Object/Post.php:544
#: src/Content/Conversation.php:1563 src/Object/Post.php:561
#, php-format
msgid "%s from %s"
msgstr ""
#: src/Content/Conversation.php:1547
#: src/Content/Conversation.php:1579
msgid "View in context"
msgstr ""
@ -1627,7 +1627,7 @@ msgstr ""
msgid "Posts that mention or involve you"
msgstr ""
#: src/Content/Conversation/Factory/Network.php:42 src/Object/Post.php:381
#: src/Content/Conversation/Factory/Network.php:42 src/Object/Post.php:398
msgid "Starred"
msgstr ""
@ -1749,7 +1749,7 @@ msgstr ""
#: src/Content/GroupManager.php:152 src/Content/Nav.php:278
#: src/Content/Text/HTML.php:880 src/Content/Widget.php:537
#: src/Model/User.php:1298
#: src/Model/User.php:1338
msgid "Groups"
msgstr ""
@ -1846,7 +1846,7 @@ msgstr ""
msgid "Ignore %s server"
msgstr ""
#: src/Content/Item.php:443 src/Object/Post.php:491
#: src/Content/Item.php:443 src/Object/Post.php:508
msgid "Languages"
msgstr ""
@ -3648,145 +3648,145 @@ msgstr ""
msgid "Contact information and Social Networks"
msgstr ""
#: src/Model/User.php:225 src/Model/User.php:1211
#: src/Model/User.php:225 src/Model/User.php:1251
msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr ""
#: src/Model/User.php:645 src/Model/User.php:678
#: src/Model/User.php:685 src/Model/User.php:718
msgid "Login failed"
msgstr ""
#: src/Model/User.php:710
#: src/Model/User.php:750
msgid "Not enough information to authenticate"
msgstr ""
#: src/Model/User.php:831
#: src/Model/User.php:871
msgid "Password can't be empty"
msgstr ""
#: src/Model/User.php:873
#: src/Model/User.php:913
msgid "Empty passwords are not allowed."
msgstr ""
#: src/Model/User.php:877
#: src/Model/User.php:917
msgid ""
"The new password has been exposed in a public data dump, please choose "
"another."
msgstr ""
#: src/Model/User.php:881
#: src/Model/User.php:921
msgid "The password length is limited to 72 characters."
msgstr ""
#: src/Model/User.php:885
#: src/Model/User.php:925
msgid "The password can't contain white spaces nor accentuated letters"
msgstr ""
#: src/Model/User.php:1094
#: src/Model/User.php:1134
msgid "Passwords do not match. Password unchanged."
msgstr ""
#: src/Model/User.php:1101
#: src/Model/User.php:1141
msgid "An invitation is required."
msgstr ""
#: src/Model/User.php:1105
#: src/Model/User.php:1145
msgid "Invitation could not be verified."
msgstr ""
#: src/Model/User.php:1113
#: src/Model/User.php:1153
msgid "Invalid OpenID url"
msgstr ""
#: src/Model/User.php:1126 src/Security/Authentication.php:241
#: src/Model/User.php:1166 src/Security/Authentication.php:241
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
msgstr ""
#: src/Model/User.php:1126 src/Security/Authentication.php:241
#: src/Model/User.php:1166 src/Security/Authentication.php:241
msgid "The error message was:"
msgstr ""
#: src/Model/User.php:1132
#: src/Model/User.php:1172
msgid "Please enter the required information."
msgstr ""
#: src/Model/User.php:1146
#: src/Model/User.php:1186
#, php-format
msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values."
msgstr ""
#: src/Model/User.php:1153
#: src/Model/User.php:1193
#, php-format
msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters."
msgstr[0] ""
msgstr[1] ""
#: src/Model/User.php:1157
#: src/Model/User.php:1197
#, php-format
msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters."
msgstr[0] ""
msgstr[1] ""
#: src/Model/User.php:1165
#: src/Model/User.php:1205
msgid "That doesn't appear to be your full (First Last) name."
msgstr ""
#: src/Model/User.php:1170
#: src/Model/User.php:1210
msgid "Your email domain is not among those allowed on this site."
msgstr ""
#: src/Model/User.php:1174
#: src/Model/User.php:1214
msgid "Not a valid email address."
msgstr ""
#: src/Model/User.php:1177
#: src/Model/User.php:1217
msgid "The nickname was blocked from registration by the nodes admin."
msgstr ""
#: src/Model/User.php:1181 src/Model/User.php:1187
#: src/Model/User.php:1221 src/Model/User.php:1227
msgid "Cannot use that email."
msgstr ""
#: src/Model/User.php:1193
#: src/Model/User.php:1233
msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr ""
#: src/Model/User.php:1201 src/Model/User.php:1258
#: src/Model/User.php:1241 src/Model/User.php:1298
msgid "Nickname is already registered. Please choose another."
msgstr ""
#: src/Model/User.php:1245 src/Model/User.php:1249
#: src/Model/User.php:1285 src/Model/User.php:1289
msgid "An error occurred during registration. Please try again."
msgstr ""
#: src/Model/User.php:1272
#: src/Model/User.php:1312
msgid "An error occurred creating your default profile. Please try again."
msgstr ""
#: src/Model/User.php:1279
#: src/Model/User.php:1319
msgid "An error occurred creating your self contact. Please try again."
msgstr ""
#: src/Model/User.php:1284
#: src/Model/User.php:1324
msgid "Friends"
msgstr ""
#: src/Model/User.php:1288
#: src/Model/User.php:1328
msgid ""
"An error occurred creating your default contact circle. Please try again."
msgstr ""
#: src/Model/User.php:1332
#: src/Model/User.php:1372
msgid "Profile Photos"
msgstr ""
#: src/Model/User.php:1512
#: src/Model/User.php:1552
#, php-format
msgid ""
"\n"
@ -3794,7 +3794,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you."
msgstr ""
#: src/Model/User.php:1515
#: src/Model/User.php:1555
#, php-format
msgid ""
"\n"
@ -3830,12 +3830,12 @@ msgid ""
"\t\tThank you and welcome to %4$s."
msgstr ""
#: src/Model/User.php:1547 src/Model/User.php:1653
#: src/Model/User.php:1587 src/Model/User.php:1693
#, php-format
msgid "Registration details for %s"
msgstr ""
#: src/Model/User.php:1567
#: src/Model/User.php:1607
#, php-format
msgid ""
"\n"
@ -3851,12 +3851,12 @@ msgid ""
"\t\t"
msgstr ""
#: src/Model/User.php:1586
#: src/Model/User.php:1626
#, php-format
msgid "Registration at %s"
msgstr ""
#: src/Model/User.php:1610
#: src/Model/User.php:1650
#, php-format
msgid ""
"\n"
@ -3865,7 +3865,7 @@ msgid ""
"\t\t\t"
msgstr ""
#: src/Model/User.php:1618
#: src/Model/User.php:1658
#, php-format
msgid ""
"\n"
@ -3903,7 +3903,7 @@ msgid ""
"\t\t\tThank you and welcome to %2$s."
msgstr ""
#: src/Model/User.php:1680
#: src/Model/User.php:1720
msgid ""
"User with delegates can't be removed, please remove delegate users first"
msgstr ""
@ -6089,7 +6089,7 @@ msgid "Only show blocked contacts"
msgstr ""
#: src/Module/Contact.php:368 src/Module/Contact.php:440
#: src/Module/Settings/Server/Index.php:107 src/Object/Post.php:369
#: src/Module/Settings/Server/Index.php:107 src/Object/Post.php:386
msgid "Ignored"
msgstr ""
@ -11997,208 +11997,218 @@ msgstr ""
msgid "I might attend"
msgstr ""
#: src/Object/Post.php:364
#: src/Object/Post.php:381
msgid "Ignore thread"
msgstr ""
#: src/Object/Post.php:365
#: src/Object/Post.php:382
msgid "Unignore thread"
msgstr ""
#: src/Object/Post.php:366
#: src/Object/Post.php:383
msgid "Toggle ignore status"
msgstr ""
#: src/Object/Post.php:376
#: src/Object/Post.php:393
msgid "Add star"
msgstr ""
#: src/Object/Post.php:377
#: src/Object/Post.php:394
msgid "Remove star"
msgstr ""
#: src/Object/Post.php:378
#: src/Object/Post.php:395
msgid "Toggle star status"
msgstr ""
#: src/Object/Post.php:389
#: src/Object/Post.php:406
msgid "Pin"
msgstr ""
#: src/Object/Post.php:390
#: src/Object/Post.php:407
msgid "Unpin"
msgstr ""
#: src/Object/Post.php:391
#: src/Object/Post.php:408
msgid "Toggle pin status"
msgstr ""
#: src/Object/Post.php:394
#: src/Object/Post.php:411
msgid "Pinned"
msgstr ""
#: src/Object/Post.php:399
#: src/Object/Post.php:416
msgid "Add tag"
msgstr ""
#: src/Object/Post.php:412
#: src/Object/Post.php:429
msgid "Quote share this"
msgstr ""
#: src/Object/Post.php:412
#: src/Object/Post.php:429
msgid "Quote Share"
msgstr ""
#: src/Object/Post.php:415
#: src/Object/Post.php:432
msgid "Reshare this"
msgstr ""
#: src/Object/Post.php:415
#: src/Object/Post.php:432
msgid "Reshare"
msgstr ""
#: src/Object/Post.php:416
#: src/Object/Post.php:433
msgid "Cancel your Reshare"
msgstr ""
#: src/Object/Post.php:416
#: src/Object/Post.php:433
msgid "Unshare"
msgstr ""
#: src/Object/Post.php:467
#: src/Object/Post.php:484
#, php-format
msgid "%s (Received %s)"
msgstr ""
#: src/Object/Post.php:473
#: src/Object/Post.php:490
msgid "Comment this item on your system"
msgstr ""
#: src/Object/Post.php:473
#: src/Object/Post.php:490
msgid "Remote comment"
msgstr ""
#: src/Object/Post.php:495
#: src/Object/Post.php:512
msgid "Share via ..."
msgstr ""
#: src/Object/Post.php:495
#: src/Object/Post.php:512
msgid "Share via external services"
msgstr ""
#: src/Object/Post.php:502
#: src/Object/Post.php:519
msgid "Unknown parent"
msgstr ""
#: src/Object/Post.php:506
#: src/Object/Post.php:523
#, php-format
msgid "in reply to %s"
msgstr ""
#: src/Object/Post.php:508
#: src/Object/Post.php:525
msgid "Parent is probably private or not federated."
msgstr ""
#: src/Object/Post.php:532
#: src/Object/Post.php:549
msgid "to"
msgstr ""
#: src/Object/Post.php:533
#: src/Object/Post.php:550
msgid "via"
msgstr ""
#: src/Object/Post.php:534
#: src/Object/Post.php:551
msgid "Wall-to-Wall"
msgstr ""
#: src/Object/Post.php:535
#: src/Object/Post.php:552
msgid "via Wall-To-Wall:"
msgstr ""
#: src/Object/Post.php:582
#: src/Object/Post.php:601
#, php-format
msgid "Reply to %s"
msgstr ""
#: src/Object/Post.php:585
#: src/Object/Post.php:604
msgid "More"
msgstr ""
#: src/Object/Post.php:604
#: src/Object/Post.php:623
msgid "Notifier task is pending"
msgstr ""
#: src/Object/Post.php:605
#: src/Object/Post.php:624
msgid "Delivery to remote servers is pending"
msgstr ""
#: src/Object/Post.php:606
#: src/Object/Post.php:625
msgid "Delivery to remote servers is underway"
msgstr ""
#: src/Object/Post.php:607
#: src/Object/Post.php:626
msgid "Delivery to remote servers is mostly done"
msgstr ""
#: src/Object/Post.php:608
#: src/Object/Post.php:627
msgid "Delivery to remote servers is done"
msgstr ""
#: src/Object/Post.php:630
#: src/Object/Post.php:649
#, php-format
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
msgstr[1] ""
#: src/Object/Post.php:631
#: src/Object/Post.php:650
msgid "Show more"
msgstr ""
#: src/Object/Post.php:632
#: src/Object/Post.php:651
msgid "Show fewer"
msgstr ""
#: src/Object/Post.php:668
#: src/Object/Post.php:687
#, php-format
msgid "Reshared by: %s"
msgstr ""
#: src/Object/Post.php:673
#: src/Object/Post.php:693
#, php-format
msgid "Viewed by: %s"
msgstr ""
#: src/Object/Post.php:678
#: src/Object/Post.php:699
#, php-format
msgid "Liked by: %s"
msgstr ""
#: src/Object/Post.php:683
#: src/Object/Post.php:705
#, php-format
msgid "Disliked by: %s"
msgstr ""
#: src/Object/Post.php:688
#: src/Object/Post.php:711
#, php-format
msgid "Attended by: %s"
msgstr ""
#: src/Object/Post.php:693
#: src/Object/Post.php:717
#, php-format
msgid "Maybe attended by: %s"
msgstr ""
#: src/Object/Post.php:698
#: src/Object/Post.php:723
#, php-format
msgid "Not attended by: %s"
msgstr ""
#: src/Object/Post.php:703
#: src/Object/Post.php:729
#, php-format
msgid "Commented by: %s"
msgstr ""
#: src/Object/Post.php:735
#, php-format
msgid "Reacted with %s by: %s"
msgstr ""
#: src/Object/Post.php:758
#, php-format
msgid "Quote shared by: %s"
msgstr ""
#: src/Protocol/ActivityPub/Receiver.php:523
msgid "Chat"
msgstr ""

View file

@ -1985,6 +1985,8 @@ code > .hl-main {
.wall-item-actions button {
color: $font_color_darker;
background-color: transparent;
padding-left: 5px;
padding-right: 5px;
}
.wall-item-actions .active {
font-weight: bold;

View file

@ -309,18 +309,22 @@ as the value of $top_child_total (this is done at the end of this file)
{{if $item.vote}}
{{if $item.vote.like}}
<span class="wall-item-response">
<button type="button" class="btn-link button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></button>
{{/if}}
{{if $item.vote.like AND $item.vote.dislike}}
<span role="presentation" class="separator"></span>
<span title="{{$item.responses.like.title}}">{{$item.responses.like.total}}</span>
</span>
{{/if}}
{{if $item.vote.dislike}}
<span class="wall-item-response">
<button type="button" class="btn-link button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i></button>
<span title="{{$item.responses.dislike.title}}">{{$item.responses.dislike.total}}</span>
</span>
{{/if}}
{{if ($item.vote.like OR $item.vote.dislike) AND $item.comment_html}}
<span role="presentation" class="separator"></span>
{{/if}}
{{foreach $item.reactions as $emoji}}
<span class="wall-item-emoji" title="{{$emoji.title}}">{{$emoji.emoji}} {{$emoji.total}}</span>
{{/foreach}}
{{/if}}
{{if $item.remote_comment}}
@ -329,27 +333,47 @@ as the value of $top_child_total (this is done at the end of this file)
{{* Button to open the comment text field *}}
{{if $item.comment_html}}
<span class="wall-item-response">
<button type="button" class="btn-link button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i></button>
<span title="{{$item.responses.comment.title}}">{{$item.responses.comment.total}}</span>
</span>
{{/if}}
{{* Button for sharing the item *}}
{{if $item.vote}}
{{if $item.vote.share OR $item.vote.announce}}
{{if $item.vote.like OR $item.vote.dislike OR $item.comment_html}}
<span role="presentation" class="separator"></span>
{{/if}}
{{/if}}
{{if $item.vote.announce}}
<span class="wall-item-response">
<button type="button" class="btn-link button-announces{{if $item.responses.announce.self}} active" aria-pressed="true{{/if}}" id="announce-{{$item.id}}" title="{{$item.vote.announce.0}}" onclick="doActivityItemAction({{$item.id}}, 'announce'{{if $item.responses.announce.self}}, true{{/if}});" ><i class="fa fa-retweet" aria-hidden="true"></i></button>
<span role="presentation" class="separator"></span>
<span title="{{$item.responses.announce.title}}">{{$item.responses.announce.total}}</span>
</span>
{{/if}}
{{if $item.vote.share}}
<span class="wall-item-response">
<button type="button" class="btn-link button-votes" id="share-{{$item.id}}" title="{{$item.vote.share.0}}" onclick="jotShare({{$item.id}});"><i class="fa fa-share" aria-hidden="true"></i></button>
<span title="{{$item.quoteshares.title}}">{{$item.quoteshares.total}}</span>
</span>
{{/if}}
{{/if}}
{{* Event attendance buttons *}}
{{if $item.isevent}}
<span class="wall-item-response">
<button type="button" class="btn-link button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
<span title="{{$item.responses.attendyes.title}}">{{$item.responses.attendyes.total}}</span>
</span>
<span class="wall-item-response">
<button type="button" class="btn-link button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
<span title="{{$item.responses.attendno.title}}">{{$item.responses.attendno.total}}</span>
</span>
<span class="wall-item-response">
<button type="button" class="btn-link button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
<span title="{{$item.responses.attendmaybe.title}}">{{$item.responses.attendmaybe.total}}</span>
</span>
{{/if}}
</div>
</div>
<span class="wall-item-actions-right hidden-xs">
{{* Put additional actions in a dropdown menu *}}
<span role="presentation" class="separator"></span>
<span class="more-links btn-group{{if $item.thread_level > 1}} dropup{{/if}}">
<button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" id="dropdownMenuOptions-{{$item.id}}" aria-haspopup="true" aria-expanded="false" title="{{$item.menu}}"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></button>
<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dropdownMenuOptions-{{$item.id}}">
@ -449,17 +473,6 @@ as the value of $top_child_total (this is done at the end of this file)
{{/if}}
</ul>
</span>
</div>
</div>
<span class="wall-item-actions-right hidden-xs">
{{* Event attendance buttons *}}
{{if $item.isevent}}
<span class="vote-event">
<button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
<button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
<button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
</span>
{{/if}}
<span class="pull-right checkbox">
{{if $item.drop && $item.drop.pagedrop}}
<input type="checkbox" title="{{$item.drop.select}}" name="itemselected[]" id="checkbox-{{$item.id}}" class="item-select" value="{{$item.id}}" />
@ -473,16 +486,22 @@ as the value of $top_child_total (this is done at the end of this file)
{{* Buttons for like and dislike *}}
{{if $item.vote}}
{{if $item.vote.like}}
<button type="button" class="btn button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></button>
<button type="button" class="btn button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i>
<span title="{{$item.responses.like.title}}">{{$item.responses.like.total}}</span>
</button>
{{/if}}
{{if $item.vote.dislike}}
<button type="button" class="btn button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i></button>
<button type="button" class="btn button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i>
<span title="{{$item.responses.dislike.title}}">{{$item.responses.dislike.total}}</span>
</button>
{{/if}}
{{/if}}
{{* Button to open the comment text field *}}
{{if $item.comment_html}}
<button type="button" class="btn button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i></button>
<button type="button" class="btn button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i>
<span title="{{$item.responses.comment.title}}">{{$item.responses.comment.total}}</span>
</button>
{{/if}}
{{if $item.vote.announce OR $item.vote.share}}
@ -526,11 +545,15 @@ as the value of $top_child_total (this is done at the end of this file)
{{* Event attendance buttons *}}
{{if $item.isevent}}
<div class="btn-group btn-group-event" role="group">
<button type="button" class="btn btn-default button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
<button type="button" class="btn btn-default button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
<button type="button" class="btn btn-default button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
</div>
<button type="button" class="btn button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i>
<span title="{{$item.responses.attendyes.title}}">{{$item.responses.attendyes.total}}</span>
</button>
<button type="button" class="btn button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i>
<span title="{{$item.responses.attendno.title}}">{{$item.responses.attendno.total}}</span>
</button>
<button type="button" class="btn button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i>
<span title="{{$item.responses.attendmaybe.title}}">{{$item.responses.attendmaybe.total}}</span>
</button>
{{/if}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread || $item.ignore || ($item.drop && $item.drop.dropping)}}
@ -615,15 +638,7 @@ as the value of $top_child_total (this is done at the end of this file)
<div class="wall-item-links"></div>
{{* Display likes, dislike and attendance stats *}}
{{if $item.emojis}}
{{foreach $item.emojis as $emoji}}
{{if $emoji.icon.fa}}
<span class="wall-item-emoji" title="{{$emoji.title}}"><i class="fa {{$emoji.icon.fa}}" aria-hidden="true"></i> {{$emoji.total}}</span>
{{else}}
<span class="wall-item-emoji" title="{{$emoji.title}}">{{$emoji.emoji}} {{$emoji.total}}</span>
{{/if}}
{{/foreach}}
{{elseif $item.responses}}
{{if !$item.emojis && $item.responses}}
<div class="wall-item-responses">
{{foreach $item.responses as $verb=>$response}}
<div class="wall-item-{{$verb}}" id="wall-item-{{$verb}}-{{$item.id}}">{{$response.output nofilter}}</div>