diff --git a/database.sql b/database.sql index 9c98c614a9..51df6a732c 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2024.03-dev (Yellow Archangel) --- DB_UPDATE_VERSION 1545 +-- DB_UPDATE_VERSION 1546 -- ------------------------------------------ @@ -505,6 +505,8 @@ CREATE TABLE IF NOT EXISTS `channel` ( `full-text-search` varchar(1023) COMMENT 'Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode', `media-type` smallint unsigned COMMENT 'Filtered media types', `languages` mediumtext COMMENT 'Desired languages', + `publish` boolean COMMENT 'publish channel content', + `valid` boolean COMMENT 'Set, when the full-text-search is valid', PRIMARY KEY(`id`), INDEX `uid` (`uid`), FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE @@ -1343,7 +1345,7 @@ CREATE TABLE IF NOT EXISTS `post-engagement` ( `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner', `contact-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Person, organisation, news, community, relay', `media-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Type of media in a bit array (1 = image, 2 = video, 4 = audio', - `language` varbinary(128) COMMENT 'Language information about this post', + `language` varchar(128) COMMENT 'Language information about this post', `searchtext` mediumtext COMMENT 'Simplified text for the full text search', `created` datetime COMMENT '', `restricted` boolean NOT NULL DEFAULT '0' COMMENT 'If true, this post is either unlisted or not from a federated network', diff --git a/doc/database/db_channel.md b/doc/database/db_channel.md index 8d307eee89..5b0636dc80 100644 --- a/doc/database/db_channel.md +++ b/doc/database/db_channel.md @@ -19,6 +19,8 @@ Fields | full-text-search | Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode | varchar(1023) | YES | | NULL | | | media-type | Filtered media types | smallint unsigned | YES | | NULL | | | languages | Desired languages | mediumtext | YES | | NULL | | +| publish | publish channel content | boolean | YES | | NULL | | +| valid | Set, when the full-text-search is valid | boolean | YES | | NULL | | Indexes ------------ diff --git a/doc/database/db_post-engagement.md b/doc/database/db_post-engagement.md index edca447f3d..e63f170b76 100644 --- a/doc/database/db_post-engagement.md +++ b/doc/database/db_post-engagement.md @@ -12,7 +12,7 @@ Fields | owner-id | Item owner | int unsigned | NO | | 0 | | | contact-type | Person, organisation, news, community, relay | tinyint | NO | | 0 | | | media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio | tinyint | NO | | 0 | | -| language | Language information about this post | varbinary(128) | YES | | NULL | | +| language | Language information about this post | varchar(128) | YES | | NULL | | | searchtext | Simplified text for the full text search | mediumtext | YES | | NULL | | | created | | datetime | YES | | NULL | | | restricted | If true, this post is either unlisted or not from a federated network | boolean | NO | | 0 | | diff --git a/src/Content/Conversation/Entity/Timeline.php b/src/Content/Conversation/Entity/Timeline.php index 34d2a3534a..a27d9fb98f 100644 --- a/src/Content/Conversation/Entity/Timeline.php +++ b/src/Content/Conversation/Entity/Timeline.php @@ -34,6 +34,8 @@ namespace Friendica\Content\Conversation\Entity; * @property-read int $mediaType Media types that are included in the channel * @property-read array $languages Channel languages * @property-read int $circle Circle or timeline this channel is based on + * @property-read bool $publish Publish the channel + * @property-read bool $valid Indicates that the search conditions are valid */ class Timeline extends \Friendica\BaseEntity { @@ -61,8 +63,12 @@ class Timeline extends \Friendica\BaseEntity protected $mediaType; /** @var array */ protected $languages; + /** @var bool */ + protected $publish; + /** @var bool */ + protected $valid; - public function __construct(string $code = null, string $label = null, string $description = null, string $accessKey = null, string $path = null, int $uid = null, string $includeTags = null, string $excludeTags = null, string $fullTextSearch = null, int $mediaType = null, int $circle = null, array $languages = null) + public function __construct(string $code = null, string $label = null, string $description = null, string $accessKey = null, string $path = null, int $uid = null, string $includeTags = null, string $excludeTags = null, string $fullTextSearch = null, int $mediaType = null, int $circle = null, array $languages = null, bool $publish = null, bool $valid = null) { $this->code = $code; $this->label = $label; @@ -76,5 +82,7 @@ class Timeline extends \Friendica\BaseEntity $this->mediaType = $mediaType; $this->circle = $circle; $this->languages = $languages; + $this->publish = $publish; + $this->valid = $valid; } } diff --git a/src/Content/Conversation/Factory/UserDefinedChannel.php b/src/Content/Conversation/Factory/UserDefinedChannel.php index 98e10b4fbf..08a092205c 100644 --- a/src/Content/Conversation/Factory/UserDefinedChannel.php +++ b/src/Content/Conversation/Factory/UserDefinedChannel.php @@ -50,6 +50,8 @@ final class UserDefinedChannel extends Timeline implements ICanCreateFromTableRo $row['media-type'] ?? null, $row['circle'] ?? null, $row['languages'] ?? null, + $row['publish'] ?? null, + $row['valid'] ?? null, ); } } diff --git a/src/Content/Conversation/Repository/UserDefinedChannel.php b/src/Content/Conversation/Repository/UserDefinedChannel.php index 7815acdd8a..0452b6dd2b 100644 --- a/src/Content/Conversation/Repository/UserDefinedChannel.php +++ b/src/Content/Conversation/Repository/UserDefinedChannel.php @@ -25,24 +25,27 @@ use Friendica\BaseCollection; use Friendica\Content\Conversation\Collection\UserDefinedChannels; use Friendica\Content\Conversation\Entity; use Friendica\Content\Conversation\Factory; -use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Database\Database; +use Friendica\Database\DBA; +use Friendica\Model\Contact; use Friendica\Model\Post\Engagement; use Friendica\Model\User; +use Friendica\Util\DateTimeFormat; use Psr\Log\LoggerInterface; class UserDefinedChannel extends \Friendica\BaseRepository { protected static $table_name = 'channel'; - /** @var IManagePersonalConfigValues */ - private $pConfig; + /** @var IManageConfigValues */ + private $config; - public function __construct(Database $database, LoggerInterface $logger, Factory\UserDefinedChannel $factory, IManagePersonalConfigValues $pConfig) + public function __construct(Database $database, LoggerInterface $logger, Factory\UserDefinedChannel $factory, IManageConfigValues $config) { parent::__construct($database, $logger, $factory); - $this->pConfig = $pConfig; + $this->config = $config; } /** @@ -63,6 +66,11 @@ class UserDefinedChannel extends \Friendica\BaseRepository return $Entities; } + public function select(array $condition, array $params = []): UserDefinedChannels + { + return $this->_select($condition, $params); + } + /** * Fetch a single user channel * @@ -125,6 +133,8 @@ class UserDefinedChannel extends \Friendica\BaseRepository 'full-text-search' => $Channel->fullTextSearch, 'media-type' => $Channel->mediaType, 'languages' => serialize($Channel->languages), + 'publish' => $Channel->publish, + 'valid' => $this->isValid($Channel->fullTextSearch), ]; if ($Channel->code) { @@ -140,9 +150,17 @@ class UserDefinedChannel extends \Friendica\BaseRepository return $Channel; } + private function isValid(string $searchtext): bool + { + if ($searchtext == '') { + return true; + } + + return $this->db->select('check-full-text-search', [], ["`pid` = ? AND MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE)", getmypid(), $this->escapeKeywords($searchtext)]) !== false; + } + /** - * Checks, if one of the user defined channels matches with the given search text - * @todo To increase the performance, this functionality should be replaced with a single SQL call. + * Checks, if one of the user defined channels matches with the given search text or languages * * @param string $searchtext * @param string $language @@ -150,30 +168,167 @@ class UserDefinedChannel extends \Friendica\BaseRepository */ public function match(string $searchtext, string $language): bool { + $users = $this->db->selectToArray('user', ['uid'], $this->getUserCondition()); + if (empty($users)) { + return []; + } + + $uids = array_column($users, 'uid'); + + $usercondition = ['uid' => $uids]; + $condition = DBA::mergeConditions($usercondition, ["`languages` != ? AND `include-tags` = ? AND `full-text-search` = ? AND `circle` = ?", '', '', '', 0]); + foreach ($this->select($condition) as $channel) { + if (!empty($channel->languages) && in_array($language, $channel->languages)) { + return true; + } + } + + $search = ''; + $condition = DBA::mergeConditions($usercondition, ["`full-text-search` != ? AND `circle` = ? AND `valid`", '', 0]); + foreach ($this->select($condition) as $channel) { + $search .= '(' . $channel->fullTextSearch . ') '; + } + + $this->insertCheckFullTextSearch($searchtext); + $result = $this->inFulltext($search); + $this->deleteCheckFullTextSearch(); + + return $result; + } + + /** + * Fetch the channel users that have got matching channels + * + * @param string $searchtext + * @param string $language + * @param array $tags + * @param int $media_type + * @param int $owner_id + * @param int $reshare_id + * @return array + */ + public function getMatchingChannelUsers(string $searchtext, string $language, array $tags, int $media_type, int $owner_id, int $reshare_id): array + { + $condition = $this->getUserCondition(); + $condition = DBA::mergeConditions($condition, ["`account-type` IN (?, ?) AND `uid` != ?", User::ACCOUNT_TYPE_RELAY, User::ACCOUNT_TYPE_COMMUNITY, 0]); + $users = $this->db->selectToArray('user', ['uid'], $condition); + if (empty($users)) { + return []; + } + if (!in_array($language, User::getLanguages())) { $this->logger->debug('Unwanted language found. No matched channel found.', ['language' => $language, 'searchtext' => $searchtext]); + return []; + } + + $this->insertCheckFullTextSearch($searchtext); + + $uids = []; + + foreach ($this->select(['uid' => array_column($users, 'uid'), 'publish' => true, 'valid' => true]) as $channel) { + if (in_array($channel->uid, $uids)) { + continue; + } + if (!empty($channel->circle) && ($channel->circle > 0) && !in_array($channel->uid, $uids)) { + if (!$this->inCircle($channel->circle, $channel->uid, $owner_id) && !$this->inCircle($channel->circle, $channel->uid, $reshare_id)) { + continue; + } + } + if (!empty($channel->languages) && !in_array($channel->uid, $uids)) { + if (!in_array($language, $channel->languages)) { + continue; + } + } elseif (!in_array($language, User::getWantedLanguages($channel->uid))) { + continue; + } + if (!empty($channel->includeTags) && !in_array($channel->uid, $uids)) { + if (!$this->inTaglist($channel->includeTags, $tags)) { + continue; + } + } + if (!empty($channel->excludeTags) && !in_array($channel->uid, $uids)) { + if ($this->inTaglist($channel->excludeTags, $tags)) { + continue; + } + } + if (!empty($channel->mediaType) && !in_array($channel->uid, $uids)) { + if (!($channel->mediaType & $media_type)) { + continue; + } + } + if (!empty($channel->fullTextSearch) && !in_array($channel->uid, $uids)) { + if (!$this->inFulltext($channel->fullTextSearch)) { + continue; + } + } + $uids[] = $channel->uid; + $this->logger->debug('Matching channel found.', ['uid' => $channel->uid, 'label' => $channel->label, 'language' => $language, 'tags' => $tags, 'media_type' => $media_type, 'searchtext' => $searchtext]); + } + + $this->deleteCheckFullTextSearch(); + return $uids; + } + + private function insertCheckFullTextSearch(string $searchtext) + { + $this->db->insert('check-full-text-search', ['pid' => getmypid(), 'searchtext' => $searchtext], Database::INSERT_UPDATE); + } + + private function deleteCheckFullTextSearch() + { + $this->db->delete('check-full-text-search', ['pid' => getmypid()]); + } + + private function inCircle(int $circleId, int $uid, int $cid): bool + { + if ($cid == 0) { return false; } - $store = false; - $this->db->insert('check-full-text-search', ['pid' => getmypid(), 'searchtext' => $searchtext], Database::INSERT_UPDATE); - $channels = $this->db->select(self::$table_name, ['full-text-search', 'uid', 'label'], ["`full-text-search` != ? AND `circle` = ?", '', 0]); - while ($channel = $this->db->fetch($channels)) { - $channelsearchtext = $channel['full-text-search']; - foreach (Engagement::KEYWORDS as $keyword) { - $channelsearchtext = preg_replace('~(' . $keyword . ':.[\w@\.-]+)~', '"$1"', $channelsearchtext); - } - if ($this->db->exists('check-full-text-search', ["`pid` = ? AND MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE)", getmypid(), $channelsearchtext])) { - if (in_array($language, $this->pConfig->get($channel['uid'], 'channel', 'languages', [User::getLanguageCode($channel['uid'])]))) { - $store = true; - $this->logger->debug('Matching channel found.', ['uid' => $channel['uid'], 'label' => $channel['label'], 'language' => $language, 'channelsearchtext' => $channelsearchtext, 'searchtext' => $searchtext]); - break; - } + $account = Contact::selectFirstAccountUser(['id'], ['pid' => $cid, 'uid' => $uid]); + if (empty($account['id'])) { + return false; + } + return $this->db->exists('group_member', ['gid' => $circleId, 'contact-id' => $account['id']]); + } + + private function inTaglist(string $tagList, array $tags): bool + { + if (empty($tags)) { + return false; + } + array_walk($tags, function (&$value) { + $value = mb_strtolower($value); + }); + foreach (explode(',', $tagList) as $tag) { + if (in_array($tag, $tags)) { + return true; } } - $this->db->close($channels); + return false; + } - $this->db->delete('check-full-text-search', ['pid' => getmypid()]); - return $store; + private function inFulltext(string $fullTextSearch): bool + { + return $this->db->exists('check-full-text-search', ["`pid` = ? AND MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE)", getmypid(), $this->escapeKeywords($fullTextSearch)]); + } + + private function escapeKeywords(string $fullTextSearch): string + { + foreach (Engagement::KEYWORDS as $keyword) { + $fullTextSearch = preg_replace('~(' . $keyword . ':.[\w@\.-]+)~', '"$1"', $fullTextSearch); + } + return $fullTextSearch; + } + + private function getUserCondition() + { + $condition = ["`verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired` AND `user`.`uid` > ?", 0]; + + $abandon_days = intval($this->config->get('system', 'account_abandon_days')); + if (!empty($abandon_days)) { + $condition = DBA::mergeConditions($condition, ["`last-activity` > ?", DateTimeFormat::utc('now - ' . $abandon_days . ' days')]); + } + return $condition; } } diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index efaa9f7c79..8396a95cf8 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -258,6 +258,10 @@ class BBCode // Add images because of possible alt texts if (!empty($uri_id)) { $text = Post\Media::addAttachmentsToBody($uri_id, $text, [Post\Media::IMAGE]); + + foreach (Post\Media::getByURIId($uri_id, [Post\Media::HTML]) as $media) { + $text .= ' ' . $media['name'] . ' ' . $media['description']; + } } if (empty($text)) { @@ -279,7 +283,7 @@ class BBCode // Removes mentions, remove links from hashtags $text = preg_replace('/[@!]\[url\=.*?\].*?\[\/url\]/ism', ' ', $text); $text = preg_replace('/[#]\[url\=.*?\](.*?)\[\/url\]/ism', ' #$1 ', $text); - $text = preg_replace('/[@!#]?\[url.*?\[\/url\]/ism', ' ', $text); + $text = preg_replace('/[@!#]+?\[url.*?\[\/url\]/ism', ' ', $text); $text = preg_replace("/\[url=[^\[\]]*\](.*)\[\/url\]/Usi", ' $1 ', $text); // Convert it to plain text diff --git a/src/Core/L10n.php b/src/Core/L10n.php index 3fa48bed99..2b1e7b9e4b 100644 --- a/src/Core/L10n.php +++ b/src/Core/L10n.php @@ -65,6 +65,9 @@ class L10n 'zh-cn' => '简体中文', ]; + /** @var string Undetermined language */ + const UNDETERMINED_LANGUAGE = 'un'; + /** * A string indicating the current language used for translation: * - Two-letter ISO 639-1 code. @@ -436,7 +439,9 @@ class L10n { $iso639 = new \Matriphe\ISO639\ISO639; - $languages = []; + // In ISO 639-2 undetermined languages have got the code "und". + // There is no official code for ISO 639-1, but "un" is not assigned to any language. + $languages = [self::UNDETERMINED_LANGUAGE => $this->t('Undetermined')]; foreach ($this->getDetectableLanguages() as $code) { $code = $this->toISO6391($code); diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 6442784f73..a08035389b 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -172,6 +172,11 @@ class Contact return DBA::selectFirst('account-view', $fields, $condition, $params); } + public static function selectFirstAccountUser(array $fields = [], array $condition = [], array $params = []) + { + return DBA::selectFirst('account-user-view', $fields, $condition, $params); + } + /** * Insert a row into the contact table * Important: You can't use DBA::lastInsertId() after this call since it will be set to 0. diff --git a/src/Model/Item.php b/src/Model/Item.php index 3fea148b88..91e7e8613e 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -28,6 +28,7 @@ use Friendica\Content\Post\Entity\PostMedia; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; use Friendica\Core\Hook; +use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; @@ -1440,12 +1441,65 @@ class Item 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); + + $engagement_uri_id = Post\Engagement::storeFromItem($posted_item); + + if (($posted_item['gravity'] == self::GRAVITY_ACTIVITY) && ($posted_item['verb'] == Activity::ANNOUNCE) && ($posted_item['parent-uri-id'] == $posted_item['thr-parent-id'])) { + self::reshareChannelPost($posted_item['thr-parent-id'], $posted_item['author-id']); + } elseif ($engagement_uri_id) { + self::reshareChannelPost($engagement_uri_id); + } } return $post_user_id; } + private static function reshareChannelPost(int $uri_id, int $reshare_id = 0) + { + if (!DI::config()->get('system', 'allow_relay_channels')) { + return; + } + + $item = Post::selectFirst(['id', 'private', 'network', 'language', 'owner-id'], ['uri-id' => $uri_id, 'uid' => 0]); + if (empty($item['id'])) { + Logger::debug('Post not found', ['uri-id' => $uri_id]); + return; + } + + if (($item['private'] != self::PUBLIC) || !in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN])) { + Logger::debug('Not a public post or no AP or DFRN post', ['uri-id' => $uri_id]); + return; + } + + $engagement = DBA::selectFirst('post-engagement', ['searchtext', 'media-type'], ['uri-id' => $uri_id]); + if (empty($engagement['searchtext'])) { + Logger::debug('No engagement found', ['uri-id' => $uri_id]); + return; + } + + $language = !empty($item['language']) ? array_key_first(json_decode($item['language'], true)) : ''; + $tags = array_column(Tag::getByURIId($uri_id, [Tag::HASHTAG]), 'name'); + + Logger::debug('Prepare check', ['uri-id' => $uri_id, 'language' => $language, 'tags' => $tags, 'searchtext' => $engagement['searchtext'], 'media_type' => $engagement['media-type'], 'owner' => $item['owner-id'], 'reshare' => $reshare_id]); + + $count = 0; + foreach (DI::userDefinedChannel()->getMatchingChannelUsers($engagement['searchtext'], $language, $tags, $engagement['media-type'], $item['owner-id'], $reshare_id) as $uid) { + $condition = [ + 'verb' => Activity::ANNOUNCE, 'deleted' => false, 'gravity' => self::GRAVITY_ACTIVITY, + 'author-id' => Contact::getPublicIdByUserId($uid), 'uid' => $uid, 'thr-parent-id' => $uri_id + ]; + if (!Post::exists($condition)) { + Logger::debug('Reshare post', ['uid' => $uid, 'uri-id' => $uri_id]); + self::performActivity($item['id'], 'announce', $uid); + } else { + Logger::debug('Reshare already exists', ['uid' => $uid, 'uri-id' => $uri_id]); + } + $count++; + } + + Logger::debug('Check done', ['uri-id' => $uri_id, 'count' => $count]); + } + /** * Fetch the post reason for a given item array * @@ -2036,16 +2090,20 @@ class Item $transmitted[$language] = 0; } + if (!in_array($item['gravity'], [self::GRAVITY_PARENT, self::GRAVITY_COMMENT])) { + return !empty($transmitted) ? json_encode($transmitted) : null; + } + $content = trim(($item['title'] ?? '') . ' ' . ($item['content-warning'] ?? '') . ' ' . ($item['body'] ?? '')); - if (!in_array($item['gravity'], [self::GRAVITY_PARENT, self::GRAVITY_COMMENT]) || empty($content)) { - return !empty($transmitted) ? json_encode($transmitted) : null; + if (empty($content) && !empty($item['quote-uri-id'])) { + $quoted = Post::selectFirstPost(['language'], ['uri-id' => $item['quote-uri-id']]); + if (!empty($quoted['language'])) { + return $quoted['language']; + } } - $languages = self::getLanguageArray($content, 3, $item['uri-id'], $item['author-id']); - if (empty($languages)) { - return !empty($transmitted) ? json_encode($transmitted) : null; - } + $languages = self::getLanguageArray($content, 3, $item['uri-id'], $item['author-id'], $transmitted); if (!empty($transmitted)) { $languages = array_merge($transmitted, $languages); @@ -2062,10 +2120,13 @@ class Item * @param integer $count * @param integer $uri_id * @param integer $author_id + * @param array $default * @return array */ - public static function getLanguageArray(string $body, int $count, int $uri_id = 0, int $author_id = 0): array + public static function getLanguageArray(string $body, int $count, int $uri_id = 0, int $author_id = 0, array $default = []): array { + $default = $default ?: [L10n::UNDETERMINED_LANGUAGE => 1]; + $searchtext = BBCode::toSearchText($body, $uri_id); if ((count(explode(' ', $searchtext)) < 10) && (mb_strlen($searchtext) < 30) && $author_id) { @@ -2078,7 +2139,7 @@ class Item } if (empty($searchtext)) { - return []; + return $default; } $ld = new Language(DI::l10n()->getDetectableLanguages()); @@ -2102,6 +2163,9 @@ class Item } $result = self::compactLanguages($result); + if (empty($result)) { + return $default; + } arsort($result); return array_slice($result, 0, $count); @@ -2211,8 +2275,13 @@ class Item foreach (json_decode($item['language'], true) as $language => $reliability) { $code = DI::l10n()->toISO6391($language); - $native = $iso639->nativeByCode1($code); - $language = $iso639->languageByCode1($code); + if ($code == L10n::UNDETERMINED_LANGUAGE) { + $native = $language = DI::l10n()->t('Undetermined'); + } else { + $native = $iso639->nativeByCode1($code); + $language = $iso639->languageByCode1($code); + } + if ($native != $language) { $used_languages .= DI::l10n()->t('%s (%s - %s): %s', $native, $language, $code, number_format($reliability, 5)) . '\n'; } else { diff --git a/src/Model/Post/Engagement.php b/src/Model/Post/Engagement.php index f2e890db49..61f73948de 100644 --- a/src/Model/Post/Engagement.php +++ b/src/Model/Post/Engagement.php @@ -45,13 +45,13 @@ class Engagement * Store engagement data from an item array * * @param array $item - * @return void + * @return int uri-id of the engagement post if newly inserted, 0 on update */ - public static function storeFromItem(array $item) + public static function storeFromItem(array $item): int { if (in_array($item['verb'], [Activity::FOLLOW, Activity::VIEW, Activity::READ])) { Logger::debug('Technical activities are not stored', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'verb' => $item['verb']]); - return; + return 0; } $parent = Post::selectFirst(['uri-id', 'created', 'author-id', 'owner-id', 'uid', 'private', 'contact-contact-type', 'language', 'network', @@ -60,7 +60,7 @@ class Engagement if ($parent['created'] < self::getCreationDateLimit(false)) { Logger::debug('Post is too old', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'created' => $parent['created']]); - return; + return 0; } $store = ($item['gravity'] != Item::GRAVITY_PARENT); @@ -69,10 +69,14 @@ class Engagement $store = Contact::hasFollowers($parent['owner-id']); } + if (!$store && ($parent['owner-id'] != $parent['author-id'])) { + $store = Contact::hasFollowers($parent['author-id']); + } + if (!$store) { $tagList = Relay::getSubscribedTags(); foreach (array_column(Tag::getByURIId($item['parent-uri-id'], [Tag::HASHTAG]), 'name') as $tag) { - if (in_array($tag, $tagList)) { + if (in_array(mb_strtolower($tag), $tagList)) { $store = true; break; } @@ -87,10 +91,8 @@ class Engagement $searchtext = self::getSearchTextForItem($parent); if (!$store) { - $content = trim(($parent['title'] ?? '') . ' ' . ($parent['content-warning'] ?? '') . ' ' . ($parent['body'] ?? '')); - $languages = Item::getLanguageArray($content, 1, 0, $parent['author-id']); - $language = !empty($languages) ? array_key_first($languages) : ''; - $store = DI::userDefinedChannel()->match($searchtext, $language); + $language = !empty($parent['language']) ? (array_key_first(json_decode($parent['language'], true)) ?? '') : ''; + $store = DI::userDefinedChannel()->match($searchtext, $language); } $engagement = [ @@ -111,10 +113,17 @@ class Engagement ]; if (!$store && ($engagement['comments'] == 0) && ($engagement['activities'] == 0)) { Logger::debug('No media, follower, subscribed tags, comments or activities. Engagement not stored', ['fields' => $engagement]); - return; + return 0; } - $ret = DBA::insert('post-engagement', $engagement, Database::INSERT_UPDATE); - Logger::debug('Engagement stored', ['fields' => $engagement, 'ret' => $ret]); + $exists = DBA::exists('post-engagement', ['uri-id' => $engagement['uri-id']]); + if ($exists) { + $ret = DBA::update('post-engagement', $engagement, ['uri-id' => $engagement['uri-id']]); + Logger::debug('Engagement updated', ['uri-id' => $engagement['uri-id'], 'ret' => $ret]); + } else { + $ret = DBA::insert('post-engagement', $engagement); + Logger::debug('Engagement inserted', ['uri-id' => $engagement['uri-id'], 'ret' => $ret]); + } + return ($ret && !$exists) ? $engagement['uri-id'] : 0; } public static function getSearchTextForActivity(string $content, int $author_id, array $tags, array $receivers): string diff --git a/src/Model/User.php b/src/Model/User.php index f90d60c3cd..20cc6ca82a 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -638,6 +638,16 @@ class User } DBA::close($channels); + foreach (DI::userDefinedChannel()->select(["NOT `languages` IS NULL"]) as $channel) { + foreach ($channel->languages ?? [] as $language) { + $languages[$language] = $language; + } + } + + if (!DI::config()->get('system', 'relay_deny_undetected_language')) { + $languages[L10n::UNDETERMINED_LANGUAGE] = L10n::UNDETERMINED_LANGUAGE; + } + ksort($languages); $languages = array_keys($languages); DI::cache()->set($cachekey, $languages); diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php index acae44ddce..d4d07b25bc 100644 --- a/src/Module/Admin/Site.php +++ b/src/Module/Admin/Site.php @@ -92,6 +92,7 @@ class Site extends BaseAdmin $private_addons = !empty($_POST['private_addons']); $disable_embedded = !empty($_POST['disable_embedded']); $allow_users_remote_self = !empty($_POST['allow_users_remote_self']); + $allow_relay_channels = !empty($_POST['allow_relay_channels']); $adjust_poll_frequency = !empty($_POST['adjust_poll_frequency']); $min_poll_interval = (!empty($_POST['min_poll_interval']) ? intval(trim($_POST['min_poll_interval'])) : 0); $explicit_content = !empty($_POST['explicit_content']); @@ -262,6 +263,7 @@ class Site extends BaseAdmin $transactionConfig->set('system', 'enotify_no_content' , $enotify_no_content); $transactionConfig->set('system', 'disable_embedded' , $disable_embedded); $transactionConfig->set('system', 'allow_users_remote_self', $allow_users_remote_self); + $transactionConfig->set('system', 'allow_relay_channels' , $allow_relay_channels); $transactionConfig->set('system', 'adjust_poll_frequency' , $adjust_poll_frequency); $transactionConfig->set('system', 'min_poll_interval' , $min_poll_interval); $transactionConfig->set('system', 'explicit_content' , $explicit_content); @@ -514,6 +516,7 @@ class Site extends BaseAdmin '$blocked_tags' => ['blocked_tags', DI::l10n()->t('Blocked tags for trending tags'), DI::config()->get('system', 'blocked_tags'), DI::l10n()->t("Comma separated list of hashtags that shouldn't be displayed in the trending tags.")], '$cache_contact_avatar' => ['cache_contact_avatar', DI::l10n()->t('Cache contact avatars'), DI::config()->get('system', 'cache_contact_avatar'), DI::l10n()->t('Locally store the avatar pictures of the contacts. This uses a lot of storage space but it increases the performance.')], '$allow_users_remote_self'=> ['allow_users_remote_self', DI::l10n()->t('Allow Users to set remote_self'), DI::config()->get('system', 'allow_users_remote_self'), DI::l10n()->t('With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream.')], + '$allow_relay_channels' => ['allow_relay_channels', DI::l10n()->t('Allow Users to set up relay channels'), DI::config()->get('system', 'allow_relay_channels'), DI::l10n()->t('If enabled, it is possible to create relay users that are used to reshare content based on user defined channels.')], '$adjust_poll_frequency' => ['adjust_poll_frequency', DI::l10n()->t('Adjust the feed poll frequency'), DI::config()->get('system', 'adjust_poll_frequency'), DI::l10n()->t('Automatically detect and set the best feed poll frequency.')], '$min_poll_interval' => ['min_poll_interval', DI::l10n()->t('Minimum poll interval'), DI::config()->get('system', 'min_poll_interval'), DI::l10n()->t('Minimal distance in minutes between two polls for mail and feed contacts. Reasonable values are between 1 and 59.')], '$enable_multi_reg' => ['enable_multi_reg', DI::l10n()->t('Enable multiple registrations'), !DI::config()->get('system', 'block_extended_register'), DI::l10n()->t('Enable users to register additional accounts for use as pages.')], diff --git a/src/Module/Conversation/Timeline.php b/src/Module/Conversation/Timeline.php index 1fdc9e0603..dd8e885e7c 100644 --- a/src/Module/Conversation/Timeline.php +++ b/src/Module/Conversation/Timeline.php @@ -436,7 +436,7 @@ class Timeline extends BaseModule $condition[] = $language; } if (!empty($conditions)) { - $condition[0] .= " AND (`language` IS NULL OR " . implode(' OR ', $conditions) . ")"; + $condition[0] .= " AND (" . implode(' OR ', $conditions) . ")"; } return $condition; } diff --git a/src/Module/Settings/Account.php b/src/Module/Settings/Account.php index 41d4f0fc58..8fac596a09 100644 --- a/src/Module/Settings/Account.php +++ b/src/Module/Settings/Account.php @@ -316,6 +316,8 @@ class Account extends BaseSettings $page_flags = User::PAGE_FLAGS_SOAPBOX; } elseif ($account_type == User::ACCOUNT_TYPE_COMMUNITY && !in_array($page_flags, [User::PAGE_FLAGS_COMMUNITY, User::PAGE_FLAGS_PRVGROUP])) { $page_flags = User::PAGE_FLAGS_COMMUNITY; + } elseif ($account_type == User::ACCOUNT_TYPE_RELAY && $page_flags != User::PAGE_FLAGS_SOAPBOX) { + $page_flags = User::PAGE_FLAGS_SOAPBOX; } $fields = [ @@ -423,6 +425,18 @@ class Account extends BaseSettings $user['account-type'] = User::ACCOUNT_TYPE_COMMUNITY; } + if (DI::config()->get('system', 'allow_relay_channels')) { + $account_relay = [ + 'account-type', + DI::l10n()->t('Channel Relay'), + User::ACCOUNT_TYPE_RELAY, + DI::l10n()->t('Account for a service that automatically shares content based on user defined channels.'), + $user['account-type'] == User::ACCOUNT_TYPE_RELAY + ]; + } else { + $account_relay = null; + } + $pageset_tpl = Renderer::getMarkupTemplate('settings/pagetypes.tpl'); $pagetype = Renderer::replaceMacros($pageset_tpl, [ '$account_types' => DI::l10n()->t("Account Types"), @@ -433,6 +447,7 @@ class Account extends BaseSettings '$type_organisation' => User::ACCOUNT_TYPE_ORGANISATION, '$type_news' => User::ACCOUNT_TYPE_NEWS, '$type_community' => User::ACCOUNT_TYPE_COMMUNITY, + '$type_relay' => User::ACCOUNT_TYPE_RELAY, '$account_person' => [ 'account-type', DI::l10n()->t('Personal Page'), @@ -461,6 +476,7 @@ class Account extends BaseSettings DI::l10n()->t('Account for community discussions.'), $user['account-type'] == User::ACCOUNT_TYPE_COMMUNITY ], + '$account_relay' => $account_relay, '$page_normal' => [ 'page-flags', DI::l10n()->t('Normal Account Page'), diff --git a/src/Module/Settings/Channels.php b/src/Module/Settings/Channels.php index aef8527775..d846a91be7 100644 --- a/src/Module/Settings/Channels.php +++ b/src/Module/Settings/Channels.php @@ -24,6 +24,7 @@ namespace Friendica\Module\Settings; use Friendica\App; use Friendica\Content\Conversation\Factory; use Friendica\Content\Conversation\Repository\UserDefinedChannel; +use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\Session\Capability\IHandleUserSessions; @@ -41,13 +42,16 @@ class Channels extends BaseSettings private $channel; /** @var Factory\UserDefinedChannel */ private $userDefinedChannel; + /** @var IManageConfigValues */ + private $config; - public function __construct(Factory\UserDefinedChannel $userDefinedChannel, UserDefinedChannel $channel, App\Page $page, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(Factory\UserDefinedChannel $userDefinedChannel, UserDefinedChannel $channel, App\Page $page, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IManageConfigValues $config, array $server, array $parameters = []) { parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); $this->userDefinedChannel = $userDefinedChannel; $this->channel = $channel; + $this->config = $config; } protected function post(array $request = []) @@ -110,6 +114,7 @@ class Channels extends BaseSettings 'full-text-search' => $request['text_search'][$id], 'media-type' => ($request['image'][$id] ? 1 : 0) | ($request['video'][$id] ? 2 : 0) | ($request['audio'][$id] ? 4 : 0), 'languages' => $request['languages'][$id], + 'publish' => $request['publish'][$id] ?? false, ]); $saved = $this->channel->save($channel); $this->logger->debug('Save channel', ['id' => $id, 'saved' => $saved]); @@ -125,12 +130,23 @@ class Channels extends BaseSettings throw new HTTPException\ForbiddenException($this->t('Permission denied.')); } - $circles = [ - 0 => $this->l10n->t('Global Community'), - -3 => $this->l10n->t('Network'), - -1 => $this->l10n->t('Following'), - -2 => $this->l10n->t('Followers'), - ]; + $user = User::getById($uid, ['account-type']); + $account_type = $user['account-type']; + + if (in_array($account_type, [User::ACCOUNT_TYPE_COMMUNITY, User::ACCOUNT_TYPE_RELAY])) { + $intro = $this->t('This page can be used to define the channels that will automatically be reshared by your account.'); + $circles = [ + 0 => $this->l10n->t('Global Community') + ]; + } else { + $intro = $this->t('This page can be used to define your own channels.'); + $circles = [ + 0 => $this->l10n->t('Global Community'), + -3 => $this->l10n->t('Network'), + -1 => $this->l10n->t('Following'), + -2 => $this->l10n->t('Followers'), + ]; + } foreach (Circle::getByUserId($uid) as $circle) { $circles[$circle['id']] = $circle['name']; @@ -149,6 +165,12 @@ class Channels extends BaseSettings $open = false; } + if ($this->config->get('system', 'allow_relay_channels') && in_array($account_type, [User::ACCOUNT_TYPE_COMMUNITY, User::ACCOUNT_TYPE_RELAY])) { + $publish = ["publish[$channel->code]", $this->t("Publish"), $channel->publish, $this->t("When selected, the channel results are reshared. This only works for public ActivityPub posts from the public timeline or the user defined circles.")]; + } else { + $publish = null; + } + $channels[] = [ 'id' => $channel->code, 'open' => $open, @@ -163,6 +185,7 @@ class Channels extends BaseSettings 'video' => ["video[$channel->code]", $this->t("Videos"), $channel->mediaType & 2], 'audio' => ["audio[$channel->code]", $this->t("Audio"), $channel->mediaType & 4], 'languages' => ["languages[$channel->code][]", $this->t('Languages'), $channel->languages ?? $channel_languages, $this->t('Select all languages that you want to see in this channel.'), $languages, 'multiple'], + 'publish' => $publish, 'delete' => ["delete[$channel->code]", $this->t("Delete channel") . ' (' . $channel->label . ')', false, $this->t("Check to delete this entry from the channel list")] ]; } @@ -183,7 +206,7 @@ class Channels extends BaseSettings 'languages' => ["new_languages[]", $this->t('Languages'), $channel_languages, $this->t('Select all languages that you want to see in this channel.'), $languages, 'multiple'], '$l10n' => [ 'title' => $this->t('Channels'), - 'intro' => $this->t('This page can be used to define your own channels.'), + 'intro' => $intro, 'addtitle' => $this->t('Add new entry to the channel list'), 'addsubmit' => $this->t('Add'), 'savechanges' => $this->t('Save'), diff --git a/src/Protocol/Relay.php b/src/Protocol/Relay.php index 611d66cf44..9b1911315a 100644 --- a/src/Protocol/Relay.php +++ b/src/Protocol/Relay.php @@ -23,7 +23,7 @@ namespace Friendica\Protocol; use Friendica\Content\Smilies; use Friendica\Content\Text\BBCode; -use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Database\DBA; @@ -157,20 +157,16 @@ class Relay */ public static function getSubscribedTags(): array { - $systemTags = []; - $server_tags = DI::config()->get('system', 'relay_server_tags'); - - foreach (explode(',', mb_strtolower($server_tags)) as $tag) { - $systemTags[] = trim($tag, '# '); + $tags = []; + foreach (explode(',', mb_strtolower(DI::config()->get('system', 'relay_server_tags'))) as $tag) { + $tags[] = trim($tag, '# '); } if (DI::config()->get('system', 'relay_user_tags')) { - $userTags = Search::getUserTags(); - } else { - $userTags = []; + $tags = array_merge($tags, Search::getUserTags()); } - return array_unique(array_merge($systemTags, $userTags)); + return array_unique($tags); } /** @@ -192,34 +188,31 @@ class Relay } } - if (empty($languages) && empty($detected) && (empty($body) || Smilies::isEmojiPost($body))) { + if (empty($detected) && empty($languages)) { + $detected = [L10n::UNDETERMINED_LANGUAGE]; + } + + if (empty($body) || Smilies::isEmojiPost($body)) { Logger::debug('Empty body or only emojis', ['body' => $body]); return true; } - if (!empty($languages) || !empty($detected)) { - $user_languages = User::getLanguages(); + $user_languages = User::getLanguages(); - foreach ($detected as $language) { - if (in_array($language, $user_languages)) { - Logger::debug('Wanted language found in detected languages', ['language' => $language, 'detected' => $detected, 'userlang' => $user_languages, 'body' => $body]); - return true; - } + foreach ($detected as $language) { + if (in_array($language, $user_languages)) { + Logger::debug('Wanted language found in detected languages', ['language' => $language, 'detected' => $detected, 'userlang' => $user_languages, 'body' => $body]); + return true; } - foreach ($languages as $language) { - if (in_array($language, $user_languages)) { - Logger::debug('Wanted language found in defined languages', ['language' => $language, 'languages' => $languages, 'detected' => $detected, 'userlang' => $user_languages, 'body' => $body]); - return true; - } - } - Logger::debug('No wanted language found', ['languages' => $languages, 'detected' => $detected, 'userlang' => $user_languages, 'body' => $body]); - return false; - } elseif (DI::config()->get('system', 'relay_deny_undetected_language')) { - Logger::info('Undetected language found', ['body' => $body]); - return false; } - - return true; + foreach ($languages as $language) { + if (in_array($language, $user_languages)) { + Logger::debug('Wanted language found in defined languages', ['language' => $language, 'languages' => $languages, 'detected' => $detected, 'userlang' => $user_languages, 'body' => $body]); + return true; + } + } + Logger::debug('No wanted language found', ['languages' => $languages, 'detected' => $detected, 'userlang' => $user_languages, 'body' => $body]); + return false; } /** diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index f1c4d4bda6..b244621fbe 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -56,7 +56,7 @@ use Friendica\Database\DBA; // This file is required several times during the test in DbaDefinition which justifies this condition if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1545); + define('DB_UPDATE_VERSION', 1546); } return [ @@ -563,6 +563,8 @@ return [ "full-text-search" => ["type" => "varchar(1023)", "comment" => "Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode"], "media-type" => ["type" => "smallint unsigned", "comment" => "Filtered media types"], "languages" => ["type" => "mediumtext", "comment" => "Desired languages"], + "publish" => ["type" => "boolean", "comment" => "publish channel content"], + "valid" => ["type" => "boolean", "comment" => "Set, when the full-text-search is valid"], ], "indexes" => [ "PRIMARY" => ["id"], @@ -1364,7 +1366,7 @@ return [ "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "comment" => "Item owner"], "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Person, organisation, news, community, relay"], "media-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Type of media in a bit array (1 = image, 2 = video, 4 = audio"], - "language" => ["type" => "varbinary(128)", "comment" => "Language information about this post"], + "language" => ["type" => "varchar(128)", "comment" => "Language information about this post"], "searchtext" => ["type" => "mediumtext", "comment" => "Simplified text for the full text search"], "created" => ["type" => "datetime", "comment" => ""], "restricted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "If true, this post is either unlisted or not from a federated network"], diff --git a/static/settings.config.php b/static/settings.config.php index d6cf142cae..a4cfc1b3e7 100644 --- a/static/settings.config.php +++ b/static/settings.config.php @@ -56,6 +56,10 @@ return [ // Automatically detect and set the best feed poll frequency. 'adjust_poll_frequency' => false, + // allow_relay_channels (Boolean) + // Allow Users to set remote_self + 'allow_relay_channels' => true, + // allowed_themes (Comma-separated list) // Themes users can change to in their settings. 'allowed_themes' => 'frio,vier', diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 72b7cadf39..2815e0948f 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: 2024-01-15 16:52+0000\n" +"POT-Creation-Date: 2024-01-15 19:41+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -66,8 +66,8 @@ msgstr "" #: src/Module/Register.php:77 src/Module/Register.php:90 #: src/Module/Register.php:206 src/Module/Register.php:245 #: src/Module/Search/Directory.php:37 src/Module/Settings/Account.php:50 -#: src/Module/Settings/Account.php:384 src/Module/Settings/Channels.php:57 -#: src/Module/Settings/Channels.php:125 src/Module/Settings/Delegation.php:90 +#: src/Module/Settings/Account.php:386 src/Module/Settings/Channels.php:61 +#: src/Module/Settings/Channels.php:130 src/Module/Settings/Delegation.php:90 #: src/Module/Settings/Display.php:90 src/Module/Settings/Display.php:197 #: src/Module/Settings/Profile/Photo/Crop.php:165 #: src/Module/Settings/Profile/Photo/Index.php:112 @@ -382,7 +382,7 @@ msgstr "" #: mod/notes.php:57 src/Content/Text/HTML.php:859 #: src/Module/Admin/Storage.php:142 src/Module/Filer/SaveTag.php:74 -#: src/Module/Post/Edit.php:129 src/Module/Settings/Channels.php:189 +#: src/Module/Post/Edit.php:129 src/Module/Settings/Channels.php:212 msgid "Save" msgstr "" @@ -794,12 +794,12 @@ msgstr "" #: src/BaseModule.php:439 src/Content/Conversation/Factory/Channel.php:45 #: 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/Settings/Channels.php:132 +#: src/Module/Settings/Channels.php:147 msgid "Followers" msgstr "" #: src/BaseModule.php:444 src/Content/Widget.php:240 src/Module/Contact.php:417 -#: src/Module/Settings/Channels.php:131 +#: src/Module/Settings/Channels.php:146 msgid "Following" msgstr "" @@ -957,7 +957,7 @@ msgstr "" msgid "Enter user nickname: " msgstr "" -#: src/Console/User.php:182 src/Model/User.php:806 +#: src/Console/User.php:182 src/Model/User.php:816 #: src/Module/Api/Twitter/ContactEndpoint.php:74 #: src/Module/Moderation/Users/Active.php:71 #: src/Module/Moderation/Users/Blocked.php:71 @@ -1551,7 +1551,7 @@ msgid "Posts from accounts that are followed by accounts that you follow" msgstr "" #: src/Content/Conversation/Factory/Channel.php:47 -#: src/Module/Settings/Channels.php:162 src/Module/Settings/Channels.php:180 +#: src/Module/Settings/Channels.php:184 src/Module/Settings/Channels.php:203 msgid "Images" msgstr "" @@ -1560,7 +1560,7 @@ msgid "Posts with images" msgstr "" #: src/Content/Conversation/Factory/Channel.php:48 -#: src/Module/Settings/Channels.php:164 src/Module/Settings/Channels.php:182 +#: src/Module/Settings/Channels.php:186 src/Module/Settings/Channels.php:205 msgid "Audio" msgstr "" @@ -1569,7 +1569,7 @@ msgid "Posts with audio" msgstr "" #: src/Content/Conversation/Factory/Channel.php:49 -#: src/Module/Settings/Channels.php:163 src/Module/Settings/Channels.php:181 +#: src/Module/Settings/Channels.php:185 src/Module/Settings/Channels.php:204 msgid "Videos" msgstr "" @@ -1586,7 +1586,7 @@ msgid "Posts from local users on this server" msgstr "" #: src/Content/Conversation/Factory/Community.php:47 -#: src/Module/Settings/Channels.php:129 +#: src/Module/Settings/Channels.php:139 src/Module/Settings/Channels.php:144 msgid "Global Community" msgstr "" @@ -1749,7 +1749,7 @@ msgstr "" #: src/Content/GroupManager.php:147 src/Content/Nav.php:278 #: src/Content/Text/HTML.php:880 src/Content/Widget.php:537 -#: src/Model/User.php:1368 +#: src/Model/User.php:1378 msgid "Groups" msgstr "" @@ -1770,7 +1770,7 @@ msgstr "" msgid "Create new group" msgstr "" -#: src/Content/Item.php:332 src/Model/Item.php:3166 +#: src/Content/Item.php:332 src/Model/Item.php:3235 msgid "event" msgstr "" @@ -1778,7 +1778,7 @@ msgstr "" msgid "status" msgstr "" -#: src/Content/Item.php:341 src/Model/Item.php:3168 +#: src/Content/Item.php:341 src/Model/Item.php:3237 #: src/Module/Post/Tag/Add.php:123 msgid "photo" msgstr "" @@ -1792,31 +1792,31 @@ msgstr "" msgid "Follow Thread" msgstr "" -#: src/Content/Item.php:430 src/Model/Contact.php:1242 +#: src/Content/Item.php:430 src/Model/Contact.php:1247 msgid "View Status" msgstr "" -#: src/Content/Item.php:431 src/Content/Item.php:452 src/Model/Contact.php:1176 -#: src/Model/Contact.php:1233 src/Model/Contact.php:1243 +#: src/Content/Item.php:431 src/Content/Item.php:452 src/Model/Contact.php:1181 +#: src/Model/Contact.php:1238 src/Model/Contact.php:1248 #: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:259 msgid "View Profile" msgstr "" -#: src/Content/Item.php:432 src/Model/Contact.php:1244 +#: src/Content/Item.php:432 src/Model/Contact.php:1249 msgid "View Photos" msgstr "" -#: src/Content/Item.php:433 src/Model/Contact.php:1211 +#: src/Content/Item.php:433 src/Model/Contact.php:1216 #: src/Model/Profile.php:468 msgid "Network Posts" msgstr "" -#: src/Content/Item.php:434 src/Model/Contact.php:1235 -#: src/Model/Contact.php:1246 +#: src/Content/Item.php:434 src/Model/Contact.php:1240 +#: src/Model/Contact.php:1251 msgid "View Contact" msgstr "" -#: src/Content/Item.php:435 src/Model/Contact.php:1247 +#: src/Content/Item.php:435 src/Model/Contact.php:1252 msgid "Send PM" msgstr "" @@ -1846,13 +1846,13 @@ msgstr "" msgid "Ignore %s server" msgstr "" -#: src/Content/Item.php:443 src/Module/Settings/Channels.php:165 -#: src/Module/Settings/Channels.php:183 src/Object/Post.php:509 +#: src/Content/Item.php:443 src/Module/Settings/Channels.php:187 +#: src/Module/Settings/Channels.php:206 src/Object/Post.php:509 msgid "Languages" msgstr "" #: src/Content/Item.php:449 src/Content/Widget.php:80 -#: src/Model/Contact.php:1236 src/Model/Contact.php:1248 +#: src/Model/Contact.php:1241 src/Model/Contact.php:1253 #: src/Module/Contact/Follow.php:167 view/theme/vier/theme.php:195 msgid "Connect/Follow" msgstr "" @@ -2050,7 +2050,7 @@ msgstr "" msgid "Terms of Service of this Friendica instance" msgstr "" -#: src/Content/Nav.php:306 src/Module/Settings/Channels.php:130 +#: src/Content/Nav.php:306 src/Module/Settings/Channels.php:145 #: view/theme/frio/theme.php:239 msgid "Network" msgstr "" @@ -2180,39 +2180,39 @@ msgstr "" msgid "last" msgstr "" -#: src/Content/Text/BBCode.php:751 src/Content/Text/BBCode.php:1696 -#: src/Content/Text/BBCode.php:1697 +#: src/Content/Text/BBCode.php:755 src/Content/Text/BBCode.php:1700 +#: src/Content/Text/BBCode.php:1701 msgid "Image/photo" msgstr "" -#: src/Content/Text/BBCode.php:969 +#: src/Content/Text/BBCode.php:973 #, php-format msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:994 src/Model/Item.php:3899 -#: src/Model/Item.php:3905 src/Model/Item.php:3906 +#: src/Content/Text/BBCode.php:998 src/Model/Item.php:3968 +#: src/Model/Item.php:3974 src/Model/Item.php:3975 msgid "Link to source" msgstr "" -#: src/Content/Text/BBCode.php:1603 src/Content/Text/HTML.php:904 +#: src/Content/Text/BBCode.php:1607 src/Content/Text/HTML.php:904 msgid "Click to open/close" msgstr "" -#: src/Content/Text/BBCode.php:1636 +#: src/Content/Text/BBCode.php:1640 msgid "$1 wrote:" msgstr "" -#: src/Content/Text/BBCode.php:1701 src/Content/Text/BBCode.php:1702 +#: src/Content/Text/BBCode.php:1705 src/Content/Text/BBCode.php:1706 msgid "Encrypted content" msgstr "" -#: src/Content/Text/BBCode.php:1957 +#: src/Content/Text/BBCode.php:1961 msgid "Invalid source protocol" msgstr "" -#: src/Content/Text/BBCode.php:1976 +#: src/Content/Text/BBCode.php:1980 msgid "Invalid link protocol" msgstr "" @@ -2360,11 +2360,11 @@ msgstr "" msgid "Organisations" msgstr "" -#: src/Content/Widget.php:536 src/Model/Contact.php:1738 +#: src/Content/Widget.php:536 src/Model/Contact.php:1743 msgid "News" msgstr "" -#: src/Content/Widget.php:542 src/Module/Settings/Account.php:428 +#: src/Content/Widget.php:542 src/Module/Settings/Account.php:442 msgid "Account Types" msgstr "" @@ -2372,8 +2372,8 @@ msgstr "" msgid "All" msgstr "" -#: src/Content/Widget.php:591 src/Module/Admin/Site.php:466 -#: src/Module/BaseSettings.php:125 src/Module/Settings/Channels.php:185 +#: src/Content/Widget.php:591 src/Module/Admin/Site.php:468 +#: src/Module/BaseSettings.php:125 src/Module/Settings/Channels.php:208 #: src/Module/Settings/Display.php:315 msgid "Channels" msgstr "" @@ -2424,12 +2424,12 @@ msgstr[1] "" msgid "More Trending Tags" msgstr "" -#: src/Content/Widget/VCard.php:102 src/Model/Contact.php:1204 +#: src/Content/Widget/VCard.php:102 src/Model/Contact.php:1209 #: src/Model/Profile.php:461 msgid "Post to group" msgstr "" -#: src/Content/Widget/VCard.php:106 src/Model/Contact.php:1209 +#: src/Content/Widget/VCard.php:106 src/Model/Contact.php:1214 #: src/Model/Profile.php:466 src/Module/Moderation/Item/Source.php:85 msgid "Mention" msgstr "" @@ -2457,13 +2457,13 @@ msgstr "" msgid "Network:" msgstr "" -#: src/Content/Widget/VCard.php:125 src/Model/Contact.php:1237 -#: src/Model/Contact.php:1249 src/Model/Profile.php:479 +#: src/Content/Widget/VCard.php:125 src/Model/Contact.php:1242 +#: src/Model/Contact.php:1254 src/Model/Profile.php:479 #: src/Module/Contact/Profile.php:463 msgid "Unfollow" msgstr "" -#: src/Content/Widget/VCard.php:131 src/Model/Contact.php:1206 +#: src/Content/Widget/VCard.php:131 src/Model/Contact.php:1211 #: src/Model/Profile.php:463 msgid "View group" msgstr "" @@ -2855,163 +2855,167 @@ msgstr "" msgid "Could not connect to database." msgstr "" -#: src/Core/L10n.php:446 +#: src/Core/L10n.php:444 src/Model/Item.php:2279 +msgid "Undetermined" +msgstr "" + +#: src/Core/L10n.php:451 #, php-format msgid "%s (%s)" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:430 +#: src/Core/L10n.php:499 src/Model/Event.php:430 #: src/Module/Settings/Display.php:284 msgid "Monday" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:431 +#: src/Core/L10n.php:499 src/Model/Event.php:431 #: src/Module/Settings/Display.php:285 msgid "Tuesday" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:432 +#: src/Core/L10n.php:499 src/Model/Event.php:432 #: src/Module/Settings/Display.php:286 msgid "Wednesday" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:433 +#: src/Core/L10n.php:499 src/Model/Event.php:433 #: src/Module/Settings/Display.php:287 msgid "Thursday" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:434 +#: src/Core/L10n.php:499 src/Model/Event.php:434 #: src/Module/Settings/Display.php:288 msgid "Friday" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:435 +#: src/Core/L10n.php:499 src/Model/Event.php:435 #: src/Module/Settings/Display.php:289 msgid "Saturday" msgstr "" -#: src/Core/L10n.php:494 src/Model/Event.php:429 +#: src/Core/L10n.php:499 src/Model/Event.php:429 #: src/Module/Settings/Display.php:283 msgid "Sunday" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:450 +#: src/Core/L10n.php:503 src/Model/Event.php:450 msgid "January" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:451 +#: src/Core/L10n.php:503 src/Model/Event.php:451 msgid "February" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:452 +#: src/Core/L10n.php:503 src/Model/Event.php:452 msgid "March" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:453 +#: src/Core/L10n.php:503 src/Model/Event.php:453 msgid "April" msgstr "" -#: src/Core/L10n.php:498 src/Core/L10n.php:517 src/Model/Event.php:441 +#: src/Core/L10n.php:503 src/Core/L10n.php:522 src/Model/Event.php:441 msgid "May" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:454 +#: src/Core/L10n.php:503 src/Model/Event.php:454 msgid "June" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:455 +#: src/Core/L10n.php:503 src/Model/Event.php:455 msgid "July" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:456 +#: src/Core/L10n.php:503 src/Model/Event.php:456 msgid "August" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:457 +#: src/Core/L10n.php:503 src/Model/Event.php:457 msgid "September" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:458 +#: src/Core/L10n.php:503 src/Model/Event.php:458 msgid "October" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:459 +#: src/Core/L10n.php:503 src/Model/Event.php:459 msgid "November" msgstr "" -#: src/Core/L10n.php:498 src/Model/Event.php:460 +#: src/Core/L10n.php:503 src/Model/Event.php:460 msgid "December" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:422 +#: src/Core/L10n.php:518 src/Model/Event.php:422 msgid "Mon" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:423 +#: src/Core/L10n.php:518 src/Model/Event.php:423 msgid "Tue" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:424 +#: src/Core/L10n.php:518 src/Model/Event.php:424 msgid "Wed" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:425 +#: src/Core/L10n.php:518 src/Model/Event.php:425 msgid "Thu" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:426 +#: src/Core/L10n.php:518 src/Model/Event.php:426 msgid "Fri" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:427 +#: src/Core/L10n.php:518 src/Model/Event.php:427 msgid "Sat" msgstr "" -#: src/Core/L10n.php:513 src/Model/Event.php:421 +#: src/Core/L10n.php:518 src/Model/Event.php:421 msgid "Sun" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:437 +#: src/Core/L10n.php:522 src/Model/Event.php:437 msgid "Jan" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:438 +#: src/Core/L10n.php:522 src/Model/Event.php:438 msgid "Feb" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:439 +#: src/Core/L10n.php:522 src/Model/Event.php:439 msgid "Mar" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:440 +#: src/Core/L10n.php:522 src/Model/Event.php:440 msgid "Apr" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:442 +#: src/Core/L10n.php:522 src/Model/Event.php:442 msgid "Jun" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:443 +#: src/Core/L10n.php:522 src/Model/Event.php:443 msgid "Jul" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:444 +#: src/Core/L10n.php:522 src/Model/Event.php:444 msgid "Aug" msgstr "" -#: src/Core/L10n.php:517 +#: src/Core/L10n.php:522 msgid "Sep" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:446 +#: src/Core/L10n.php:522 src/Model/Event.php:446 msgid "Oct" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:447 +#: src/Core/L10n.php:522 src/Model/Event.php:447 msgid "Nov" msgstr "" -#: src/Core/L10n.php:517 src/Model/Event.php:448 +#: src/Core/L10n.php:522 src/Model/Event.php:448 msgid "Dec" msgstr "" @@ -3229,82 +3233,82 @@ msgstr "" msgid "Edit circles" msgstr "" -#: src/Model/Contact.php:1256 src/Module/Moderation/Users/Pending.php:102 +#: src/Model/Contact.php:1261 src/Module/Moderation/Users/Pending.php:102 #: src/Module/Notifications/Introductions.php:132 #: src/Module/Notifications/Introductions.php:204 msgid "Approve" msgstr "" -#: src/Model/Contact.php:1734 +#: src/Model/Contact.php:1739 msgid "Organisation" msgstr "" -#: src/Model/Contact.php:1742 +#: src/Model/Contact.php:1747 msgid "Group" msgstr "" -#: src/Model/Contact.php:3045 +#: src/Model/Contact.php:3050 msgid "Disallowed profile URL." msgstr "" -#: src/Model/Contact.php:3050 src/Module/Friendica.php:101 +#: src/Model/Contact.php:3055 src/Module/Friendica.php:101 msgid "Blocked domain" msgstr "" -#: src/Model/Contact.php:3055 +#: src/Model/Contact.php:3060 msgid "Connect URL missing." msgstr "" -#: src/Model/Contact.php:3064 +#: src/Model/Contact.php:3069 msgid "" "The contact could not be added. Please check the relevant network " "credentials in your Settings -> Social Networks page." msgstr "" -#: src/Model/Contact.php:3082 +#: src/Model/Contact.php:3087 #, php-format msgid "Expected network %s does not match actual network %s" msgstr "" -#: src/Model/Contact.php:3099 +#: src/Model/Contact.php:3104 msgid "The profile address specified does not provide adequate information." msgstr "" -#: src/Model/Contact.php:3101 +#: src/Model/Contact.php:3106 msgid "No compatible communication protocols or feeds were discovered." msgstr "" -#: src/Model/Contact.php:3104 +#: src/Model/Contact.php:3109 msgid "An author or name was not found." msgstr "" -#: src/Model/Contact.php:3107 +#: src/Model/Contact.php:3112 msgid "No browser URL could be matched to this address." msgstr "" -#: src/Model/Contact.php:3110 +#: src/Model/Contact.php:3115 msgid "" "Unable to match @-style Identity Address with a known protocol or email " "contact." msgstr "" -#: src/Model/Contact.php:3111 +#: src/Model/Contact.php:3116 msgid "Use mailto: in front of address to force email check." msgstr "" -#: src/Model/Contact.php:3117 +#: src/Model/Contact.php:3122 msgid "" "The profile address specified belongs to a network which has been disabled " "on this site." msgstr "" -#: src/Model/Contact.php:3122 +#: src/Model/Contact.php:3127 msgid "" "Limited profile. This person will be unable to receive direct/personal " "notifications from you." msgstr "" -#: src/Model/Contact.php:3188 +#: src/Model/Contact.php:3193 msgid "Unable to retrieve contact information." msgstr "" @@ -3409,99 +3413,99 @@ msgstr "" msgid "Happy Birthday %s" msgstr "" -#: src/Model/Item.php:2217 +#: src/Model/Item.php:2286 #, php-format msgid "%s (%s - %s): %s" msgstr "" -#: src/Model/Item.php:2219 +#: src/Model/Item.php:2288 #, php-format msgid "%s (%s): %s" msgstr "" -#: src/Model/Item.php:2222 +#: src/Model/Item.php:2291 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:3170 +#: src/Model/Item.php:3239 msgid "activity" msgstr "" -#: src/Model/Item.php:3172 +#: src/Model/Item.php:3241 msgid "comment" msgstr "" -#: src/Model/Item.php:3175 src/Module/Post/Tag/Add.php:123 +#: src/Model/Item.php:3244 src/Module/Post/Tag/Add.php:123 msgid "post" msgstr "" -#: src/Model/Item.php:3345 +#: src/Model/Item.php:3414 #, php-format msgid "%s is blocked" msgstr "" -#: src/Model/Item.php:3347 +#: src/Model/Item.php:3416 #, php-format msgid "%s is ignored" msgstr "" -#: src/Model/Item.php:3349 +#: src/Model/Item.php:3418 #, php-format msgid "Content from %s is collapsed" msgstr "" -#: src/Model/Item.php:3353 +#: src/Model/Item.php:3422 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3806 +#: src/Model/Item.php:3875 msgid "bytes" msgstr "" -#: src/Model/Item.php:3837 +#: src/Model/Item.php:3906 #, 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:3839 +#: src/Model/Item.php:3908 #, php-format msgid "%2$s (%1$d vote)" msgid_plural "%2$s (%1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3844 +#: src/Model/Item.php:3913 #, php-format msgid "%d voter. Poll end: %s" msgid_plural "%d voters. Poll end: %s" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3846 +#: src/Model/Item.php:3915 #, php-format msgid "%d voter." msgid_plural "%d voters." msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3848 +#: src/Model/Item.php:3917 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3882 src/Model/Item.php:3883 +#: src/Model/Item.php:3951 src/Model/Item.php:3952 msgid "View on separate page" msgstr "" -#: src/Model/Mail.php:137 src/Model/Mail.php:266 +#: src/Model/Mail.php:135 msgid "[no subject]" msgstr "" -#: src/Model/Photo.php:1190 src/Module/Media/Photo/Upload.php:170 +#: src/Model/Photo.php:1191 src/Module/Media/Photo/Upload.php:170 msgid "Wall Photos" msgstr "" @@ -3651,145 +3655,145 @@ msgstr "" msgid "Contact information and Social Networks" msgstr "" -#: src/Model/User.php:225 src/Model/User.php:1281 +#: src/Model/User.php:225 src/Model/User.php:1291 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: src/Model/User.php:715 src/Model/User.php:748 +#: src/Model/User.php:725 src/Model/User.php:758 msgid "Login failed" msgstr "" -#: src/Model/User.php:780 +#: src/Model/User.php:790 msgid "Not enough information to authenticate" msgstr "" -#: src/Model/User.php:901 +#: src/Model/User.php:911 msgid "Password can't be empty" msgstr "" -#: src/Model/User.php:943 +#: src/Model/User.php:953 msgid "Empty passwords are not allowed." msgstr "" -#: src/Model/User.php:947 +#: src/Model/User.php:957 msgid "" "The new password has been exposed in a public data dump, please choose " "another." msgstr "" -#: src/Model/User.php:951 +#: src/Model/User.php:961 msgid "The password length is limited to 72 characters." msgstr "" -#: src/Model/User.php:955 +#: src/Model/User.php:965 msgid "The password can't contain white spaces nor accentuated letters" msgstr "" -#: src/Model/User.php:1164 +#: src/Model/User.php:1174 msgid "Passwords do not match. Password unchanged." msgstr "" -#: src/Model/User.php:1171 +#: src/Model/User.php:1181 msgid "An invitation is required." msgstr "" -#: src/Model/User.php:1175 +#: src/Model/User.php:1185 msgid "Invitation could not be verified." msgstr "" -#: src/Model/User.php:1183 +#: src/Model/User.php:1193 msgid "Invalid OpenID url" msgstr "" -#: src/Model/User.php:1196 src/Security/Authentication.php:241 +#: src/Model/User.php:1206 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:1196 src/Security/Authentication.php:241 +#: src/Model/User.php:1206 src/Security/Authentication.php:241 msgid "The error message was:" msgstr "" -#: src/Model/User.php:1202 +#: src/Model/User.php:1212 msgid "Please enter the required information." msgstr "" -#: src/Model/User.php:1216 +#: src/Model/User.php:1226 #, 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:1223 +#: src/Model/User.php:1233 #, 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:1227 +#: src/Model/User.php:1237 #, 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:1235 +#: src/Model/User.php:1245 msgid "That doesn't appear to be your full (First Last) name." msgstr "" -#: src/Model/User.php:1240 +#: src/Model/User.php:1250 msgid "Your email domain is not among those allowed on this site." msgstr "" -#: src/Model/User.php:1244 +#: src/Model/User.php:1254 msgid "Not a valid email address." msgstr "" -#: src/Model/User.php:1247 +#: src/Model/User.php:1257 msgid "The nickname was blocked from registration by the nodes admin." msgstr "" -#: src/Model/User.php:1251 src/Model/User.php:1257 +#: src/Model/User.php:1261 src/Model/User.php:1267 msgid "Cannot use that email." msgstr "" -#: src/Model/User.php:1263 +#: src/Model/User.php:1273 msgid "Your nickname can only contain a-z, 0-9 and _." msgstr "" -#: src/Model/User.php:1271 src/Model/User.php:1328 +#: src/Model/User.php:1281 src/Model/User.php:1338 msgid "Nickname is already registered. Please choose another." msgstr "" -#: src/Model/User.php:1315 src/Model/User.php:1319 +#: src/Model/User.php:1325 src/Model/User.php:1329 msgid "An error occurred during registration. Please try again." msgstr "" -#: src/Model/User.php:1342 +#: src/Model/User.php:1352 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: src/Model/User.php:1349 +#: src/Model/User.php:1359 msgid "An error occurred creating your self contact. Please try again." msgstr "" -#: src/Model/User.php:1354 +#: src/Model/User.php:1364 msgid "Friends" msgstr "" -#: src/Model/User.php:1358 +#: src/Model/User.php:1368 msgid "" "An error occurred creating your default contact circle. Please try again." msgstr "" -#: src/Model/User.php:1402 +#: src/Model/User.php:1412 msgid "Profile Photos" msgstr "" -#: src/Model/User.php:1584 +#: src/Model/User.php:1594 #, php-format msgid "" "\n" @@ -3797,7 +3801,7 @@ msgid "" "\t\t\tthe administrator of %2$s has set up an account for you." msgstr "" -#: src/Model/User.php:1587 +#: src/Model/User.php:1597 #, php-format msgid "" "\n" @@ -3833,12 +3837,12 @@ msgid "" "\t\tThank you and welcome to %4$s." msgstr "" -#: src/Model/User.php:1619 src/Model/User.php:1725 +#: src/Model/User.php:1629 src/Model/User.php:1735 #, php-format msgid "Registration details for %s" msgstr "" -#: src/Model/User.php:1639 +#: src/Model/User.php:1649 #, php-format msgid "" "\n" @@ -3854,12 +3858,12 @@ msgid "" "\t\t" msgstr "" -#: src/Model/User.php:1658 +#: src/Model/User.php:1668 #, php-format msgid "Registration at %s" msgstr "" -#: src/Model/User.php:1682 +#: src/Model/User.php:1692 #, php-format msgid "" "\n" @@ -3868,7 +3872,7 @@ msgid "" "\t\t\t" msgstr "" -#: src/Model/User.php:1690 +#: src/Model/User.php:1700 #, php-format msgid "" "\n" @@ -3906,7 +3910,7 @@ msgid "" "\t\t\tThank you and welcome to %2$s." msgstr "" -#: src/Model/User.php:1752 +#: src/Model/User.php:1762 msgid "" "User with delegates can't be removed, please remove delegate users first" msgstr "" @@ -3938,7 +3942,7 @@ msgstr "" #: src/Module/Admin/Addons/Details.php:111 src/Module/Admin/Addons/Index.php:67 #: src/Module/Admin/Federation.php:218 src/Module/Admin/Logs/Settings.php:85 #: src/Module/Admin/Logs/View.php:83 src/Module/Admin/Queue.php:72 -#: src/Module/Admin/Site.php:449 src/Module/Admin/Storage.php:138 +#: src/Module/Admin/Site.php:451 src/Module/Admin/Storage.php:138 #: src/Module/Admin/Summary.php:196 src/Module/Admin/Themes/Details.php:90 #: src/Module/Admin/Themes/Index.php:111 src/Module/Admin/Tos.php:77 #: src/Module/Moderation/Users/Create.php:61 @@ -3976,9 +3980,9 @@ msgid "Addon %s failed to install." msgstr "" #: src/Module/Admin/Addons/Index.php:69 src/Module/Admin/Features.php:86 -#: src/Module/Admin/Logs/Settings.php:87 src/Module/Admin/Site.php:452 +#: src/Module/Admin/Logs/Settings.php:87 src/Module/Admin/Site.php:454 #: src/Module/Admin/Themes/Index.php:113 src/Module/Admin/Tos.php:86 -#: src/Module/Settings/Account.php:535 src/Module/Settings/Addons.php:78 +#: src/Module/Settings/Account.php:551 src/Module/Settings/Addons.php:78 #: src/Module/Settings/Connectors.php:160 #: src/Module/Settings/Connectors.php:246 #: src/Module/Settings/Delegation.php:193 src/Module/Settings/Display.php:309 @@ -4176,8 +4180,8 @@ msgid "Enable Debugging" msgstr "" #: src/Module/Admin/Logs/Settings.php:91 src/Module/Admin/Logs/Settings.php:92 -#: src/Module/Admin/Logs/Settings.php:93 src/Module/Admin/Site.php:472 -#: src/Module/Admin/Site.php:480 +#: src/Module/Admin/Logs/Settings.php:93 src/Module/Admin/Site.php:474 +#: src/Module/Admin/Site.php:482 msgid "Read-only because it is set by an environment variable" msgstr "" @@ -4337,269 +4341,269 @@ msgstr "" msgid "Priority" msgstr "" -#: src/Module/Admin/Site.php:240 +#: src/Module/Admin/Site.php:241 #, php-format msgid "%s is no valid input for maximum image size" msgstr "" -#: src/Module/Admin/Site.php:364 src/Module/Settings/Display.php:215 +#: src/Module/Admin/Site.php:366 src/Module/Settings/Display.php:215 msgid "No special theme for mobile devices" msgstr "" -#: src/Module/Admin/Site.php:381 src/Module/Settings/Display.php:225 +#: src/Module/Admin/Site.php:383 src/Module/Settings/Display.php:225 #, php-format msgid "%s - (Experimental)" msgstr "" -#: src/Module/Admin/Site.php:393 +#: src/Module/Admin/Site.php:395 msgid "No community page" msgstr "" -#: src/Module/Admin/Site.php:394 +#: src/Module/Admin/Site.php:396 msgid "No community page for visitors" msgstr "" -#: src/Module/Admin/Site.php:395 +#: src/Module/Admin/Site.php:397 msgid "Public postings from users of this site" msgstr "" -#: src/Module/Admin/Site.php:396 +#: src/Module/Admin/Site.php:398 msgid "Public postings from the federated network" msgstr "" -#: src/Module/Admin/Site.php:397 +#: src/Module/Admin/Site.php:399 msgid "Public postings from local users and the federated network" msgstr "" -#: src/Module/Admin/Site.php:403 +#: src/Module/Admin/Site.php:405 msgid "Multi user instance" msgstr "" -#: src/Module/Admin/Site.php:426 +#: src/Module/Admin/Site.php:428 msgid "Closed" msgstr "" -#: src/Module/Admin/Site.php:427 +#: src/Module/Admin/Site.php:429 msgid "Requires approval" msgstr "" -#: src/Module/Admin/Site.php:428 +#: src/Module/Admin/Site.php:430 msgid "Open" msgstr "" -#: src/Module/Admin/Site.php:432 +#: src/Module/Admin/Site.php:434 msgid "Don't check" msgstr "" -#: src/Module/Admin/Site.php:433 +#: src/Module/Admin/Site.php:435 msgid "check the stable version" msgstr "" -#: src/Module/Admin/Site.php:434 +#: src/Module/Admin/Site.php:436 msgid "check the development version" msgstr "" -#: src/Module/Admin/Site.php:438 +#: src/Module/Admin/Site.php:440 msgid "none" msgstr "" -#: src/Module/Admin/Site.php:439 +#: src/Module/Admin/Site.php:441 msgid "Local contacts" msgstr "" -#: src/Module/Admin/Site.php:440 +#: src/Module/Admin/Site.php:442 msgid "Interactors" msgstr "" -#: src/Module/Admin/Site.php:450 src/Module/BaseAdmin.php:90 +#: src/Module/Admin/Site.php:452 src/Module/BaseAdmin.php:90 msgid "Site" msgstr "" -#: src/Module/Admin/Site.php:451 +#: src/Module/Admin/Site.php:453 msgid "General Information" msgstr "" -#: src/Module/Admin/Site.php:453 +#: src/Module/Admin/Site.php:455 msgid "Republish users to directory" msgstr "" -#: src/Module/Admin/Site.php:454 src/Module/Register.php:152 +#: src/Module/Admin/Site.php:456 src/Module/Register.php:152 msgid "Registration" msgstr "" -#: src/Module/Admin/Site.php:455 +#: src/Module/Admin/Site.php:457 msgid "File upload" msgstr "" -#: src/Module/Admin/Site.php:456 +#: src/Module/Admin/Site.php:458 msgid "Policies" msgstr "" -#: src/Module/Admin/Site.php:457 src/Module/Calendar/Event/Form.php:252 +#: src/Module/Admin/Site.php:459 src/Module/Calendar/Event/Form.php:252 #: src/Module/Contact.php:546 src/Module/Profile/Profile.php:276 msgid "Advanced" msgstr "" -#: src/Module/Admin/Site.php:458 +#: src/Module/Admin/Site.php:460 msgid "Auto Discovered Contact Directory" msgstr "" -#: src/Module/Admin/Site.php:459 +#: src/Module/Admin/Site.php:461 msgid "Performance" msgstr "" -#: src/Module/Admin/Site.php:460 +#: src/Module/Admin/Site.php:462 msgid "Worker" msgstr "" -#: src/Module/Admin/Site.php:461 +#: src/Module/Admin/Site.php:463 msgid "Message Relay" msgstr "" -#: src/Module/Admin/Site.php:462 +#: src/Module/Admin/Site.php:464 msgid "" "Use the command \"console relay\" in the command line to add or remove " "relays." msgstr "" -#: src/Module/Admin/Site.php:463 +#: src/Module/Admin/Site.php:465 msgid "The system is not subscribed to any relays at the moment." msgstr "" -#: src/Module/Admin/Site.php:464 +#: src/Module/Admin/Site.php:466 msgid "The system is currently subscribed to the following relays:" msgstr "" -#: src/Module/Admin/Site.php:467 +#: src/Module/Admin/Site.php:469 msgid "Relocate Node" msgstr "" -#: src/Module/Admin/Site.php:468 +#: src/Module/Admin/Site.php:470 msgid "" "Relocating your node enables you to change the DNS domain of this node and " "keep all the existing users and posts. This process takes a while and can " "only be started from the relocate console command like this:" msgstr "" -#: src/Module/Admin/Site.php:469 +#: src/Module/Admin/Site.php:471 msgid "(Friendica directory)# bin/console relocate https://newdomain.com" msgstr "" -#: src/Module/Admin/Site.php:472 +#: src/Module/Admin/Site.php:474 msgid "Site name" msgstr "" -#: src/Module/Admin/Site.php:473 +#: src/Module/Admin/Site.php:475 msgid "Sender Email" msgstr "" -#: src/Module/Admin/Site.php:473 +#: src/Module/Admin/Site.php:475 msgid "" "The email address your server shall use to send notification emails from." msgstr "" -#: src/Module/Admin/Site.php:474 +#: src/Module/Admin/Site.php:476 msgid "Name of the system actor" msgstr "" -#: src/Module/Admin/Site.php:474 +#: src/Module/Admin/Site.php:476 msgid "" "Name of the internal system account that is used to perform ActivityPub " "requests. This must be an unused username. If set, this can't be changed " "again." msgstr "" -#: src/Module/Admin/Site.php:475 +#: src/Module/Admin/Site.php:477 msgid "Banner/Logo" msgstr "" -#: src/Module/Admin/Site.php:476 +#: src/Module/Admin/Site.php:478 msgid "Email Banner/Logo" msgstr "" -#: src/Module/Admin/Site.php:477 +#: src/Module/Admin/Site.php:479 msgid "Shortcut icon" msgstr "" -#: src/Module/Admin/Site.php:477 +#: src/Module/Admin/Site.php:479 msgid "Link to an icon that will be used for browsers." msgstr "" -#: src/Module/Admin/Site.php:478 +#: src/Module/Admin/Site.php:480 msgid "Touch icon" msgstr "" -#: src/Module/Admin/Site.php:478 +#: src/Module/Admin/Site.php:480 msgid "Link to an icon that will be used for tablets and mobiles." msgstr "" -#: src/Module/Admin/Site.php:479 +#: src/Module/Admin/Site.php:481 msgid "Additional Info" msgstr "" -#: src/Module/Admin/Site.php:479 +#: src/Module/Admin/Site.php:481 #, php-format msgid "" "For public servers: you can add additional information here that will be " "listed at %s/servers." msgstr "" -#: src/Module/Admin/Site.php:480 +#: src/Module/Admin/Site.php:482 msgid "System language" msgstr "" -#: src/Module/Admin/Site.php:481 +#: src/Module/Admin/Site.php:483 msgid "System theme" msgstr "" -#: src/Module/Admin/Site.php:481 +#: src/Module/Admin/Site.php:483 #, php-format msgid "" "Default system theme - may be over-ridden by user profiles - Change default theme settings" msgstr "" -#: src/Module/Admin/Site.php:482 +#: src/Module/Admin/Site.php:484 msgid "Mobile system theme" msgstr "" -#: src/Module/Admin/Site.php:482 +#: src/Module/Admin/Site.php:484 msgid "Theme for mobile devices" msgstr "" -#: src/Module/Admin/Site.php:483 +#: src/Module/Admin/Site.php:485 msgid "Force SSL" msgstr "" -#: src/Module/Admin/Site.php:483 +#: src/Module/Admin/Site.php:485 msgid "" "Force all Non-SSL requests to SSL - Attention: on some systems it could lead " "to endless loops." msgstr "" -#: src/Module/Admin/Site.php:484 +#: src/Module/Admin/Site.php:486 msgid "Show help entry from navigation menu" msgstr "" -#: src/Module/Admin/Site.php:484 +#: src/Module/Admin/Site.php:486 msgid "" "Displays the menu entry for the Help pages from the navigation menu. It is " "always accessible by calling /help directly." msgstr "" -#: src/Module/Admin/Site.php:485 +#: src/Module/Admin/Site.php:487 msgid "Single user instance" msgstr "" -#: src/Module/Admin/Site.php:485 +#: src/Module/Admin/Site.php:487 msgid "Make this instance multi-user or single-user for the named user" msgstr "" -#: src/Module/Admin/Site.php:487 +#: src/Module/Admin/Site.php:489 msgid "Maximum image size" msgstr "" -#: src/Module/Admin/Site.php:487 +#: src/Module/Admin/Site.php:489 #, php-format msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " @@ -4611,35 +4615,35 @@ msgid "" "to %s (%s byte)" msgstr "" -#: src/Module/Admin/Site.php:491 +#: src/Module/Admin/Site.php:493 msgid "Maximum image length" msgstr "" -#: src/Module/Admin/Site.php:491 +#: src/Module/Admin/Site.php:493 msgid "" "Maximum length in pixels of the longest side of uploaded images. Default is " "-1, which means no limits." msgstr "" -#: src/Module/Admin/Site.php:492 +#: src/Module/Admin/Site.php:494 msgid "JPEG image quality" msgstr "" -#: src/Module/Admin/Site.php:492 +#: src/Module/Admin/Site.php:494 msgid "" "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " "100, which is full quality." msgstr "" -#: src/Module/Admin/Site.php:494 +#: src/Module/Admin/Site.php:496 msgid "Register policy" msgstr "" -#: src/Module/Admin/Site.php:495 +#: src/Module/Admin/Site.php:497 msgid "Maximum Users" msgstr "" -#: src/Module/Admin/Site.php:495 +#: src/Module/Admin/Site.php:497 msgid "" "If defined, the register policy is automatically closed when the given " "number of users is reached and reopens the registry when the number drops " @@ -4647,168 +4651,168 @@ msgid "" "not when the policy is set to approval." msgstr "" -#: src/Module/Admin/Site.php:496 +#: src/Module/Admin/Site.php:498 msgid "Maximum Daily Registrations" msgstr "" -#: src/Module/Admin/Site.php:496 +#: src/Module/Admin/Site.php:498 msgid "" "If registration is permitted above, this sets the maximum number of new user " "registrations to accept per day. If register is set to closed, this setting " "has no effect." msgstr "" -#: src/Module/Admin/Site.php:497 +#: src/Module/Admin/Site.php:499 msgid "Register text" msgstr "" -#: src/Module/Admin/Site.php:497 +#: src/Module/Admin/Site.php:499 msgid "" "Will be displayed prominently on the registration page. You can use BBCode " "here." msgstr "" -#: src/Module/Admin/Site.php:498 +#: src/Module/Admin/Site.php:500 msgid "Forbidden Nicknames" msgstr "" -#: src/Module/Admin/Site.php:498 +#: src/Module/Admin/Site.php:500 msgid "" "Comma separated list of nicknames that are forbidden from registration. " "Preset is a list of role names according RFC 2142." msgstr "" -#: src/Module/Admin/Site.php:499 +#: src/Module/Admin/Site.php:501 msgid "Accounts abandoned after x days" msgstr "" -#: src/Module/Admin/Site.php:499 +#: src/Module/Admin/Site.php:501 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "" -#: src/Module/Admin/Site.php:500 +#: src/Module/Admin/Site.php:502 msgid "Allowed friend domains" msgstr "" -#: src/Module/Admin/Site.php:500 +#: src/Module/Admin/Site.php:502 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "" -#: src/Module/Admin/Site.php:501 +#: src/Module/Admin/Site.php:503 msgid "Allowed email domains" msgstr "" -#: src/Module/Admin/Site.php:501 +#: src/Module/Admin/Site.php:503 msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" msgstr "" -#: src/Module/Admin/Site.php:502 +#: src/Module/Admin/Site.php:504 msgid "No OEmbed rich content" msgstr "" -#: src/Module/Admin/Site.php:502 +#: src/Module/Admin/Site.php:504 msgid "" "Don't show the rich content (e.g. embedded PDF), except from the domains " "listed below." msgstr "" -#: src/Module/Admin/Site.php:503 +#: src/Module/Admin/Site.php:505 msgid "Trusted third-party domains" msgstr "" -#: src/Module/Admin/Site.php:503 +#: src/Module/Admin/Site.php:505 msgid "" "Comma separated list of domains from which content is allowed to be embedded " "in posts like with OEmbed. All sub-domains of the listed domains are allowed " "as well." msgstr "" -#: src/Module/Admin/Site.php:504 +#: src/Module/Admin/Site.php:506 msgid "Block public" msgstr "" -#: src/Module/Admin/Site.php:504 +#: src/Module/Admin/Site.php:506 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." msgstr "" -#: src/Module/Admin/Site.php:505 +#: src/Module/Admin/Site.php:507 msgid "Force publish" msgstr "" -#: src/Module/Admin/Site.php:505 +#: src/Module/Admin/Site.php:507 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "" -#: src/Module/Admin/Site.php:505 +#: src/Module/Admin/Site.php:507 msgid "Enabling this may violate privacy laws like the GDPR" msgstr "" -#: src/Module/Admin/Site.php:506 +#: src/Module/Admin/Site.php:508 msgid "Global directory URL" msgstr "" -#: src/Module/Admin/Site.php:506 +#: src/Module/Admin/Site.php:508 msgid "" "URL to the global directory. If this is not set, the global directory is " "completely unavailable to the application." msgstr "" -#: src/Module/Admin/Site.php:507 +#: src/Module/Admin/Site.php:509 msgid "Private posts by default for new users" msgstr "" -#: src/Module/Admin/Site.php:507 +#: src/Module/Admin/Site.php:509 msgid "" "Set default post permissions for all new members to the default privacy " "circle rather than public." msgstr "" -#: src/Module/Admin/Site.php:508 +#: src/Module/Admin/Site.php:510 msgid "Don't include post content in email notifications" msgstr "" -#: src/Module/Admin/Site.php:508 +#: src/Module/Admin/Site.php:510 msgid "" "Don't include the content of a post/comment/private message/etc. in the " "email notifications that are sent out from this site, as a privacy measure." msgstr "" -#: src/Module/Admin/Site.php:509 +#: src/Module/Admin/Site.php:511 msgid "Disallow public access to addons listed in the apps menu." msgstr "" -#: src/Module/Admin/Site.php:509 +#: src/Module/Admin/Site.php:511 msgid "" "Checking this box will restrict addons listed in the apps menu to members " "only." msgstr "" -#: src/Module/Admin/Site.php:510 +#: src/Module/Admin/Site.php:512 msgid "Don't embed private images in posts" msgstr "" -#: src/Module/Admin/Site.php:510 +#: src/Module/Admin/Site.php:512 msgid "" "Don't replace locally-hosted private photos in posts with an embedded copy " "of the image. This means that contacts who receive posts containing private " "photos will have to authenticate and load each image, which may take a while." msgstr "" -#: src/Module/Admin/Site.php:511 +#: src/Module/Admin/Site.php:513 msgid "Explicit Content" msgstr "" -#: src/Module/Admin/Site.php:511 +#: src/Module/Admin/Site.php:513 msgid "" "Set this to announce that your node is used mostly for explicit content that " "might not be suited for minors. This information will be published in the " @@ -4817,329 +4821,339 @@ msgid "" "will be shown at the user registration page." msgstr "" -#: src/Module/Admin/Site.php:512 +#: src/Module/Admin/Site.php:514 msgid "Proxify external content" msgstr "" -#: src/Module/Admin/Site.php:512 +#: src/Module/Admin/Site.php:514 msgid "" "Route external content via the proxy functionality. This is used for example " "for some OEmbed accesses and in some other rare cases." msgstr "" -#: src/Module/Admin/Site.php:513 +#: src/Module/Admin/Site.php:515 msgid "Only local search" msgstr "" -#: src/Module/Admin/Site.php:513 +#: src/Module/Admin/Site.php:515 msgid "" "Blocks search for users who are not logged in to prevent crawlers from " "blocking your system." msgstr "" -#: src/Module/Admin/Site.php:514 +#: src/Module/Admin/Site.php:516 msgid "Blocked tags for trending tags" msgstr "" -#: src/Module/Admin/Site.php:514 +#: src/Module/Admin/Site.php:516 msgid "" "Comma separated list of hashtags that shouldn't be displayed in the trending " "tags." msgstr "" -#: src/Module/Admin/Site.php:515 +#: src/Module/Admin/Site.php:517 msgid "Cache contact avatars" msgstr "" -#: src/Module/Admin/Site.php:515 +#: src/Module/Admin/Site.php:517 msgid "" "Locally store the avatar pictures of the contacts. This uses a lot of " "storage space but it increases the performance." msgstr "" -#: src/Module/Admin/Site.php:516 +#: src/Module/Admin/Site.php:518 msgid "Allow Users to set remote_self" msgstr "" -#: src/Module/Admin/Site.php:516 +#: src/Module/Admin/Site.php:518 msgid "" "With checking this, every user is allowed to mark every contact as a " "remote_self in the repair contact dialog. Setting this flag on a contact " "causes mirroring every posting of that contact in the users stream." msgstr "" -#: src/Module/Admin/Site.php:517 +#: src/Module/Admin/Site.php:519 +msgid "Allow Users to set up relay channels" +msgstr "" + +#: src/Module/Admin/Site.php:519 +msgid "" +"If enabled, it is possible to create relay users that are used to reshare " +"content based on user defined channels." +msgstr "" + +#: src/Module/Admin/Site.php:520 msgid "Adjust the feed poll frequency" msgstr "" -#: src/Module/Admin/Site.php:517 +#: src/Module/Admin/Site.php:520 msgid "Automatically detect and set the best feed poll frequency." msgstr "" -#: src/Module/Admin/Site.php:518 +#: src/Module/Admin/Site.php:521 msgid "Minimum poll interval" msgstr "" -#: src/Module/Admin/Site.php:518 +#: src/Module/Admin/Site.php:521 msgid "" "Minimal distance in minutes between two polls for mail and feed contacts. " "Reasonable values are between 1 and 59." msgstr "" -#: src/Module/Admin/Site.php:519 +#: src/Module/Admin/Site.php:522 msgid "Enable multiple registrations" msgstr "" -#: src/Module/Admin/Site.php:519 +#: src/Module/Admin/Site.php:522 msgid "Enable users to register additional accounts for use as pages." msgstr "" -#: src/Module/Admin/Site.php:520 +#: src/Module/Admin/Site.php:523 msgid "Enable OpenID" msgstr "" -#: src/Module/Admin/Site.php:520 +#: src/Module/Admin/Site.php:523 msgid "Enable OpenID support for registration and logins." msgstr "" -#: src/Module/Admin/Site.php:521 +#: src/Module/Admin/Site.php:524 msgid "Enable full name check" msgstr "" -#: src/Module/Admin/Site.php:521 +#: src/Module/Admin/Site.php:524 msgid "" "Prevents users from registering with a display name with fewer than two " "parts separated by spaces." msgstr "" -#: src/Module/Admin/Site.php:522 +#: src/Module/Admin/Site.php:525 msgid "Email administrators on new registration" msgstr "" -#: src/Module/Admin/Site.php:522 +#: src/Module/Admin/Site.php:525 msgid "" "If enabled and the system is set to an open registration, an email for each " "new registration is sent to the administrators." msgstr "" -#: src/Module/Admin/Site.php:523 +#: src/Module/Admin/Site.php:526 msgid "Community pages for visitors" msgstr "" -#: src/Module/Admin/Site.php:523 +#: src/Module/Admin/Site.php:526 msgid "" "Which community pages should be available for visitors. Local users always " "see both pages." msgstr "" -#: src/Module/Admin/Site.php:524 +#: src/Module/Admin/Site.php:527 msgid "Posts per user on community page" msgstr "" -#: src/Module/Admin/Site.php:524 +#: src/Module/Admin/Site.php:527 msgid "" "The maximum number of posts per user on the local community page. This is " "useful, when a single user floods the local community page." msgstr "" -#: src/Module/Admin/Site.php:525 +#: src/Module/Admin/Site.php:528 msgid "Posts per server on community page" msgstr "" -#: src/Module/Admin/Site.php:525 +#: src/Module/Admin/Site.php:528 msgid "" "The maximum number of posts per server on the global community page. This is " "useful, when posts from a single server flood the global community page." msgstr "" -#: src/Module/Admin/Site.php:527 +#: src/Module/Admin/Site.php:530 msgid "Enable Mail support" msgstr "" -#: src/Module/Admin/Site.php:527 +#: src/Module/Admin/Site.php:530 msgid "" "Enable built-in mail support to poll IMAP folders and to reply via mail." msgstr "" -#: src/Module/Admin/Site.php:528 +#: src/Module/Admin/Site.php:531 msgid "" "Mail support can't be enabled because the PHP IMAP module is not installed." msgstr "" -#: src/Module/Admin/Site.php:529 +#: src/Module/Admin/Site.php:532 msgid "Enable OStatus support" msgstr "" -#: src/Module/Admin/Site.php:529 +#: src/Module/Admin/Site.php:532 msgid "" "Enable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " "communications in OStatus are public." msgstr "" -#: src/Module/Admin/Site.php:531 +#: src/Module/Admin/Site.php:534 msgid "" "Diaspora support can't be enabled because Friendica was installed into a sub " "directory." msgstr "" -#: src/Module/Admin/Site.php:532 +#: src/Module/Admin/Site.php:535 msgid "Enable Diaspora support" msgstr "" -#: src/Module/Admin/Site.php:532 +#: src/Module/Admin/Site.php:535 msgid "" "Enable built-in Diaspora network compatibility for communicating with " "diaspora servers." msgstr "" -#: src/Module/Admin/Site.php:533 +#: src/Module/Admin/Site.php:536 msgid "Verify SSL" msgstr "" -#: src/Module/Admin/Site.php:533 +#: src/Module/Admin/Site.php:536 msgid "" "If you wish, you can turn on strict certificate checking. This will mean you " "cannot connect (at all) to self-signed SSL sites." msgstr "" -#: src/Module/Admin/Site.php:534 +#: src/Module/Admin/Site.php:537 msgid "Proxy user" msgstr "" -#: src/Module/Admin/Site.php:534 +#: src/Module/Admin/Site.php:537 msgid "User name for the proxy server." msgstr "" -#: src/Module/Admin/Site.php:535 +#: src/Module/Admin/Site.php:538 msgid "Proxy URL" msgstr "" -#: src/Module/Admin/Site.php:535 +#: src/Module/Admin/Site.php:538 msgid "" "If you want to use a proxy server that Friendica should use to connect to " "the network, put the URL of the proxy here." msgstr "" -#: src/Module/Admin/Site.php:536 +#: src/Module/Admin/Site.php:539 msgid "Network timeout" msgstr "" -#: src/Module/Admin/Site.php:536 +#: src/Module/Admin/Site.php:539 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "" -#: src/Module/Admin/Site.php:537 +#: src/Module/Admin/Site.php:540 msgid "Maximum Load Average" msgstr "" -#: src/Module/Admin/Site.php:537 +#: src/Module/Admin/Site.php:540 #, php-format msgid "" "Maximum system load before delivery and poll processes are deferred - " "default %d." msgstr "" -#: src/Module/Admin/Site.php:538 +#: src/Module/Admin/Site.php:541 msgid "Minimal Memory" msgstr "" -#: src/Module/Admin/Site.php:538 +#: src/Module/Admin/Site.php:541 msgid "" "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " "default 0 (deactivated)." msgstr "" -#: src/Module/Admin/Site.php:539 +#: src/Module/Admin/Site.php:542 msgid "Periodically optimize tables" msgstr "" -#: src/Module/Admin/Site.php:539 +#: src/Module/Admin/Site.php:542 msgid "Periodically optimize tables like the cache and the workerqueue" msgstr "" -#: src/Module/Admin/Site.php:541 +#: src/Module/Admin/Site.php:544 msgid "Discover followers/followings from contacts" msgstr "" -#: src/Module/Admin/Site.php:541 +#: src/Module/Admin/Site.php:544 msgid "" "If enabled, contacts are checked for their followers and following contacts." msgstr "" -#: src/Module/Admin/Site.php:542 +#: src/Module/Admin/Site.php:545 msgid "None - deactivated" msgstr "" -#: src/Module/Admin/Site.php:543 +#: src/Module/Admin/Site.php:546 msgid "" "Local contacts - contacts of our local contacts are discovered for their " "followers/followings." msgstr "" -#: src/Module/Admin/Site.php:544 +#: src/Module/Admin/Site.php:547 msgid "" "Interactors - contacts of our local contacts and contacts who interacted on " "locally visible postings are discovered for their followers/followings." msgstr "" -#: src/Module/Admin/Site.php:546 +#: src/Module/Admin/Site.php:549 msgid "Only update contacts/servers with local data" msgstr "" -#: src/Module/Admin/Site.php:546 +#: src/Module/Admin/Site.php:549 msgid "" "If enabled, the system will only look for changes in contacts and servers " "that engaged on this system by either being in a contact list of a user or " "when posts or comments exists from the contact on this system." msgstr "" -#: src/Module/Admin/Site.php:547 +#: src/Module/Admin/Site.php:550 msgid "Synchronize the contacts with the directory server" msgstr "" -#: src/Module/Admin/Site.php:547 +#: src/Module/Admin/Site.php:550 msgid "" "if enabled, the system will check periodically for new contacts on the " "defined directory server." msgstr "" -#: src/Module/Admin/Site.php:549 +#: src/Module/Admin/Site.php:552 msgid "Discover contacts from other servers" msgstr "" -#: src/Module/Admin/Site.php:549 +#: src/Module/Admin/Site.php:552 msgid "" "Periodically query other servers for contacts and servers that they know of. " "The system queries Friendica, Mastodon and Hubzilla servers. Keep it " "deactivated on small machines to decrease the database size and load." msgstr "" -#: src/Module/Admin/Site.php:550 +#: src/Module/Admin/Site.php:553 msgid "Days between requery" msgstr "" -#: src/Module/Admin/Site.php:550 +#: src/Module/Admin/Site.php:553 msgid "" "Number of days after which a server is requeried for their contacts and " "servers it knows of. This is only used when the discovery is activated." msgstr "" -#: src/Module/Admin/Site.php:551 +#: src/Module/Admin/Site.php:554 msgid "Search the local directory" msgstr "" -#: src/Module/Admin/Site.php:551 +#: src/Module/Admin/Site.php:554 msgid "" "Search the local directory instead of the global directory. When searching " "locally, every search will be executed on the global directory in the " "background. This improves the search results when the search is repeated." msgstr "" -#: src/Module/Admin/Site.php:553 +#: src/Module/Admin/Site.php:556 msgid "Publish server information" msgstr "" -#: src/Module/Admin/Site.php:553 +#: src/Module/Admin/Site.php:556 msgid "" "If enabled, general server and usage data will be published. The data " "contains the name and version of the server, number of users with public " @@ -5147,50 +5161,50 @@ msgid "" "href=\"http://the-federation.info/\">the-federation.info for details." msgstr "" -#: src/Module/Admin/Site.php:555 +#: src/Module/Admin/Site.php:558 msgid "Check upstream version" msgstr "" -#: src/Module/Admin/Site.php:555 +#: src/Module/Admin/Site.php:558 msgid "" "Enables checking for new Friendica versions at github. If there is a new " "version, you will be informed in the admin panel overview." msgstr "" -#: src/Module/Admin/Site.php:556 +#: src/Module/Admin/Site.php:559 msgid "Suppress Tags" msgstr "" -#: src/Module/Admin/Site.php:556 +#: src/Module/Admin/Site.php:559 msgid "Suppress showing a list of hashtags at the end of the posting." msgstr "" -#: src/Module/Admin/Site.php:557 +#: src/Module/Admin/Site.php:560 msgid "Clean database" msgstr "" -#: src/Module/Admin/Site.php:557 +#: src/Module/Admin/Site.php:560 msgid "" "Remove old remote items, orphaned database records and old content from some " "other helper tables." msgstr "" -#: src/Module/Admin/Site.php:558 +#: src/Module/Admin/Site.php:561 msgid "Lifespan of remote items" msgstr "" -#: src/Module/Admin/Site.php:558 +#: src/Module/Admin/Site.php:561 msgid "" "When the database cleanup is enabled, this defines the days after which " "remote items will be deleted. Own items, and marked or filed items are " "always kept. 0 disables this behaviour." msgstr "" -#: src/Module/Admin/Site.php:559 +#: src/Module/Admin/Site.php:562 msgid "Lifespan of unclaimed items" msgstr "" -#: src/Module/Admin/Site.php:559 +#: src/Module/Admin/Site.php:562 msgid "" "When the database cleanup is enabled, this defines the days after which " "unclaimed remote items (mostly content from the relay) will be deleted. " @@ -5198,165 +5212,165 @@ msgid "" "items if set to 0." msgstr "" -#: src/Module/Admin/Site.php:560 +#: src/Module/Admin/Site.php:563 msgid "Lifespan of raw conversation data" msgstr "" -#: src/Module/Admin/Site.php:560 +#: src/Module/Admin/Site.php:563 msgid "" "The conversation data is used for ActivityPub and OStatus, as well as for " "debug purposes. It should be safe to remove it after 14 days, default is 90 " "days." msgstr "" -#: src/Module/Admin/Site.php:561 +#: src/Module/Admin/Site.php:564 msgid "Maximum numbers of comments per post" msgstr "" -#: src/Module/Admin/Site.php:561 +#: src/Module/Admin/Site.php:564 msgid "How much comments should be shown for each post? Default value is 100." msgstr "" -#: src/Module/Admin/Site.php:562 +#: src/Module/Admin/Site.php:565 msgid "Maximum numbers of comments per post on the display page" msgstr "" -#: src/Module/Admin/Site.php:562 +#: src/Module/Admin/Site.php:565 msgid "" "How many comments should be shown on the single view for each post? Default " "value is 1000." msgstr "" -#: src/Module/Admin/Site.php:563 +#: src/Module/Admin/Site.php:566 msgid "Items per page" msgstr "" -#: src/Module/Admin/Site.php:563 +#: src/Module/Admin/Site.php:566 msgid "" "Number of items per page in stream pages (network, community, profile/" "contact statuses, search)." msgstr "" -#: src/Module/Admin/Site.php:564 +#: src/Module/Admin/Site.php:567 msgid "Items per page for mobile devices" msgstr "" -#: src/Module/Admin/Site.php:564 +#: src/Module/Admin/Site.php:567 msgid "" "Number of items per page in stream pages (network, community, profile/" "contact statuses, search) for mobile devices." msgstr "" -#: src/Module/Admin/Site.php:565 +#: src/Module/Admin/Site.php:568 msgid "Temp path" msgstr "" -#: src/Module/Admin/Site.php:565 +#: src/Module/Admin/Site.php:568 msgid "" "If you have a restricted system where the webserver can't access the system " "temp path, enter another path here." msgstr "" -#: src/Module/Admin/Site.php:566 +#: src/Module/Admin/Site.php:569 msgid "Only search in tags" msgstr "" -#: src/Module/Admin/Site.php:566 +#: src/Module/Admin/Site.php:569 msgid "On large systems the text search can slow down the system extremely." msgstr "" -#: src/Module/Admin/Site.php:567 +#: src/Module/Admin/Site.php:570 msgid "Generate counts per contact circle when calculating network count" msgstr "" -#: src/Module/Admin/Site.php:567 +#: src/Module/Admin/Site.php:570 msgid "" "On systems with users that heavily use contact circles the query can be very " "expensive." msgstr "" -#: src/Module/Admin/Site.php:568 +#: src/Module/Admin/Site.php:571 msgid "Process \"view\" activities" msgstr "" -#: src/Module/Admin/Site.php:568 +#: src/Module/Admin/Site.php:571 msgid "" "\"view\" activities are mostly geberated by Peertube systems. Per default " "they are not processed for performance reasons. Only activate this option on " "performant system." msgstr "" -#: src/Module/Admin/Site.php:569 +#: src/Module/Admin/Site.php:572 msgid "Days, after which a contact is archived" msgstr "" -#: src/Module/Admin/Site.php:569 +#: src/Module/Admin/Site.php:572 msgid "" "Number of days that we try to deliver content or to update the contact data " "before we archive a contact." msgstr "" -#: src/Module/Admin/Site.php:571 +#: src/Module/Admin/Site.php:574 msgid "Maximum number of parallel workers" msgstr "" -#: src/Module/Admin/Site.php:571 +#: src/Module/Admin/Site.php:574 #, php-format msgid "" "On shared hosters set this to %d. On larger systems, values of %d are great. " "Default value is %d." msgstr "" -#: src/Module/Admin/Site.php:572 +#: src/Module/Admin/Site.php:575 msgid "Maximum load for workers" msgstr "" -#: src/Module/Admin/Site.php:572 +#: src/Module/Admin/Site.php:575 msgid "Maximum load that causes a cooldown before each worker function call." msgstr "" -#: src/Module/Admin/Site.php:573 +#: src/Module/Admin/Site.php:576 msgid "Enable fastlane" msgstr "" -#: src/Module/Admin/Site.php:573 +#: src/Module/Admin/Site.php:576 msgid "" "When enabed, the fastlane mechanism starts an additional worker if processes " "with higher priority are blocked by processes of lower priority." msgstr "" -#: src/Module/Admin/Site.php:574 +#: src/Module/Admin/Site.php:577 msgid "Decoupled receiver" msgstr "" -#: src/Module/Admin/Site.php:574 +#: src/Module/Admin/Site.php:577 msgid "" "Decouple incoming ActivityPub posts by processing them in the background via " "a worker process. Only enable this on fast systems." msgstr "" -#: src/Module/Admin/Site.php:575 +#: src/Module/Admin/Site.php:578 msgid "Cron interval" msgstr "" -#: src/Module/Admin/Site.php:575 +#: src/Module/Admin/Site.php:578 msgid "Minimal period in minutes between two calls of the \"Cron\" worker job." msgstr "" -#: src/Module/Admin/Site.php:576 +#: src/Module/Admin/Site.php:579 msgid "Worker defer limit" msgstr "" -#: src/Module/Admin/Site.php:576 +#: src/Module/Admin/Site.php:579 msgid "" "Per default the systems tries delivering for 15 times before dropping it." msgstr "" -#: src/Module/Admin/Site.php:577 +#: src/Module/Admin/Site.php:580 msgid "Worker fetch limit" msgstr "" -#: src/Module/Admin/Site.php:577 +#: src/Module/Admin/Site.php:580 msgid "" "Number of worker tasks that are fetched in a single query. Higher values " "should increase the performance, too high values will mostly likely decrease " @@ -5364,142 +5378,142 @@ msgid "" "system." msgstr "" -#: src/Module/Admin/Site.php:579 +#: src/Module/Admin/Site.php:582 msgid "Direct relay transfer" msgstr "" -#: src/Module/Admin/Site.php:579 +#: src/Module/Admin/Site.php:582 msgid "" "Enables the direct transfer to other servers without using the relay servers" msgstr "" -#: src/Module/Admin/Site.php:580 +#: src/Module/Admin/Site.php:583 msgid "Relay scope" msgstr "" -#: src/Module/Admin/Site.php:580 +#: src/Module/Admin/Site.php:583 msgid "" "Can be \"all\" or \"tags\". \"all\" means that every public post should be " "received. \"tags\" means that only posts with selected tags should be " "received." msgstr "" -#: src/Module/Admin/Site.php:580 src/Module/Contact/Profile.php:309 +#: src/Module/Admin/Site.php:583 src/Module/Contact/Profile.php:309 #: src/Module/Settings/TwoFactor/Index.php:146 msgid "Disabled" msgstr "" -#: src/Module/Admin/Site.php:580 +#: src/Module/Admin/Site.php:583 msgid "all" msgstr "" -#: src/Module/Admin/Site.php:580 +#: src/Module/Admin/Site.php:583 msgid "tags" msgstr "" -#: src/Module/Admin/Site.php:581 +#: src/Module/Admin/Site.php:584 msgid "Server tags" msgstr "" -#: src/Module/Admin/Site.php:581 +#: src/Module/Admin/Site.php:584 msgid "Comma separated list of tags for the \"tags\" subscription." msgstr "" -#: src/Module/Admin/Site.php:582 +#: src/Module/Admin/Site.php:585 msgid "Deny Server tags" msgstr "" -#: src/Module/Admin/Site.php:582 +#: src/Module/Admin/Site.php:585 msgid "Comma separated list of tags that are rejected." msgstr "" -#: src/Module/Admin/Site.php:583 +#: src/Module/Admin/Site.php:586 msgid "Allow user tags" msgstr "" -#: src/Module/Admin/Site.php:583 +#: src/Module/Admin/Site.php:586 msgid "" "If enabled, the tags from the saved searches will used for the \"tags\" " "subscription in addition to the \"relay_server_tags\"." msgstr "" -#: src/Module/Admin/Site.php:584 +#: src/Module/Admin/Site.php:587 msgid "Deny undetected languages" msgstr "" -#: src/Module/Admin/Site.php:584 +#: src/Module/Admin/Site.php:587 msgid "If enabled, posts with undetected languages will be rejected." msgstr "" -#: src/Module/Admin/Site.php:585 +#: src/Module/Admin/Site.php:588 msgid "Language Quality" msgstr "" -#: src/Module/Admin/Site.php:585 +#: src/Module/Admin/Site.php:588 msgid "The minimum language quality that is required to accept the post." msgstr "" -#: src/Module/Admin/Site.php:586 +#: src/Module/Admin/Site.php:589 msgid "Number of languages for the language detection" msgstr "" -#: src/Module/Admin/Site.php:586 +#: src/Module/Admin/Site.php:589 msgid "" "The system detects a list of languages per post. Only if the desired " "languages are in the list, the message will be accepted. The higher the " "number, the more posts will be falsely detected." msgstr "" -#: src/Module/Admin/Site.php:588 +#: src/Module/Admin/Site.php:591 msgid "Maximum age of channel" msgstr "" -#: src/Module/Admin/Site.php:588 +#: src/Module/Admin/Site.php:591 msgid "" "This defines the maximum age in hours of items that should be displayed in " "channels. This affects the channel performance." msgstr "" -#: src/Module/Admin/Site.php:589 +#: src/Module/Admin/Site.php:592 msgid "Maximum number of channel posts" msgstr "" -#: src/Module/Admin/Site.php:589 +#: src/Module/Admin/Site.php:592 msgid "" "For performance reasons, the channels use a dedicated table to store " "content. The higher the value the slower the channels." msgstr "" -#: src/Module/Admin/Site.php:590 +#: src/Module/Admin/Site.php:593 msgid "Interaction score days" msgstr "" -#: src/Module/Admin/Site.php:590 +#: src/Module/Admin/Site.php:593 msgid "Number of days that are used to calculate the interaction score." msgstr "" -#: src/Module/Admin/Site.php:591 +#: src/Module/Admin/Site.php:594 msgid "Maximum number of posts per author" msgstr "" -#: src/Module/Admin/Site.php:591 +#: src/Module/Admin/Site.php:594 msgid "" "Maximum number of posts per page by author if the contact frequency is set " "to \"Display only few posts\". If there are more posts, then the post with " "the most interactions will be displayed." msgstr "" -#: src/Module/Admin/Site.php:592 +#: src/Module/Admin/Site.php:595 msgid "Sharer interaction days" msgstr "" -#: src/Module/Admin/Site.php:592 +#: src/Module/Admin/Site.php:595 msgid "" "Number of days of the last interaction that are used to define which sharers " "are used for the \"sharers of sharers\" channel." msgstr "" -#: src/Module/Admin/Site.php:595 +#: src/Module/Admin/Site.php:598 msgid "Start Relocation" msgstr "" @@ -6120,7 +6134,7 @@ msgstr "" #: src/Module/Moderation/Blocklist/Server/Index.php:116 #: src/Module/Moderation/Item/Delete.php:67 src/Module/Register.php:148 #: src/Module/Security/TwoFactor/Verify.php:101 -#: src/Module/Settings/Channels.php:155 src/Module/Settings/Channels.php:173 +#: src/Module/Settings/Channels.php:177 src/Module/Settings/Channels.php:196 #: src/Module/Settings/TwoFactor/Index.php:161 #: src/Module/Settings/TwoFactor/Verify.php:158 msgid "Required" @@ -7373,7 +7387,7 @@ msgstr "" #: src/Module/Friendica.php:102 #: src/Module/Moderation/Blocklist/Server/Index.php:87 #: src/Module/Moderation/Blocklist/Server/Index.php:111 -#: src/Module/Settings/Channels.php:192 +#: src/Module/Settings/Channels.php:215 msgid "Reason for the block" msgstr "" @@ -7811,19 +7825,19 @@ msgstr "" msgid "List of pending user deletions" msgstr "" -#: src/Module/Moderation/BaseUsers.php:119 src/Module/Settings/Account.php:466 +#: src/Module/Moderation/BaseUsers.php:119 src/Module/Settings/Account.php:482 msgid "Normal Account Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:120 src/Module/Settings/Account.php:473 +#: src/Module/Moderation/BaseUsers.php:120 src/Module/Settings/Account.php:489 msgid "Soapbox Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:121 src/Module/Settings/Account.php:480 +#: src/Module/Moderation/BaseUsers.php:121 src/Module/Settings/Account.php:496 msgid "Public Group" msgstr "" -#: src/Module/Moderation/BaseUsers.php:122 src/Module/Settings/Account.php:487 +#: src/Module/Moderation/BaseUsers.php:122 src/Module/Settings/Account.php:503 msgid "Automatic Friend Page" msgstr "" @@ -7831,19 +7845,19 @@ msgstr "" msgid "Private Group" msgstr "" -#: src/Module/Moderation/BaseUsers.php:126 src/Module/Settings/Account.php:438 +#: src/Module/Moderation/BaseUsers.php:126 src/Module/Settings/Account.php:453 msgid "Personal Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:127 src/Module/Settings/Account.php:445 +#: src/Module/Moderation/BaseUsers.php:127 src/Module/Settings/Account.php:460 msgid "Organisation Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:128 src/Module/Settings/Account.php:452 +#: src/Module/Moderation/BaseUsers.php:128 src/Module/Settings/Account.php:467 msgid "News Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:129 src/Module/Settings/Account.php:459 +#: src/Module/Moderation/BaseUsers.php:129 src/Module/Settings/Account.php:474 msgid "Community Group" msgstr "" @@ -8121,7 +8135,7 @@ msgstr "" #: src/Module/Moderation/Blocklist/Server/Index.php:86 #: src/Module/Moderation/Blocklist/Server/Index.php:110 -#: src/Module/Settings/Channels.php:191 +#: src/Module/Settings/Channels.php:214 msgid "Blocked server domain pattern" msgstr "" @@ -9269,7 +9283,7 @@ msgid "Please repeat your e-mail address:" msgstr "" #: src/Module/Register.php:162 src/Module/Security/PasswordTooLong.php:100 -#: src/Module/Settings/Account.php:541 +#: src/Module/Settings/Account.php:557 msgid "New Password:" msgstr "" @@ -9278,7 +9292,7 @@ msgid "Leave empty for an auto generated password." msgstr "" #: src/Module/Register.php:163 src/Module/Security/PasswordTooLong.php:101 -#: src/Module/Settings/Account.php:542 +#: src/Module/Settings/Account.php:558 msgid "Confirm:" msgstr "" @@ -9496,24 +9510,24 @@ msgid "Update Password" msgstr "" #: src/Module/Security/PasswordTooLong.php:99 -#: src/Module/Settings/Account.php:543 +#: src/Module/Settings/Account.php:559 msgid "Current Password:" msgstr "" #: src/Module/Security/PasswordTooLong.php:99 -#: src/Module/Settings/Account.php:543 +#: src/Module/Settings/Account.php:559 msgid "Your current password to confirm the changes" msgstr "" #: src/Module/Security/PasswordTooLong.php:100 -#: src/Module/Settings/Account.php:527 +#: src/Module/Settings/Account.php:543 msgid "" "Allowed characters are a-z, A-Z, 0-9 and special characters except white " "spaces and accentuated letters." msgstr "" #: src/Module/Security/PasswordTooLong.php:100 -#: src/Module/Settings/Account.php:528 +#: src/Module/Settings/Account.php:544 msgid "Password length is limited to 72 characters." msgstr "" @@ -9640,97 +9654,107 @@ msgstr "" #: src/Module/Settings/Account.php:146 src/Module/Settings/Account.php:195 #: src/Module/Settings/Account.php:216 src/Module/Settings/Account.php:300 -#: src/Module/Settings/Account.php:327 +#: src/Module/Settings/Account.php:329 msgid "Settings were not updated." msgstr "" -#: src/Module/Settings/Account.php:340 +#: src/Module/Settings/Account.php:342 msgid "Contact CSV file upload error" msgstr "" -#: src/Module/Settings/Account.php:359 +#: src/Module/Settings/Account.php:361 msgid "Importing Contacts done" msgstr "" -#: src/Module/Settings/Account.php:372 +#: src/Module/Settings/Account.php:374 msgid "Relocate message has been send to your contacts" msgstr "" -#: src/Module/Settings/Account.php:389 +#: src/Module/Settings/Account.php:391 msgid "Unable to find your profile. Please contact your admin." msgstr "" -#: src/Module/Settings/Account.php:429 +#: src/Module/Settings/Account.php:431 +msgid "Channel Relay" +msgstr "" + +#: src/Module/Settings/Account.php:433 +msgid "" +"Account for a service that automatically shares content based on user " +"defined channels." +msgstr "" + +#: src/Module/Settings/Account.php:443 msgid "Personal Page Subtypes" msgstr "" -#: src/Module/Settings/Account.php:430 +#: src/Module/Settings/Account.php:444 msgid "Community Group Subtypes" msgstr "" -#: src/Module/Settings/Account.php:440 +#: src/Module/Settings/Account.php:455 msgid "Account for a personal profile." msgstr "" -#: src/Module/Settings/Account.php:447 +#: src/Module/Settings/Account.php:462 msgid "" "Account for an organisation that automatically approves contact requests as " "\"Followers\"." msgstr "" -#: src/Module/Settings/Account.php:454 +#: src/Module/Settings/Account.php:469 msgid "" "Account for a news reflector that automatically approves contact requests as " "\"Followers\"." msgstr "" -#: src/Module/Settings/Account.php:461 +#: src/Module/Settings/Account.php:476 msgid "Account for community discussions." msgstr "" -#: src/Module/Settings/Account.php:468 +#: src/Module/Settings/Account.php:484 msgid "" "Account for a regular personal profile that requires manual approval of " "\"Friends\" and \"Followers\"." msgstr "" -#: src/Module/Settings/Account.php:475 +#: src/Module/Settings/Account.php:491 msgid "" "Account for a public profile that automatically approves contact requests as " "\"Followers\"." msgstr "" -#: src/Module/Settings/Account.php:482 +#: src/Module/Settings/Account.php:498 msgid "Automatically approves all contact requests." msgstr "" -#: src/Module/Settings/Account.php:489 +#: src/Module/Settings/Account.php:505 msgid "" "Account for a popular profile that automatically approves contact requests " "as \"Friends\"." msgstr "" -#: src/Module/Settings/Account.php:494 +#: src/Module/Settings/Account.php:510 msgid "Private Group [Experimental]" msgstr "" -#: src/Module/Settings/Account.php:496 +#: src/Module/Settings/Account.php:512 msgid "Requires manual approval of contact requests." msgstr "" -#: src/Module/Settings/Account.php:505 +#: src/Module/Settings/Account.php:521 msgid "OpenID:" msgstr "" -#: src/Module/Settings/Account.php:505 +#: src/Module/Settings/Account.php:521 msgid "(Optional) Allow this OpenID to login to this account." msgstr "" -#: src/Module/Settings/Account.php:513 +#: src/Module/Settings/Account.php:529 msgid "Publish your profile in your local site directory?" msgstr "" -#: src/Module/Settings/Account.php:513 +#: src/Module/Settings/Account.php:529 #, php-format msgid "" "Your profile will be published in this node's local " @@ -9738,94 +9762,94 @@ msgid "" "system settings." msgstr "" -#: src/Module/Settings/Account.php:519 +#: src/Module/Settings/Account.php:535 #, php-format msgid "" "Your profile will also be published in the global friendica directories (e." "g. %s)." msgstr "" -#: src/Module/Settings/Account.php:532 +#: src/Module/Settings/Account.php:548 msgid "Account Settings" msgstr "" -#: src/Module/Settings/Account.php:533 +#: src/Module/Settings/Account.php:549 #, php-format msgid "Your Identity Address is '%s' or '%s'." msgstr "" -#: src/Module/Settings/Account.php:540 +#: src/Module/Settings/Account.php:556 msgid "Password Settings" msgstr "" -#: src/Module/Settings/Account.php:542 +#: src/Module/Settings/Account.php:558 msgid "Leave password fields blank unless changing" msgstr "" -#: src/Module/Settings/Account.php:544 +#: src/Module/Settings/Account.php:560 msgid "Password:" msgstr "" -#: src/Module/Settings/Account.php:544 +#: src/Module/Settings/Account.php:560 msgid "Your current password to confirm the changes of the email address" msgstr "" -#: src/Module/Settings/Account.php:547 +#: src/Module/Settings/Account.php:563 msgid "Delete OpenID URL" msgstr "" -#: src/Module/Settings/Account.php:549 +#: src/Module/Settings/Account.php:565 msgid "Basic Settings" msgstr "" -#: src/Module/Settings/Account.php:550 +#: src/Module/Settings/Account.php:566 #: src/Module/Settings/Profile/Index.php:283 msgid "Display name:" msgstr "" -#: src/Module/Settings/Account.php:551 +#: src/Module/Settings/Account.php:567 msgid "Email Address:" msgstr "" -#: src/Module/Settings/Account.php:552 +#: src/Module/Settings/Account.php:568 msgid "Your Timezone:" msgstr "" -#: src/Module/Settings/Account.php:553 +#: src/Module/Settings/Account.php:569 msgid "Your Language:" msgstr "" -#: src/Module/Settings/Account.php:553 +#: src/Module/Settings/Account.php:569 msgid "" "Set the language we use to show you friendica interface and to send you " "emails" msgstr "" -#: src/Module/Settings/Account.php:554 +#: src/Module/Settings/Account.php:570 msgid "Default Post Location:" msgstr "" -#: src/Module/Settings/Account.php:555 +#: src/Module/Settings/Account.php:571 msgid "Use Browser Location:" msgstr "" -#: src/Module/Settings/Account.php:557 +#: src/Module/Settings/Account.php:573 msgid "Security and Privacy Settings" msgstr "" -#: src/Module/Settings/Account.php:559 +#: src/Module/Settings/Account.php:575 msgid "Maximum Friend Requests/Day:" msgstr "" -#: src/Module/Settings/Account.php:559 +#: src/Module/Settings/Account.php:575 msgid "(to prevent spam abuse)" msgstr "" -#: src/Module/Settings/Account.php:561 +#: src/Module/Settings/Account.php:577 msgid "Allow your profile to be searchable globally?" msgstr "" -#: src/Module/Settings/Account.php:561 +#: src/Module/Settings/Account.php:577 msgid "" "Activate this setting if you want others to easily find and follow you. Your " "profile will be searchable on remote systems. This setting also determines " @@ -9833,43 +9857,43 @@ msgid "" "indexed or not." msgstr "" -#: src/Module/Settings/Account.php:562 +#: src/Module/Settings/Account.php:578 msgid "Hide your contact/friend list from viewers of your profile?" msgstr "" -#: src/Module/Settings/Account.php:562 +#: src/Module/Settings/Account.php:578 msgid "" "A list of your contacts is displayed on your profile page. Activate this " "option to disable the display of your contact list." msgstr "" -#: src/Module/Settings/Account.php:563 +#: src/Module/Settings/Account.php:579 msgid "Hide your public content from anonymous viewers" msgstr "" -#: src/Module/Settings/Account.php:563 +#: src/Module/Settings/Account.php:579 msgid "" "Anonymous visitors will only see your basic profile details. Your public " "posts and replies will still be freely accessible on the remote servers of " "your followers and through relays." msgstr "" -#: src/Module/Settings/Account.php:564 +#: src/Module/Settings/Account.php:580 msgid "Make public posts unlisted" msgstr "" -#: src/Module/Settings/Account.php:564 +#: src/Module/Settings/Account.php:580 msgid "" "Your public posts will not appear on the community pages or in search " "results, nor be sent to relay servers. However they can still appear on " "public feeds on remote servers." msgstr "" -#: src/Module/Settings/Account.php:565 +#: src/Module/Settings/Account.php:581 msgid "Make all posted pictures accessible" msgstr "" -#: src/Module/Settings/Account.php:565 +#: src/Module/Settings/Account.php:581 msgid "" "This option makes every posted picture accessible via the direct link. This " "is a workaround for the problem that most other networks can't handle " @@ -9877,227 +9901,227 @@ msgid "" "public on your photo albums though." msgstr "" -#: src/Module/Settings/Account.php:566 +#: src/Module/Settings/Account.php:582 msgid "Allow friends to post to your profile page?" msgstr "" -#: src/Module/Settings/Account.php:566 +#: src/Module/Settings/Account.php:582 msgid "" "Your contacts may write posts on your profile wall. These posts will be " "distributed to your contacts" msgstr "" -#: src/Module/Settings/Account.php:567 +#: src/Module/Settings/Account.php:583 msgid "Allow friends to tag your posts?" msgstr "" -#: src/Module/Settings/Account.php:567 +#: src/Module/Settings/Account.php:583 msgid "Your contacts can add additional tags to your posts." msgstr "" -#: src/Module/Settings/Account.php:568 +#: src/Module/Settings/Account.php:584 msgid "Default privacy circle for new contacts" msgstr "" -#: src/Module/Settings/Account.php:569 +#: src/Module/Settings/Account.php:585 msgid "Default privacy circle for new group contacts" msgstr "" -#: src/Module/Settings/Account.php:570 +#: src/Module/Settings/Account.php:586 msgid "Default Post Permissions" msgstr "" -#: src/Module/Settings/Account.php:574 +#: src/Module/Settings/Account.php:590 msgid "Expiration settings" msgstr "" -#: src/Module/Settings/Account.php:575 +#: src/Module/Settings/Account.php:591 msgid "Automatically expire posts after this many days:" msgstr "" -#: src/Module/Settings/Account.php:575 +#: src/Module/Settings/Account.php:591 msgid "If empty, posts will not expire. Expired posts will be deleted" msgstr "" -#: src/Module/Settings/Account.php:576 +#: src/Module/Settings/Account.php:592 msgid "Expire posts" msgstr "" -#: src/Module/Settings/Account.php:576 +#: src/Module/Settings/Account.php:592 msgid "When activated, posts and comments will be expired." msgstr "" -#: src/Module/Settings/Account.php:577 +#: src/Module/Settings/Account.php:593 msgid "Expire personal notes" msgstr "" -#: src/Module/Settings/Account.php:577 +#: src/Module/Settings/Account.php:593 msgid "" "When activated, the personal notes on your profile page will be expired." msgstr "" -#: src/Module/Settings/Account.php:578 +#: src/Module/Settings/Account.php:594 msgid "Expire starred posts" msgstr "" -#: src/Module/Settings/Account.php:578 +#: src/Module/Settings/Account.php:594 msgid "" "Starring posts keeps them from being expired. That behaviour is overwritten " "by this setting." msgstr "" -#: src/Module/Settings/Account.php:579 +#: src/Module/Settings/Account.php:595 msgid "Only expire posts by others" msgstr "" -#: src/Module/Settings/Account.php:579 +#: src/Module/Settings/Account.php:595 msgid "" "When activated, your own posts never expire. Then the settings above are " "only valid for posts you received." msgstr "" -#: src/Module/Settings/Account.php:582 +#: src/Module/Settings/Account.php:598 msgid "Notification Settings" msgstr "" -#: src/Module/Settings/Account.php:583 +#: src/Module/Settings/Account.php:599 msgid "Send a notification email when:" msgstr "" -#: src/Module/Settings/Account.php:584 +#: src/Module/Settings/Account.php:600 msgid "You receive an introduction" msgstr "" -#: src/Module/Settings/Account.php:585 +#: src/Module/Settings/Account.php:601 msgid "Your introductions are confirmed" msgstr "" -#: src/Module/Settings/Account.php:586 +#: src/Module/Settings/Account.php:602 msgid "Someone writes on your profile wall" msgstr "" -#: src/Module/Settings/Account.php:587 +#: src/Module/Settings/Account.php:603 msgid "Someone writes a followup comment" msgstr "" -#: src/Module/Settings/Account.php:588 +#: src/Module/Settings/Account.php:604 msgid "You receive a private message" msgstr "" -#: src/Module/Settings/Account.php:589 +#: src/Module/Settings/Account.php:605 msgid "You receive a friend suggestion" msgstr "" -#: src/Module/Settings/Account.php:590 +#: src/Module/Settings/Account.php:606 msgid "You are tagged in a post" msgstr "" -#: src/Module/Settings/Account.php:592 +#: src/Module/Settings/Account.php:608 msgid "Create a desktop notification when:" msgstr "" -#: src/Module/Settings/Account.php:593 +#: src/Module/Settings/Account.php:609 msgid "Someone tagged you" msgstr "" -#: src/Module/Settings/Account.php:594 +#: src/Module/Settings/Account.php:610 msgid "Someone directly commented on your post" msgstr "" -#: src/Module/Settings/Account.php:595 +#: src/Module/Settings/Account.php:611 msgid "Someone liked your content" msgstr "" -#: src/Module/Settings/Account.php:595 src/Module/Settings/Account.php:596 +#: src/Module/Settings/Account.php:611 src/Module/Settings/Account.php:612 msgid "Can only be enabled, when the direct comment notification is enabled." msgstr "" -#: src/Module/Settings/Account.php:596 +#: src/Module/Settings/Account.php:612 msgid "Someone shared your content" msgstr "" -#: src/Module/Settings/Account.php:597 +#: src/Module/Settings/Account.php:613 msgid "Someone commented in your thread" msgstr "" -#: src/Module/Settings/Account.php:598 +#: src/Module/Settings/Account.php:614 msgid "Someone commented in a thread where you commented" msgstr "" -#: src/Module/Settings/Account.php:599 +#: src/Module/Settings/Account.php:615 msgid "Someone commented in a thread where you interacted" msgstr "" -#: src/Module/Settings/Account.php:601 +#: src/Module/Settings/Account.php:617 msgid "Activate desktop notifications" msgstr "" -#: src/Module/Settings/Account.php:601 +#: src/Module/Settings/Account.php:617 msgid "Show desktop popup on new notifications" msgstr "" -#: src/Module/Settings/Account.php:605 +#: src/Module/Settings/Account.php:621 msgid "Text-only notification emails" msgstr "" -#: src/Module/Settings/Account.php:607 +#: src/Module/Settings/Account.php:623 msgid "Send text only notification emails, without the html part" msgstr "" -#: src/Module/Settings/Account.php:611 +#: src/Module/Settings/Account.php:627 msgid "Show detailled notifications" msgstr "" -#: src/Module/Settings/Account.php:613 +#: src/Module/Settings/Account.php:629 msgid "" "Per default, notifications are condensed to a single notification per item. " "When enabled every notification is displayed." msgstr "" -#: src/Module/Settings/Account.php:617 +#: src/Module/Settings/Account.php:633 msgid "Show notifications of ignored contacts" msgstr "" -#: src/Module/Settings/Account.php:619 +#: src/Module/Settings/Account.php:635 msgid "" "You don't see posts from ignored contacts. But you still see their comments. " "This setting controls if you want to still receive regular notifications " "that are caused by ignored contacts or not." msgstr "" -#: src/Module/Settings/Account.php:622 +#: src/Module/Settings/Account.php:638 msgid "Advanced Account/Page Type Settings" msgstr "" -#: src/Module/Settings/Account.php:623 +#: src/Module/Settings/Account.php:639 msgid "Change the behaviour of this account for special situations" msgstr "" -#: src/Module/Settings/Account.php:626 +#: src/Module/Settings/Account.php:642 msgid "Import Contacts" msgstr "" -#: src/Module/Settings/Account.php:627 +#: src/Module/Settings/Account.php:643 msgid "" "Upload a CSV file that contains the handle of your followed accounts in the " "first column you exported from the old account." msgstr "" -#: src/Module/Settings/Account.php:628 +#: src/Module/Settings/Account.php:644 msgid "Upload File" msgstr "" -#: src/Module/Settings/Account.php:631 +#: src/Module/Settings/Account.php:647 msgid "Relocate" msgstr "" -#: src/Module/Settings/Account.php:632 +#: src/Module/Settings/Account.php:648 msgid "" "If you have moved this profile from another server, and some of your " "contacts don't receive your updates, try pushing this button." msgstr "" -#: src/Module/Settings/Account.php:633 +#: src/Module/Settings/Account.php:649 msgid "Resend relocate message to contacts" msgstr "" @@ -10109,80 +10133,100 @@ msgstr "" msgid "No Addon settings configured" msgstr "" -#: src/Module/Settings/Channels.php:155 src/Module/Settings/Channels.php:173 +#: src/Module/Settings/Channels.php:137 +msgid "" +"This page can be used to define the channels that will automatically be " +"reshared by your account." +msgstr "" + +#: src/Module/Settings/Channels.php:142 +msgid "This page can be used to define your own channels." +msgstr "" + +#: src/Module/Settings/Channels.php:169 +msgid "Publish" +msgstr "" + +#: src/Module/Settings/Channels.php:169 +msgid "" +"When selected, the channel results are reshared. This only works for public " +"ActivityPub posts from the public timeline or the user defined circles." +msgstr "" + +#: src/Module/Settings/Channels.php:177 src/Module/Settings/Channels.php:196 #: src/Module/Settings/Display.php:338 msgid "Label" msgstr "" -#: src/Module/Settings/Channels.php:156 src/Module/Settings/Channels.php:174 +#: src/Module/Settings/Channels.php:178 src/Module/Settings/Channels.php:197 #: src/Module/Settings/Display.php:339 #: src/Module/Settings/TwoFactor/AppSpecific.php:137 msgid "Description" msgstr "" -#: src/Module/Settings/Channels.php:157 src/Module/Settings/Channels.php:175 +#: src/Module/Settings/Channels.php:179 src/Module/Settings/Channels.php:198 msgid "Access Key" msgstr "" -#: src/Module/Settings/Channels.php:158 src/Module/Settings/Channels.php:176 +#: src/Module/Settings/Channels.php:180 src/Module/Settings/Channels.php:199 msgid "Circle/Channel" msgstr "" -#: src/Module/Settings/Channels.php:159 src/Module/Settings/Channels.php:177 +#: src/Module/Settings/Channels.php:181 src/Module/Settings/Channels.php:200 msgid "Include Tags" msgstr "" -#: src/Module/Settings/Channels.php:160 src/Module/Settings/Channels.php:178 +#: src/Module/Settings/Channels.php:182 src/Module/Settings/Channels.php:201 msgid "Exclude Tags" msgstr "" -#: src/Module/Settings/Channels.php:161 src/Module/Settings/Channels.php:179 +#: src/Module/Settings/Channels.php:183 src/Module/Settings/Channels.php:202 msgid "Full Text Search" msgstr "" -#: src/Module/Settings/Channels.php:165 src/Module/Settings/Channels.php:183 +#: src/Module/Settings/Channels.php:187 src/Module/Settings/Channels.php:206 msgid "Select all languages that you want to see in this channel." msgstr "" -#: src/Module/Settings/Channels.php:166 +#: src/Module/Settings/Channels.php:189 msgid "Delete channel" msgstr "" -#: src/Module/Settings/Channels.php:166 +#: src/Module/Settings/Channels.php:189 msgid "Check to delete this entry from the channel list" msgstr "" -#: src/Module/Settings/Channels.php:173 +#: src/Module/Settings/Channels.php:196 msgid "Short name for the channel. It is displayed on the channels widget." msgstr "" -#: src/Module/Settings/Channels.php:174 +#: src/Module/Settings/Channels.php:197 msgid "This should describe the content of the channel in a few word." msgstr "" -#: src/Module/Settings/Channels.php:175 +#: src/Module/Settings/Channels.php:198 msgid "" "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." msgstr "" -#: src/Module/Settings/Channels.php:176 +#: src/Module/Settings/Channels.php:199 msgid "Select a circle or channel, that your channel should be based on." msgstr "" -#: src/Module/Settings/Channels.php:177 +#: src/Module/Settings/Channels.php:200 msgid "" "Comma separated list of tags. A post will be used when it contains any of " "the listed tags." msgstr "" -#: src/Module/Settings/Channels.php:178 +#: src/Module/Settings/Channels.php:201 msgid "" "Comma separated list of tags. If a post contain any of these tags, then it " "will not be part of nthis channel." msgstr "" -#: src/Module/Settings/Channels.php:179 +#: src/Module/Settings/Channels.php:202 #, php-format msgid "" "Search terms for the body, supports the \"boolean mode\" operators from " @@ -10190,39 +10234,35 @@ msgid "" "keywords: %s" msgstr "" -#: src/Module/Settings/Channels.php:180 +#: src/Module/Settings/Channels.php:203 msgid "Check to display images in the channel." msgstr "" -#: src/Module/Settings/Channels.php:181 +#: src/Module/Settings/Channels.php:204 msgid "Check to display videos in the channel." msgstr "" -#: src/Module/Settings/Channels.php:182 +#: src/Module/Settings/Channels.php:205 msgid "Check to display audio in the channel." msgstr "" -#: src/Module/Settings/Channels.php:186 -msgid "This page can be used to define your own channels." -msgstr "" - -#: src/Module/Settings/Channels.php:187 +#: src/Module/Settings/Channels.php:210 msgid "Add new entry to the channel list" msgstr "" -#: src/Module/Settings/Channels.php:188 +#: src/Module/Settings/Channels.php:211 msgid "Add" msgstr "" -#: src/Module/Settings/Channels.php:190 +#: src/Module/Settings/Channels.php:213 msgid "Current Entries in the channel list" msgstr "" -#: src/Module/Settings/Channels.php:193 +#: src/Module/Settings/Channels.php:216 msgid "Delete entry from the channel list" msgstr "" -#: src/Module/Settings/Channels.php:194 +#: src/Module/Settings/Channels.php:217 msgid "Delete entry from the channel list?" msgstr "" diff --git a/view/templates/admin/site.tpl b/view/templates/admin/site.tpl index a0adf1b804..94404b9020 100644 --- a/view/templates/admin/site.tpl +++ b/view/templates/admin/site.tpl @@ -84,6 +84,7 @@ {{include file="field_checkbox.tpl" field=$private_addons}} {{include file="field_checkbox.tpl" field=$disable_embedded}} {{include file="field_checkbox.tpl" field=$allow_users_remote_self}} + {{include file="field_checkbox.tpl" field=$allow_relay_channels}} {{include file="field_checkbox.tpl" field=$adjust_poll_frequency}} {{include file="field_checkbox.tpl" field=$explicit_content}} {{include file="field_checkbox.tpl" field=$proxify_content}} diff --git a/view/templates/settings/channels.tpl b/view/templates/settings/channels.tpl index 3b84741425..44260a2336 100644 --- a/view/templates/settings/channels.tpl +++ b/view/templates/settings/channels.tpl @@ -36,6 +36,9 @@ {{include file="field_checkbox.tpl" field=$e.video}} {{include file="field_checkbox.tpl" field=$e.audio}} {{include file="field_select.tpl" field=$e.languages}} + {{if $e.publish}} + {{include file="field_checkbox.tpl" field=$e.publish}} + {{/if}} {{include file="field_checkbox.tpl" field=$e.delete}}
{{/foreach}} diff --git a/view/templates/settings/pagetypes.tpl b/view/templates/settings/pagetypes.tpl index 8b285aea87..3f6eb803d2 100644 --- a/view/templates/settings/pagetypes.tpl +++ b/view/templates/settings/pagetypes.tpl @@ -18,6 +18,10 @@ {{include file="field_radio.tpl" field=$page_prvgroup}} +{{if $account_relay}} + {{include file="field_radio.tpl" field=$account_relay}} +{{/if}} +