From 65cd0def22df079b16bb9262e41dcf9febf616ba Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Mon, 25 Jul 2022 09:09:11 -0400 Subject: [PATCH 1/8] Fix wrong type-hint in Module/DFRN/Notify - Address https://github.com/friendica/friendica/issues/11630#issuecomment-1193958648 --- src/Module/DFRN/Notify.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Module/DFRN/Notify.php b/src/Module/DFRN/Notify.php index 2dae0da0ad..090ed34926 100644 --- a/src/Module/DFRN/Notify.php +++ b/src/Module/DFRN/Notify.php @@ -59,13 +59,13 @@ class Notify extends BaseModule } } - private static function dispatchPublic(array $postdata) + private static function dispatchPublic(string $postdata): bool { $msg = Diaspora::decodeRaw($postdata, '', true); if (!is_array($msg)) { // We have to fail silently to be able to hand it over to the salmon parser Logger::warning('Diaspora::decodeRaw() has failed for some reason.'); - return; + return false; } // Fetch the corresponding public contact @@ -87,6 +87,8 @@ class Notify extends BaseModule // Now we should be able to import it $ret = DFRN::import($msg['message'], $importer, Conversation::PARCEL_DIASPORA_DFRN, Conversation::RELAY); System::xmlExit($ret, 'Done'); + + return true; } private static function dispatchPrivate(array $user, string $postdata) From 1ac1db6173d76f00ffd21db43c1f9ac5daf32ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Mon, 25 Jul 2022 16:48:04 +0200 Subject: [PATCH 2/8] Changed: - rewrote to almost one block of array initialization --- src/Model/Event.php | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/Model/Event.php b/src/Model/Event.php index 74bf3bd9c0..f289fd4e4f 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -243,27 +243,29 @@ class Event */ public static function store(array $arr): int { - $event = []; - $event['id'] = intval($arr['id'] ?? 0); - $event['uid'] = intval($arr['uid'] ?? 0); - $event['cid'] = intval($arr['cid'] ?? 0); - $event['guid'] = ($arr['guid'] ?? '') ?: System::createUUID(); - $event['uri'] = ($arr['uri'] ?? '') ?: Item::newURI($event['guid']); - $event['uri-id'] = ItemURI::insert(['uri' => $event['uri'], 'guid' => $event['guid']]); - $event['type'] = ($arr['type'] ?? '') ?: 'event'; - $event['summary'] = $arr['summary'] ?? ''; - $event['desc'] = $arr['desc'] ?? ''; - $event['location'] = $arr['location'] ?? ''; - $event['allow_cid'] = $arr['allow_cid'] ?? ''; - $event['allow_gid'] = $arr['allow_gid'] ?? ''; - $event['deny_cid'] = $arr['deny_cid'] ?? ''; - $event['deny_gid'] = $arr['deny_gid'] ?? ''; - $event['nofinish'] = intval($arr['nofinish'] ?? (!empty($event['start']) && empty($event['finish']))); + $event = [ + 'id' => intval($arr['id'] ?? 0), + 'uid' => intval($arr['uid'] ?? 0), + 'cid' => intval($arr['cid'] ?? 0), + 'guid' => ($arr['guid'] ?? '') ?: System::createUUID(), + 'type' => ($arr['type'] ?? '') ?: 'event', + 'summary' => $arr['summary'] ?? '', + 'desc' => $arr['desc'] ?? '', + 'location' => $arr['location'] ?? '', + 'allow_cid' => $arr['allow_cid'] ?? '', + 'allow_gid' => $arr['allow_gid'] ?? '', + 'deny_cid' => $arr['deny_cid'] ?? '', + 'deny_gid' => $arr['deny_gid'] ?? '', + 'nofinish' => intval($arr['nofinish'] ?? (!empty($arr['start']) && empty($arr['finish']))), + 'created' => DateTimeFormat::utc(($arr['created'] ?? '') ?: 'now'), + 'edited' => DateTimeFormat::utc(($arr['edited'] ?? '') ?: 'now'), + 'start' => DateTimeFormat::utc(($arr['start'] ?? '') ?: DBA::NULL_DATETIME), + 'finish' => DateTimeFormat::utc(($arr['finish'] ?? '') ?: DBA::NULL_DATETIME), + ]; + + $event['uri'] = ($arr['uri'] ?? '') ?: Item::newURI($event['guid']); + $event['uri-id'] = ItemURI::insert(['uri' => $event['uri'], 'guid' => $event['guid']]); - $event['created'] = DateTimeFormat::utc(($arr['created'] ?? '') ?: 'now'); - $event['edited'] = DateTimeFormat::utc(($arr['edited'] ?? '') ?: 'now'); - $event['start'] = DateTimeFormat::utc(($arr['start'] ?? '') ?: DBA::NULL_DATETIME); - $event['finish'] = DateTimeFormat::utc(($arr['finish'] ?? '') ?: DBA::NULL_DATETIME); if ($event['finish'] < DBA::NULL_DATETIME) { $event['finish'] = DBA::NULL_DATETIME; } From d1b21eaf422c044c1d4374b8f9208733d211fe41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Mon, 25 Jul 2022 17:53:18 +0200 Subject: [PATCH 3/8] Changes: - use local variables --- src/Model/Event.php | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Model/Event.php b/src/Model/Event.php index f289fd4e4f..712e5861ac 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -243,19 +243,23 @@ class Event */ public static function store(array $arr): int { + $guid = $arr['guid'] ?? '' ?: System::createUUID(); + $uri = $arr['uri'] ?? '' ?: Item::newURI($guid); $event = [ 'id' => intval($arr['id'] ?? 0), 'uid' => intval($arr['uid'] ?? 0), 'cid' => intval($arr['cid'] ?? 0), - 'guid' => ($arr['guid'] ?? '') ?: System::createUUID(), - 'type' => ($arr['type'] ?? '') ?: 'event', - 'summary' => $arr['summary'] ?? '', - 'desc' => $arr['desc'] ?? '', - 'location' => $arr['location'] ?? '', - 'allow_cid' => $arr['allow_cid'] ?? '', - 'allow_gid' => $arr['allow_gid'] ?? '', - 'deny_cid' => $arr['deny_cid'] ?? '', - 'deny_gid' => $arr['deny_gid'] ?? '', + 'guid' => $guid, + 'uri' => $uri, + 'uri-id' => ItemURI::insert(['uri' => $uri, 'guid' => $guid]), + 'type' => ($arr['type'] ?? '') ?: 'event', + 'summary' => $arr['summary'] ?? '', + 'desc' => $arr['desc'] ?? '', + 'location' => $arr['location'] ?? '', + 'allow_cid' => $arr['allow_cid'] ?? '', + 'allow_gid' => $arr['allow_gid'] ?? '', + 'deny_cid' => $arr['deny_cid'] ?? '', + 'deny_gid' => $arr['deny_gid'] ?? '', 'nofinish' => intval($arr['nofinish'] ?? (!empty($arr['start']) && empty($arr['finish']))), 'created' => DateTimeFormat::utc(($arr['created'] ?? '') ?: 'now'), 'edited' => DateTimeFormat::utc(($arr['edited'] ?? '') ?: 'now'), @@ -263,8 +267,6 @@ class Event 'finish' => DateTimeFormat::utc(($arr['finish'] ?? '') ?: DBA::NULL_DATETIME), ]; - $event['uri'] = ($arr['uri'] ?? '') ?: Item::newURI($event['guid']); - $event['uri-id'] = ItemURI::insert(['uri' => $event['uri'], 'guid' => $event['guid']]); if ($event['finish'] < DBA::NULL_DATETIME) { $event['finish'] = DBA::NULL_DATETIME; From 488f4dcaa46ef6c3dd18f2c7a8ce06fded716b91 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Mon, 25 Jul 2022 09:13:42 -0400 Subject: [PATCH 4/8] Handle rare case where contact doesn't exist in Model\Group::getIdsByContactId - Address https://github.com/friendica/friendica/issues/11632#issuecomment-1193953621 --- src/Model/Group.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Model/Group.php b/src/Model/Group.php index 268680a165..4dec84c3a3 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -138,25 +138,29 @@ class Group */ public static function getIdsByContactId(int $cid): array { - $return = []; + $contact = Contact::getById($cid, ['rel']); + if (!$contact) { + return []; + } + + $groupIds = []; $stmt = DBA::select('group_member', ['gid'], ['contact-id' => $cid]); while ($group = DBA::fetch($stmt)) { - $return[] = $group['gid']; + $groupIds[] = $group['gid']; } DBA::close($stmt); // Meta-groups - $contact = Contact::getById($cid, ['rel']); if ($contact['rel'] == Contact::FOLLOWER || $contact['rel'] == Contact::FRIEND) { - $return[] = self::FOLLOWERS; + $groupIds[] = self::FOLLOWERS; } if ($contact['rel'] == Contact::FRIEND) { - $return[] = self::MUTUALS; + $groupIds[] = self::MUTUALS; } - return $return; + return $groupIds; } /** From 1b2182c43c5dfb764b62b314085bbbf85468c9a7 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 27 Jul 2022 11:54:50 -0400 Subject: [PATCH 5/8] Move system messages from boot to own class --- boot.php | 22 ++------ src/App.php | 4 -- src/DI.php | 9 ++++ src/Module/Notifications/Ping.php | 23 +++----- src/Navigation/SystemMessages.php | 87 +++++++++++++++++++++++++++++++ 5 files changed, 107 insertions(+), 38 deletions(-) create mode 100644 src/Navigation/SystemMessages.php diff --git a/boot.php b/boot.php index 2756a59478..ea4f28b741 100644 --- a/boot.php +++ b/boot.php @@ -171,18 +171,11 @@ function remote_user() * @param string $s - Text of notice * * @return void + * @deprecated since version 2022.09, use \Friendica\Navigation\SystemMessages instead */ function notice(string $s) { - if (empty($_SESSION)) { - return; - } - - if (empty($_SESSION['sysmsg'])) { - $_SESSION['sysmsg'] = []; - } - - $_SESSION['sysmsg'][] = $s; + \Friendica\DI::sysmsg()->addNotice($s); } /** @@ -193,16 +186,9 @@ function notice(string $s) * @param string $s - Text of notice * * @return void + * @deprecated since version 2022.09, use \Friendica\Navigation\SystemMessages instead */ function info(string $s) { - if (empty($_SESSION)) { - return; - } - - if (empty($_SESSION['sysmsg_info'])) { - $_SESSION['sysmsg_info'] = []; - } - - $_SESSION['sysmsg_info'][] = $s; + \Friendica\DI::sysmsg()->addInfo($s); } diff --git a/src/App.php b/src/App.php index f59b15d1db..ceace228f5 100644 --- a/src/App.php +++ b/src/App.php @@ -648,10 +648,6 @@ class App header('X-Account-Management-Status: none'); } - $_SESSION['sysmsg'] = Core\Session::get('sysmsg', []); - $_SESSION['sysmsg_info'] = Core\Session::get('sysmsg_info', []); - $_SESSION['last_updated'] = Core\Session::get('last_updated', []); - /* * check_config() is responsible for running update scripts. These automatically * update the DB schema whenever we push a new one out. It also checks to see if diff --git a/src/DI.php b/src/DI.php index e8fa90eb9b..a28eb707a4 100644 --- a/src/DI.php +++ b/src/DI.php @@ -22,6 +22,7 @@ namespace Friendica; use Dice\Dice; +use Friendica\Navigation\SystemMessages; use Psr\Log\LoggerInterface; /** @@ -234,6 +235,14 @@ abstract class DI return self::$dice->create(Core\System::class); } + /** + * @return \Friendica\Navigation\SystemMessages + */ + public static function sysmsg() + { + return self::$dice->create(SystemMessages::class); + } + // // "LoggerInterface" instances // diff --git a/src/Module/Notifications/Ping.php b/src/Module/Notifications/Ping.php index c09d6d0cbe..57da97b4f7 100644 --- a/src/Module/Notifications/Ping.php +++ b/src/Module/Notifications/Ping.php @@ -42,6 +42,7 @@ use Friendica\Navigation\Notifications\Exception\NoMessageException; use Friendica\Navigation\Notifications\Factory; use Friendica\Navigation\Notifications\Repository; use Friendica\Navigation\Notifications\ValueObject; +use Friendica\Navigation\SystemMessages; use Friendica\Protocol\Activity; use Friendica\Util\DateTimeFormat; use Friendica\Util\Profiler; @@ -50,6 +51,8 @@ use Psr\Log\LoggerInterface; class Ping extends BaseModule { + /** @var SystemMessages */ + private $systemMessages; /** @var Repository\Notification */ private $notificationRepo; /** @var Introduction */ @@ -57,10 +60,11 @@ class Ping extends BaseModule /** @var Factory\FormattedNavNotification */ private $formattedNavNotification; - public function __construct(Repository\Notification $notificationRepo, Introduction $introductionRepo, Factory\FormattedNavNotification $formattedNavNotification, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(SystemMessages $systemMessages, Repository\Notification $notificationRepo, Introduction $introductionRepo, Factory\FormattedNavNotification $formattedNavNotification, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + $this->systemMessages = $systemMessages; $this->notificationRepo = $notificationRepo; $this->introductionRepo = $introductionRepo; $this->formattedNavNotification = $formattedNavNotification; @@ -256,19 +260,6 @@ class Ping extends BaseModule usort($navNotifications, $sort_function); } - $sysmsgs = []; - $sysmsgs_info = []; - - if (!empty($_SESSION['sysmsg'])) { - $sysmsgs = $_SESSION['sysmsg']; - unset($_SESSION['sysmsg']); - } - - if (!empty($_SESSION['sysmsg_info'])) { - $sysmsgs_info = $_SESSION['sysmsg_info']; - unset($_SESSION['sysmsg_info']); - } - $notification_count = $sysnotify_count + $intro_count + $register_count; $data = []; @@ -289,8 +280,8 @@ class Ping extends BaseModule $data['notifications'] = $navNotifications; $data['sysmsgs'] = [ - 'notice' => $sysmsgs, - 'info' => $sysmsgs_info + 'notice' => $this->systemMessages->flushNotices(), + 'info' => $this->systemMessages->flushInfos(), ]; if (isset($_GET['callback'])) { diff --git a/src/Navigation/SystemMessages.php b/src/Navigation/SystemMessages.php new file mode 100644 index 0000000000..0b00a5a496 --- /dev/null +++ b/src/Navigation/SystemMessages.php @@ -0,0 +1,87 @@ +. + * + * Friendica is a communications platform for integrated social communications + * utilising decentralised communications and linkage to several indie social + * projects - as well as popular mainstream providers. + * + * Our mission is to free our friends and families from the clutches of + * data-harvesting corporations, and pave the way to a future where social + * communications are free and open and flow between alternate providers as + * easily as email does today. + */ + +namespace Friendica\Navigation; + +use Friendica\Core\Session\Capability\IHandleSessions; + +class SystemMessages +{ + /** + * @var IHandleSessions + */ + private $session; + + public function __construct(IHandleSessions $session) + { + $this->session = $session; + } + + public function addNotice(string $message) + { + $sysmsg = $this->getNotices(); + + $sysmsg[] = $message; + + $this->session->set('sysmsg', $sysmsg); + } + + public function getNotices(): array + { + return $this->session->get('sysmsg', []); + } + + public function flushNotices(): array + { + $notices = $this->getNotices(); + $this->session->remove('sysmsg'); + return $notices; + } + + public function addInfo(string $message) + { + $sysmsg = $this->getNotices(); + + $sysmsg[] = $message; + + $this->session->set('sysmsg_info', $sysmsg); + } + + public function getInfos(): array + { + return $this->session->get('sysmsg_info', []); + } + + public function flushInfos(): array + { + $notices = $this->getInfos(); + $this->session->remove('sysmsg_info'); + return $notices; + } +} From 7d7a5a65e9bd95c85fe00f64af46a5b444d62778 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 27 Jul 2022 11:54:50 -0400 Subject: [PATCH 6/8] Add download feature for domain block list - Add new /blocklist/domain/download route - Add link on /friendica page --- src/Module/Blocklist/Domain/Download.php | 71 ++++++++++++++++++++++++ src/Module/Friendica.php | 7 ++- static/routes.config.php | 3 + view/templates/friendica.tpl | 24 +++----- 4 files changed, 87 insertions(+), 18 deletions(-) create mode 100644 src/Module/Blocklist/Domain/Download.php diff --git a/src/Module/Blocklist/Domain/Download.php b/src/Module/Blocklist/Domain/Download.php new file mode 100644 index 0000000000..db7437dc79 --- /dev/null +++ b/src/Module/Blocklist/Domain/Download.php @@ -0,0 +1,71 @@ +. + * + */ + +namespace Friendica\Module\Blocklist\Domain; + +use Friendica\App; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; +use Friendica\Core\System; +use Friendica\Module\Response; +use Friendica\Util\Profiler; +use Psr\Log\LoggerInterface; + +class Download extends \Friendica\BaseModule +{ + /** @var IManageConfigValues */ + private $config; + + public function __construct(IManageConfigValues $config, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + { + parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->config = $config; + } + + protected function rawContent(array $request = []) + { + $blocklist = $this->config->get('system', 'blocklist'); + + $blocklistJson = json_encode($blocklist, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + + $hash = md5($blocklistJson); + + $etag = 'W/"' . $hash . '"'; + + if (trim($_SERVER['HTTP_IF_NONE_MATCH'] ?? '') == $etag) { + header("HTTP/1.1 304 Not Modified"); + } + + header('Content-Type: text/csv'); + header('Content-Transfer-Encoding: Binary'); + header('Content-disposition: attachment; filename="' . $this->baseUrl->getHostname() . '_domain_blocklist_' . substr($hash, 0, 6) . '.csv"'); + header("Etag: $etag"); + + $fp = fopen('php://output', 'w'); + foreach ($blocklist as $domain) { + fputcsv($fp, $domain); + } + fclose($fp); + + System::exit(); + } +} diff --git a/src/Module/Friendica.php b/src/Module/Friendica.php index 6b5e05c8b3..012f65ef69 100644 --- a/src/Module/Friendica.php +++ b/src/Module/Friendica.php @@ -76,12 +76,13 @@ class Friendica extends BaseModule if (!empty($blockList)) { $blocked = [ - 'title' => DI::l10n()->t('On this server the following remote servers are blocked.'), - 'header' => [ + 'title' => DI::l10n()->t('On this server the following remote servers are blocked.'), + 'header' => [ DI::l10n()->t('Blocked domain'), DI::l10n()->t('Reason for the block'), ], - 'list' => $blockList, + 'download' => DI::l10n()->t('Download this list in CSV format'), + 'list' => $blockList, ]; } else { $blocked = null; diff --git a/static/routes.config.php b/static/routes.config.php index dac56a1255..8c7a08758f 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -353,6 +353,9 @@ return [ '/attach/{item:\d+}' => [Module\Attach::class, [R::GET]], '/babel' => [Module\Debug\Babel::class, [R::GET, R::POST]], '/debug/ap' => [Module\Debug\ActivityPubConversion::class, [R::GET, R::POST]], + + '/blocklist/domain/download' => [Module\Blocklist\Domain\Download::class, [R::GET]], + '/bookmarklet' => [Module\Bookmarklet::class, [R::GET]], '/community[/{content}]' => [Module\Conversation\Community::class, [R::GET]], diff --git a/view/templates/friendica.tpl b/view/templates/friendica.tpl index 25f1d2b64b..a5c765f96e 100644 --- a/view/templates/friendica.tpl +++ b/view/templates/friendica.tpl @@ -1,28 +1,22 @@ -
+

Friendica

-

{{$about nofilter}}

-

{{$friendica nofilter}}

-

{{$bugs nofilter}}

-

{{$info nofilter}}

-

{{$visible_addons.title nofilter}}

- {{if $visible_addons.list}} +{{if $visible_addons.list}}
{{$visible_addons.list}}
- {{/if}} +{{/if}} - {{if $tos}} +{{if $tos}}

{{$tos nofilter}}

- {{/if}} +{{/if}} - {{if $block_list}} +{{if $block_list}}

{{$block_list.title}}

-
@@ -39,9 +33,9 @@ {{/foreach}}
+

{{$block_list.download}}

+{{/if}} - {{/if}} - -{{$hooked nofilter}} + {{$hooked nofilter}}
From e11d3cfeb0c39b672318299ea9ae2e0bd3f3bfc3 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 27 Jul 2022 11:54:50 -0400 Subject: [PATCH 7/8] Add upload feature for domain pattern block list - Add new /admin/blocklist/server/import route - Add form on domain pattern blocklist index page --- src/Module/Admin/Blocklist/Server/Import.php | 163 ++++++++++++++++++ src/Module/Admin/Blocklist/Server/Index.php | 8 +- static/routes.config.php | 7 +- .../admin/blocklist/server/import.tpl | 52 ++++++ .../admin/blocklist/server/index.tpl | 15 +- 5 files changed, 238 insertions(+), 7 deletions(-) create mode 100644 src/Module/Admin/Blocklist/Server/Import.php create mode 100644 view/templates/admin/blocklist/server/import.tpl diff --git a/src/Module/Admin/Blocklist/Server/Import.php b/src/Module/Admin/Blocklist/Server/Import.php new file mode 100644 index 0000000000..0714be5be9 --- /dev/null +++ b/src/Module/Admin/Blocklist/Server/Import.php @@ -0,0 +1,163 @@ +. + * + */ + +namespace Friendica\Module\Admin\Blocklist\Server; + +use Friendica\App; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; +use Friendica\Core\Renderer; +use Friendica\Module\Response; +use Friendica\Navigation\SystemMessages; +use Friendica\Util\Profiler; +use Psr\Log\LoggerInterface; + +class Import extends \Friendica\Module\BaseAdmin +{ + /** @var IManageConfigValues */ + private $config; + + /** @var SystemMessages */ + private $sysmsg; + + /** @var array of blocked server domain patterns */ + private $blocklist = []; + + public function __construct(IManageConfigValues $config, SystemMessages $sysmsg, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + { + parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->config = $config; + $this->sysmsg = $sysmsg; + } + + /** + * @param array $request + * @return void + * @throws \Friendica\Network\HTTPException\ForbiddenException + * @throws \Friendica\Network\HTTPException\FoundException + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \Friendica\Network\HTTPException\MovedPermanentlyException + * @throws \Friendica\Network\HTTPException\TemporaryRedirectException + */ + protected function post(array $request = []) + { + self::checkAdminAccess(); + + if (!isset($_POST['page_blocklist_upload']) && !isset($_POST['page_blocklist_import'])) { + return; + } + + self::checkFormSecurityTokenRedirectOnError('/admin/blocklist/server/import', 'admin_blocklist_import'); + + if (isset($_POST['page_blocklist_upload'])) { + if (($fp = fopen($_FILES['listfile']['tmp_name'], 'r')) !== false) { + $blocklist = []; + while (($data = fgetcsv($fp, 1000, ',')) !== false) { + $domain = $data[0]; + if (count($data) == 0) { + $reason = 'blocked'; + } else { + $reason = $data[1]; + } + + $blocklist[] = [ + 'domain' => $domain, + 'reason' => $reason + ]; + } + } else { + $this->sysmsg->addNotice($this->l10n->t('Error importing pattern file')); + return; + } + + $this->blocklist = $blocklist; + + return; + } + + if (isset($_POST['page_blocklist_import'])) { + $blocklist = json_decode($_POST['blocklist'], true); + if ($blocklist === null) { + $this->sysmsg->addNotice($this->l10n->t('Error importing pattern file')); + return; + } + + if (($_POST['mode'] ?? 'append') == 'replace') { + $this->config->set('system', 'blocklist', $blocklist); + $this->sysmsg->addNotice($this->l10n->t('Local blocklist replaced with the provided file.')); + } else { + $localBlocklist = $this->config->get('system', 'blocklist', []); + $localPatterns = array_column($localBlocklist, 'domain'); + + $importedPatterns = array_column($blocklist, 'domain'); + + $patternsToAppend = array_diff($importedPatterns, $localPatterns); + + if (count($patternsToAppend)) { + foreach (array_keys($patternsToAppend) as $key) { + $localBlocklist[] = $blocklist[$key]; + } + + $this->config->set('system', 'blocklist', $localBlocklist); + $this->sysmsg->addNotice($this->l10n->tt('%d pattern was added to the local blocklist.', '%d patterns were added to the local blocklist.', count($patternsToAppend))); + } else { + $this->sysmsg->addNotice($this->l10n->t('No pattern was added to the local blocklist.')); + } + } + + $this->baseUrl->redirect('/admin/blocklist/server'); + } + } + + /** + * @param array $request + * @return string + * @throws \Friendica\Network\HTTPException\ServiceUnavailableException + */ + protected function content(array $request = []): string + { + parent::content(); + + $t = Renderer::getMarkupTemplate('admin/blocklist/server/import.tpl'); + return Renderer::replaceMacros($t, [ + '$l10n' => [ + 'return_list' => $this->l10n->t('← Return to the list'), + 'title' => $this->l10n->t('Administration'), + 'page' => $this->l10n->t('Import a Server Domain Pattern Blocklist'), + 'download' => $this->l10n->t('

This file can be downloaded from the /friendica path of any Friendica server.

'), + 'upload' => $this->l10n->t('Upload file'), + 'patterns' => $this->l10n->t('Patterns to import'), + 'domain_pattern' => $this->l10n->t('Domain Pattern'), + 'block_reason' => $this->l10n->t('Block Reason'), + 'mode' => $this->l10n->t('Import Mode'), + 'import' => $this->l10n->t('Import Patterns'), + 'pattern_count' => $this->l10n->tt('%d total pattern', '%d total patterns', count($this->blocklist)), + ], + '$listfile' => ['listfile', $this->l10n->t('Server domain pattern blocklist CSV file'), '', '', $this->l10n->t('Required'), '', 'file'], + '$mode_append' => ['mode', $this->l10n->t('Append'), 'append', $this->l10n->t('Imports patterns from the file that weren\'t already existing in the current blocklist.'), 'checked="checked"'], + '$mode_replace' => ['mode', $this->l10n->t('Replace'), 'replace', $this->l10n->t('Replaces the current blocklist by the imported patterns.')], + '$blocklist' => $this->blocklist, + '$baseurl' => $this->baseUrl->get(true), + '$form_security_token' => self::getFormSecurityToken('admin_blocklist_import') + ]); + } +} diff --git a/src/Module/Admin/Blocklist/Server/Index.php b/src/Module/Admin/Blocklist/Server/Index.php index ed2b9a2c59..ee6f1d4e88 100644 --- a/src/Module/Admin/Blocklist/Server/Index.php +++ b/src/Module/Admin/Blocklist/Server/Index.php @@ -84,8 +84,10 @@ class Index extends BaseAdmin
  • *: Any number of characters
  • ?: Any single character
  • '), + 'importtitle' => DI::l10n()->t('Import server domain pattern blocklist'), 'addtitle' => DI::l10n()->t('Add new entry to the blocklist'), - 'submit' => DI::l10n()->t('Check pattern'), + 'importsubmit' => DI::l10n()->t('Upload file'), + 'addsubmit' => DI::l10n()->t('Check pattern'), 'savechanges' => DI::l10n()->t('Save changes to the blocklist'), 'currenttitle' => DI::l10n()->t('Current Entries in the Blocklist'), 'thurl' => DI::l10n()->t('Blocked server domain pattern'), @@ -93,10 +95,12 @@ class Index extends BaseAdmin 'delentry' => DI::l10n()->t('Delete entry from the blocklist'), 'confirm_delete' => DI::l10n()->t('Delete entry from the blocklist?'), ], + '$listfile' => ['listfile', DI::l10n()->t('Server domain pattern blocklist CSV file'), '', '', DI::l10n()->t('Required'), '', 'file'], '$newdomain' => ['pattern', DI::l10n()->t('Server Domain Pattern'), '', DI::l10n()->t('The domain pattern of the new server to add to the blocklist. Do not include the protocol.'), DI::l10n()->t('Required'), '', ''], '$entries' => $blocklistform, '$baseurl' => DI::baseUrl()->get(true), - '$form_security_token' => self::getFormSecurityToken('admin_blocklist') + '$form_security_token' => self::getFormSecurityToken('admin_blocklist'), + '$form_security_token_import' => self::getFormSecurityToken('admin_blocklist_import'), ]); } } diff --git a/static/routes.config.php b/static/routes.config.php index 8c7a08758f..ce41c23d3a 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -310,9 +310,10 @@ return [ '/addons/{addon}' => [Module\Admin\Addons\Details::class, [R::GET, R::POST]], - '/blocklist/contact' => [Module\Admin\Blocklist\Contact::class, [R::GET, R::POST]], - '/blocklist/server' => [Module\Admin\Blocklist\Server\Index::class, [R::GET, R::POST]], - '/blocklist/server/add' => [Module\Admin\Blocklist\Server\Add::class, [R::GET, R::POST]], + '/blocklist/contact' => [Module\Admin\Blocklist\Contact::class, [R::GET, R::POST]], + '/blocklist/server' => [Module\Admin\Blocklist\Server\Index::class, [R::GET, R::POST]], + '/blocklist/server/add' => [Module\Admin\Blocklist\Server\Add::class, [R::GET, R::POST]], + '/blocklist/server/import' => [Module\Admin\Blocklist\Server\Import::class, [R::GET, R::POST]], '/dbsync[/{action}[/{update:\d+}]]' => [Module\Admin\DBSync::class, [R::GET]], diff --git a/view/templates/admin/blocklist/server/import.tpl b/view/templates/admin/blocklist/server/import.tpl new file mode 100644 index 0000000000..cdce214635 --- /dev/null +++ b/view/templates/admin/blocklist/server/import.tpl @@ -0,0 +1,52 @@ +
    +

    {{$l10n.return_list}}

    +

    {{$l10n.title}} - {{$l10n.page}}

    +{{if !$blocklist}} + {{$l10n.download nofilter}} + +
    + + {{include file="field_input.tpl" field=$listfile}} +
    + +
    +
    +{{else}} +

    {{$l10n.patterns}}

    +
    + + + + + + + + + + + + + + + + {{foreach $blocklist as $block}} + + + + + {{/foreach}} + +
    {{$l10n.domain_pattern}}{{$l10n.block_reason}}
    {{$l10n.pattern_count}}
    {{$block.domain}}{{$block.reason}}
    + +
    + + {{include file="field_radio.tpl" field=$mode_append}} + {{include file="field_radio.tpl" field=$mode_replace}} +
    + +
    + +
    +
    +{{/if}} +
    diff --git a/view/templates/admin/blocklist/server/index.tpl b/view/templates/admin/blocklist/server/index.tpl index 00df4da9cb..bfb269ebbe 100644 --- a/view/templates/admin/blocklist/server/index.tpl +++ b/view/templates/admin/blocklist/server/index.tpl @@ -7,13 +7,24 @@

    {{$l10n.title}} - {{$l10n.page}}

    {{$l10n.intro}}

    {{$l10n.public nofilter}}

    - {{$l10n.syntax nofilter}} + +

    {{$l10n.importtitle}}

    + {{$l10n.download nofilter}} + +
    + + {{include file="field_input.tpl" field=$listfile}} +
    + +
    +

    {{$l10n.addtitle}}

    + {{$l10n.syntax nofilter}}
    {{include file="field_input.tpl" field=$newdomain}}
    - +
    From ef82f679bfd58da82ae406bc2fedb6908ef8e114 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 27 Jul 2022 11:54:50 -0400 Subject: [PATCH 8/8] Updated main translation file after adding strings --- view/lang/C/messages.po | 520 ++++++++++++++++++++++++---------------- 1 file changed, 307 insertions(+), 213 deletions(-) diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 702fcda9aa..fd9fd9d490 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2022.09-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-17 07:33+0000\n" +"POT-Creation-Date: 2022-07-27 11:50-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,7 +28,7 @@ msgid "Access denied." msgstr "" #: mod/cal.php:63 mod/cal.php:80 mod/photos.php:69 mod/photos.php:140 -#: mod/photos.php:798 src/Model/Profile.php:232 src/Module/Feed.php:72 +#: mod/photos.php:798 src/Model/Profile.php:235 src/Module/Feed.php:72 #: src/Module/HCard.php:52 src/Module/Profile/Common.php:41 #: src/Module/Profile/Common.php:52 src/Module/Profile/Contacts.php:40 #: src/Module/Profile/Contacts.php:50 src/Module/Profile/Media.php:38 @@ -62,21 +62,21 @@ msgstr "" msgid "Next" msgstr "" -#: mod/cal.php:249 mod/events.php:383 src/Model/Event.php:456 +#: mod/cal.php:249 mod/events.php:383 src/Model/Event.php:460 msgid "today" msgstr "" -#: mod/cal.php:250 mod/events.php:384 src/Model/Event.php:457 +#: mod/cal.php:250 mod/events.php:384 src/Model/Event.php:461 #: src/Util/Temporal.php:334 msgid "month" msgstr "" -#: mod/cal.php:251 mod/events.php:385 src/Model/Event.php:458 +#: mod/cal.php:251 mod/events.php:385 src/Model/Event.php:462 #: src/Util/Temporal.php:335 msgid "week" msgstr "" -#: mod/cal.php:252 mod/events.php:386 src/Model/Event.php:459 +#: mod/cal.php:252 mod/events.php:386 src/Model/Event.php:463 #: src/Util/Temporal.php:336 msgid "day" msgstr "" @@ -85,7 +85,7 @@ msgstr "" msgid "list" msgstr "" -#: mod/cal.php:265 src/Console/User.php:182 src/Model/User.php:661 +#: mod/cal.php:265 src/Console/User.php:182 src/Model/User.php:662 #: src/Module/Admin/Users/Active.php:73 src/Module/Admin/Users/Blocked.php:74 #: src/Module/Admin/Users/Index.php:80 src/Module/Admin/Users/Pending.php:71 #: src/Module/Api/Twitter/ContactEndpoint.php:74 @@ -311,7 +311,7 @@ msgid "Link or Media" msgstr "" #: mod/editpost.php:143 src/Content/Conversation.php:393 -#: src/Content/Widget/VCard.php:113 src/Model/Profile.php:463 +#: src/Content/Widget/VCard.php:113 src/Model/Profile.php:466 #: src/Module/Admin/Logs/View.php:93 msgid "Message" msgstr "" @@ -357,9 +357,11 @@ msgstr "" #: mod/events.php:476 mod/events.php:506 #: src/Module/Admin/Blocklist/Server/Add.php:104 #: src/Module/Admin/Blocklist/Server/Add.php:106 +#: src/Module/Admin/Blocklist/Server/Import.php:155 #: src/Module/Admin/Blocklist/Server/Index.php:68 #: src/Module/Admin/Blocklist/Server/Index.php:69 -#: src/Module/Admin/Blocklist/Server/Index.php:96 +#: src/Module/Admin/Blocklist/Server/Index.php:98 +#: src/Module/Admin/Blocklist/Server/Index.php:99 #: src/Module/Admin/Item/Delete.php:69 src/Module/Debug/Probe.php:59 #: src/Module/Install.php:207 src/Module/Install.php:240 #: src/Module/Install.php:245 src/Module/Install.php:264 @@ -387,8 +389,8 @@ msgid "Description:" msgstr "" #: mod/events.php:504 src/Content/Widget/VCard.php:104 src/Model/Event.php:80 -#: src/Model/Event.php:107 src/Model/Event.php:465 src/Model/Event.php:915 -#: src/Model/Profile.php:371 src/Module/Contact/Profile.php:369 +#: src/Model/Event.php:107 src/Model/Event.php:469 src/Model/Event.php:919 +#: src/Model/Profile.php:374 src/Module/Contact/Profile.php:369 #: src/Module/Directory.php:148 src/Module/Notifications/Introductions.php:185 #: src/Module/Profile/Profile.php:194 msgid "Location:" @@ -1409,7 +1411,7 @@ msgstr "" msgid "Friend Suggestions" msgstr "" -#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2727 +#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2743 msgid "photo" msgstr "" @@ -2273,7 +2275,7 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" -#: src/Content/Item.php:345 src/Model/Item.php:2725 +#: src/Content/Item.php:345 src/Model/Item.php:2741 msgid "event" msgstr "" @@ -2624,8 +2626,8 @@ msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3300 -#: src/Model/Item.php:3306 src/Model/Item.php:3307 +#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3316 +#: src/Model/Item.php:3322 src/Model/Item.php:3323 msgid "Link to source" msgstr "" @@ -2658,7 +2660,7 @@ msgid "The end" msgstr "" #: src/Content/Text/HTML.php:882 src/Content/Widget/VCard.php:109 -#: src/Model/Profile.php:457 +#: src/Model/Profile.php:460 msgid "Follow" msgstr "" @@ -2723,7 +2725,7 @@ msgstr "" msgid "Local Directory" msgstr "" -#: src/Content/Widget.php:211 src/Model/Group.php:583 +#: src/Content/Widget.php:211 src/Model/Group.php:587 #: src/Module/Contact.php:354 src/Module/Welcome.php:76 msgid "Groups" msgstr "" @@ -2838,22 +2840,22 @@ msgstr[1] "" msgid "More Trending Tags" msgstr "" -#: src/Content/Widget/VCard.php:102 src/Model/Profile.php:376 +#: src/Content/Widget/VCard.php:102 src/Model/Profile.php:379 #: src/Module/Contact/Profile.php:371 src/Module/Profile/Profile.php:176 msgid "XMPP:" msgstr "" -#: src/Content/Widget/VCard.php:103 src/Model/Profile.php:377 +#: src/Content/Widget/VCard.php:103 src/Model/Profile.php:380 #: src/Module/Contact/Profile.php:373 src/Module/Profile/Profile.php:180 msgid "Matrix:" msgstr "" -#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:469 +#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:472 #: src/Module/Notifications/Introductions.php:199 msgid "Network:" msgstr "" -#: src/Content/Widget/VCard.php:111 src/Model/Profile.php:459 +#: src/Content/Widget/VCard.php:111 src/Model/Profile.php:462 msgid "Unfollow" msgstr "" @@ -3222,137 +3224,137 @@ msgstr "" msgid "Could not connect to database." msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:424 +#: src/Core/L10n.php:399 src/Model/Event.php:428 #: src/Module/Settings/Display.php:182 msgid "Monday" msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:425 +#: src/Core/L10n.php:399 src/Model/Event.php:429 msgid "Tuesday" msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:426 +#: src/Core/L10n.php:399 src/Model/Event.php:430 msgid "Wednesday" msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:427 +#: src/Core/L10n.php:399 src/Model/Event.php:431 msgid "Thursday" msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:428 +#: src/Core/L10n.php:399 src/Model/Event.php:432 msgid "Friday" msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:429 +#: src/Core/L10n.php:399 src/Model/Event.php:433 msgid "Saturday" msgstr "" -#: src/Core/L10n.php:399 src/Model/Event.php:423 +#: src/Core/L10n.php:399 src/Model/Event.php:427 #: src/Module/Settings/Display.php:182 msgid "Sunday" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:444 +#: src/Core/L10n.php:403 src/Model/Event.php:448 msgid "January" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:445 +#: src/Core/L10n.php:403 src/Model/Event.php:449 msgid "February" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:446 +#: src/Core/L10n.php:403 src/Model/Event.php:450 msgid "March" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:447 +#: src/Core/L10n.php:403 src/Model/Event.php:451 msgid "April" msgstr "" -#: src/Core/L10n.php:403 src/Core/L10n.php:422 src/Model/Event.php:435 +#: src/Core/L10n.php:403 src/Core/L10n.php:422 src/Model/Event.php:439 msgid "May" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:448 +#: src/Core/L10n.php:403 src/Model/Event.php:452 msgid "June" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:449 +#: src/Core/L10n.php:403 src/Model/Event.php:453 msgid "July" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:450 +#: src/Core/L10n.php:403 src/Model/Event.php:454 msgid "August" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:451 +#: src/Core/L10n.php:403 src/Model/Event.php:455 msgid "September" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:452 +#: src/Core/L10n.php:403 src/Model/Event.php:456 msgid "October" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:453 +#: src/Core/L10n.php:403 src/Model/Event.php:457 msgid "November" msgstr "" -#: src/Core/L10n.php:403 src/Model/Event.php:454 +#: src/Core/L10n.php:403 src/Model/Event.php:458 msgid "December" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:416 +#: src/Core/L10n.php:418 src/Model/Event.php:420 msgid "Mon" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:417 +#: src/Core/L10n.php:418 src/Model/Event.php:421 msgid "Tue" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:418 +#: src/Core/L10n.php:418 src/Model/Event.php:422 msgid "Wed" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:419 +#: src/Core/L10n.php:418 src/Model/Event.php:423 msgid "Thu" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:420 +#: src/Core/L10n.php:418 src/Model/Event.php:424 msgid "Fri" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:421 +#: src/Core/L10n.php:418 src/Model/Event.php:425 msgid "Sat" msgstr "" -#: src/Core/L10n.php:418 src/Model/Event.php:415 +#: src/Core/L10n.php:418 src/Model/Event.php:419 msgid "Sun" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:431 +#: src/Core/L10n.php:422 src/Model/Event.php:435 msgid "Jan" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:432 +#: src/Core/L10n.php:422 src/Model/Event.php:436 msgid "Feb" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:433 +#: src/Core/L10n.php:422 src/Model/Event.php:437 msgid "Mar" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:434 +#: src/Core/L10n.php:422 src/Model/Event.php:438 msgid "Apr" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:436 +#: src/Core/L10n.php:422 src/Model/Event.php:440 msgid "Jun" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:437 +#: src/Core/L10n.php:422 src/Model/Event.php:441 msgid "Jul" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:438 +#: src/Core/L10n.php:422 src/Model/Event.php:442 msgid "Aug" msgstr "" @@ -3360,15 +3362,15 @@ msgstr "" msgid "Sep" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:440 +#: src/Core/L10n.php:422 src/Model/Event.php:444 msgid "Oct" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:441 +#: src/Core/L10n.php:422 src/Model/Event.php:445 msgid "Nov" msgstr "" -#: src/Core/L10n.php:422 src/Model/Event.php:442 +#: src/Core/L10n.php:422 src/Model/Event.php:446 msgid "Dec" msgstr "" @@ -3698,70 +3700,70 @@ msgstr "" msgid "l F d, Y \\@ g:i A \\G\\M\\TP (e)" msgstr "" -#: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:463 -#: src/Model/Event.php:897 +#: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:467 +#: src/Model/Event.php:901 msgid "Starts:" msgstr "" -#: src/Model/Event.php:76 src/Model/Event.php:96 src/Model/Event.php:464 -#: src/Model/Event.php:901 +#: src/Model/Event.php:76 src/Model/Event.php:96 src/Model/Event.php:468 +#: src/Model/Event.php:905 msgid "Finishes:" msgstr "" -#: src/Model/Event.php:413 +#: src/Model/Event.php:417 msgid "all-day" msgstr "" -#: src/Model/Event.php:439 +#: src/Model/Event.php:443 msgid "Sept" msgstr "" -#: src/Model/Event.php:461 +#: src/Model/Event.php:465 msgid "No events to display" msgstr "" -#: src/Model/Event.php:577 +#: src/Model/Event.php:581 msgid "l, F j" msgstr "" -#: src/Model/Event.php:608 +#: src/Model/Event.php:612 msgid "Edit event" msgstr "" -#: src/Model/Event.php:609 +#: src/Model/Event.php:613 msgid "Duplicate event" msgstr "" -#: src/Model/Event.php:610 +#: src/Model/Event.php:614 msgid "Delete event" msgstr "" -#: src/Model/Event.php:853 src/Module/Debug/Localtime.php:38 +#: src/Model/Event.php:857 src/Module/Debug/Localtime.php:38 msgid "l F d, Y \\@ g:i A" msgstr "" -#: src/Model/Event.php:854 +#: src/Model/Event.php:858 msgid "D g:i A" msgstr "" -#: src/Model/Event.php:855 +#: src/Model/Event.php:859 msgid "g:i A" msgstr "" -#: src/Model/Event.php:916 src/Model/Event.php:918 +#: src/Model/Event.php:920 src/Model/Event.php:922 msgid "Show map" msgstr "" -#: src/Model/Event.php:917 +#: src/Model/Event.php:921 msgid "Hide map" msgstr "" -#: src/Model/Event.php:1010 +#: src/Model/Event.php:1014 #, php-format msgid "%s's birthday" msgstr "" -#: src/Model/Event.php:1011 +#: src/Model/Event.php:1015 #, php-format msgid "Happy Birthday %s" msgstr "" @@ -3773,95 +3775,95 @@ msgid "" "not what you intended, please create another group with a different name." msgstr "" -#: src/Model/Group.php:499 +#: src/Model/Group.php:503 msgid "Default privacy group for new contacts" msgstr "" -#: src/Model/Group.php:531 +#: src/Model/Group.php:535 msgid "Everybody" msgstr "" -#: src/Model/Group.php:550 +#: src/Model/Group.php:554 msgid "edit" msgstr "" -#: src/Model/Group.php:582 +#: src/Model/Group.php:586 msgid "add" msgstr "" -#: src/Model/Group.php:587 +#: src/Model/Group.php:591 msgid "Edit group" msgstr "" -#: src/Model/Group.php:588 src/Module/Group.php:194 +#: src/Model/Group.php:592 src/Module/Group.php:194 msgid "Contacts not in any group" msgstr "" -#: src/Model/Group.php:590 +#: src/Model/Group.php:594 msgid "Create a new group" msgstr "" -#: src/Model/Group.php:591 src/Module/Group.php:179 src/Module/Group.php:202 +#: src/Model/Group.php:595 src/Module/Group.php:179 src/Module/Group.php:202 #: src/Module/Group.php:277 msgid "Group Name: " msgstr "" -#: src/Model/Group.php:592 +#: src/Model/Group.php:596 msgid "Edit groups" msgstr "" -#: src/Model/Item.php:1823 +#: src/Model/Item.php:1839 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2729 +#: src/Model/Item.php:2745 msgid "activity" msgstr "" -#: src/Model/Item.php:2731 +#: src/Model/Item.php:2747 msgid "comment" msgstr "" -#: src/Model/Item.php:2734 +#: src/Model/Item.php:2750 msgid "post" msgstr "" -#: src/Model/Item.php:2850 +#: src/Model/Item.php:2866 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3209 +#: src/Model/Item.php:3225 msgid "bytes" msgstr "" -#: src/Model/Item.php:3243 +#: src/Model/Item.php:3259 #, php-format msgid "%s (%d%s, %d votes)" msgstr "" -#: src/Model/Item.php:3245 +#: src/Model/Item.php:3261 #, php-format msgid "%s (%d votes)" msgstr "" -#: src/Model/Item.php:3250 +#: src/Model/Item.php:3266 #, php-format msgid "%d voters. Poll end: %s" msgstr "" -#: src/Model/Item.php:3252 +#: src/Model/Item.php:3268 #, php-format msgid "%d voters." msgstr "" -#: src/Model/Item.php:3254 +#: src/Model/Item.php:3270 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3288 src/Model/Item.php:3289 +#: src/Model/Item.php:3304 src/Model/Item.php:3305 msgid "View on separate page" msgstr "" @@ -3869,282 +3871,282 @@ msgstr "" msgid "[no subject]" msgstr "" -#: src/Model/Profile.php:359 src/Module/Profile/Profile.php:256 +#: src/Model/Profile.php:362 src/Module/Profile/Profile.php:256 #: src/Module/Profile/Profile.php:258 msgid "Edit profile" msgstr "" -#: src/Model/Profile.php:361 +#: src/Model/Profile.php:364 msgid "Change profile photo" msgstr "" -#: src/Model/Profile.php:374 src/Module/Directory.php:153 +#: src/Model/Profile.php:377 src/Module/Directory.php:153 #: src/Module/Profile/Profile.php:184 msgid "Homepage:" msgstr "" -#: src/Model/Profile.php:375 src/Module/Contact/Profile.php:375 +#: src/Model/Profile.php:378 src/Module/Contact/Profile.php:375 #: src/Module/Notifications/Introductions.php:187 msgid "About:" msgstr "" -#: src/Model/Profile.php:461 +#: src/Model/Profile.php:464 msgid "Atom feed" msgstr "" -#: src/Model/Profile.php:505 +#: src/Model/Profile.php:507 msgid "F d" msgstr "" -#: src/Model/Profile.php:569 src/Model/Profile.php:653 +#: src/Model/Profile.php:571 src/Model/Profile.php:660 msgid "[today]" msgstr "" -#: src/Model/Profile.php:578 +#: src/Model/Profile.php:580 msgid "Birthday Reminders" msgstr "" -#: src/Model/Profile.php:579 +#: src/Model/Profile.php:581 msgid "Birthdays this week:" msgstr "" -#: src/Model/Profile.php:602 +#: src/Model/Profile.php:609 msgid "g A l F d" msgstr "" -#: src/Model/Profile.php:640 +#: src/Model/Profile.php:647 msgid "[No description]" msgstr "" -#: src/Model/Profile.php:666 +#: src/Model/Profile.php:673 msgid "Event Reminders" msgstr "" -#: src/Model/Profile.php:667 +#: src/Model/Profile.php:674 msgid "Upcoming events the next 7 days:" msgstr "" -#: src/Model/Profile.php:855 +#: src/Model/Profile.php:868 #, php-format msgid "OpenWebAuth: %1$s welcomes %2$s" msgstr "" -#: src/Model/Profile.php:981 +#: src/Model/Profile.php:1008 msgid "Hometown:" msgstr "" -#: src/Model/Profile.php:982 +#: src/Model/Profile.php:1009 msgid "Marital Status:" msgstr "" -#: src/Model/Profile.php:983 +#: src/Model/Profile.php:1010 msgid "With:" msgstr "" -#: src/Model/Profile.php:984 +#: src/Model/Profile.php:1011 msgid "Since:" msgstr "" -#: src/Model/Profile.php:985 +#: src/Model/Profile.php:1012 msgid "Sexual Preference:" msgstr "" -#: src/Model/Profile.php:986 +#: src/Model/Profile.php:1013 msgid "Political Views:" msgstr "" -#: src/Model/Profile.php:987 +#: src/Model/Profile.php:1014 msgid "Religious Views:" msgstr "" -#: src/Model/Profile.php:988 +#: src/Model/Profile.php:1015 msgid "Likes:" msgstr "" -#: src/Model/Profile.php:989 +#: src/Model/Profile.php:1016 msgid "Dislikes:" msgstr "" -#: src/Model/Profile.php:990 +#: src/Model/Profile.php:1017 msgid "Title/Description:" msgstr "" -#: src/Model/Profile.php:991 src/Module/Admin/Summary.php:234 +#: src/Model/Profile.php:1018 src/Module/Admin/Summary.php:234 msgid "Summary" msgstr "" -#: src/Model/Profile.php:992 +#: src/Model/Profile.php:1019 msgid "Musical interests" msgstr "" -#: src/Model/Profile.php:993 +#: src/Model/Profile.php:1020 msgid "Books, literature" msgstr "" -#: src/Model/Profile.php:994 +#: src/Model/Profile.php:1021 msgid "Television" msgstr "" -#: src/Model/Profile.php:995 +#: src/Model/Profile.php:1022 msgid "Film/dance/culture/entertainment" msgstr "" -#: src/Model/Profile.php:996 +#: src/Model/Profile.php:1023 msgid "Hobbies/Interests" msgstr "" -#: src/Model/Profile.php:997 +#: src/Model/Profile.php:1024 msgid "Love/romance" msgstr "" -#: src/Model/Profile.php:998 +#: src/Model/Profile.php:1025 msgid "Work/employment" msgstr "" -#: src/Model/Profile.php:999 +#: src/Model/Profile.php:1026 msgid "School/education" msgstr "" -#: src/Model/Profile.php:1000 +#: src/Model/Profile.php:1027 msgid "Contact information and Social Networks" msgstr "" -#: src/Model/User.php:212 src/Model/User.php:1058 +#: src/Model/User.php:212 src/Model/User.php:1059 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: src/Model/User.php:570 src/Model/User.php:603 +#: src/Model/User.php:571 src/Model/User.php:604 msgid "Login failed" msgstr "" -#: src/Model/User.php:635 +#: src/Model/User.php:636 msgid "Not enough information to authenticate" msgstr "" -#: src/Model/User.php:730 +#: src/Model/User.php:731 msgid "Password can't be empty" msgstr "" -#: src/Model/User.php:749 +#: src/Model/User.php:750 msgid "Empty passwords are not allowed." msgstr "" -#: src/Model/User.php:753 +#: src/Model/User.php:754 msgid "" "The new password has been exposed in a public data dump, please choose " "another." msgstr "" -#: src/Model/User.php:759 +#: src/Model/User.php:760 msgid "" "The password can't contain accentuated letters, white spaces or colons (:)" msgstr "" -#: src/Model/User.php:938 +#: src/Model/User.php:939 msgid "Passwords do not match. Password unchanged." msgstr "" -#: src/Model/User.php:945 +#: src/Model/User.php:946 msgid "An invitation is required." msgstr "" -#: src/Model/User.php:949 +#: src/Model/User.php:950 msgid "Invitation could not be verified." msgstr "" -#: src/Model/User.php:957 +#: src/Model/User.php:958 msgid "Invalid OpenID url" msgstr "" -#: src/Model/User.php:970 src/Security/Authentication.php:240 +#: src/Model/User.php:971 src/Security/Authentication.php:240 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:970 src/Security/Authentication.php:240 +#: src/Model/User.php:971 src/Security/Authentication.php:240 msgid "The error message was:" msgstr "" -#: src/Model/User.php:976 +#: src/Model/User.php:977 msgid "Please enter the required information." msgstr "" -#: src/Model/User.php:990 +#: src/Model/User.php:991 #, 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:997 +#: src/Model/User.php:998 #, 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:1001 +#: src/Model/User.php:1002 #, 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:1009 +#: src/Model/User.php:1010 msgid "That doesn't appear to be your full (First Last) name." msgstr "" -#: src/Model/User.php:1014 +#: src/Model/User.php:1015 msgid "Your email domain is not among those allowed on this site." msgstr "" -#: src/Model/User.php:1018 +#: src/Model/User.php:1019 msgid "Not a valid email address." msgstr "" -#: src/Model/User.php:1021 +#: src/Model/User.php:1022 msgid "The nickname was blocked from registration by the nodes admin." msgstr "" -#: src/Model/User.php:1025 src/Model/User.php:1033 +#: src/Model/User.php:1026 src/Model/User.php:1034 msgid "Cannot use that email." msgstr "" -#: src/Model/User.php:1040 +#: src/Model/User.php:1041 msgid "Your nickname can only contain a-z, 0-9 and _." msgstr "" -#: src/Model/User.php:1048 src/Model/User.php:1105 +#: src/Model/User.php:1049 src/Model/User.php:1106 msgid "Nickname is already registered. Please choose another." msgstr "" -#: src/Model/User.php:1092 src/Model/User.php:1096 +#: src/Model/User.php:1093 src/Model/User.php:1097 msgid "An error occurred during registration. Please try again." msgstr "" -#: src/Model/User.php:1119 +#: src/Model/User.php:1120 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: src/Model/User.php:1126 +#: src/Model/User.php:1127 msgid "An error occurred creating your self contact. Please try again." msgstr "" -#: src/Model/User.php:1131 +#: src/Model/User.php:1132 msgid "Friends" msgstr "" -#: src/Model/User.php:1135 +#: src/Model/User.php:1136 msgid "" "An error occurred creating your default contact group. Please try again." msgstr "" -#: src/Model/User.php:1174 +#: src/Model/User.php:1175 msgid "Profile Photos" msgstr "" -#: src/Model/User.php:1367 +#: src/Model/User.php:1368 #, php-format msgid "" "\n" @@ -4152,7 +4154,7 @@ msgid "" "\t\t\tthe administrator of %2$s has set up an account for you." msgstr "" -#: src/Model/User.php:1370 +#: src/Model/User.php:1371 #, php-format msgid "" "\n" @@ -4189,12 +4191,12 @@ msgid "" "\t\tThank you and welcome to %4$s." msgstr "" -#: src/Model/User.php:1403 src/Model/User.php:1510 +#: src/Model/User.php:1404 src/Model/User.php:1511 #, php-format msgid "Registration details for %s" msgstr "" -#: src/Model/User.php:1423 +#: src/Model/User.php:1424 #, php-format msgid "" "\n" @@ -4210,12 +4212,12 @@ msgid "" "\t\t" msgstr "" -#: src/Model/User.php:1442 +#: src/Model/User.php:1443 #, php-format msgid "Registration at %s" msgstr "" -#: src/Model/User.php:1466 +#: src/Model/User.php:1467 #, php-format msgid "" "\n" @@ -4224,7 +4226,7 @@ msgid "" "\t\t\t" msgstr "" -#: src/Model/User.php:1474 +#: src/Model/User.php:1475 #, php-format msgid "" "\n" @@ -4290,8 +4292,9 @@ msgstr "" #: src/Module/Admin/Addons/Details.php:111 src/Module/Admin/Addons/Index.php:67 #: src/Module/Admin/Blocklist/Contact.php:94 #: src/Module/Admin/Blocklist/Server/Add.php:89 +#: src/Module/Admin/Blocklist/Server/Import.php:144 #: src/Module/Admin/Blocklist/Server/Index.php:78 -#: src/Module/Admin/Federation.php:196 src/Module/Admin/Item/Delete.php:64 +#: src/Module/Admin/Federation.php:200 src/Module/Admin/Item/Delete.php:64 #: src/Module/Admin/Logs/Settings.php:79 src/Module/Admin/Logs/View.php:84 #: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:433 #: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:233 @@ -4506,6 +4509,7 @@ msgid "" msgstr "" #: src/Module/Admin/Blocklist/Contact.php:118 +#: src/Module/Admin/Blocklist/Server/Import.php:150 msgid "Block Reason" msgstr "" @@ -4521,6 +4525,7 @@ msgstr[0] "" msgstr[1] "" #: src/Module/Admin/Blocklist/Server/Add.php:88 +#: src/Module/Admin/Blocklist/Server/Import.php:143 msgid "← Return to the list" msgstr "" @@ -4540,7 +4545,7 @@ msgid "" msgstr "" #: src/Module/Admin/Blocklist/Server/Add.php:96 -#: src/Module/Admin/Blocklist/Server/Index.php:88 +#: src/Module/Admin/Blocklist/Server/Index.php:90 msgid "Check pattern" msgstr "" @@ -4572,12 +4577,12 @@ msgid "Add pattern to the blocklist" msgstr "" #: src/Module/Admin/Blocklist/Server/Add.php:104 -#: src/Module/Admin/Blocklist/Server/Index.php:96 +#: src/Module/Admin/Blocklist/Server/Index.php:99 msgid "Server Domain Pattern" msgstr "" #: src/Module/Admin/Blocklist/Server/Add.php:104 -#: src/Module/Admin/Blocklist/Server/Index.php:96 +#: src/Module/Admin/Blocklist/Server/Index.php:99 msgid "" "The domain pattern of the new server to add to the blocklist. Do not include " "the protocol." @@ -4609,13 +4614,94 @@ msgid "" "shown publicly in the server information page." msgstr "" +#: src/Module/Admin/Blocklist/Server/Import.php:88 +#: src/Module/Admin/Blocklist/Server/Import.php:100 +msgid "Error importing pattern file" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:106 +msgid "Local blocklist replaced with the provided file." +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:121 +#, php-format +msgid "%d pattern was added to the local blocklist." +msgid_plural "%d patterns were added to the local blocklist." +msgstr[0] "" +msgstr[1] "" + +#: src/Module/Admin/Blocklist/Server/Import.php:123 +msgid "No pattern was added to the local blocklist." +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:145 +msgid "Import a Server Domain Pattern Blocklist" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:146 +msgid "" +"

    This file can be downloaded from the /friendica path of any " +"Friendica server.

    " +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:147 +#: src/Module/Admin/Blocklist/Server/Index.php:89 +msgid "Upload file" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:148 +msgid "Patterns to import" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:149 +msgid "Domain Pattern" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:151 +msgid "Import Mode" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:152 +msgid "Import Patterns" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:153 +#, php-format +msgid "%d total pattern" +msgid_plural "%d total patterns" +msgstr[0] "" +msgstr[1] "" + +#: src/Module/Admin/Blocklist/Server/Import.php:155 +#: src/Module/Admin/Blocklist/Server/Index.php:98 +msgid "Server domain pattern blocklist CSV file" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:156 +msgid "Append" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:156 +msgid "" +"Imports patterns from the file that weren't already existing in the current " +"blocklist." +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:157 +msgid "Replace" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Import.php:157 +msgid "Replaces the current blocklist by the imported patterns." +msgstr "" + #: src/Module/Admin/Blocklist/Server/Index.php:68 -#: src/Module/Admin/Blocklist/Server/Index.php:91 +#: src/Module/Admin/Blocklist/Server/Index.php:93 msgid "Blocked server domain pattern" msgstr "" #: src/Module/Admin/Blocklist/Server/Index.php:69 -#: src/Module/Admin/Blocklist/Server/Index.php:92 src/Module/Friendica.php:82 +#: src/Module/Admin/Blocklist/Server/Index.php:94 src/Module/Friendica.php:82 msgid "Reason for the block" msgstr "" @@ -4646,22 +4732,26 @@ msgid "" msgstr "" #: src/Module/Admin/Blocklist/Server/Index.php:87 +msgid "Import server domain pattern blocklist" +msgstr "" + +#: src/Module/Admin/Blocklist/Server/Index.php:88 msgid "Add new entry to the blocklist" msgstr "" -#: src/Module/Admin/Blocklist/Server/Index.php:89 +#: src/Module/Admin/Blocklist/Server/Index.php:91 msgid "Save changes to the blocklist" msgstr "" -#: src/Module/Admin/Blocklist/Server/Index.php:90 +#: src/Module/Admin/Blocklist/Server/Index.php:92 msgid "Current Entries in the Blocklist" msgstr "" -#: src/Module/Admin/Blocklist/Server/Index.php:93 +#: src/Module/Admin/Blocklist/Server/Index.php:95 msgid "Delete entry from the blocklist" msgstr "" -#: src/Module/Admin/Blocklist/Server/Index.php:94 +#: src/Module/Admin/Blocklist/Server/Index.php:96 msgid "Delete entry from the blocklist?" msgstr "" @@ -4733,61 +4823,61 @@ msgstr "" msgid "Manage Additional Features" msgstr "" -#: src/Module/Admin/Federation.php:65 +#: src/Module/Admin/Federation.php:68 msgid "Other" msgstr "" -#: src/Module/Admin/Federation.php:136 src/Module/Admin/Federation.php:385 +#: src/Module/Admin/Federation.php:140 src/Module/Admin/Federation.php:389 msgid "unknown" msgstr "" -#: src/Module/Admin/Federation.php:169 -#, php-format -msgid "%s total systems" -msgstr "" - -#: src/Module/Admin/Federation.php:170 -#, php-format -msgid "%s active users last month" -msgstr "" - -#: src/Module/Admin/Federation.php:171 -#, php-format -msgid "%s active users last six months" -msgstr "" - -#: src/Module/Admin/Federation.php:172 -#, php-format -msgid "%s registered users" -msgstr "" - #: src/Module/Admin/Federation.php:173 #, php-format -msgid "%s locally created posts and comments" +msgid "%s total systems" +msgstr "" + +#: src/Module/Admin/Federation.php:174 +#, php-format +msgid "%s active users last month" +msgstr "" + +#: src/Module/Admin/Federation.php:175 +#, php-format +msgid "%s active users last six months" msgstr "" #: src/Module/Admin/Federation.php:176 #, php-format +msgid "%s registered users" +msgstr "" + +#: src/Module/Admin/Federation.php:177 +#, php-format +msgid "%s locally created posts and comments" +msgstr "" + +#: src/Module/Admin/Federation.php:180 +#, php-format msgid "%s posts per user" msgstr "" -#: src/Module/Admin/Federation.php:181 +#: src/Module/Admin/Federation.php:185 #, php-format msgid "%s users per system" msgstr "" -#: src/Module/Admin/Federation.php:191 +#: src/Module/Admin/Federation.php:195 msgid "" "This page offers you some numbers to the known part of the federated social " "network your Friendica node is part of. These numbers are not complete but " "only reflect the part of the network your node is aware of." msgstr "" -#: src/Module/Admin/Federation.php:197 src/Module/BaseAdmin.php:90 +#: src/Module/Admin/Federation.php:201 src/Module/BaseAdmin.php:90 msgid "Federation Statistics" msgstr "" -#: src/Module/Admin/Federation.php:201 +#: src/Module/Admin/Federation.php:205 #, php-format msgid "" "Currently this node is aware of %s nodes (%s active users last month, %s " @@ -7621,28 +7711,32 @@ msgstr "" msgid "On this server the following remote servers are blocked." msgstr "" -#: src/Module/Friendica.php:97 +#: src/Module/Friendica.php:84 +msgid "Download this list in CSV format" +msgstr "" + +#: src/Module/Friendica.php:98 #, php-format msgid "" "This is Friendica, version %s that is running at the web location %s. The " "database version is %s, the post update version is %s." msgstr "" -#: src/Module/Friendica.php:102 +#: src/Module/Friendica.php:103 msgid "" "Please visit Friendi.ca to learn more " "about the Friendica project." msgstr "" -#: src/Module/Friendica.php:103 +#: src/Module/Friendica.php:104 msgid "Bug reports and issues: please visit" msgstr "" -#: src/Module/Friendica.php:103 +#: src/Module/Friendica.php:104 msgid "the bugtracker at github" msgstr "" -#: src/Module/Friendica.php:104 +#: src/Module/Friendica.php:105 msgid "" "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca" msgstr "" @@ -8144,11 +8238,11 @@ msgstr "" msgid "Show unread" msgstr "" -#: src/Module/Notifications/Ping.php:222 +#: src/Module/Notifications/Ping.php:226 msgid "{0} requested registration" msgstr "" -#: src/Module/Notifications/Ping.php:233 +#: src/Module/Notifications/Ping.php:237 #, php-format msgid "{0} and %d others requested registration" msgstr "" @@ -10973,11 +11067,11 @@ msgstr "" msgid "(no subject)" msgstr "" -#: src/Worker/PushSubscription.php:112 +#: src/Worker/PushSubscription.php:111 msgid "Notification from Friendica" msgstr "" -#: src/Worker/PushSubscription.php:113 +#: src/Worker/PushSubscription.php:112 msgid "Empty Post" msgstr ""