Issue 13844: User defined channels based on the network

This commit is contained in:
Michael 2024-02-04 07:14:57 +00:00
parent 672186e549
commit 7924085c94
10 changed files with 188 additions and 110 deletions

View file

@ -1,6 +1,6 @@
-- ------------------------------------------ -- ------------------------------------------
-- Friendica 2024.03-dev (Yellow Archangel) -- Friendica 2024.03-dev (Yellow Archangel)
-- DB_UPDATE_VERSION 1550 -- DB_UPDATE_VERSION 1551
-- ------------------------------------------ -- ------------------------------------------
@ -2106,6 +2106,37 @@ CREATE VIEW `post-timeline-view` AS SELECT
STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = `post-user`.`owner-id` STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = `post-user`.`owner-id`
LEFT JOIN `contact` AS `causer` ON `causer`.`id` = `post-user`.`causer-id`; LEFT JOIN `contact` AS `causer` ON `causer`.`id` = `post-user`.`causer-id`;
--
-- VIEW post-searchindex-user-view
--
DROP VIEW IF EXISTS `post-searchindex-user-view`;
CREATE VIEW `post-searchindex-user-view` AS SELECT
`post-thread-user`.`uid` AS `uid`,
`post-searchindex`.`uri-id` AS `uri-id`,
`post-searchindex`.`owner-id` AS `owner-id`,
`post-searchindex`.`media-type` AS `media-type`,
`post-searchindex`.`language` AS `language`,
`post-searchindex`.`searchtext` AS `searchtext`,
`post-searchindex`.`size` AS `size`,
`post-thread-user`.`commented` AS `commented`,
`post-thread-user`.`received` AS `received`,
`post-thread-user`.`created` AS `created`,
`post-searchindex`.`language` AS `restricted`,
0 AS `comments`,
0 AS `activities`
FROM `post-thread-user`
INNER JOIN `post-searchindex` ON `post-searchindex`.`uri-id` = `post-thread-user`.`uri-id`
INNER JOIN `post-user` ON `post-user`.`id` = `post-thread-user`.`post-user-id`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `post-thread-user`.`contact-id`
STRAIGHT_JOIN `contact` AS `authorcontact` ON `authorcontact`.`id` = `post-thread-user`.`author-id`
STRAIGHT_JOIN `contact` AS `ownercontact` ON `ownercontact`.`id` = `post-thread-user`.`owner-id`
WHERE `post-user`.`visible` AND NOT `post-user`.`deleted`
AND (NOT `contact`.`readonly` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`)
AND (`post-thread-user`.`hidden` IS NULL OR NOT `post-thread-user`.`hidden`)
AND NOT `authorcontact`.`blocked` AND NOT `ownercontact`.`blocked`
AND NOT EXISTS(SELECT `cid` FROM `user-contact` WHERE `uid` = `post-thread-user`.`uid` AND `cid` IN (`authorcontact`.`id`, `ownercontact`.`id`) AND (`blocked` OR `ignored`))
AND NOT EXISTS(SELECT `gsid` FROM `user-gserver` WHERE `uid` = `post-thread-user`.`uid` AND `gsid` IN (`authorcontact`.`gsid`, `ownercontact`.`gsid`) AND `ignored`);
-- --
-- VIEW post-user-view -- VIEW post-user-view
-- --

View file

@ -128,7 +128,7 @@ class Channel extends Timeline
} }
if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) { if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) {
$items = $this->getChannelItems(); $items = $this->getChannelItems($request);
$order = 'created'; $order = 'created';
} else { } else {
$items = $this->getCommunityItems(); $items = $this->getCommunityItems();

View file

@ -74,8 +74,6 @@ class Network extends Timeline
protected $star; protected $star;
/** @var int */ /** @var int */
protected $mention; protected $mention;
/** @var string */
protected $order;
/** @var App */ /** @var App */
protected $app; protected $app;
@ -215,7 +213,7 @@ class Network extends Timeline
try { try {
if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) { if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) {
$items = $this->getChannelItems(); $items = $this->getChannelItems($request);
} elseif ($this->community->isTimeline($this->selectedTab)) { } elseif ($this->community->isTimeline($this->selectedTab)) {
$items = $this->getCommunityItems(); $items = $this->getCommunityItems();
} else { } else {
@ -360,24 +358,7 @@ class Network extends Timeline
$this->dateFrom = $this->parameters['from'] ?? ''; $this->dateFrom = $this->parameters['from'] ?? '';
$this->dateTo = $this->parameters['to'] ?? ''; $this->dateTo = $this->parameters['to'] ?? '';
switch ($this->order) { $this->setMaxMinByOrder($request);
case 'received':
$this->maxId = $request['last_received'] ?? $this->maxId;
$this->minId = $request['first_received'] ?? $this->minId;
break;
case 'created':
$this->maxId = $request['last_created'] ?? $this->maxId;
$this->minId = $request['first_created'] ?? $this->minId;
break;
case 'uriid':
$this->maxId = $request['last_uriid'] ?? $this->maxId;
$this->minId = $request['first_uriid'] ?? $this->minId;
break;
default:
$this->order = 'commented';
$this->maxId = $request['last_commented'] ?? $this->maxId;
$this->minId = $request['first_commented'] ?? $this->minId;
}
} }
protected function getItems() protected function getItems()

View file

@ -26,6 +26,7 @@ use Friendica\App\Mode;
use Friendica\BaseModule; use Friendica\BaseModule;
use Friendica\Content\Conversation\Collection\Timelines; use Friendica\Content\Conversation\Collection\Timelines;
use Friendica\Content\Conversation\Entity\Channel as ChannelEntity; use Friendica\Content\Conversation\Entity\Channel as ChannelEntity;
use Friendica\Content\Conversation\Entity\UserDefinedChannel as UserDefinedChannelEntity;
use Friendica\Content\Conversation\Repository\UserDefinedChannel; use Friendica\Content\Conversation\Repository\UserDefinedChannel;
use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\Cache\Capability\ICanCache;
use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\Enum\Duration;
@ -41,7 +42,6 @@ use Friendica\Database\DBA;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\Post; use Friendica\Model\Post;
use Friendica\Model\Post\Engagement; use Friendica\Model\Post\Engagement;
use Friendica\Model\Verb;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
@ -72,6 +72,8 @@ class Timeline extends BaseModule
protected $update; protected $update;
/** @var bool */ /** @var bool */
protected $raw; protected $raw;
/** @var string */
protected $order;
/** @var App\Mode $mode */ /** @var App\Mode $mode */
protected $mode; protected $mode;
@ -138,6 +140,8 @@ class Timeline extends BaseModule
$this->itemUriId = 0; $this->itemUriId = 0;
} }
$this->order = 'created';
$this->minId = $request['min_id'] ?? null; $this->minId = $request['min_id'] ?? null;
$this->maxId = $request['max_id'] ?? null; $this->maxId = $request['max_id'] ?? null;
@ -147,6 +151,28 @@ class Timeline extends BaseModule
$this->raw = !empty($request['mode']) && ($request['mode'] == 'raw'); $this->raw = !empty($request['mode']) && ($request['mode'] == 'raw');
} }
protected function setMaxMinByOrder(array $request)
{
switch ($this->order) {
case 'received':
$this->maxId = $request['last_received'] ?? $this->maxId;
$this->minId = $request['first_received'] ?? $this->minId;
break;
case 'created':
$this->maxId = $request['last_created'] ?? $this->maxId;
$this->minId = $request['first_created'] ?? $this->minId;
break;
case 'uriid':
$this->maxId = $request['last_uriid'] ?? $this->maxId;
$this->minId = $request['first_uriid'] ?? $this->minId;
break;
default:
$this->order = 'commented';
$this->maxId = $request['last_commented'] ?? $this->maxId;
$this->minId = $request['first_commented'] ?? $this->minId;
}
}
protected function getNoSharerWidget(string $base): string protected function getNoSharerWidget(string $base): string
{ {
$path = $this->selectedTab; $path = $this->selectedTab;
@ -204,9 +230,9 @@ class Timeline extends BaseModule
* @return array * @return array
* @throws \Exception * @throws \Exception
*/ */
protected function getChannelItems() protected function getChannelItems(array $request)
{ {
$items = $this->getRawChannelItems(); $items = $this->getRawChannelItems($request);
$contacts = $this->database->selectToArray('user-contact', ['cid'], ['channel-frequency' => Contact\User::FREQUENCY_REDUCED, 'cid' => array_column($items, 'owner-id')]); $contacts = $this->database->selectToArray('user-contact', ['cid'], ['channel-frequency' => Contact\User::FREQUENCY_REDUCED, 'cid' => array_column($items, 'owner-id')]);
$reduced = array_column($contacts, 'cid'); $reduced = array_column($contacts, 'cid');
@ -220,8 +246,8 @@ class Timeline extends BaseModule
while (count($selected_items) < $this->itemsPerPage && ++$count < 50 && count($items) > 0) { while (count($selected_items) < $this->itemsPerPage && ++$count < 50 && count($items) > 0) {
$maxposts = round((count($items) / $this->itemsPerPage) * $maxpostperauthor); $maxposts = round((count($items) / $this->itemsPerPage) * $maxpostperauthor);
$minId = $items[array_key_first($items)]['created']; $minId = $items[array_key_first($items)][$this->order];
$maxId = $items[array_key_last($items)]['created']; $maxId = $items[array_key_last($items)][$this->order];
foreach ($items as $item) { foreach ($items as $item) {
if (!in_array($item['owner-id'], $reduced)) { if (!in_array($item['owner-id'], $reduced)) {
@ -252,7 +278,7 @@ class Timeline extends BaseModule
} }
if (count($selected_items) < $this->itemsPerPage) { if (count($selected_items) < $this->itemsPerPage) {
$items = $this->getRawChannelItems(); $items = $this->getRawChannelItems($request);
} }
} }
} else { } else {
@ -271,10 +297,12 @@ class Timeline extends BaseModule
* @return array * @return array
* @throws \Exception * @throws \Exception
*/ */
private function getRawChannelItems() private function getRawChannelItems(array $request)
{ {
$uid = $this->session->getLocalUserId(); $uid = $this->session->getLocalUserId();
$table = 'post-engagement';
if ($this->selectedTab == ChannelEntity::WHATSHOT) { if ($this->selectedTab == ChannelEntity::WHATSHOT) {
if (!is_null($this->accountType)) { if (!is_null($this->accountType)) {
$condition = ["(`comments` > ? OR `activities` > ?) AND `contact-type` = ?", $this->getMedianComments($uid, 4), $this->getMedianActivities($uid, 4), $this->accountType]; $condition = ["(`comments` > ? OR `activities` > ?) AND `contact-type` = ?", $this->getMedianComments($uid, 4), $this->getMedianActivities($uid, 4), $this->accountType];
@ -325,47 +353,57 @@ class Timeline extends BaseModule
$condition = ["`media-type` & ?", 4]; $condition = ["`media-type` & ?", 4];
} elseif ($this->selectedTab == ChannelEntity::LANGUAGE) { } elseif ($this->selectedTab == ChannelEntity::LANGUAGE) {
$condition = ["`language` = ?", User::getLanguageCode($uid)]; $condition = ["`language` = ?", User::getLanguageCode($uid)];
} elseif (is_numeric($this->selectedTab)) { } elseif (is_numeric($this->selectedTab) && !empty($channel = $this->channelRepository->selectById($this->selectedTab, $uid))) {
$condition = $this->getUserChannelConditions($this->selectedTab, $uid); $condition = $this->getUserChannelConditions($channel, $uid);
if (in_array($channel->circle, [-3, -4, -5])) {
$table = 'post-searchindex-user-view';
$condition = DBA::mergeConditions($condition, ['uid' => $uid]);
$orders = ['-3' => 'created', '-4' => 'received', '-5' => 'commented'];
$this->order = $orders[$channel->circle];
}
} }
$this->setMaxMinByOrder($request);
if (($this->selectedTab != ChannelEntity::LANGUAGE) && !is_numeric($this->selectedTab)) { if (($this->selectedTab != ChannelEntity::LANGUAGE) && !is_numeric($this->selectedTab)) {
$condition = $this->addLanguageCondition($uid, $condition); $condition = $this->addLanguageCondition($uid, $condition);
} }
$condition = DBA::mergeConditions($condition, ["(NOT `restricted` OR EXISTS(SELECT `id` FROM `post-user` WHERE `uid` = ? AND `uri-id` = `post-engagement`.`uri-id`))", $uid]); $condition = DBA::mergeConditions($condition, ["(NOT `restricted` OR EXISTS(SELECT `id` FROM `post-user` WHERE `uid` = ? AND `uri-id` = `$table`.`uri-id`))", $uid]);
$condition = DBA::mergeConditions($condition, ["NOT EXISTS(SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `cid` = `post-engagement`.`owner-id` AND (`ignored` OR `blocked` OR `collapsed` OR `is-blocked` OR `channel-frequency` = ?))", $uid, Contact\User::FREQUENCY_NEVER]); $condition = DBA::mergeConditions($condition, ["NOT EXISTS(SELECT `cid` FROM `user-contact` WHERE `uid` = ? AND `cid` = `$table`.`owner-id` AND (`ignored` OR `blocked` OR `collapsed` OR `is-blocked` OR `channel-frequency` = ?))", $uid, Contact\User::FREQUENCY_NEVER]);
if (($this->selectedTab != ChannelEntity::WHATSHOT) && !is_null($this->accountType)) { if (($this->selectedTab != ChannelEntity::WHATSHOT) && !is_null($this->accountType)) {
$condition = DBA::mergeConditions($condition, ['contact-type' => $this->accountType]); $condition = DBA::mergeConditions($condition, ['contact-type' => $this->accountType]);
} }
$params = ['order' => ['created' => true], 'limit' => $this->itemsPerPage]; $params = ['order' => [$this->order => true], 'limit' => $this->itemsPerPage];
if (!empty($this->itemUriId)) { if (!empty($this->itemUriId)) {
$condition = DBA::mergeConditions($condition, ['uri-id' => $this->itemUriId]); $condition = DBA::mergeConditions($condition, ['uri-id' => $this->itemUriId]);
} else { } else {
if ($this->noSharer) { if ($this->noSharer) {
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uid` = ? AND `post-user`.`uri-id` = `post-engagement`.`uri-id`)", $this->session->getLocalUserId()]); $condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uid` = ? AND `post-user`.`uri-id` = `$table`.`uri-id`)", $this->session->getLocalUserId()]);
} }
if (isset($this->maxId)) { if (isset($this->maxId)) {
$condition = DBA::mergeConditions($condition, ["`created` < ?", $this->maxId]); $condition = DBA::mergeConditions($condition, ["`$this->order` < ?", $this->maxId]);
} }
if (isset($this->minId)) { if (isset($this->minId)) {
$condition = DBA::mergeConditions($condition, ["`created` > ?", $this->minId]); $condition = DBA::mergeConditions($condition, ["`$this->order` > ?", $this->minId]);
// Previous page case: we want the items closest to min_id but for that we need to reverse the query order // Previous page case: we want the items closest to min_id but for that we need to reverse the query order
if (!isset($this->maxId)) { if (!isset($this->maxId)) {
$params['order']['created'] = false; $params['order'][$this->order] = false;
} }
} }
} }
$items = []; $items = [];
$result = $this->database->select('post-engagement', ['uri-id', 'created', 'owner-id', 'comments', 'activities'], $condition, $params); $fields = ['uri-id', 'owner-id', 'comments', 'activities'];
$fields[] = $this->order;
$result = $this->database->select($table, $fields, $condition, $params);
if ($this->database->errorNo()) { if ($this->database->errorNo()) {
throw new \Exception($this->database->errorMessage(), $this->database->errorNo()); throw new \Exception($this->database->errorMessage(), $this->database->errorNo());
} }
@ -390,13 +428,8 @@ class Timeline extends BaseModule
return $items; return $items;
} }
private function getUserChannelConditions(int $id, int $uid): array private function getUserChannelConditions(UserDefinedChannelEntity $channel, int $uid): array
{ {
$channel = $this->channelRepository->selectById($id, $uid);
if (empty($channel)) {
return [];
}
$condition = []; $condition = [];
if (!empty($channel->circle)) { if (!empty($channel->circle)) {
@ -404,8 +437,6 @@ class Timeline extends BaseModule
$condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` IN (?, ?))", $uid, Contact::SHARING, Contact::FRIEND]; $condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` IN (?, ?))", $uid, Contact::SHARING, Contact::FRIEND];
} elseif ($channel->circle == -2) { } elseif ($channel->circle == -2) {
$condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", $uid, Contact::FOLLOWER]; $condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", $uid, Contact::FOLLOWER];
} elseif ($channel->circle == -3) {
$condition = ["EXISTS(SELECT `uri-id` FROM `post-thread-user` WHERE `uid` = ? AND `post-thread-user`.`uri-id` = `post-engagement`.`uri-id`)", $uid];
} elseif ($channel->circle > 0) { } elseif ($channel->circle > 0) {
$condition = DBA::mergeConditions($condition, ["`owner-id` IN (SELECT `pid` FROM `group_member` INNER JOIN `account-user-view` ON `group_member`.`contact-id` = `account-user-view`.`id` WHERE `gid` = ? AND `account-user-view`.`uid` = ?)", $channel->circle, $uid]); $condition = DBA::mergeConditions($condition, ["`owner-id` IN (SELECT `pid` FROM `group_member` INNER JOIN `account-user-view` ON `group_member`.`contact-id` = `account-user-view`.`id` WHERE `gid` = ? AND `account-user-view`.`uid` = ?)", $channel->circle, $uid]);
} }
@ -683,6 +714,8 @@ class Timeline extends BaseModule
*/ */
private function selectItems() private function selectItems()
{ {
$this->order = 'received';
if ($this->selectedTab == 'local') { if ($this->selectedTab == 'local') {
$condition = ["`wall` AND `origin` AND `private` = ?", Item::PUBLIC]; $condition = ["`wall` AND `origin` AND `private` = ?", Item::PUBLIC];
} elseif ($this->selectedTab == 'global') { } elseif ($this->selectedTab == 'global') {

View file

@ -147,7 +147,9 @@ class Channels extends BaseSettings
$intro = $this->t('This page can be used to define your own channels.'); $intro = $this->t('This page can be used to define your own channels.');
$circles = [ $circles = [
0 => $this->l10n->t('Global Community'), 0 => $this->l10n->t('Global Community'),
-3 => $this->l10n->t('Network'), -5 => $this->l10n->t('Latest Activity'),
-4 => $this->l10n->t('Latest Posts'),
-3 => $this->l10n->t('Latest Creation'),
-1 => $this->l10n->t('Following'), -1 => $this->l10n->t('Following'),
-2 => $this->l10n->t('Followers'), -2 => $this->l10n->t('Followers'),
]; ];

View file

@ -39,7 +39,7 @@ class Channel extends ChannelModule
$o = ''; $o = '';
if ($this->update || $this->force) { if ($this->update || $this->force) {
if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) { if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) {
$items = $this->getChannelItems(); $items = $this->getChannelItems($request);
} else { } else {
$items = $this->getCommunityItems(); $items = $this->getCommunityItems();
} }

View file

@ -42,7 +42,7 @@ class Network extends NetworkModule
} }
if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) { if ($this->channel->isTimeline($this->selectedTab) || $this->userDefinedChannel->isTimeline($this->selectedTab, $this->session->getLocalUserId())) {
$items = $this->getChannelItems(); $items = $this->getChannelItems($request);
} elseif ($this->community->isTimeline($this->selectedTab)) { } elseif ($this->community->isTimeline($this->selectedTab)) {
$items = $this->getCommunityItems(); $items = $this->getCommunityItems();
} else { } else {

View file

@ -56,7 +56,7 @@ use Friendica\Database\DBA;
// This file is required several times during the test in DbaDefinition which justifies this condition // This file is required several times during the test in DbaDefinition which justifies this condition
if (!defined('DB_UPDATE_VERSION')) { if (!defined('DB_UPDATE_VERSION')) {
define('DB_UPDATE_VERSION', 1550); define('DB_UPDATE_VERSION', 1551);
} }
return [ return [

View file

@ -142,6 +142,35 @@
STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = `post-user`.`owner-id` STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = `post-user`.`owner-id`
LEFT JOIN `contact` AS `causer` ON `causer`.`id` = `post-user`.`causer-id`" LEFT JOIN `contact` AS `causer` ON `causer`.`id` = `post-user`.`causer-id`"
], ],
"post-searchindex-user-view" => [
"fields" => [
"uid" => ["post-thread-user", "uid"],
"uri-id" => ["post-searchindex", "uri-id"],
"owner-id" => ["post-searchindex", "owner-id"],
"media-type" => ["post-searchindex", "media-type"],
"language" => ["post-searchindex", "language"],
"searchtext" => ["post-searchindex", "searchtext"],
"size" => ["post-searchindex", "size"],
"commented" => ["post-thread-user", "commented"],
"received" => ["post-thread-user", "received"],
"created" => ["post-thread-user", "created"],
"restricted" => ["post-searchindex", "language"],
"comments" => "0",
"activities" => "0",
],
"query" => "FROM `post-thread-user`
INNER JOIN `post-searchindex` ON `post-searchindex`.`uri-id` = `post-thread-user`.`uri-id`
INNER JOIN `post-user` ON `post-user`.`id` = `post-thread-user`.`post-user-id`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `post-thread-user`.`contact-id`
STRAIGHT_JOIN `contact` AS `authorcontact` ON `authorcontact`.`id` = `post-thread-user`.`author-id`
STRAIGHT_JOIN `contact` AS `ownercontact` ON `ownercontact`.`id` = `post-thread-user`.`owner-id`
WHERE `post-user`.`visible` AND NOT `post-user`.`deleted`
AND (NOT `contact`.`readonly` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`)
AND (`post-thread-user`.`hidden` IS NULL OR NOT `post-thread-user`.`hidden`)
AND NOT `authorcontact`.`blocked` AND NOT `ownercontact`.`blocked`
AND NOT EXISTS(SELECT `cid` FROM `user-contact` WHERE `uid` = `post-thread-user`.`uid` AND `cid` IN (`authorcontact`.`id`, `ownercontact`.`id`) AND (`blocked` OR `ignored`))
AND NOT EXISTS(SELECT `gsid` FROM `user-gserver` WHERE `uid` = `post-thread-user`.`uid` AND `gsid` IN (`authorcontact`.`gsid`, `ownercontact`.`gsid`) AND `ignored`)"
],
"post-user-view" => [ "post-user-view" => [
"fields" => [ "fields" => [
"id" => ["post-user", "id"], "id" => ["post-user", "id"],

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2024.03-dev\n" "Project-Id-Version: 2024.03-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-01 16:16+0000\n" "POT-Creation-Date: 2024-02-04 06:55+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -382,7 +382,7 @@ msgstr ""
#: mod/notes.php:57 src/Content/Text/HTML.php:860 #: mod/notes.php:57 src/Content/Text/HTML.php:860
#: src/Module/Admin/Storage.php:142 src/Module/Filer/SaveTag.php:74 #: src/Module/Admin/Storage.php:142 src/Module/Filer/SaveTag.php:74
#: src/Module/Post/Edit.php:129 src/Module/Settings/Channels.php:221 #: src/Module/Post/Edit.php:129 src/Module/Settings/Channels.php:223
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@ -794,12 +794,12 @@ msgstr ""
#: src/BaseModule.php:439 src/Content/Conversation/Factory/Channel.php:46 #: src/BaseModule.php:439 src/Content/Conversation/Factory/Channel.php:46
#: src/Content/Widget.php:239 src/Core/ACL.php:195 src/Module/Contact.php:414 #: src/Content/Widget.php:239 src/Core/ACL.php:195 src/Module/Contact.php:414
#: src/Module/PermissionTooltip.php:141 src/Module/PermissionTooltip.php:163 #: src/Module/PermissionTooltip.php:141 src/Module/PermissionTooltip.php:163
#: src/Module/Settings/Channels.php:152 #: src/Module/Settings/Channels.php:154
msgid "Followers" msgid "Followers"
msgstr "" msgstr ""
#: src/BaseModule.php:444 src/Content/Widget.php:240 src/Module/Contact.php:417 #: src/BaseModule.php:444 src/Content/Widget.php:240 src/Module/Contact.php:417
#: src/Module/Settings/Channels.php:151 #: src/Module/Settings/Channels.php:153
msgid "Following" msgid "Following"
msgstr "" msgstr ""
@ -1559,7 +1559,7 @@ msgid "Posts from accounts that are followed by accounts that you follow"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Channel.php:48 #: src/Content/Conversation/Factory/Channel.php:48
#: src/Module/Settings/Channels.php:191 src/Module/Settings/Channels.php:212 #: src/Module/Settings/Channels.php:193 src/Module/Settings/Channels.php:214
msgid "Images" msgid "Images"
msgstr "" msgstr ""
@ -1568,7 +1568,7 @@ msgid "Posts with images"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Channel.php:49 #: src/Content/Conversation/Factory/Channel.php:49
#: src/Module/Settings/Channels.php:193 src/Module/Settings/Channels.php:214 #: src/Module/Settings/Channels.php:195 src/Module/Settings/Channels.php:216
msgid "Audio" msgid "Audio"
msgstr "" msgstr ""
@ -1577,7 +1577,7 @@ msgid "Posts with audio"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Channel.php:50 #: src/Content/Conversation/Factory/Channel.php:50
#: src/Module/Settings/Channels.php:192 src/Module/Settings/Channels.php:213 #: src/Module/Settings/Channels.php:194 src/Module/Settings/Channels.php:215
msgid "Videos" msgid "Videos"
msgstr "" msgstr ""
@ -1603,6 +1603,7 @@ msgid "Posts from users of the whole federated network"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Network.php:38 #: src/Content/Conversation/Factory/Network.php:38
#: src/Module/Settings/Channels.php:150
msgid "Latest Activity" msgid "Latest Activity"
msgstr "" msgstr ""
@ -1611,6 +1612,7 @@ msgid "Sort by latest activity"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Network.php:39 #: src/Content/Conversation/Factory/Network.php:39
#: src/Module/Settings/Channels.php:151
msgid "Latest Posts" msgid "Latest Posts"
msgstr "" msgstr ""
@ -1619,6 +1621,7 @@ msgid "Sort by post received date"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Network.php:40 #: src/Content/Conversation/Factory/Network.php:40
#: src/Module/Settings/Channels.php:152
msgid "Latest Creation" msgid "Latest Creation"
msgstr "" msgstr ""
@ -1755,26 +1758,26 @@ msgid ""
"Contact birthday events are private to you." "Contact birthday events are private to you."
msgstr "" msgstr ""
#: src/Content/GroupManager.php:148 src/Content/Nav.php:278 #: src/Content/GroupManager.php:147 src/Content/Nav.php:278
#: src/Content/Text/HTML.php:881 src/Content/Widget.php:537 #: src/Content/Text/HTML.php:881 src/Content/Widget.php:537
#: src/Model/User.php:1381 #: src/Model/User.php:1381
msgid "Groups" msgid "Groups"
msgstr "" msgstr ""
#: src/Content/GroupManager.php:150 #: src/Content/GroupManager.php:149
msgid "External link to group" msgid "External link to group"
msgstr "" msgstr ""
#: src/Content/GroupManager.php:154 src/Content/Widget.php:512 #: src/Content/GroupManager.php:153 src/Content/Widget.php:512
msgid "show less" msgid "show less"
msgstr "" msgstr ""
#: src/Content/GroupManager.php:155 src/Content/Widget.php:410 #: src/Content/GroupManager.php:154 src/Content/Widget.php:410
#: src/Content/Widget.php:513 #: src/Content/Widget.php:513
msgid "show more" msgid "show more"
msgstr "" msgstr ""
#: src/Content/GroupManager.php:156 #: src/Content/GroupManager.php:155
msgid "Create new group" msgid "Create new group"
msgstr "" msgstr ""
@ -1854,8 +1857,8 @@ msgstr ""
msgid "Ignore %s server" msgid "Ignore %s server"
msgstr "" msgstr ""
#: src/Content/Item.php:443 src/Module/Settings/Channels.php:194 #: src/Content/Item.php:443 src/Module/Settings/Channels.php:196
#: src/Module/Settings/Channels.php:215 src/Object/Post.php:509 #: src/Module/Settings/Channels.php:217 src/Object/Post.php:509
msgid "Languages" msgid "Languages"
msgstr "" msgstr ""
@ -2058,8 +2061,7 @@ msgstr ""
msgid "Terms of Service of this Friendica instance" msgid "Terms of Service of this Friendica instance"
msgstr "" msgstr ""
#: src/Content/Nav.php:306 src/Module/Settings/Channels.php:150 #: src/Content/Nav.php:306 view/theme/frio/theme.php:239
#: view/theme/frio/theme.php:239
msgid "Network" msgid "Network"
msgstr "" msgstr ""
@ -2385,7 +2387,7 @@ msgid "All"
msgstr "" msgstr ""
#: src/Content/Widget.php:592 src/Module/Admin/Site.php:472 #: src/Content/Widget.php:592 src/Module/Admin/Site.php:472
#: src/Module/BaseSettings.php:125 src/Module/Settings/Channels.php:217 #: src/Module/BaseSettings.php:125 src/Module/Settings/Channels.php:219
#: src/Module/Settings/Display.php:315 #: src/Module/Settings/Display.php:315
msgid "Channels" msgid "Channels"
msgstr "" msgstr ""
@ -6171,7 +6173,7 @@ msgstr ""
#: src/Module/Moderation/Blocklist/Server/Index.php:116 #: src/Module/Moderation/Blocklist/Server/Index.php:116
#: src/Module/Moderation/Item/Delete.php:67 src/Module/Register.php:148 #: src/Module/Moderation/Item/Delete.php:67 src/Module/Register.php:148
#: src/Module/Security/TwoFactor/Verify.php:101 #: src/Module/Security/TwoFactor/Verify.php:101
#: src/Module/Settings/Channels.php:182 src/Module/Settings/Channels.php:203 #: src/Module/Settings/Channels.php:184 src/Module/Settings/Channels.php:205
#: src/Module/Settings/TwoFactor/Index.php:161 #: src/Module/Settings/TwoFactor/Index.php:161
#: src/Module/Settings/TwoFactor/Verify.php:158 #: src/Module/Settings/TwoFactor/Verify.php:158
msgid "Required" msgid "Required"
@ -7052,33 +7054,33 @@ msgstr ""
msgid "Not available." msgid "Not available."
msgstr "" msgstr ""
#: src/Module/Conversation/Network.php:204 #: src/Module/Conversation/Network.php:202
msgid "No such circle" msgid "No such circle"
msgstr "" msgstr ""
#: src/Module/Conversation/Network.php:208 #: src/Module/Conversation/Network.php:206
#, php-format #, php-format
msgid "Circle: %s" msgid "Circle: %s"
msgstr "" msgstr ""
#: src/Module/Conversation/Network.php:227 #: src/Module/Conversation/Network.php:225
#, php-format #, php-format
msgid "Error %d (%s) while fetching the timeline." msgid "Error %d (%s) while fetching the timeline."
msgstr "" msgstr ""
#: src/Module/Conversation/Network.php:304 #: src/Module/Conversation/Network.php:302
msgid "Network feed not available." msgid "Network feed not available."
msgstr "" msgstr ""
#: src/Module/Conversation/Timeline.php:169 #: src/Module/Conversation/Timeline.php:194
msgid "Own Contacts" msgid "Own Contacts"
msgstr "" msgstr ""
#: src/Module/Conversation/Timeline.php:173 #: src/Module/Conversation/Timeline.php:198
msgid "Include" msgid "Include"
msgstr "" msgstr ""
#: src/Module/Conversation/Timeline.php:174 #: src/Module/Conversation/Timeline.php:199
msgid "Hide" msgid "Hide"
msgstr "" msgstr ""
@ -7424,7 +7426,7 @@ msgstr ""
#: src/Module/Friendica.php:102 #: src/Module/Friendica.php:102
#: src/Module/Moderation/Blocklist/Server/Index.php:87 #: src/Module/Moderation/Blocklist/Server/Index.php:87
#: src/Module/Moderation/Blocklist/Server/Index.php:111 #: src/Module/Moderation/Blocklist/Server/Index.php:111
#: src/Module/Settings/Channels.php:224 #: src/Module/Settings/Channels.php:226
msgid "Reason for the block" msgid "Reason for the block"
msgstr "" msgstr ""
@ -8172,7 +8174,7 @@ msgstr ""
#: src/Module/Moderation/Blocklist/Server/Index.php:86 #: src/Module/Moderation/Blocklist/Server/Index.php:86
#: src/Module/Moderation/Blocklist/Server/Index.php:110 #: src/Module/Moderation/Blocklist/Server/Index.php:110
#: src/Module/Settings/Channels.php:223 #: src/Module/Settings/Channels.php:225
msgid "Blocked server domain pattern" msgid "Blocked server domain pattern"
msgstr "" msgstr ""
@ -10164,110 +10166,110 @@ msgstr ""
msgid "This page can be used to define your own channels." msgid "This page can be used to define your own channels."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:174 #: src/Module/Settings/Channels.php:176
msgid "Publish" msgid "Publish"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:174 #: src/Module/Settings/Channels.php:176
msgid "" msgid ""
"When selected, the channel results are reshared. This only works for public " "When selected, the channel results are reshared. This only works for public "
"ActivityPub posts from the public timeline or the user defined circles." "ActivityPub posts from the public timeline or the user defined circles."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:182 src/Module/Settings/Channels.php:203 #: src/Module/Settings/Channels.php:184 src/Module/Settings/Channels.php:205
#: src/Module/Settings/Display.php:338 #: src/Module/Settings/Display.php:338
msgid "Label" msgid "Label"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:183 src/Module/Settings/Channels.php:204 #: src/Module/Settings/Channels.php:185 src/Module/Settings/Channels.php:206
#: src/Module/Settings/Display.php:339 #: src/Module/Settings/Display.php:339
#: src/Module/Settings/TwoFactor/AppSpecific.php:137 #: src/Module/Settings/TwoFactor/AppSpecific.php:137
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:184 src/Module/Settings/Channels.php:205 #: src/Module/Settings/Channels.php:186 src/Module/Settings/Channels.php:207
msgid "Access Key" msgid "Access Key"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:185 src/Module/Settings/Channels.php:206 #: src/Module/Settings/Channels.php:187 src/Module/Settings/Channels.php:208
msgid "Circle/Channel" msgid "Circle/Channel"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:186 src/Module/Settings/Channels.php:207 #: src/Module/Settings/Channels.php:188 src/Module/Settings/Channels.php:209
msgid "Include Tags" msgid "Include Tags"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:187 src/Module/Settings/Channels.php:208 #: src/Module/Settings/Channels.php:189 src/Module/Settings/Channels.php:210
msgid "Exclude Tags" msgid "Exclude Tags"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:188 src/Module/Settings/Channels.php:209 #: src/Module/Settings/Channels.php:190 src/Module/Settings/Channels.php:211
msgid "Minimum Size" msgid "Minimum Size"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:189 src/Module/Settings/Channels.php:210 #: src/Module/Settings/Channels.php:191 src/Module/Settings/Channels.php:212
msgid "Maximum Size" msgid "Maximum Size"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:190 src/Module/Settings/Channels.php:211 #: src/Module/Settings/Channels.php:192 src/Module/Settings/Channels.php:213
msgid "Full Text Search" msgid "Full Text Search"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:194 src/Module/Settings/Channels.php:215 #: src/Module/Settings/Channels.php:196 src/Module/Settings/Channels.php:217
msgid "Select all languages that you want to see in this channel." msgid "Select all languages that you want to see in this channel."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:196 #: src/Module/Settings/Channels.php:198
msgid "Delete channel" msgid "Delete channel"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:196 #: src/Module/Settings/Channels.php:198
msgid "Check to delete this entry from the channel list" msgid "Check to delete this entry from the channel list"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:203 #: src/Module/Settings/Channels.php:205
msgid "Short name for the channel. It is displayed on the channels widget." msgid "Short name for the channel. It is displayed on the channels widget."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:204 #: src/Module/Settings/Channels.php:206
msgid "This should describe the content of the channel in a few word." msgid "This should describe the content of the channel in a few word."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:205 #: src/Module/Settings/Channels.php:207
msgid "" msgid ""
"When you want to access this channel via an access key, you can define it " "When you want to access this channel via an access key, you can define it "
"here. Pay attention to not use an already used one." "here. Pay attention to not use an already used one."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:206 #: src/Module/Settings/Channels.php:208
msgid "Select a circle or channel, that your channel should be based on." msgid "Select a circle or channel, that your channel should be based on."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:207 #: src/Module/Settings/Channels.php:209
msgid "" msgid ""
"Comma separated list of tags. A post will be used when it contains any of " "Comma separated list of tags. A post will be used when it contains any of "
"the listed tags." "the listed tags."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:208 #: src/Module/Settings/Channels.php:210
msgid "" msgid ""
"Comma separated list of tags. If a post contain any of these tags, then it " "Comma separated list of tags. If a post contain any of these tags, then it "
"will not be part of nthis channel." "will not be part of nthis channel."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:209 #: src/Module/Settings/Channels.php:211
msgid "" msgid ""
"Minimum post size. Leave empty for no minimum size. The size is calculated " "Minimum post size. Leave empty for no minimum size. The size is calculated "
"without links, attached posts, mentions or hashtags." "without links, attached posts, mentions or hashtags."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:210 #: src/Module/Settings/Channels.php:212
msgid "" msgid ""
"Maximum post size. Leave empty for no maximum size. The size is calculated " "Maximum post size. Leave empty for no maximum size. The size is calculated "
"without links, attached posts, mentions or hashtags." "without links, attached posts, mentions or hashtags."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:211 #: src/Module/Settings/Channels.php:213
#, php-format #, php-format
msgid "" msgid ""
"Search terms for the body, supports the \"boolean mode\" operators from " "Search terms for the body, supports the \"boolean mode\" operators from "
@ -10275,35 +10277,35 @@ msgid ""
"keywords: %s" "keywords: %s"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:212 #: src/Module/Settings/Channels.php:214
msgid "Check to display images in the channel." msgid "Check to display images in the channel."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:213 #: src/Module/Settings/Channels.php:215
msgid "Check to display videos in the channel." msgid "Check to display videos in the channel."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:214 #: src/Module/Settings/Channels.php:216
msgid "Check to display audio in the channel." msgid "Check to display audio in the channel."
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:219 #: src/Module/Settings/Channels.php:221
msgid "Add new entry to the channel list" msgid "Add new entry to the channel list"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:220 #: src/Module/Settings/Channels.php:222
msgid "Add" msgid "Add"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:222 #: src/Module/Settings/Channels.php:224
msgid "Current Entries in the channel list" msgid "Current Entries in the channel list"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:225 #: src/Module/Settings/Channels.php:227
msgid "Delete entry from the channel list" msgid "Delete entry from the channel list"
msgstr "" msgstr ""
#: src/Module/Settings/Channels.php:226 #: src/Module/Settings/Channels.php:228
msgid "Delete entry from the channel list?" msgid "Delete entry from the channel list?"
msgstr "" msgstr ""