From 09c606181084b78dba9c279dee91a633eae7dce4 Mon Sep 17 00:00:00 2001 From: Random Penguin <205060075+randompenguin1@users.noreply.github.com> Date: Sun, 20 Apr 2025 12:05:26 -0500 Subject: [PATCH 01/33] Strip HTML tags from content sent as Markdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "toMarkdown" function prepares content to be sent, primarily, to Diaspora. The HTML to Markdown converter by default "preserves HTML tags without Markdown equivalents like `` and `
.`" At least according to the README in _/friendica/vendor/league/html-to-markdown/_ - which also says "To strip HTML tags that don’t have a Markdown equivalent while preserving the content inside them, set strip_tags..." Diaspora, however, does not appear to know what to DO with the HTML sent to it. It actually appears to _encode_ the HTML and displays the *code* in the post body rather than rendering it as HTML. In which case it would make more sense to strip out all tags that have no Markdown equivalents. --- src/Content/Text/HTML.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Content/Text/HTML.php b/src/Content/Text/HTML.php index f5cf2c6eca..f29f4a148e 100644 --- a/src/Content/Text/HTML.php +++ b/src/Content/Text/HTML.php @@ -689,7 +689,7 @@ class HTML public static function toMarkdown(string $html): string { DI::profiler()->startRecording('rendering'); - $converter = new HtmlConverter(['hard_break' => true]); + $converter = new HtmlConverter(['hard_break' => true, ‘strip_tags’ => true]]); $markdown = $converter->convert($html); DI::profiler()->stopRecording(); From 403b0672e688c8f61fafa3c50f31bc23e8a4bab3 Mon Sep 17 00:00:00 2001 From: Random Penguin <205060075+randompenguin1@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:44:14 -0500 Subject: [PATCH 02/33] Strip HTML tags from content sent as Markdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "toMarkdown" function prepares content to be sent, primarily, to Diaspora. The HTML to Markdown converter by default "preserves HTML tags without Markdown equivalents like  and 
." At least according to the README in /friendica/vendor/league/html-to-markdown/ - which also says "To strip HTML tags that don’t have a Markdown equivalent while preserving the content inside them, set strip_tags..." Diaspora, however, does not appear to know what to DO with the HTML sent to it. It actually appears to encode the HTML and displays the code in the post body rather than rendering it as HTML. In which case it would make more sense to strip out all tags that have no Markdown equivalents. Example
The post as sent from Friendica mixed BBcode and Markdown: [class=postbox-ocean]Norddeutscher Bürger ![Noddeutscher Bürger - Bismark Brötchen (Roger Cziwerny - pixapay)](/rscamo/……)[/class] The BBcode gets converted into an HTML  tag. It also looks like Diaspora encoded the Markdown for the image rather than parsing it, or at the very least didn't parse it as Markdown. Yet another reason to strip out HTML that has no Markdown equivalents. It looks like it may be encoding the tags and the content inside the tags. And, yes, I'm aware the [class] BBcode was marked as "deprecated" in the Friendica code, but it's the only way my Bookface scheme for the "Frio" theme could implement both profile "Cover Photos" and "Postboxes." Which won't display to other platforms anyway, so I don't want to see this custom BBcode removed, I just think it needs to be stripped out before content is delivered to other platforms. (There is a related issue with Hubzilla where the raw BBcode is coming through unparsed because the [class] code apparently does not exist in Hubzilla's BBcodes. But I've no clue where or how to fix that in Friendica or if it can be as it may need to be handled on Hubzilla's end). --- src/Content/Text/HTML.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Content/Text/HTML.php b/src/Content/Text/HTML.php index f29f4a148e..72c61f38cc 100644 --- a/src/Content/Text/HTML.php +++ b/src/Content/Text/HTML.php @@ -689,7 +689,7 @@ class HTML public static function toMarkdown(string $html): string { DI::profiler()->startRecording('rendering'); - $converter = new HtmlConverter(['hard_break' => true, ‘strip_tags’ => true]]); + $converter = new HtmlConverter(['hard_break' => true, 'strip_tags' => true]); $markdown = $converter->convert($html); DI::profiler()->stopRecording(); From 2fd374caeb71ef71f363b70b0a233a27e50dca7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 09:21:48 +0000 Subject: [PATCH 03/33] Bump guzzlehttp/oauth-subscriber from 0.6.0 to 0.8.1 Bumps [guzzlehttp/oauth-subscriber](https://github.com/guzzle/oauth-subscriber) from 0.6.0 to 0.8.1. - [Release notes](https://github.com/guzzle/oauth-subscriber/releases) - [Changelog](https://github.com/guzzle/oauth-subscriber/blob/0.8/CHANGELOG.md) - [Commits](https://github.com/guzzle/oauth-subscriber/compare/0.6.0...0.8.1) --- updated-dependencies: - dependency-name: guzzlehttp/oauth-subscriber dependency-version: 0.8.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- composer.json | 2 +- composer.lock | 147 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 104 insertions(+), 45 deletions(-) diff --git a/composer.json b/composer.json index ac1f5c9bc9..d86bfac2b2 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ "friendica/json-ld": "^1.0", "geekwright/po": "^2.0", "guzzlehttp/guzzle": "^7", - "guzzlehttp/oauth-subscriber": "^0.6", + "guzzlehttp/oauth-subscriber": "^0.8", "kornrunner/blurhash": "^1.2", "league/html-to-markdown": "^4.8", "level-2/dice": "^4", diff --git a/composer.lock b/composer.lock index bae30155dd..9d7b769c90 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "32af97f73ec49df2a6cfe98f11bc1d60", + "content-hash": "8aa73e21ed198d8013c09de14e8230cd", "packages": [ { "name": "asika/simple-console", @@ -893,22 +893,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -919,9 +919,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -997,6 +997,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -1011,37 +1015,39 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2025-03-27T13:37:11+00:00" }, { "name": "guzzlehttp/oauth-subscriber", - "version": "0.6.0", + "version": "0.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/oauth-subscriber.git", - "reference": "8d6cab29f8397e5712d00a383eeead36108a3c1f" + "reference": "92b619b03bd21396e51c62e6bce83467d2ce8f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/oauth-subscriber/zipball/8d6cab29f8397e5712d00a383eeead36108a3c1f", - "reference": "8d6cab29f8397e5712d00a383eeead36108a3c1f", + "url": "https://api.github.com/repos/guzzle/oauth-subscriber/zipball/92b619b03bd21396e51c62e6bce83467d2ce8f53", + "reference": "92b619b03bd21396e51c62e6bce83467d2ce8f53", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.5|^7.2", - "guzzlehttp/psr7": "^1.7|^2.0", - "php": ">=5.5.0" + "guzzlehttp/guzzle": "^7.9", + "guzzlehttp/psr7": "^2.7", + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|^9.3.3" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "suggest": { "ext-openssl": "Required to sign using RSA-SHA1" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "0.6-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { @@ -1054,32 +1060,64 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" } ], "description": "Guzzle OAuth 1.0 subscriber", - "homepage": "http://guzzlephp.org/", "keywords": [ "Guzzle", "oauth" ], - "time": "2021-07-13T12:01:32+00:00" + "support": { + "issues": "https://github.com/guzzle/oauth-subscriber/issues", + "source": "https://github.com/guzzle/oauth-subscriber/tree/0.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/oauth-subscriber", + "type": "tidelift" + } + ], + "time": "2025-01-06T19:15:59+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "shasum": "" }, "require": { @@ -1087,7 +1125,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -1131,6 +1169,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.2.0" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -1145,20 +1187,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2025-03-27T13:27:01+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "shasum": "" }, "require": { @@ -1173,8 +1215,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1243,6 +1285,10 @@ "uri", "url" ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.7.1" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -1257,7 +1303,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2025-03-27T12:30:47+00:00" }, { "name": "kornrunner/blurhash", @@ -3333,24 +3379,27 @@ "psr", "psr-18" ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -3374,7 +3423,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -3385,7 +3434,10 @@ "request", "response" ], - "time": "2023-04-10T20:10:41+00:00" + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -3435,6 +3487,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, "time": "2023-04-04T09:50:52+00:00" }, { @@ -3525,6 +3580,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { @@ -7634,9 +7693,9 @@ "ext-simplexml": "*", "ext-xml": "*" }, - "platform-dev": {}, + "platform-dev": [], "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } From 09668d5e56b515945fd0202141c8f7e1c7c3634c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 09:21:51 +0000 Subject: [PATCH 04/33] Bump smarty/smarty from 4.5.1 to 4.5.3 Bumps [smarty/smarty](https://github.com/smarty-php/smarty) from 4.5.1 to 4.5.3. - [Release notes](https://github.com/smarty-php/smarty/releases) - [Changelog](https://github.com/smarty-php/smarty/blob/v4.5.3/CHANGELOG.md) - [Commits](https://github.com/smarty-php/smarty/compare/v4.5.1...v4.5.3) --- updated-dependencies: - dependency-name: smarty/smarty dependency-version: 4.5.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- composer.lock | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index bae30155dd..b295bb97c6 100644 --- a/composer.lock +++ b/composer.lock @@ -3580,16 +3580,16 @@ }, { "name": "smarty/smarty", - "version": "v4.5.1", + "version": "v4.5.3", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "42b869e3a098b1c8ee07922ccded0e5a5dceadcd" + "reference": "9fc96a13dbaf546c3d7bcf95466726578cd4e0fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/42b869e3a098b1c8ee07922ccded0e5a5dceadcd", - "reference": "42b869e3a098b1c8ee07922ccded0e5a5dceadcd", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/9fc96a13dbaf546c3d7bcf95466726578cd4e0fa", + "reference": "9fc96a13dbaf546c3d7bcf95466726578cd4e0fa", "shasum": "" }, "require": { @@ -3637,7 +3637,12 @@ "keywords": [ "templating" ], - "time": "2024-03-18T14:19:07+00:00" + "support": { + "forum": "https://github.com/smarty-php/smarty/discussions", + "issues": "https://github.com/smarty-php/smarty/issues", + "source": "https://github.com/smarty-php/smarty/tree/v4.5.3" + }, + "time": "2024-05-28T21:46:01+00:00" }, { "name": "spomky-labs/base64url", @@ -7634,9 +7639,9 @@ "ext-simplexml": "*", "ext-xml": "*" }, - "platform-dev": {}, + "platform-dev": [], "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } From 3a257b617203f31b58368720b1cf83fb7cad4942 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 11 May 2025 11:23:25 +0200 Subject: [PATCH 05/33] Fix 500 error --- src/Model/Item.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 018f4dc799..0e8d7ae436 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -3282,7 +3282,7 @@ class Item } $dom = new \DOMDocument(); - if (!@$dom->loadHTML($html)) { + if (empty ($html) || !@$dom->loadHTML($html)) { return $html; } From 054a280d33e57c22413253594441146f9d65f60a Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 11 May 2025 11:37:09 +0200 Subject: [PATCH 06/33] Fix PHP-CS --- src/Model/Item.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 0e8d7ae436..985c1d0b9f 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -3282,7 +3282,7 @@ class Item } $dom = new \DOMDocument(); - if (empty ($html) || !@$dom->loadHTML($html)) { + if (empty($html) || !@$dom->loadHTML($html)) { return $html; } From 58ac3fbb29376782888d8e2ce2a4da644fb4ccaf Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Wed, 14 May 2025 18:47:15 +0200 Subject: [PATCH 07/33] Fix redirect for photo remove tag page and only show the link if tags exist. --- mod/photos.php | 2 +- src/Module/Post/Tag/Remove.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mod/photos.php b/mod/photos.php index 82b5e43960..57076fc933 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1022,7 +1022,7 @@ function photos_content() } } $tags = ['title' => DI::l10n()->t('Tags: '), 'tags' => $tag_arr]; - if ($cmd === 'edit') { + if ($cmd === 'edit' && !empty($tag_arr)) { $tags['removeanyurl'] = 'post/' . $link_item['id'] . '/tag/remove?return=' . urlencode(DI::args()->getCommand()); $tags['removetitle'] = DI::l10n()->t('[Select tags to remove]'); } diff --git a/src/Module/Post/Tag/Remove.php b/src/Module/Post/Tag/Remove.php index e5652c79a8..4426c48b7f 100644 --- a/src/Module/Post/Tag/Remove.php +++ b/src/Module/Post/Tag/Remove.php @@ -54,7 +54,7 @@ class Remove extends \Friendica\BaseModule protected function content(array $request = []): string { - $returnUrl = hex2bin($request['return'] ?? ''); + $returnUrl = $request['return'] ?? ''; if (!$this->session->getLocalUserId()) { $this->baseUrl->redirect($returnUrl); @@ -80,7 +80,7 @@ class Remove extends \Friendica\BaseModule if ($tag_text === '') { $this->baseUrl->redirect($returnUrl); } - + $tags = explode(',', $tag_text); $tag_checkboxes = array_map(function ($tag_text) { @@ -97,7 +97,7 @@ class Remove extends \Friendica\BaseModule ], '$item_id' => $item_id, - '$return' => $returnUrl, + '$return' => urlencode($returnUrl), '$tag_checkboxes' => $tag_checkboxes, ]); } From 78d28ae24b940d0f37016f9f396726f1a1b01040 Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Sat, 26 Apr 2025 00:08:02 +0200 Subject: [PATCH 08/33] Add translations for fixed typos in Conversation.php, Create.php, Channels.php --- src/Content/Conversation.php | 5 +- src/Module/Moderation/Report/Create.php | 42 +- src/Module/Settings/Channels.php | 7 +- view/lang/C/messages.po | 1767 ++++++++++++----------- 4 files changed, 924 insertions(+), 897 deletions(-) diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 722aaf27b5..b9815525af 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -265,7 +265,10 @@ class Conversation $phrase = $this->l10n->tt(' likes this', ' like this', $total, $spanatts); break; case 'dislike': - $phrase = $this->l10n->tt(' doesn\'t like this', ' don\'t like this', $total, $spanatts); + $dislike_translation_plural = ' don\'t like this'; + // @deprecated 2025.04 this translation is scheduled for removal as a new translation has been added without the typo + $dislike_translation_plural = ' don\'t like this'; + $phrase = $this->l10n->tt(' doesn\'t like this', $dislike_translation_plural, $total, $spanatts); break; case 'attendyes': $phrase = $this->l10n->tt(' attends', ' attend', $total, $spanatts); diff --git a/src/Module/Moderation/Report/Create.php b/src/Module/Moderation/Report/Create.php index 9761686ff0..660d5ed9b3 100644 --- a/src/Module/Moderation/Report/Create.php +++ b/src/Module/Moderation/Report/Create.php @@ -26,7 +26,6 @@ use Friendica\Moderation\Entity\Report; use Friendica\Module\Response; use Friendica\Navigation\SystemMessages; use Friendica\Network\HTTPException\ForbiddenException; -use Friendica\Util\Network; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; @@ -221,11 +220,19 @@ class Create extends BaseModule } if (DI::mode()->isMobile()) { - $itemsPerPage = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'itemspage_mobile_network', - DI::config()->get('system', 'itemspage_network_mobile')); + $itemsPerPage = DI::pConfig()->get( + DI::userSession()->getLocalUserId(), + 'system', + 'itemspage_mobile_network', + DI::config()->get('system', 'itemspage_network_mobile') + ); } else { - $itemsPerPage = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'itemspage_network', - DI::config()->get('system', 'itemspage_network')); + $itemsPerPage = DI::pConfig()->get( + DI::userSession()->getLocalUserId(), + 'system', + 'itemspage_network', + DI::config()->get('system', 'itemspage_network') + ); } $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), $itemsPerPage); @@ -260,6 +267,11 @@ class Create extends BaseModule $contact = Contact::getById($request['cid'], ['url']); $tpl = Renderer::getMarkupTemplate('moderation/report/create/summary.tpl'); + + $forward_translation = $this->t('Would you like to forward this report to the remote server?'); + // @deprecated 2025.04 this translation is scheduled for removal as a new translation has been added without the typo + $forward_translation = $this->t('Would you ike to forward this report to the remote server?'); + return Renderer::replaceMacros($tpl, [ '$l10n' => [ 'title' => $this->t('Create Moderation Report'), @@ -280,7 +292,7 @@ class Create extends BaseModule '$block' => ['contact_action', $this->t('Block contact'), self::CONTACT_ACTION_BLOCK, $this->t("Their posts won't appear in your Network page anymore, but their replies can appear in forum threads, with their content collapsed by default. They cannot follow you but still can have access to your public posts by other means.")], '$display_forward' => !$this->baseUrl->isLocalUrl($contact['url']), - '$forward' => ['report_forward', $this->t('Forward report'), self::CONTACT_ACTION_BLOCK, $this->t('Would you ike to forward this report to the remote server?')], + '$forward' => ['report_forward', $this->t('Forward report'), self::CONTACT_ACTION_BLOCK, $forward_translation], '$summary' => $this->getAside($request), ]); @@ -294,12 +306,18 @@ class Create extends BaseModule } switch ($request['category'] ?? 0) { - case Report::CATEGORY_SPAM: $category = $this->t('Spam'); break; - case Report::CATEGORY_ILLEGAL: $category = $this->t('Illegal Content'); break; - case Report::CATEGORY_SAFETY: $category = $this->t('Community Safety'); break; - case Report::CATEGORY_UNWANTED: $category = $this->t('Unwanted Content/Behavior'); break; - case Report::CATEGORY_VIOLATION: $category = $this->t('Rules Violation'); break; - case Report::CATEGORY_OTHER: $category = $this->t('Other'); break; + case Report::CATEGORY_SPAM: $category = $this->t('Spam'); + break; + case Report::CATEGORY_ILLEGAL: $category = $this->t('Illegal Content'); + break; + case Report::CATEGORY_SAFETY: $category = $this->t('Community Safety'); + break; + case Report::CATEGORY_UNWANTED: $category = $this->t('Unwanted Content/Behavior'); + break; + case Report::CATEGORY_VIOLATION: $category = $this->t('Rules Violation'); + break; + case Report::CATEGORY_OTHER: $category = $this->t('Other'); + break; default: $category = ''; } diff --git a/src/Module/Settings/Channels.php b/src/Module/Settings/Channels.php index 85ee2ccefa..0049dece27 100644 --- a/src/Module/Settings/Channels.php +++ b/src/Module/Settings/Channels.php @@ -192,6 +192,11 @@ class Channels extends BaseSettings } $t = Renderer::getMarkupTemplate('settings/channels.tpl'); + + $exclude_tags_translation = $this->t('Comma separated list of tags. If a post contain any of these tags, then it will not be part of this channel.'); + // @deprecated 2025.04 this translation is scheduled for removal as a new translation has been added without the typo + $exclude_tags_translation = $this->t('Comma separated list of tags. If a post contain any of these tags, then it will not be part of nthis channel.'); + return Renderer::replaceMacros($t, [ 'open' => count($channels) == 0, 'label' => ["new_label", $this->t('Label'), '', $this->t('Short name for the channel. It is displayed on the channels widget.'), $this->t('Required')], @@ -199,7 +204,7 @@ class Channels extends BaseSettings 'access_key' => ["new_access_key", $this->t("Access Key"), '', $this->t('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.')], 'circle' => ['new_circle', $this->t('Circle/Channel'), 0, $this->t('Select a circle or channel, that your channel should be based on.'), $circles], 'include_tags' => ["new_include_tags", $this->t("Include Tags"), '', $this->t('Comma separated list of tags. A post will be used when it contains any of the listed tags.')], - 'exclude_tags' => ["new_exclude_tags", $this->t("Exclude Tags"), '', $this->t('Comma separated list of tags. If a post contain any of these tags, then it will not be part of nthis channel.')], + 'exclude_tags' => ["new_exclude_tags", $this->t("Exclude Tags"), '', $exclude_tags_translation], 'min_size' => ["new_min_size", $this->t("Minimum Size"), '', $this->t('Minimum post size. Leave empty for no minimum size. The size is calculated without links, attached posts, mentions or hashtags.')], 'max_size' => ["new_max_size", $this->t("Maximum Size"), '', $this->t('Maximum post size. Leave empty for no maximum size. The size is calculated without links, attached posts, mentions or hashtags.')], 'text_search' => ["new_text_search", $this->t("Full Text Search"), '', $this->t('Search terms for the body, supports the "boolean mode" operators from MariaDB. See the help for a complete list of operators and additional keywords: %s', 'help/Channels')], diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 83b1734263..417322fd6c 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2025.02-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-04-28 19:34+0200\n" +"POT-Creation-Date: 2025-05-17 21:51+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,14 +38,14 @@ msgstr "" msgid "Empty post discarded." msgstr "" -#: mod/item.php:431 src/Module/Admin/Themes/Details.php:31 +#: mod/item.php:437 src/Module/Admin/Themes/Details.php:31 #: src/Module/Admin/Themes/Index.php:51 src/Module/Debug/ItemBody.php:34 #: src/Module/Debug/ItemBody.php:42 src/Module/Item/Feed.php:66 msgid "Item not found." msgstr "" -#: mod/item.php:455 mod/message.php:54 mod/message.php:100 mod/notes.php:34 -#: mod/photos.php:131 mod/photos.php:623 src/Model/Event.php:506 +#: mod/item.php:461 mod/message.php:54 mod/message.php:100 mod/notes.php:34 +#: mod/photos.php:131 mod/photos.php:623 src/Model/Event.php:511 #: src/Module/Attach.php:40 src/Module/BaseApi.php:90 #: src/Module/BaseNotifications.php:83 src/Module/BaseSettings.php:38 #: src/Module/Calendar/Event/API.php:75 src/Module/Calendar/Event/Form.php:70 @@ -61,10 +61,10 @@ msgstr "" #: src/Module/Notifications/Notification.php:93 #: src/Module/OStatus/Subscribe.php:54 src/Module/Post/Edit.php:72 #: src/Module/Profile/Common.php:63 src/Module/Profile/Contacts.php:66 -#: src/Module/Profile/Photos.php:81 src/Module/Profile/Schedule.php:25 -#: src/Module/Profile/Schedule.php:42 src/Module/Register.php:70 -#: src/Module/Register.php:83 src/Module/Register.php:199 -#: src/Module/Register.php:238 src/Module/Search/Directory.php:23 +#: src/Module/Profile/Photos.php:100 src/Module/Profile/Schedule.php:25 +#: src/Module/Profile/Schedule.php:42 src/Module/Register.php:74 +#: src/Module/Register.php:87 src/Module/Register.php:212 +#: src/Module/Register.php:251 src/Module/Search/Directory.php:23 #: src/Module/Settings/Account.php:34 src/Module/Settings/Account.php:337 #: src/Module/Settings/Channels.php:52 src/Module/Settings/Channels.php:127 #: src/Module/Settings/ContactImport.php:49 @@ -261,7 +261,7 @@ msgid "Send Private Message" msgstr "" #: mod/message.php:178 mod/message.php:333 -#: src/Module/Privacy/PermissionTooltip.php:118 +#: src/Module/Privacy/PermissionTooltip.php:149 msgid "To:" msgstr "" @@ -273,7 +273,7 @@ msgstr "" msgid "Your message:" msgstr "" -#: mod/message.php:186 mod/message.php:341 src/Content/Conversation.php:359 +#: mod/message.php:186 mod/message.php:341 src/Content/Conversation.php:362 #: src/Module/Post/Edit.php:127 msgid "Upload photo" msgstr "" @@ -283,9 +283,9 @@ msgid "Insert web link" msgstr "" #: mod/message.php:188 mod/message.php:344 mod/photos.php:1256 -#: src/Content/Conversation.php:390 src/Content/Conversation.php:1569 +#: src/Content/Conversation.php:393 src/Content/Conversation.php:1572 #: src/Module/Item/Compose.php:205 src/Module/Post/Edit.php:141 -#: src/Object/Post.php:614 +#: src/Object/Post.php:613 msgid "Please wait" msgstr "" @@ -293,7 +293,7 @@ msgstr "" #: mod/photos.php:778 mod/photos.php:1055 mod/photos.php:1097 #: mod/photos.php:1153 mod/photos.php:1233 #: src/Module/Calendar/Event/Form.php:236 src/Module/Contact/Advanced.php:118 -#: src/Module/Contact/Profile.php:376 +#: src/Module/Contact/Profile.php:407 #: src/Module/Debug/ActivityPubConversion.php:128 #: src/Module/Debug/Babel.php:279 src/Module/Debug/Localtime.php:50 #: src/Module/Debug/Probe.php:40 src/Module/Debug/WebFinger.php:37 @@ -301,13 +301,13 @@ msgstr "" #: src/Module/Install.php:259 src/Module/Install.php:296 #: src/Module/Invite.php:162 src/Module/Item/Compose.php:188 #: src/Module/Moderation/Item/Source.php:74 -#: src/Module/Moderation/Report/Create.php:154 -#: src/Module/Moderation/Report/Create.php:169 -#: src/Module/Moderation/Report/Create.php:197 -#: src/Module/Moderation/Report/Create.php:249 -#: src/Module/Profile/Profile.php:265 src/Module/Settings/Profile/Index.php:248 +#: src/Module/Moderation/Report/Create.php:153 +#: src/Module/Moderation/Report/Create.php:168 +#: src/Module/Moderation/Report/Create.php:196 +#: src/Module/Moderation/Report/Create.php:256 +#: src/Module/Profile/Profile.php:283 src/Module/Settings/Profile/Index.php:272 #: src/Module/Settings/Server/Action.php:65 src/Module/User/Delegation.php:181 -#: src/Object/Post.php:1158 view/theme/duepuntozero/config.php:73 +#: src/Object/Post.php:1159 view/theme/duepuntozero/config.php:73 #: view/theme/frio/config.php:155 view/theme/quattro/config.php:75 #: view/theme/vier/config.php:123 msgid "Submit" @@ -373,39 +373,39 @@ msgstr "" #: mod/notes.php:46 src/Content/Text/HTML.php:855 #: src/Module/Admin/Storage.php:128 src/Module/Filer/SaveTag.php:60 -#: src/Module/Post/Edit.php:125 src/Module/Settings/Channels.php:215 +#: src/Module/Post/Edit.php:125 src/Module/Settings/Channels.php:220 msgid "Save" msgstr "" #: mod/photos.php:50 mod/photos.php:113 mod/photos.php:533 -#: src/Model/Event.php:498 src/Model/Profile.php:211 +#: src/Model/Event.php:503 src/Model/Profile.php:211 #: src/Module/Calendar/Export.php:60 src/Module/Calendar/Show.php:62 #: src/Module/Feed.php:52 src/Module/HCard.php:37 #: src/Module/Profile/Common.php:50 src/Module/Profile/Common.php:59 #: src/Module/Profile/Contacts.php:52 src/Module/Profile/Contacts.php:60 #: src/Module/Profile/Conversations.php:81 src/Module/Profile/Media.php:58 -#: src/Module/Profile/Photos.php:72 src/Module/Profile/RemoteFollow.php:57 -#: src/Module/Register.php:260 +#: src/Module/Profile/Photos.php:91 src/Module/Profile/RemoteFollow.php:57 +#: src/Module/Register.php:273 msgid "User not found." msgstr "" #: mod/photos.php:87 src/Module/BaseProfile.php:53 -#: src/Module/Profile/Photos.php:372 +#: src/Module/Profile/Photos.php:419 msgid "Photo Albums" msgstr "" -#: mod/photos.php:88 src/Module/Profile/Photos.php:373 -#: src/Module/Profile/Photos.php:393 +#: mod/photos.php:88 src/Module/Profile/Photos.php:420 +#: src/Module/Profile/Photos.php:440 msgid "Recent Photos" msgstr "" -#: mod/photos.php:90 mod/photos.php:826 src/Module/Profile/Photos.php:375 -#: src/Module/Profile/Photos.php:395 +#: mod/photos.php:90 mod/photos.php:826 src/Module/Profile/Photos.php:422 +#: src/Module/Profile/Photos.php:442 msgid "Upload New Photos" msgstr "" #: mod/photos.php:102 src/Module/BaseSettings.php:60 -#: src/Module/Profile/Photos.php:356 +#: src/Module/Profile/Photos.php:403 msgid "everybody" msgstr "" @@ -439,7 +439,7 @@ msgid "%1$s was tagged in %2$s by %3$s" msgstr "" #: mod/photos.php:537 src/Module/Conversation/Community.php:148 -#: src/Module/Directory.php:34 src/Module/Profile/Photos.php:290 +#: src/Module/Directory.php:34 src/Module/Profile/Photos.php:337 #: src/Module/Search/Index.php:50 msgid "Public access denied." msgstr "" @@ -469,7 +469,7 @@ msgstr "" msgid "Do not show a status post for this upload" msgstr "" -#: mod/photos.php:690 mod/photos.php:1051 src/Content/Conversation.php:392 +#: mod/photos.php:690 mod/photos.php:1051 src/Content/Conversation.php:395 #: src/Module/Calendar/Event/Form.php:239 src/Module/Post/Edit.php:179 msgid "Permissions" msgstr "" @@ -482,7 +482,7 @@ msgstr "" msgid "Delete Album" msgstr "" -#: mod/photos.php:757 mod/photos.php:857 src/Content/Conversation.php:407 +#: mod/photos.php:757 mod/photos.php:857 src/Content/Conversation.php:410 #: src/Module/Contact/Follow.php:158 src/Module/Contact/Revoke.php:92 #: src/Module/Contact/Unfollow.php:112 #: src/Module/Media/Attachment/Browser.php:64 @@ -508,7 +508,7 @@ msgstr "" msgid "Show Oldest First" msgstr "" -#: mod/photos.php:811 src/Module/Profile/Photos.php:343 +#: mod/photos.php:811 src/Module/Profile/Photos.php:390 msgid "View Photo" msgstr "" @@ -590,34 +590,34 @@ msgstr "" #: mod/photos.php:1094 mod/photos.php:1150 mod/photos.php:1230 #: src/Module/Contact.php:599 src/Module/Item/Compose.php:187 -#: src/Object/Post.php:1155 +#: src/Object/Post.php:1156 msgid "This is you" msgstr "" #: mod/photos.php:1096 mod/photos.php:1152 mod/photos.php:1232 -#: src/Module/Moderation/Reports.php:105 src/Object/Post.php:608 -#: src/Object/Post.php:1157 +#: src/Module/Moderation/Reports.php:105 src/Object/Post.php:607 +#: src/Object/Post.php:1158 msgid "Comment" msgstr "" #: mod/photos.php:1098 mod/photos.php:1154 mod/photos.php:1234 -#: src/Content/Conversation.php:404 src/Module/Calendar/Event/Form.php:234 +#: src/Content/Conversation.php:407 src/Module/Calendar/Event/Form.php:234 #: src/Module/Item/Compose.php:200 src/Module/Post/Edit.php:161 -#: src/Object/Post.php:1171 +#: src/Object/Post.php:1172 msgid "Preview" msgstr "" -#: mod/photos.php:1099 src/Content/Conversation.php:358 -#: src/Module/Post/Edit.php:126 src/Object/Post.php:1159 +#: mod/photos.php:1099 src/Content/Conversation.php:361 +#: src/Module/Post/Edit.php:126 src/Object/Post.php:1160 msgid "Loading..." msgstr "" -#: mod/photos.php:1191 src/Content/Conversation.php:1491 -#: src/Object/Post.php:260 +#: mod/photos.php:1191 src/Content/Conversation.php:1494 +#: src/Object/Post.php:259 msgid "Select" msgstr "" -#: mod/photos.php:1192 src/Content/Conversation.php:1492 +#: mod/photos.php:1192 src/Content/Conversation.php:1495 #: src/Module/Moderation/Users/Active.php:92 #: src/Module/Moderation/Users/Blocked.php:92 #: src/Module/Moderation/Users/Index.php:100 @@ -626,19 +626,19 @@ msgstr "" msgid "Delete" msgstr "" -#: mod/photos.php:1253 src/Object/Post.php:432 +#: mod/photos.php:1253 src/Object/Post.php:431 msgid "Like" msgstr "" -#: mod/photos.php:1254 src/Object/Post.php:432 +#: mod/photos.php:1254 src/Object/Post.php:431 msgid "I like this (toggle)" msgstr "" -#: mod/photos.php:1255 src/Object/Post.php:433 +#: mod/photos.php:1255 src/Object/Post.php:432 msgid "Dislike" msgstr "" -#: mod/photos.php:1257 src/Object/Post.php:433 +#: mod/photos.php:1257 src/Object/Post.php:432 msgid "I don't like this (toggle)" msgstr "" @@ -758,7 +758,7 @@ msgid "Method not allowed for this module. Allowed method(s): %s" msgstr "" #: src/App/Router.php:296 src/Module/HTTPException/PageNotFound.php:35 -#: src/Module/Stats.php:56 +#: src/Module/Stats.php:72 src/Module/StatsCaching.php:54 msgid "Page not found." msgstr "" @@ -780,8 +780,8 @@ msgstr "" #: src/BaseModule.php:440 src/Content/Conversation/Factory/Channel.php:32 #: src/Content/Widget.php:257 src/Core/ACL.php:185 src/Module/Contact.php:394 -#: src/Module/Privacy/PermissionTooltip.php:150 -#: src/Module/Privacy/PermissionTooltip.php:172 +#: src/Module/Privacy/PermissionTooltip.php:181 +#: src/Module/Privacy/PermissionTooltip.php:203 #: src/Module/Settings/Channels.php:146 msgid "Followers" msgstr "" @@ -949,7 +949,7 @@ msgstr "" msgid "Enter user nickname: " msgstr "" -#: src/Console/User.php:168 src/Model/User.php:833 +#: src/Console/User.php:168 src/Model/User.php:837 #: src/Module/Api/Twitter/ContactEndpoint.php:62 #: src/Module/Moderation/Users/Active.php:136 #: src/Module/Moderation/Users/Blocked.php:135 @@ -1195,316 +1195,309 @@ msgid_plural " like this" msgstr[0] "" msgstr[1] "" -#: src/Content/Conversation.php:268 -#, php-format -msgid " doesn't like this" -msgid_plural " don't like this" -msgstr[0] "" -msgstr[1] "" - -#: src/Content/Conversation.php:271 +#: src/Content/Conversation.php:274 #, php-format msgid " attends" msgid_plural " attend" msgstr[0] "" msgstr[1] "" -#: src/Content/Conversation.php:274 +#: src/Content/Conversation.php:277 #, php-format msgid " doesn't attend" msgid_plural " don't attend" msgstr[0] "" msgstr[1] "" -#: src/Content/Conversation.php:277 +#: src/Content/Conversation.php:280 #, php-format msgid " attends maybe" msgid_plural " attend maybe" msgstr[0] "" msgstr[1] "" -#: src/Content/Conversation.php:280 +#: src/Content/Conversation.php:283 #, php-format msgid " reshared this" msgid_plural " reshared this" msgstr[0] "" msgstr[1] "" -#: src/Content/Conversation.php:326 +#: src/Content/Conversation.php:329 msgid "Visible to everybody" msgstr "" -#: src/Content/Conversation.php:327 src/Module/Item/Compose.php:199 -#: src/Object/Post.php:1170 +#: src/Content/Conversation.php:330 src/Module/Item/Compose.php:199 +#: src/Object/Post.php:1171 msgid "Please enter a image/video/audio/webpage URL:" msgstr "" -#: src/Content/Conversation.php:328 +#: src/Content/Conversation.php:331 msgid "Tag term:" msgstr "" -#: src/Content/Conversation.php:329 +#: src/Content/Conversation.php:332 msgid "Save to Folder" msgstr "" -#: src/Content/Conversation.php:330 +#: src/Content/Conversation.php:333 msgid "Where are you right now?" msgstr "" -#: src/Content/Conversation.php:331 +#: src/Content/Conversation.php:334 msgid "Delete item(s)?" msgstr "" -#: src/Content/Conversation.php:344 src/Module/Item/Compose.php:174 +#: src/Content/Conversation.php:347 src/Module/Item/Compose.php:174 msgid "Created at" msgstr "" -#: src/Content/Conversation.php:354 +#: src/Content/Conversation.php:357 msgid "New Post" msgstr "" -#: src/Content/Conversation.php:357 +#: src/Content/Conversation.php:360 msgid "Share" msgstr "" -#: src/Content/Conversation.php:360 src/Module/Post/Edit.php:128 +#: src/Content/Conversation.php:363 src/Module/Post/Edit.php:128 msgid "upload photo" msgstr "" -#: src/Content/Conversation.php:361 src/Module/Post/Edit.php:129 +#: src/Content/Conversation.php:364 src/Module/Post/Edit.php:129 msgid "Attach file" msgstr "" -#: src/Content/Conversation.php:362 src/Module/Post/Edit.php:130 +#: src/Content/Conversation.php:365 src/Module/Post/Edit.php:130 msgid "attach file" msgstr "" -#: src/Content/Conversation.php:363 src/Module/Item/Compose.php:189 -#: src/Module/Post/Edit.php:167 src/Object/Post.php:1160 +#: src/Content/Conversation.php:366 src/Module/Item/Compose.php:189 +#: src/Module/Post/Edit.php:167 src/Object/Post.php:1161 msgid "Bold" msgstr "" -#: src/Content/Conversation.php:364 src/Module/Item/Compose.php:190 -#: src/Module/Post/Edit.php:168 src/Object/Post.php:1161 +#: src/Content/Conversation.php:367 src/Module/Item/Compose.php:190 +#: src/Module/Post/Edit.php:168 src/Object/Post.php:1162 msgid "Italic" msgstr "" -#: src/Content/Conversation.php:365 src/Module/Item/Compose.php:191 -#: src/Module/Post/Edit.php:169 src/Object/Post.php:1162 +#: src/Content/Conversation.php:368 src/Module/Item/Compose.php:191 +#: src/Module/Post/Edit.php:169 src/Object/Post.php:1163 msgid "Underline" msgstr "" -#: src/Content/Conversation.php:366 src/Module/Item/Compose.php:192 -#: src/Module/Post/Edit.php:170 src/Object/Post.php:1164 +#: src/Content/Conversation.php:369 src/Module/Item/Compose.php:192 +#: src/Module/Post/Edit.php:170 src/Object/Post.php:1165 msgid "Quote" msgstr "" -#: src/Content/Conversation.php:367 src/Module/Item/Compose.php:193 -#: src/Module/Post/Edit.php:171 src/Object/Post.php:1165 +#: src/Content/Conversation.php:370 src/Module/Item/Compose.php:193 +#: src/Module/Post/Edit.php:171 src/Object/Post.php:1166 msgid "Add emojis" msgstr "" -#: src/Content/Conversation.php:368 src/Module/Item/Compose.php:194 -#: src/Object/Post.php:1163 +#: src/Content/Conversation.php:371 src/Module/Item/Compose.php:194 +#: src/Object/Post.php:1164 msgid "Content Warning" msgstr "" -#: src/Content/Conversation.php:369 src/Module/Item/Compose.php:195 -#: src/Module/Post/Edit.php:172 src/Object/Post.php:1166 +#: src/Content/Conversation.php:372 src/Module/Item/Compose.php:195 +#: src/Module/Post/Edit.php:172 src/Object/Post.php:1167 msgid "Code" msgstr "" -#: src/Content/Conversation.php:370 src/Module/Item/Compose.php:196 -#: src/Object/Post.php:1167 +#: src/Content/Conversation.php:373 src/Module/Item/Compose.php:196 +#: src/Object/Post.php:1168 msgid "Image" msgstr "" -#: src/Content/Conversation.php:371 src/Module/Item/Compose.php:197 -#: src/Module/Post/Edit.php:173 src/Object/Post.php:1168 +#: src/Content/Conversation.php:374 src/Module/Item/Compose.php:197 +#: src/Module/Post/Edit.php:173 src/Object/Post.php:1169 msgid "Link" msgstr "" -#: src/Content/Conversation.php:372 src/Module/Item/Compose.php:198 -#: src/Module/Post/Edit.php:174 src/Object/Post.php:1169 +#: src/Content/Conversation.php:375 src/Module/Item/Compose.php:198 +#: src/Module/Post/Edit.php:174 src/Object/Post.php:1170 msgid "Link or Media" msgstr "" -#: src/Content/Conversation.php:373 +#: src/Content/Conversation.php:376 msgid "Video" msgstr "" -#: src/Content/Conversation.php:374 src/Module/Item/Compose.php:201 +#: src/Content/Conversation.php:377 src/Module/Item/Compose.php:201 #: src/Module/Post/Edit.php:137 msgid "Set your location" msgstr "" -#: src/Content/Conversation.php:375 src/Module/Post/Edit.php:138 +#: src/Content/Conversation.php:378 src/Module/Post/Edit.php:138 msgid "set location" msgstr "" -#: src/Content/Conversation.php:376 src/Module/Post/Edit.php:139 +#: src/Content/Conversation.php:379 src/Module/Post/Edit.php:139 msgid "Clear browser location" msgstr "" -#: src/Content/Conversation.php:377 src/Module/Post/Edit.php:140 +#: src/Content/Conversation.php:380 src/Module/Post/Edit.php:140 msgid "clear location" msgstr "" -#: src/Content/Conversation.php:379 src/Module/Item/Compose.php:206 +#: src/Content/Conversation.php:382 src/Module/Item/Compose.php:206 #: src/Module/Post/Edit.php:153 msgid "Set title" msgstr "" -#: src/Content/Conversation.php:381 src/Module/Item/Compose.php:207 +#: src/Content/Conversation.php:384 src/Module/Item/Compose.php:207 #: src/Module/Post/Edit.php:155 msgid "Categories (comma-separated list)" msgstr "" -#: src/Content/Conversation.php:386 src/Module/Item/Compose.php:227 +#: src/Content/Conversation.php:389 src/Module/Item/Compose.php:227 msgid "Scheduled at" msgstr "" -#: src/Content/Conversation.php:391 src/Module/Post/Edit.php:142 +#: src/Content/Conversation.php:394 src/Module/Post/Edit.php:142 msgid "Permission settings" msgstr "" -#: src/Content/Conversation.php:400 src/Module/Post/Edit.php:151 +#: src/Content/Conversation.php:403 src/Module/Post/Edit.php:151 msgid "Public post" msgstr "" -#: src/Content/Conversation.php:414 src/Content/Widget/VCard.php:120 -#: src/Model/Profile.php:458 src/Module/Admin/Logs/View.php:80 +#: src/Content/Conversation.php:417 src/Content/Widget/VCard.php:120 +#: src/Model/Profile.php:463 src/Module/Admin/Logs/View.php:80 #: src/Module/Post/Edit.php:177 msgid "Message" msgstr "" -#: src/Content/Conversation.php:415 src/Module/Post/Edit.php:178 +#: src/Content/Conversation.php:418 src/Module/Post/Edit.php:178 #: src/Module/Settings/TwoFactor/Trusted.php:129 msgid "Browser" msgstr "" -#: src/Content/Conversation.php:417 src/Module/Post/Edit.php:181 +#: src/Content/Conversation.php:420 src/Module/Post/Edit.php:181 msgid "Open Compose page" msgstr "" -#: src/Content/Conversation.php:587 +#: src/Content/Conversation.php:590 msgid "remove" msgstr "" -#: src/Content/Conversation.php:591 +#: src/Content/Conversation.php:594 msgid "Delete Selected Items" msgstr "" -#: src/Content/Conversation.php:715 src/Content/Conversation.php:718 -#: src/Content/Conversation.php:721 src/Content/Conversation.php:724 -#: src/Content/Conversation.php:727 +#: src/Content/Conversation.php:718 src/Content/Conversation.php:721 +#: src/Content/Conversation.php:724 src/Content/Conversation.php:727 +#: src/Content/Conversation.php:730 #, php-format msgid "You had been addressed (%s)." msgstr "" -#: src/Content/Conversation.php:730 +#: src/Content/Conversation.php:733 #, php-format msgid "You are following %s." msgstr "" -#: src/Content/Conversation.php:735 +#: src/Content/Conversation.php:738 #, php-format msgid "You subscribed to %s." msgstr "" -#: src/Content/Conversation.php:737 +#: src/Content/Conversation.php:740 msgid "You subscribed to one or more tags in this post." msgstr "" -#: src/Content/Conversation.php:757 +#: src/Content/Conversation.php:760 #, php-format msgid "%s reshared this." msgstr "" -#: src/Content/Conversation.php:759 +#: src/Content/Conversation.php:762 msgid "Reshared" msgstr "" -#: src/Content/Conversation.php:759 -#, php-format -msgid "Reshared by %s <%s>" -msgstr "" - #: src/Content/Conversation.php:762 #, php-format -msgid "%s is participating in this thread." +msgid "Reshared by %s <%s>" msgstr "" #: src/Content/Conversation.php:765 -msgid "Stored for general reasons" +#, php-format +msgid "%s is participating in this thread." msgstr "" #: src/Content/Conversation.php:768 +msgid "Stored for general reasons" +msgstr "" + +#: src/Content/Conversation.php:771 msgid "Global post" msgstr "" -#: src/Content/Conversation.php:771 +#: src/Content/Conversation.php:774 msgid "Sent via an relay server" msgstr "" -#: src/Content/Conversation.php:771 +#: src/Content/Conversation.php:774 #, php-format msgid "Sent via the relay server %s <%s>" msgstr "" -#: src/Content/Conversation.php:774 +#: src/Content/Conversation.php:777 msgid "Fetched" msgstr "" -#: src/Content/Conversation.php:774 +#: src/Content/Conversation.php:777 #, php-format msgid "Fetched because of %s <%s>" msgstr "" -#: src/Content/Conversation.php:777 +#: src/Content/Conversation.php:780 msgid "Stored because of a child post to complete this thread." msgstr "" -#: src/Content/Conversation.php:780 +#: src/Content/Conversation.php:783 msgid "Local delivery" msgstr "" -#: src/Content/Conversation.php:783 +#: src/Content/Conversation.php:786 msgid "Stored because of your activity (like, comment, star, ...)" msgstr "" -#: src/Content/Conversation.php:786 +#: src/Content/Conversation.php:789 msgid "Distributed" msgstr "" -#: src/Content/Conversation.php:789 +#: src/Content/Conversation.php:792 msgid "Pushed to us" msgstr "" -#: src/Content/Conversation.php:1511 src/Object/Post.php:247 +#: src/Content/Conversation.php:1514 src/Object/Post.php:246 msgid "Pinned item" msgstr "" -#: src/Content/Conversation.php:1528 src/Object/Post.php:549 -#: src/Object/Post.php:550 +#: src/Content/Conversation.php:1531 src/Object/Post.php:548 +#: src/Object/Post.php:549 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: src/Content/Conversation.php:1542 src/Object/Post.php:537 +#: src/Content/Conversation.php:1545 src/Object/Post.php:536 msgid "Categories:" msgstr "" -#: src/Content/Conversation.php:1543 src/Object/Post.php:538 +#: src/Content/Conversation.php:1546 src/Object/Post.php:537 msgid "Filed under:" msgstr "" -#: src/Content/Conversation.php:1551 src/Object/Post.php:565 +#: src/Content/Conversation.php:1554 src/Object/Post.php:564 #, php-format msgid "%s from %s" msgstr "" -#: src/Content/Conversation.php:1567 +#: src/Content/Conversation.php:1570 msgid "View in context" msgstr "" @@ -1558,7 +1551,7 @@ msgid "Posts from accounts that you follow but who don't post very often" msgstr "" #: src/Content/Conversation/Factory/Channel.php:35 -#: src/Module/Settings/Channels.php:185 src/Module/Settings/Channels.php:206 +#: src/Module/Settings/Channels.php:185 src/Module/Settings/Channels.php:211 msgid "Images" msgstr "" @@ -1567,7 +1560,7 @@ msgid "Posts with images" msgstr "" #: src/Content/Conversation/Factory/Channel.php:36 -#: src/Module/Settings/Channels.php:187 src/Module/Settings/Channels.php:208 +#: src/Module/Settings/Channels.php:187 src/Module/Settings/Channels.php:213 msgid "Audio" msgstr "" @@ -1576,7 +1569,7 @@ msgid "Posts with audio" msgstr "" #: src/Content/Conversation/Factory/Channel.php:37 -#: src/Module/Settings/Channels.php:186 src/Module/Settings/Channels.php:207 +#: src/Module/Settings/Channels.php:186 src/Module/Settings/Channels.php:212 msgid "Videos" msgstr "" @@ -1629,7 +1622,7 @@ msgid "Sort by post creation date" msgstr "" #: src/Content/Conversation/Factory/Network.php:27 -#: src/Module/Settings/Profile/Index.php:251 +#: src/Module/Settings/Profile/Index.php:275 msgid "Personal" msgstr "" @@ -1637,7 +1630,7 @@ msgstr "" msgid "Posts that mention or involve you" msgstr "" -#: src/Content/Conversation/Factory/Network.php:28 src/Object/Post.php:403 +#: src/Content/Conversation/Factory/Network.php:28 src/Object/Post.php:402 msgid "Starred" msgstr "" @@ -1713,7 +1706,7 @@ msgstr "" #: src/Content/Feature.php:127 src/Content/GroupManager.php:128 #: src/Content/Nav.php:274 src/Content/Text/HTML.php:876 -#: src/Content/Widget.php:558 src/Model/User.php:1393 +#: src/Content/Widget.php:558 src/Model/User.php:1397 msgid "Groups" msgstr "" @@ -1748,7 +1741,7 @@ msgstr "" #: src/Content/Feature.php:131 src/Content/Widget.php:613 #: src/Module/Admin/Site.php:463 src/Module/BaseSettings.php:113 -#: src/Module/Settings/Channels.php:211 src/Module/Settings/Display.php:313 +#: src/Module/Settings/Channels.php:216 src/Module/Settings/Display.php:313 msgid "Channels" msgstr "" @@ -1837,7 +1830,7 @@ msgstr "" msgid "Create new group" msgstr "" -#: src/Content/Item.php:324 src/Model/Item.php:2984 +#: src/Content/Item.php:324 src/Model/Item.php:3012 msgid "event" msgstr "" @@ -1845,7 +1838,7 @@ msgstr "" msgid "status" msgstr "" -#: src/Content/Item.php:333 src/Model/Item.php:2986 +#: src/Content/Item.php:333 src/Model/Item.php:3014 #: src/Module/Post/Tag/Add.php:112 msgid "photo" msgstr "" @@ -1865,7 +1858,7 @@ msgstr "" #: src/Content/Item.php:423 src/Content/Item.php:446 src/Model/Contact.php:1228 #: src/Model/Contact.php:1284 src/Model/Contact.php:1294 -#: src/Module/Directory.php:143 src/Module/Settings/Profile/Index.php:250 +#: src/Module/Directory.php:143 src/Module/Settings/Profile/Index.php:274 msgid "View Profile" msgstr "" @@ -1874,7 +1867,7 @@ msgid "View Photos" msgstr "" #: src/Content/Item.php:425 src/Model/Contact.php:1262 -#: src/Model/Profile.php:443 +#: src/Model/Profile.php:448 msgid "Network Posts" msgstr "" @@ -1888,7 +1881,7 @@ msgid "Send PM" msgstr "" #: src/Content/Item.php:428 src/Module/Contact.php:448 -#: src/Module/Contact/Profile.php:524 +#: src/Module/Contact/Profile.php:560 #: src/Module/Moderation/Blocklist/Contact.php:104 #: src/Module/Moderation/Users/Active.php:93 #: src/Module/Moderation/Users/Index.php:101 @@ -1896,7 +1889,7 @@ msgid "Block" msgstr "" #: src/Content/Item.php:429 src/Module/Contact.php:449 -#: src/Module/Contact/Profile.php:532 +#: src/Module/Contact/Profile.php:568 #: src/Module/Notifications/Introductions.php:126 #: src/Module/Notifications/Introductions.php:199 #: src/Module/Notifications/Notification.php:75 @@ -1904,27 +1897,27 @@ msgid "Ignore" msgstr "" #: src/Content/Item.php:430 src/Module/Contact.php:450 -#: src/Module/Contact/Profile.php:540 +#: src/Module/Contact/Profile.php:576 msgid "Collapse" msgstr "" -#: src/Content/Item.php:431 src/Object/Post.php:288 +#: src/Content/Item.php:431 src/Object/Post.php:287 #, php-format msgid "Ignore %s server" msgstr "" #: src/Content/Item.php:435 src/Module/Settings/Channels.php:188 -#: src/Module/Settings/Channels.php:209 src/Object/Post.php:509 +#: src/Module/Settings/Channels.php:214 src/Object/Post.php:508 msgid "Languages" msgstr "" -#: src/Content/Item.php:438 src/Object/Post.php:592 +#: src/Content/Item.php:438 src/Object/Post.php:591 msgid "Search Text" msgstr "" #: src/Content/Item.php:443 src/Content/Widget.php:65 #: src/Model/Contact.php:1287 src/Model/Contact.php:1299 -#: src/Module/Contact/Follow.php:152 view/theme/vier/theme.php:183 +#: src/Module/Contact/Follow.php:152 view/theme/vier/theme.php:182 msgid "Connect/Follow" msgstr "" @@ -1980,7 +1973,7 @@ msgstr "" #: src/Content/Nav.php:226 src/Module/BaseProfile.php:34 #: src/Module/BaseSettings.php:86 src/Module/Contact.php:484 -#: src/Module/Contact/Profile.php:431 src/Module/Profile/Profile.php:259 +#: src/Module/Contact/Profile.php:462 src/Module/Profile/Profile.php:277 #: src/Module/Welcome.php:43 view/theme/frio/theme.php:219 msgid "Profile" msgstr "" @@ -2032,7 +2025,7 @@ msgstr "" msgid "Home Page" msgstr "" -#: src/Content/Nav.php:251 src/Module/Register.php:161 +#: src/Content/Nav.php:251 src/Module/Register.php:169 #: src/Module/Security/Login.php:113 msgid "Register" msgstr "" @@ -2045,7 +2038,7 @@ msgstr "" #: src/Module/Settings/TwoFactor/AppSpecific.php:118 #: src/Module/Settings/TwoFactor/Index.php:125 #: src/Module/Settings/TwoFactor/Recovery.php:96 -#: src/Module/Settings/TwoFactor/Verify.php:135 view/theme/vier/theme.php:228 +#: src/Module/Settings/TwoFactor/Verify.php:135 view/theme/vier/theme.php:227 msgid "Help" msgstr "" @@ -2112,7 +2105,7 @@ msgid "Information about this friendica instance" msgstr "" #: src/Content/Nav.php:297 src/Module/Admin/Tos.php:64 -#: src/Module/BaseAdmin.php:80 src/Module/Register.php:169 +#: src/Module/BaseAdmin.php:80 src/Module/Register.php:177 #: src/Module/Tos.php:87 msgid "Terms of Service" msgstr "" @@ -2178,7 +2171,7 @@ msgstr "" msgid "Manage other pages" msgstr "" -#: src/Content/Nav.php:323 src/Module/Admin/Addons/Details.php:101 +#: src/Content/Nav.php:323 src/Module/Admin/Addons/Details.php:131 #: src/Module/Admin/Themes/Details.php:85 src/Module/BaseSettings.php:177 #: src/Module/Welcome.php:38 view/theme/frio/theme.php:231 msgid "Settings" @@ -2247,8 +2240,8 @@ msgstr "" msgid "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:926 src/Model/Item.php:3791 -#: src/Model/Item.php:3797 src/Model/Item.php:3798 +#: src/Content/Text/BBCode.php:926 src/Model/Item.php:3850 +#: src/Model/Item.php:3856 src/Model/Item.php:3857 msgid "Link to source" msgstr "" @@ -2281,7 +2274,7 @@ msgid "The end" msgstr "" #: src/Content/Text/HTML.php:855 src/Content/Widget/VCard.php:116 -#: src/Model/Profile.php:452 src/Module/Contact/Profile.php:484 +#: src/Model/Profile.php:457 src/Module/Contact/Profile.php:520 msgid "Follow" msgstr "" @@ -2308,46 +2301,46 @@ msgid_plural "%d invitations available" msgstr[0] "" msgstr[1] "" -#: src/Content/Widget.php:63 view/theme/vier/theme.php:181 +#: src/Content/Widget.php:63 view/theme/vier/theme.php:180 msgid "Find People" msgstr "" -#: src/Content/Widget.php:64 view/theme/vier/theme.php:182 +#: src/Content/Widget.php:64 view/theme/vier/theme.php:181 msgid "Enter name or interest" msgstr "" -#: src/Content/Widget.php:66 view/theme/vier/theme.php:184 +#: src/Content/Widget.php:66 view/theme/vier/theme.php:183 msgid "Examples: Robert Morgenstein, Fishing" msgstr "" #: src/Content/Widget.php:67 src/Module/Contact.php:440 -#: src/Module/Directory.php:82 view/theme/vier/theme.php:185 +#: src/Module/Directory.php:82 view/theme/vier/theme.php:184 msgid "Find" msgstr "" #: src/Content/Widget.php:68 src/Module/Contact/Suggestions.php:59 -#: view/theme/vier/theme.php:186 +#: view/theme/vier/theme.php:185 msgid "Friend Suggestions" msgstr "" -#: src/Content/Widget.php:69 view/theme/vier/theme.php:187 +#: src/Content/Widget.php:69 view/theme/vier/theme.php:186 msgid "Similar Interests" msgstr "" -#: src/Content/Widget.php:70 view/theme/vier/theme.php:188 +#: src/Content/Widget.php:70 view/theme/vier/theme.php:187 msgid "Random Profile" msgstr "" -#: src/Content/Widget.php:71 view/theme/vier/theme.php:189 +#: src/Content/Widget.php:71 view/theme/vier/theme.php:188 msgid "Invite Friends" msgstr "" #: src/Content/Widget.php:72 src/Module/Directory.php:74 -#: view/theme/vier/theme.php:190 +#: view/theme/vier/theme.php:189 msgid "Global Directory" msgstr "" -#: src/Content/Widget.php:74 view/theme/vier/theme.php:192 +#: src/Content/Widget.php:74 view/theme/vier/theme.php:191 msgid "Local Directory" msgstr "" @@ -2399,7 +2392,7 @@ msgstr "" msgid "Organisations" msgstr "" -#: src/Content/Widget.php:557 src/Model/Contact.php:1797 +#: src/Content/Widget.php:557 src/Model/Contact.php:1805 msgid "News" msgstr "" @@ -2407,7 +2400,7 @@ msgstr "" msgid "Relays" msgstr "" -#: src/Content/Widget.php:566 src/Module/Moderation/BaseUsers.php:58 +#: src/Content/Widget.php:566 src/Module/Moderation/BaseUsers.php:76 msgid "All" msgstr "" @@ -2462,55 +2455,55 @@ msgid "Show Less" msgstr "" #: src/Content/Widget/VCard.php:94 src/Model/Contact.php:1256 -#: src/Model/Profile.php:437 +#: src/Model/Profile.php:442 msgid "Post to group" msgstr "" #: src/Content/Widget/VCard.php:99 src/Model/Contact.php:1260 -#: src/Model/Profile.php:441 src/Module/Moderation/Item/Source.php:80 +#: src/Model/Profile.php:446 src/Module/Moderation/Item/Source.php:80 msgid "Mention" msgstr "" -#: src/Content/Widget/VCard.php:109 src/Model/Profile.php:356 -#: src/Module/Contact/Profile.php:420 src/Module/Profile/Profile.php:190 +#: src/Content/Widget/VCard.php:109 src/Model/Profile.php:361 +#: src/Module/Contact/Profile.php:451 src/Module/Profile/Profile.php:208 msgid "XMPP:" msgstr "" -#: src/Content/Widget/VCard.php:110 src/Model/Profile.php:357 -#: src/Module/Contact/Profile.php:422 src/Module/Profile/Profile.php:194 +#: src/Content/Widget/VCard.php:110 src/Model/Profile.php:362 +#: src/Module/Contact/Profile.php:453 src/Module/Profile/Profile.php:212 msgid "Matrix:" msgstr "" #: src/Content/Widget/VCard.php:111 src/Model/Event.php:68 -#: src/Model/Event.php:95 src/Model/Event.php:457 src/Model/Event.php:945 -#: src/Model/Profile.php:351 src/Module/Contact/Profile.php:418 +#: src/Model/Event.php:95 src/Model/Event.php:462 src/Model/Event.php:950 +#: src/Model/Profile.php:356 src/Module/Contact/Profile.php:449 #: src/Module/Directory.php:133 src/Module/Notifications/Introductions.php:180 -#: src/Module/Profile/Profile.php:212 +#: src/Module/Profile/Profile.php:230 msgid "Location:" msgstr "" -#: src/Content/Widget/VCard.php:114 src/Model/Profile.php:465 +#: src/Content/Widget/VCard.php:114 src/Model/Profile.php:470 #: src/Module/Notifications/Introductions.php:194 msgid "Network:" msgstr "" #: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1288 -#: src/Model/Contact.php:1300 src/Model/Profile.php:454 -#: src/Module/Contact/Profile.php:476 +#: src/Model/Contact.php:1300 src/Model/Profile.php:459 +#: src/Module/Contact/Profile.php:512 msgid "Unfollow" msgstr "" #: src/Content/Widget/VCard.php:124 src/Model/Contact.php:1258 -#: src/Model/Profile.php:439 +#: src/Model/Profile.php:444 msgid "View group" msgstr "" -#: src/Core/ACL.php:154 src/Module/Profile/Profile.php:260 +#: src/Core/ACL.php:154 src/Module/Profile/Profile.php:278 msgid "Yourself" msgstr "" -#: src/Core/ACL.php:192 src/Module/Privacy/PermissionTooltip.php:156 -#: src/Module/Privacy/PermissionTooltip.php:178 +#: src/Core/ACL.php:192 src/Module/Privacy/PermissionTooltip.php:187 +#: src/Module/Privacy/PermissionTooltip.php:209 msgid "Mutuals" msgstr "" @@ -2518,8 +2511,8 @@ msgstr "" msgid "Post to Email" msgstr "" -#: src/Core/ACL.php:316 src/Module/Privacy/PermissionTooltip.php:103 -#: src/Module/Privacy/PermissionTooltip.php:217 +#: src/Core/ACL.php:316 src/Module/Privacy/PermissionTooltip.php:130 +#: src/Module/Privacy/PermissionTooltip.php:248 msgid "Public" msgstr "" @@ -2527,7 +2520,7 @@ msgstr "" msgid "This content will be shown to all your followers and can be seen in the community pages and by anyone with its link." msgstr "" -#: src/Core/ACL.php:318 src/Module/Privacy/PermissionTooltip.php:105 +#: src/Core/ACL.php:318 src/Module/Privacy/PermissionTooltip.php:136 msgid "Limited/Private" msgstr "" @@ -2844,7 +2837,7 @@ msgstr "" msgid "Could not connect to database." msgstr "" -#: src/Core/L10n.php:453 src/Model/Item.php:2030 +#: src/Core/L10n.php:453 src/Model/Item.php:2051 msgid "Undetermined" msgstr "" @@ -2853,142 +2846,142 @@ msgstr "" msgid "%s (%s)" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:416 +#: src/Core/L10n.php:509 src/Model/Event.php:421 #: src/Module/Settings/Display.php:282 msgid "Monday" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:417 +#: src/Core/L10n.php:509 src/Model/Event.php:422 #: src/Module/Settings/Display.php:283 msgid "Tuesday" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:418 +#: src/Core/L10n.php:509 src/Model/Event.php:423 #: src/Module/Settings/Display.php:284 msgid "Wednesday" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:419 +#: src/Core/L10n.php:509 src/Model/Event.php:424 #: src/Module/Settings/Display.php:285 msgid "Thursday" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:420 +#: src/Core/L10n.php:509 src/Model/Event.php:425 #: src/Module/Settings/Display.php:286 msgid "Friday" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:421 +#: src/Core/L10n.php:509 src/Model/Event.php:426 #: src/Module/Settings/Display.php:287 msgid "Saturday" msgstr "" -#: src/Core/L10n.php:509 src/Model/Event.php:415 +#: src/Core/L10n.php:509 src/Model/Event.php:420 #: src/Module/Settings/Display.php:281 msgid "Sunday" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:436 +#: src/Core/L10n.php:515 src/Model/Event.php:441 msgid "January" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:437 +#: src/Core/L10n.php:515 src/Model/Event.php:442 msgid "February" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:438 +#: src/Core/L10n.php:515 src/Model/Event.php:443 msgid "March" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:439 +#: src/Core/L10n.php:515 src/Model/Event.php:444 msgid "April" msgstr "" -#: src/Core/L10n.php:515 src/Core/L10n.php:538 src/Model/Event.php:427 +#: src/Core/L10n.php:515 src/Core/L10n.php:538 src/Model/Event.php:432 msgid "May" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:440 +#: src/Core/L10n.php:515 src/Model/Event.php:445 msgid "June" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:441 +#: src/Core/L10n.php:515 src/Model/Event.php:446 msgid "July" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:442 +#: src/Core/L10n.php:515 src/Model/Event.php:447 msgid "August" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:443 +#: src/Core/L10n.php:515 src/Model/Event.php:448 msgid "September" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:444 +#: src/Core/L10n.php:515 src/Model/Event.php:449 msgid "October" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:445 +#: src/Core/L10n.php:515 src/Model/Event.php:450 msgid "November" msgstr "" -#: src/Core/L10n.php:515 src/Model/Event.php:446 +#: src/Core/L10n.php:515 src/Model/Event.php:451 msgid "December" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:408 +#: src/Core/L10n.php:532 src/Model/Event.php:413 msgid "Mon" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:409 +#: src/Core/L10n.php:532 src/Model/Event.php:414 msgid "Tue" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:410 +#: src/Core/L10n.php:532 src/Model/Event.php:415 msgid "Wed" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:411 +#: src/Core/L10n.php:532 src/Model/Event.php:416 msgid "Thu" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:412 +#: src/Core/L10n.php:532 src/Model/Event.php:417 msgid "Fri" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:413 +#: src/Core/L10n.php:532 src/Model/Event.php:418 msgid "Sat" msgstr "" -#: src/Core/L10n.php:532 src/Model/Event.php:407 +#: src/Core/L10n.php:532 src/Model/Event.php:412 msgid "Sun" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:423 +#: src/Core/L10n.php:538 src/Model/Event.php:428 msgid "Jan" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:424 +#: src/Core/L10n.php:538 src/Model/Event.php:429 msgid "Feb" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:425 +#: src/Core/L10n.php:538 src/Model/Event.php:430 msgid "Mar" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:426 +#: src/Core/L10n.php:538 src/Model/Event.php:431 msgid "Apr" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:428 +#: src/Core/L10n.php:538 src/Model/Event.php:433 msgid "Jun" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:429 +#: src/Core/L10n.php:538 src/Model/Event.php:434 msgid "Jul" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:430 +#: src/Core/L10n.php:538 src/Model/Event.php:435 msgid "Aug" msgstr "" @@ -2996,15 +2989,15 @@ msgstr "" msgid "Sep" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:432 +#: src/Core/L10n.php:538 src/Model/Event.php:437 msgid "Oct" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:433 +#: src/Core/L10n.php:538 src/Model/Event.php:438 msgid "Nov" msgstr "" -#: src/Core/L10n.php:538 src/Model/Event.php:434 +#: src/Core/L10n.php:538 src/Model/Event.php:439 msgid "Dec" msgstr "" @@ -3210,78 +3203,78 @@ msgstr "" msgid "Approve" msgstr "" -#: src/Model/Contact.php:1641 src/Model/Contact.php:1713 -#: src/Module/Contact/Profile.php:360 +#: src/Model/Contact.php:1649 src/Model/Contact.php:1721 +#: src/Module/Contact/Profile.php:391 #, php-format msgid "%s has blocked you" msgstr "" -#: src/Model/Contact.php:1793 +#: src/Model/Contact.php:1801 msgid "Organisation" msgstr "" -#: src/Model/Contact.php:1801 +#: src/Model/Contact.php:1809 msgid "Group" msgstr "" -#: src/Model/Contact.php:1805 src/Module/Moderation/BaseUsers.php:122 +#: src/Model/Contact.php:1813 src/Module/Moderation/BaseUsers.php:150 msgid "Relay" msgstr "" -#: src/Model/Contact.php:3131 +#: src/Model/Contact.php:3143 msgid "Disallowed profile URL." msgstr "" -#: src/Model/Contact.php:3136 src/Module/Friendica.php:90 +#: src/Model/Contact.php:3148 src/Module/Friendica.php:106 msgid "Blocked domain" msgstr "" -#: src/Model/Contact.php:3141 +#: src/Model/Contact.php:3153 msgid "Connect URL missing." msgstr "" -#: src/Model/Contact.php:3150 +#: src/Model/Contact.php:3166 msgid "The contact could not be added. Please check the relevant network credentials in your Settings -> Social Networks page." msgstr "" -#: src/Model/Contact.php:3168 +#: src/Model/Contact.php:3184 #, php-format msgid "Expected network %s does not match actual network %s" msgstr "" -#: src/Model/Contact.php:3185 +#: src/Model/Contact.php:3201 msgid "This seems to be a relay account. They can't be followed by users." msgstr "" -#: src/Model/Contact.php:3192 +#: src/Model/Contact.php:3208 msgid "The profile address specified does not provide adequate information." msgstr "" -#: src/Model/Contact.php:3194 +#: src/Model/Contact.php:3210 msgid "No compatible communication protocols or feeds were discovered." msgstr "" -#: src/Model/Contact.php:3197 +#: src/Model/Contact.php:3213 msgid "An author or name was not found." msgstr "" -#: src/Model/Contact.php:3200 +#: src/Model/Contact.php:3216 msgid "No browser URL could be matched to this address." msgstr "" -#: src/Model/Contact.php:3203 +#: src/Model/Contact.php:3219 msgid "Unable to match @-style Identity Address with a known protocol or email contact." msgstr "" -#: src/Model/Contact.php:3204 +#: src/Model/Contact.php:3220 msgid "Use mailto: in front of address to force email check." msgstr "" -#: src/Model/Contact.php:3210 +#: src/Model/Contact.php:3226 msgid "Limited profile. This person will be unable to receive direct/personal notifications from you." msgstr "" -#: src/Model/Contact.php:3269 +#: src/Model/Contact.php:3285 msgid "Unable to retrieve contact information." msgstr "" @@ -3289,189 +3282,189 @@ msgstr "" msgid "l F d, Y \\@ g:i A \\G\\M\\TP (e)" msgstr "" -#: src/Model/Event.php:61 src/Model/Event.php:78 src/Model/Event.php:455 -#: src/Model/Event.php:927 +#: src/Model/Event.php:61 src/Model/Event.php:78 src/Model/Event.php:460 +#: src/Model/Event.php:932 msgid "Starts:" msgstr "" -#: src/Model/Event.php:64 src/Model/Event.php:84 src/Model/Event.php:456 -#: src/Model/Event.php:931 +#: src/Model/Event.php:64 src/Model/Event.php:84 src/Model/Event.php:461 +#: src/Model/Event.php:936 msgid "Finishes:" msgstr "" -#: src/Model/Event.php:405 +#: src/Model/Event.php:410 msgid "all-day" msgstr "" -#: src/Model/Event.php:431 +#: src/Model/Event.php:436 msgid "Sept" msgstr "" -#: src/Model/Event.php:448 src/Module/Calendar/Show.php:116 +#: src/Model/Event.php:453 src/Module/Calendar/Show.php:116 #: src/Util/Temporal.php:333 msgid "today" msgstr "" -#: src/Model/Event.php:449 src/Module/Calendar/Show.php:117 +#: src/Model/Event.php:454 src/Module/Calendar/Show.php:117 #: src/Module/Settings/Display.php:292 src/Util/Temporal.php:343 msgid "month" msgstr "" -#: src/Model/Event.php:450 src/Module/Calendar/Show.php:118 +#: src/Model/Event.php:455 src/Module/Calendar/Show.php:118 #: src/Module/Settings/Display.php:293 src/Util/Temporal.php:344 msgid "week" msgstr "" -#: src/Model/Event.php:451 src/Module/Calendar/Show.php:119 +#: src/Model/Event.php:456 src/Module/Calendar/Show.php:119 #: src/Module/Settings/Display.php:294 src/Util/Temporal.php:345 msgid "day" msgstr "" -#: src/Model/Event.php:453 +#: src/Model/Event.php:458 msgid "No events to display" msgstr "" -#: src/Model/Event.php:502 src/Module/Feed.php:56 +#: src/Model/Event.php:507 src/Module/Feed.php:56 #: src/Module/Update/Profile.php:42 msgid "Access to this profile has been restricted." msgstr "" -#: src/Model/Event.php:543 src/Module/Calendar/Event/Show.php:52 +#: src/Model/Event.php:548 src/Module/Calendar/Event/Show.php:52 msgid "Event not found." msgstr "" -#: src/Model/Event.php:622 +#: src/Model/Event.php:627 msgid "l, F j" msgstr "" -#: src/Model/Event.php:649 +#: src/Model/Event.php:654 msgid "Edit event" msgstr "" -#: src/Model/Event.php:650 +#: src/Model/Event.php:655 msgid "Duplicate event" msgstr "" -#: src/Model/Event.php:651 +#: src/Model/Event.php:656 msgid "Delete event" msgstr "" -#: src/Model/Event.php:881 src/Module/Debug/Localtime.php:24 +#: src/Model/Event.php:886 src/Module/Debug/Localtime.php:24 msgid "l F d, Y \\@ g:i A" msgstr "" -#: src/Model/Event.php:882 +#: src/Model/Event.php:887 msgid "D g:i A" msgstr "" -#: src/Model/Event.php:883 +#: src/Model/Event.php:888 msgid "g:i A" msgstr "" -#: src/Model/Event.php:946 src/Model/Event.php:948 +#: src/Model/Event.php:951 src/Model/Event.php:953 msgid "Show map" msgstr "" -#: src/Model/Event.php:947 +#: src/Model/Event.php:952 msgid "Hide map" msgstr "" -#: src/Model/Event.php:1040 +#: src/Model/Event.php:1045 #, php-format msgid "%s's birthday" msgstr "" -#: src/Model/Event.php:1041 +#: src/Model/Event.php:1046 #, php-format msgid "Happy Birthday %s" msgstr "" -#: src/Model/Item.php:2037 +#: src/Model/Item.php:2058 #, php-format msgid "%s (%s - %s): %s" msgstr "" -#: src/Model/Item.php:2039 +#: src/Model/Item.php:2060 #, php-format msgid "%s (%s): %s" msgstr "" -#: src/Model/Item.php:2042 +#: src/Model/Item.php:2063 #, php-format msgid "" "Detected languages in this post:\n" "%s" msgstr "" -#: src/Model/Item.php:2988 +#: src/Model/Item.php:3016 msgid "activity" msgstr "" -#: src/Model/Item.php:2990 +#: src/Model/Item.php:3018 msgid "comment" msgstr "" -#: src/Model/Item.php:2993 src/Module/Post/Tag/Add.php:112 +#: src/Model/Item.php:3021 src/Module/Post/Tag/Add.php:112 msgid "post" msgstr "" -#: src/Model/Item.php:3166 +#: src/Model/Item.php:3210 #, php-format msgid "%s is blocked" msgstr "" -#: src/Model/Item.php:3168 +#: src/Model/Item.php:3212 #, php-format msgid "%s is ignored" msgstr "" -#: src/Model/Item.php:3170 +#: src/Model/Item.php:3214 #, php-format msgid "Content from %s is collapsed" msgstr "" -#: src/Model/Item.php:3174 +#: src/Model/Item.php:3218 msgid "Sensitive content" msgstr "" -#: src/Model/Item.php:3691 +#: src/Model/Item.php:3750 msgid "bytes" msgstr "" -#: src/Model/Item.php:3722 +#: src/Model/Item.php:3781 #, 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:3724 +#: src/Model/Item.php:3783 #, php-format msgid "%2$s (%1$d vote)" msgid_plural "%2$s (%1$d votes)" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3729 +#: src/Model/Item.php:3788 #, php-format msgid "%d voter. Poll end: %s" msgid_plural "%d voters. Poll end: %s" msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3731 +#: src/Model/Item.php:3790 #, php-format msgid "%d voter." msgid_plural "%d voters." msgstr[0] "" msgstr[1] "" -#: src/Model/Item.php:3733 +#: src/Model/Item.php:3792 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3774 src/Model/Item.php:3775 +#: src/Model/Item.php:3833 src/Model/Item.php:3834 msgid "View on separate page" msgstr "" @@ -3479,288 +3472,288 @@ msgstr "" msgid "[no subject]" msgstr "" -#: src/Model/Photo.php:1194 src/Module/Media/Photo/Upload.php:154 +#: src/Model/Photo.php:1193 src/Module/Media/Photo/Upload.php:154 msgid "Wall Photos" msgstr "" -#: src/Model/Profile.php:339 src/Module/Profile/Profile.php:274 -#: src/Module/Profile/Profile.php:276 +#: src/Model/Profile.php:344 src/Module/Profile/Profile.php:292 +#: src/Module/Profile/Profile.php:294 msgid "Edit profile" msgstr "" -#: src/Model/Profile.php:341 +#: src/Model/Profile.php:346 msgid "Change profile photo" msgstr "" -#: src/Model/Profile.php:354 src/Module/Directory.php:138 -#: src/Module/Profile/Profile.php:200 +#: src/Model/Profile.php:359 src/Module/Directory.php:138 +#: src/Module/Profile/Profile.php:218 msgid "Homepage:" msgstr "" -#: src/Model/Profile.php:355 src/Module/Contact/Profile.php:424 +#: src/Model/Profile.php:360 src/Module/Contact/Profile.php:455 #: src/Module/Notifications/Introductions.php:182 msgid "About:" msgstr "" -#: src/Model/Profile.php:456 +#: src/Model/Profile.php:461 msgid "Atom feed" msgstr "" -#: src/Model/Profile.php:463 +#: src/Model/Profile.php:468 msgid "This website has been verified to belong to the same person." msgstr "" -#: src/Model/Profile.php:514 +#: src/Model/Profile.php:527 msgid "F d" msgstr "" -#: src/Model/Profile.php:578 src/Model/Profile.php:659 +#: src/Model/Profile.php:591 src/Model/Profile.php:672 msgid "[today]" msgstr "" -#: src/Model/Profile.php:587 +#: src/Model/Profile.php:600 msgid "Birthday Reminders" msgstr "" -#: src/Model/Profile.php:588 +#: src/Model/Profile.php:601 msgid "Birthdays this week:" msgstr "" -#: src/Model/Profile.php:604 +#: src/Model/Profile.php:617 msgid "g A l F d" msgstr "" -#: src/Model/Profile.php:646 +#: src/Model/Profile.php:659 msgid "[No description]" msgstr "" -#: src/Model/Profile.php:672 +#: src/Model/Profile.php:685 msgid "Event Reminders" msgstr "" -#: src/Model/Profile.php:673 +#: src/Model/Profile.php:686 msgid "Upcoming events the next 7 days:" msgstr "" -#: src/Model/Profile.php:783 +#: src/Model/Profile.php:796 msgid "Hometown:" msgstr "" -#: src/Model/Profile.php:784 +#: src/Model/Profile.php:797 msgid "Marital Status:" msgstr "" -#: src/Model/Profile.php:785 +#: src/Model/Profile.php:798 msgid "With:" msgstr "" -#: src/Model/Profile.php:786 +#: src/Model/Profile.php:799 msgid "Since:" msgstr "" -#: src/Model/Profile.php:787 +#: src/Model/Profile.php:800 msgid "Sexual Preference:" msgstr "" -#: src/Model/Profile.php:788 +#: src/Model/Profile.php:801 msgid "Political Views:" msgstr "" -#: src/Model/Profile.php:789 +#: src/Model/Profile.php:802 msgid "Religious Views:" msgstr "" -#: src/Model/Profile.php:790 +#: src/Model/Profile.php:803 msgid "Likes:" msgstr "" -#: src/Model/Profile.php:791 +#: src/Model/Profile.php:804 msgid "Dislikes:" msgstr "" -#: src/Model/Profile.php:792 +#: src/Model/Profile.php:805 msgid "Title/Description:" msgstr "" -#: src/Model/Profile.php:793 src/Module/Admin/Summary.php:184 -#: src/Module/Moderation/Report/Create.php:266 +#: src/Model/Profile.php:806 src/Module/Admin/Summary.php:184 +#: src/Module/Moderation/Report/Create.php:278 #: src/Module/Moderation/Summary.php:65 msgid "Summary" msgstr "" -#: src/Model/Profile.php:794 +#: src/Model/Profile.php:807 msgid "Musical interests" msgstr "" -#: src/Model/Profile.php:795 +#: src/Model/Profile.php:808 msgid "Books, literature" msgstr "" -#: src/Model/Profile.php:796 +#: src/Model/Profile.php:809 msgid "Television" msgstr "" -#: src/Model/Profile.php:797 +#: src/Model/Profile.php:810 msgid "Film/dance/culture/entertainment" msgstr "" -#: src/Model/Profile.php:798 +#: src/Model/Profile.php:811 msgid "Hobbies/Interests" msgstr "" -#: src/Model/Profile.php:799 +#: src/Model/Profile.php:812 msgid "Love/romance" msgstr "" -#: src/Model/Profile.php:800 +#: src/Model/Profile.php:813 msgid "Work/employment" msgstr "" -#: src/Model/Profile.php:801 +#: src/Model/Profile.php:814 msgid "School/education" msgstr "" -#: src/Model/Profile.php:802 +#: src/Model/Profile.php:815 msgid "Contact information and Social Networks" msgstr "" -#: src/Model/Profile.php:850 +#: src/Model/Profile.php:863 #, php-format msgid "Responsible account: %s" msgstr "" -#: src/Model/User.php:216 src/Model/User.php:1313 +#: src/Model/User.php:216 src/Model/User.php:1317 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: src/Model/User.php:739 src/Model/User.php:772 +#: src/Model/User.php:739 src/Model/User.php:776 msgid "Login failed" msgstr "" -#: src/Model/User.php:805 +#: src/Model/User.php:809 msgid "Not enough information to authenticate" msgstr "" -#: src/Model/User.php:932 +#: src/Model/User.php:936 msgid "Password can't be empty" msgstr "" -#: src/Model/User.php:974 +#: src/Model/User.php:978 msgid "Empty passwords are not allowed." msgstr "" -#: src/Model/User.php:978 +#: src/Model/User.php:982 msgid "The new password has been exposed in a public data dump, please choose another." msgstr "" -#: src/Model/User.php:982 +#: src/Model/User.php:986 msgid "The password length is limited to 72 characters." msgstr "" -#: src/Model/User.php:986 +#: src/Model/User.php:990 msgid "The password can't contain white spaces nor accentuated letters" msgstr "" -#: src/Model/User.php:1195 +#: src/Model/User.php:1199 msgid "Passwords do not match. Password unchanged." msgstr "" -#: src/Model/User.php:1202 +#: src/Model/User.php:1206 msgid "An invitation is required." msgstr "" -#: src/Model/User.php:1206 +#: src/Model/User.php:1210 msgid "Invitation could not be verified." msgstr "" -#: src/Model/User.php:1214 +#: src/Model/User.php:1218 msgid "Invalid OpenID url" msgstr "" -#: src/Model/User.php:1228 src/Security/Authentication.php:231 +#: src/Model/User.php:1232 src/Security/Authentication.php:231 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:1228 src/Security/Authentication.php:231 +#: src/Model/User.php:1232 src/Security/Authentication.php:231 msgid "The error message was:" msgstr "" -#: src/Model/User.php:1234 +#: src/Model/User.php:1238 msgid "Please enter the required information." msgstr "" -#: src/Model/User.php:1248 +#: src/Model/User.php:1252 #, 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:1255 +#: src/Model/User.php:1259 #, 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:1259 +#: src/Model/User.php:1263 #, 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:1267 +#: src/Model/User.php:1271 msgid "That doesn't appear to be your full (First Last) name." msgstr "" -#: src/Model/User.php:1272 +#: src/Model/User.php:1276 msgid "Your email domain is not among those allowed on this site." msgstr "" -#: src/Model/User.php:1276 +#: src/Model/User.php:1280 msgid "Not a valid email address." msgstr "" -#: src/Model/User.php:1279 +#: src/Model/User.php:1283 msgid "The nickname was blocked from registration by the nodes admin." msgstr "" -#: src/Model/User.php:1283 src/Model/User.php:1289 +#: src/Model/User.php:1287 src/Model/User.php:1293 msgid "Cannot use that email." msgstr "" -#: src/Model/User.php:1295 +#: src/Model/User.php:1299 msgid "Your nickname can only contain a-z, 0-9 and _." msgstr "" -#: src/Model/User.php:1303 src/Model/User.php:1353 +#: src/Model/User.php:1307 src/Model/User.php:1357 msgid "Nickname is already registered. Please choose another." msgstr "" -#: src/Model/User.php:1340 src/Model/User.php:1344 +#: src/Model/User.php:1344 src/Model/User.php:1348 msgid "An error occurred during registration. Please try again." msgstr "" -#: src/Model/User.php:1367 +#: src/Model/User.php:1371 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: src/Model/User.php:1374 +#: src/Model/User.php:1378 msgid "An error occurred creating your self contact. Please try again." msgstr "" -#: src/Model/User.php:1379 +#: src/Model/User.php:1383 msgid "Friends" msgstr "" -#: src/Model/User.php:1383 +#: src/Model/User.php:1387 msgid "An error occurred creating your default contact circle. Please try again." msgstr "" -#: src/Model/User.php:1431 +#: src/Model/User.php:1435 msgid "Profile Photos" msgstr "" -#: src/Model/User.php:1619 +#: src/Model/User.php:1632 #, php-format msgid "" "\n" @@ -3768,7 +3761,7 @@ msgid "" "\t\t\tthe administrator of %2$s has set up an account for you." msgstr "" -#: src/Model/User.php:1622 +#: src/Model/User.php:1635 #, php-format msgid "" "\n" @@ -3799,12 +3792,12 @@ msgid "" "\t\tThank you and welcome to %4$s." msgstr "" -#: src/Model/User.php:1654 src/Model/User.php:1760 +#: src/Model/User.php:1667 src/Model/User.php:1773 #, php-format msgid "Registration details for %s" msgstr "" -#: src/Model/User.php:1674 +#: src/Model/User.php:1687 #, php-format msgid "" "\n" @@ -3819,12 +3812,12 @@ msgid "" "\t\t" msgstr "" -#: src/Model/User.php:1693 +#: src/Model/User.php:1706 #, php-format msgid "Registration at %s" msgstr "" -#: src/Model/User.php:1717 +#: src/Model/User.php:1730 #, php-format msgid "" "\n" @@ -3833,7 +3826,7 @@ msgid "" "\t\t\t" msgstr "" -#: src/Model/User.php:1725 +#: src/Model/User.php:1738 #, php-format msgid "" "\n" @@ -3864,35 +3857,35 @@ msgid "" "\t\t\tThank you and welcome to %2$s." msgstr "" -#: src/Model/User.php:1787 +#: src/Model/User.php:1800 msgid "User with delegates can't be removed, please remove delegate users first" msgstr "" -#: src/Module/Admin/Addons/Details.php:48 +#: src/Module/Admin/Addons/Details.php:49 msgid "Addon not found." msgstr "" -#: src/Module/Admin/Addons/Details.php:59 src/Module/Admin/Addons/Index.php:43 +#: src/Module/Admin/Addons/Details.php:60 src/Module/Admin/Addons/Index.php:43 #, php-format msgid "Addon %s disabled." msgstr "" -#: src/Module/Admin/Addons/Details.php:62 src/Module/Admin/Addons/Index.php:45 +#: src/Module/Admin/Addons/Details.php:63 src/Module/Admin/Addons/Index.php:45 #, php-format msgid "Addon %s enabled." msgstr "" -#: src/Module/Admin/Addons/Details.php:71 +#: src/Module/Admin/Addons/Details.php:72 #: src/Module/Admin/Themes/Details.php:38 msgid "Disable" msgstr "" -#: src/Module/Admin/Addons/Details.php:74 +#: src/Module/Admin/Addons/Details.php:75 #: src/Module/Admin/Themes/Details.php:41 src/Module/Settings/Display.php:341 msgid "Enable" msgstr "" -#: src/Module/Admin/Addons/Details.php:98 src/Module/Admin/Addons/Index.php:77 +#: src/Module/Admin/Addons/Details.php:128 src/Module/Admin/Addons/Index.php:77 #: src/Module/Admin/Federation.php:213 src/Module/Admin/Logs/Settings.php:74 #: src/Module/Admin/Logs/View.php:71 src/Module/Admin/Queue.php:59 #: src/Module/Admin/Site.php:446 src/Module/Admin/Storage.php:124 @@ -3903,22 +3896,22 @@ msgstr "" msgid "Administration" msgstr "" -#: src/Module/Admin/Addons/Details.php:99 src/Module/Admin/Addons/Index.php:78 +#: src/Module/Admin/Addons/Details.php:129 src/Module/Admin/Addons/Index.php:78 #: src/Module/BaseAdmin.php:77 src/Module/BaseSettings.php:127 msgid "Addons" msgstr "" -#: src/Module/Admin/Addons/Details.php:100 +#: src/Module/Admin/Addons/Details.php:130 #: src/Module/Admin/Themes/Details.php:84 msgid "Toggle" msgstr "" -#: src/Module/Admin/Addons/Details.php:113 +#: src/Module/Admin/Addons/Details.php:143 #: src/Module/Admin/Themes/Details.php:92 msgid "Author: " msgstr "" -#: src/Module/Admin/Addons/Details.php:114 +#: src/Module/Admin/Addons/Details.php:144 #: src/Module/Admin/Themes/Details.php:93 msgid "Maintainer: " msgstr "" @@ -4013,14 +4006,14 @@ msgstr "" #: src/Module/Admin/Features.php:53 #: src/Module/Notifications/Introductions.php:136 -#: src/Module/OAuth/Acknowledge.php:41 src/Module/Register.php:124 +#: src/Module/OAuth/Acknowledge.php:41 src/Module/Register.php:128 #: src/Module/Settings/TwoFactor/Trusted.php:115 msgid "No" msgstr "" #: src/Module/Admin/Features.php:53 src/Module/Contact/Revoke.php:91 #: src/Module/Notifications/Introductions.php:136 -#: src/Module/OAuth/Acknowledge.php:40 src/Module/Register.php:123 +#: src/Module/OAuth/Acknowledge.php:40 src/Module/Register.php:127 #: src/Module/Settings/TwoFactor/Trusted.php:115 msgid "Yes" msgstr "" @@ -4034,8 +4027,8 @@ msgid "Manage Additional Features" msgstr "" #: src/Module/Admin/Federation.php:70 -#: src/Module/Moderation/Report/Create.php:177 -#: src/Module/Moderation/Report/Create.php:302 +#: src/Module/Moderation/Report/Create.php:176 +#: src/Module/Moderation/Report/Create.php:319 msgid "Other" msgstr "" @@ -4371,7 +4364,7 @@ msgstr "" msgid "Republish users to directory" msgstr "" -#: src/Module/Admin/Site.php:451 src/Module/Register.php:145 +#: src/Module/Admin/Site.php:451 src/Module/Register.php:153 msgid "Registration" msgstr "" @@ -4384,7 +4377,7 @@ msgid "Policies" msgstr "" #: src/Module/Admin/Site.php:454 src/Module/Calendar/Event/Form.php:238 -#: src/Module/Contact.php:527 src/Module/Profile/Profile.php:267 +#: src/Module/Contact.php:527 src/Module/Profile/Profile.php:285 msgid "Advanced" msgstr "" @@ -5196,7 +5189,7 @@ msgstr "" 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:584 src/Module/Contact/Profile.php:315 +#: src/Module/Admin/Site.php:584 src/Module/Contact/Profile.php:346 #: src/Module/Settings/Display.php:249 #: src/Module/Settings/TwoFactor/Index.php:132 msgid "Disabled" @@ -5749,11 +5742,11 @@ msgstr "" msgid "Tips for New Members" msgstr "" -#: src/Module/BaseProfile.php:137 src/Module/Contact.php:390 +#: src/Module/BaseProfile.php:141 src/Module/Contact.php:390 #: src/Module/Contact.php:537 src/Module/Conversation/Channel.php:98 #: src/Module/Conversation/Community.php:91 -#: src/Module/Conversation/Network.php:295 -#: src/Module/Moderation/BaseUsers.php:102 src/Object/Post.php:612 +#: src/Module/Conversation/Network.php:349 +#: src/Module/Moderation/BaseUsers.php:130 src/Object/Post.php:611 msgid "More" msgstr "" @@ -5872,9 +5865,9 @@ msgstr "" #: src/Module/Moderation/Blocklist/Server/Index.php:76 #: src/Module/Moderation/Blocklist/Server/Index.php:104 #: src/Module/Moderation/Blocklist/Server/Index.php:105 -#: src/Module/Moderation/Item/Delete.php:53 src/Module/Register.php:141 +#: src/Module/Moderation/Item/Delete.php:53 src/Module/Register.php:149 #: src/Module/Security/TwoFactor/Verify.php:87 -#: src/Module/Settings/Channels.php:176 src/Module/Settings/Channels.php:197 +#: src/Module/Settings/Channels.php:176 src/Module/Settings/Channels.php:202 #: src/Module/Settings/TwoFactor/Index.php:147 #: src/Module/Settings/TwoFactor/Verify.php:144 msgid "Required" @@ -5908,7 +5901,7 @@ msgstr "" msgid "Share this event" msgstr "" -#: src/Module/Calendar/Event/Form.php:237 src/Module/Profile/Profile.php:266 +#: src/Module/Calendar/Event/Form.php:237 src/Module/Profile/Profile.php:284 msgid "Basic" msgstr "" @@ -5962,8 +5955,8 @@ msgstr "" #: src/Module/Contact/Conversations.php:78 #: src/Module/Contact/Conversations.php:83 src/Module/Contact/Media.php:47 #: src/Module/Contact/Posts.php:64 src/Module/Contact/Posts.php:69 -#: src/Module/Contact/Posts.php:74 src/Module/Contact/Profile.php:146 -#: src/Module/Contact/Profile.php:151 src/Module/Contact/Profile.php:170 +#: src/Module/Contact/Posts.php:74 src/Module/Contact/Profile.php:172 +#: src/Module/Contact/Profile.php:177 src/Module/Contact/Profile.php:196 #: src/Module/Contact/Redir.php:79 src/Module/Contact/Redir.php:133 #: src/Module/FriendSuggest.php:58 src/Module/FriendSuggest.php:96 msgid "Contact not found." @@ -6053,7 +6046,7 @@ msgid "Show all contacts" msgstr "" #: src/Module/Contact.php:332 src/Module/Contact.php:411 -#: src/Module/Moderation/BaseUsers.php:74 +#: src/Module/Moderation/BaseUsers.php:92 msgid "Pending" msgstr "" @@ -6062,7 +6055,7 @@ msgid "Only show pending contacts" msgstr "" #: src/Module/Contact.php:340 src/Module/Contact.php:414 -#: src/Module/Moderation/BaseUsers.php:82 +#: src/Module/Moderation/BaseUsers.php:100 msgid "Blocked" msgstr "" @@ -6071,7 +6064,7 @@ msgid "Only show blocked contacts" msgstr "" #: src/Module/Contact.php:348 src/Module/Contact.php:420 -#: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:391 +#: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:390 msgid "Ignored" msgstr "" @@ -6120,18 +6113,18 @@ msgstr "" msgid "Update" msgstr "" -#: src/Module/Contact.php:448 src/Module/Contact/Profile.php:524 +#: src/Module/Contact.php:448 src/Module/Contact/Profile.php:560 #: src/Module/Moderation/Blocklist/Contact.php:105 #: src/Module/Moderation/Users/Blocked.php:94 #: src/Module/Moderation/Users/Index.php:103 msgid "Unblock" msgstr "" -#: src/Module/Contact.php:449 src/Module/Contact/Profile.php:532 +#: src/Module/Contact.php:449 src/Module/Contact/Profile.php:568 msgid "Unignore" msgstr "" -#: src/Module/Contact.php:450 src/Module/Contact/Profile.php:540 +#: src/Module/Contact.php:450 src/Module/Contact/Profile.php:576 msgid "Uncollapse" msgstr "" @@ -6183,7 +6176,7 @@ msgstr "" msgid "Pending incoming contact request" msgstr "" -#: src/Module/Contact.php:607 src/Module/Contact/Profile.php:383 +#: src/Module/Contact.php:607 src/Module/Contact/Profile.php:414 #, php-format msgid "Visit %s's profile [%s]" msgstr "" @@ -6314,7 +6307,7 @@ msgstr "" msgid "Your Identity Address:" msgstr "" -#: src/Module/Contact/Follow.php:155 src/Module/Contact/Profile.php:414 +#: src/Module/Contact/Follow.php:155 src/Module/Contact/Profile.php:445 #: src/Module/Contact/Unfollow.php:115 #: src/Module/Moderation/Blocklist/Contact.php:119 #: src/Module/Moderation/Reports.php:112 @@ -6323,9 +6316,9 @@ msgstr "" msgid "Profile URL" msgstr "" -#: src/Module/Contact/Follow.php:156 src/Module/Contact/Profile.php:426 +#: src/Module/Contact/Follow.php:156 src/Module/Contact/Profile.php:457 #: src/Module/Notifications/Introductions.php:184 -#: src/Module/Profile/Profile.php:225 +#: src/Module/Profile/Profile.php:243 msgid "Tags:" msgstr "" @@ -6362,301 +6355,301 @@ msgstr "" msgid "Profile Match" msgstr "" -#: src/Module/Contact/Profile.php:131 +#: src/Module/Contact/Profile.php:157 msgid "Failed to update contact record." msgstr "" -#: src/Module/Contact/Profile.php:196 +#: src/Module/Contact/Profile.php:222 msgid "Contact has been unblocked" msgstr "" -#: src/Module/Contact/Profile.php:200 +#: src/Module/Contact/Profile.php:226 msgid "Contact has been blocked" msgstr "" -#: src/Module/Contact/Profile.php:212 +#: src/Module/Contact/Profile.php:238 msgid "Contact has been unignored" msgstr "" -#: src/Module/Contact/Profile.php:216 +#: src/Module/Contact/Profile.php:242 msgid "Contact has been ignored" msgstr "" -#: src/Module/Contact/Profile.php:228 +#: src/Module/Contact/Profile.php:254 msgid "Contact has been uncollapsed" msgstr "" -#: src/Module/Contact/Profile.php:232 +#: src/Module/Contact/Profile.php:258 msgid "Contact has been collapsed" msgstr "" -#: src/Module/Contact/Profile.php:260 +#: src/Module/Contact/Profile.php:287 #, php-format msgid "You are mutual friends with %s" msgstr "" -#: src/Module/Contact/Profile.php:261 +#: src/Module/Contact/Profile.php:290 #, php-format msgid "You are sharing with %s" msgstr "" -#: src/Module/Contact/Profile.php:262 +#: src/Module/Contact/Profile.php:293 #, php-format msgid "%s is sharing with you" msgstr "" -#: src/Module/Contact/Profile.php:278 +#: src/Module/Contact/Profile.php:310 msgid "Private communications are not available for this contact." msgstr "" -#: src/Module/Contact/Profile.php:288 +#: src/Module/Contact/Profile.php:319 msgid "This contact is on a server you ignored." msgstr "" -#: src/Module/Contact/Profile.php:291 +#: src/Module/Contact/Profile.php:322 msgid "Never" msgstr "" -#: src/Module/Contact/Profile.php:294 +#: src/Module/Contact/Profile.php:325 msgid "(Update was not successful)" msgstr "" -#: src/Module/Contact/Profile.php:294 +#: src/Module/Contact/Profile.php:325 msgid "(Update was successful)" msgstr "" -#: src/Module/Contact/Profile.php:296 src/Module/Contact/Profile.php:495 +#: src/Module/Contact/Profile.php:327 src/Module/Contact/Profile.php:531 msgid "Suggest friends" msgstr "" -#: src/Module/Contact/Profile.php:300 +#: src/Module/Contact/Profile.php:331 #, php-format msgid "Network type: %s" msgstr "" -#: src/Module/Contact/Profile.php:305 +#: src/Module/Contact/Profile.php:336 msgid "Communications lost with this contact!" msgstr "" -#: src/Module/Contact/Profile.php:311 +#: src/Module/Contact/Profile.php:342 msgid "Fetch further information for feeds" msgstr "" -#: src/Module/Contact/Profile.php:313 +#: src/Module/Contact/Profile.php:344 msgid "Fetch information like preview pictures, title and teaser from the feed item. You can activate this if the feed doesn't contain much text. Keywords are taken from the meta header in the feed item and are posted as hash tags." msgstr "" -#: src/Module/Contact/Profile.php:316 +#: src/Module/Contact/Profile.php:347 msgid "Fetch information" msgstr "" -#: src/Module/Contact/Profile.php:317 +#: src/Module/Contact/Profile.php:348 msgid "Fetch keywords" msgstr "" -#: src/Module/Contact/Profile.php:318 +#: src/Module/Contact/Profile.php:349 msgid "Fetch information and keywords" msgstr "" -#: src/Module/Contact/Profile.php:328 src/Module/Contact/Profile.php:333 -#: src/Module/Contact/Profile.php:338 src/Module/Contact/Profile.php:344 +#: src/Module/Contact/Profile.php:359 src/Module/Contact/Profile.php:364 +#: src/Module/Contact/Profile.php:369 src/Module/Contact/Profile.php:375 msgid "No mirroring" msgstr "" -#: src/Module/Contact/Profile.php:329 src/Module/Contact/Profile.php:339 -#: src/Module/Contact/Profile.php:345 +#: src/Module/Contact/Profile.php:360 src/Module/Contact/Profile.php:370 +#: src/Module/Contact/Profile.php:376 msgid "Mirror as my own posting" msgstr "" -#: src/Module/Contact/Profile.php:334 src/Module/Contact/Profile.php:340 +#: src/Module/Contact/Profile.php:365 src/Module/Contact/Profile.php:371 msgid "Native reshare" msgstr "" -#: src/Module/Contact/Profile.php:365 +#: src/Module/Contact/Profile.php:396 msgid "Contact Information / Notes" msgstr "" -#: src/Module/Contact/Profile.php:366 +#: src/Module/Contact/Profile.php:397 msgid "Contact Settings" msgstr "" -#: src/Module/Contact/Profile.php:374 +#: src/Module/Contact/Profile.php:405 msgid "Contact" msgstr "" -#: src/Module/Contact/Profile.php:378 +#: src/Module/Contact/Profile.php:409 msgid "Their personal note" msgstr "" -#: src/Module/Contact/Profile.php:380 +#: src/Module/Contact/Profile.php:411 msgid "Edit contact notes" msgstr "" -#: src/Module/Contact/Profile.php:384 +#: src/Module/Contact/Profile.php:415 msgid "Block/Unblock contact" msgstr "" -#: src/Module/Contact/Profile.php:385 -#: src/Module/Moderation/Report/Create.php:279 +#: src/Module/Contact/Profile.php:416 +#: src/Module/Moderation/Report/Create.php:291 msgid "Ignore contact" msgstr "" -#: src/Module/Contact/Profile.php:386 +#: src/Module/Contact/Profile.php:417 msgid "View conversations" msgstr "" -#: src/Module/Contact/Profile.php:391 +#: src/Module/Contact/Profile.php:422 msgid "Last update:" msgstr "" -#: src/Module/Contact/Profile.php:393 +#: src/Module/Contact/Profile.php:424 msgid "Update public posts" msgstr "" -#: src/Module/Contact/Profile.php:395 src/Module/Contact/Profile.php:505 +#: src/Module/Contact/Profile.php:426 src/Module/Contact/Profile.php:541 msgid "Update now" msgstr "" -#: src/Module/Contact/Profile.php:397 +#: src/Module/Contact/Profile.php:428 msgid "Awaiting connection acknowledge" msgstr "" -#: src/Module/Contact/Profile.php:398 +#: src/Module/Contact/Profile.php:429 msgid "Currently blocked" msgstr "" -#: src/Module/Contact/Profile.php:399 +#: src/Module/Contact/Profile.php:430 msgid "Currently ignored" msgstr "" -#: src/Module/Contact/Profile.php:400 +#: src/Module/Contact/Profile.php:431 msgid "Currently collapsed" msgstr "" -#: src/Module/Contact/Profile.php:401 +#: src/Module/Contact/Profile.php:432 msgid "Currently archived" msgstr "" -#: src/Module/Contact/Profile.php:404 +#: src/Module/Contact/Profile.php:435 msgid "Manage remote servers" msgstr "" -#: src/Module/Contact/Profile.php:406 +#: src/Module/Contact/Profile.php:437 #: src/Module/Notifications/Introductions.php:185 msgid "Hide this contact from others" msgstr "" -#: src/Module/Contact/Profile.php:406 +#: src/Module/Contact/Profile.php:437 msgid "Replies/likes to your public posts may still be visible" msgstr "" -#: src/Module/Contact/Profile.php:407 +#: src/Module/Contact/Profile.php:438 msgid "Notification for new posts" msgstr "" -#: src/Module/Contact/Profile.php:407 +#: src/Module/Contact/Profile.php:438 msgid "Send a notification of every new post of this contact" msgstr "" -#: src/Module/Contact/Profile.php:409 +#: src/Module/Contact/Profile.php:440 msgid "Keyword Deny List" msgstr "" -#: src/Module/Contact/Profile.php:409 +#: src/Module/Contact/Profile.php:440 msgid "Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected" msgstr "" -#: src/Module/Contact/Profile.php:427 +#: src/Module/Contact/Profile.php:458 #: src/Module/Settings/TwoFactor/Index.php:146 msgid "Actions" msgstr "" -#: src/Module/Contact/Profile.php:429 +#: src/Module/Contact/Profile.php:460 #: src/Module/Settings/TwoFactor/Index.php:126 view/theme/frio/theme.php:218 msgid "Status" msgstr "" -#: src/Module/Contact/Profile.php:435 +#: src/Module/Contact/Profile.php:466 msgid "Mirror postings from this contact" msgstr "" -#: src/Module/Contact/Profile.php:437 +#: src/Module/Contact/Profile.php:468 msgid "Mark this contact as remote_self, this will cause friendica to repost new entries from this contact." msgstr "" -#: src/Module/Contact/Profile.php:440 +#: src/Module/Contact/Profile.php:471 msgid "Channel Settings" msgstr "" -#: src/Module/Contact/Profile.php:441 +#: src/Module/Contact/Profile.php:472 msgid "Frequency of this contact in relevant channels" msgstr "" -#: src/Module/Contact/Profile.php:442 +#: src/Module/Contact/Profile.php:473 msgid "Depending on the type of the channel not all posts from this contact are displayed. By default, posts need to have a minimum amount of interactions (comments, likes) to show in your channels. On the other hand there can be contacts who flood the channel, so you might want to see only some of their posts. Or you don't want to see their content at all, but you don't want to block or hide the contact completely." msgstr "" -#: src/Module/Contact/Profile.php:443 +#: src/Module/Contact/Profile.php:474 msgid "Default frequency" msgstr "" -#: src/Module/Contact/Profile.php:443 +#: src/Module/Contact/Profile.php:474 msgid "Posts by this contact are displayed in the \"for you\" channel if you interact often with this contact or if a post reached some level of interaction." msgstr "" -#: src/Module/Contact/Profile.php:444 +#: src/Module/Contact/Profile.php:475 msgid "Display all posts of this contact" msgstr "" -#: src/Module/Contact/Profile.php:444 +#: src/Module/Contact/Profile.php:475 msgid "All posts from this contact will appear on the \"for you\" channel" msgstr "" -#: src/Module/Contact/Profile.php:445 +#: src/Module/Contact/Profile.php:476 msgid "Display only few posts" msgstr "" -#: src/Module/Contact/Profile.php:445 +#: src/Module/Contact/Profile.php:476 msgid "When a contact creates a lot of posts in a short period, this setting reduces the number of displayed posts in every channel." msgstr "" -#: src/Module/Contact/Profile.php:446 +#: src/Module/Contact/Profile.php:477 msgid "Never display posts" msgstr "" -#: src/Module/Contact/Profile.php:446 +#: src/Module/Contact/Profile.php:477 msgid "Posts from this contact will never be displayed in any channel" msgstr "" -#: src/Module/Contact/Profile.php:447 +#: src/Module/Contact/Profile.php:478 msgid "Channel Only" msgstr "" -#: src/Module/Contact/Profile.php:447 +#: src/Module/Contact/Profile.php:478 msgid "If enabled, posts from this contact will only appear in channels and network streams in circles, but not in the general network stream." msgstr "" -#: src/Module/Contact/Profile.php:515 +#: src/Module/Contact/Profile.php:551 msgid "Refetch contact data" msgstr "" -#: src/Module/Contact/Profile.php:526 +#: src/Module/Contact/Profile.php:562 msgid "Toggle Blocked status" msgstr "" -#: src/Module/Contact/Profile.php:534 +#: src/Module/Contact/Profile.php:570 msgid "Toggle Ignored status" msgstr "" -#: src/Module/Contact/Profile.php:542 +#: src/Module/Contact/Profile.php:578 msgid "Toggle Collapsed status" msgstr "" -#: src/Module/Contact/Profile.php:549 src/Module/Contact/Revoke.php:89 +#: src/Module/Contact/Profile.php:585 src/Module/Contact/Revoke.php:89 msgid "Revoke Follow" msgstr "" -#: src/Module/Contact/Profile.php:551 +#: src/Module/Contact/Profile.php:587 msgid "Revoke the follow from this contact" msgstr "" @@ -6722,21 +6715,21 @@ msgstr "" msgid "Not available." msgstr "" -#: src/Module/Conversation/Network.php:205 +#: src/Module/Conversation/Network.php:254 msgid "No such circle" msgstr "" -#: src/Module/Conversation/Network.php:209 +#: src/Module/Conversation/Network.php:258 #, php-format msgid "Circle: %s" msgstr "" -#: src/Module/Conversation/Network.php:229 +#: src/Module/Conversation/Network.php:278 #, php-format msgid "Error %d (%s) while fetching the timeline." msgstr "" -#: src/Module/Conversation/Network.php:307 +#: src/Module/Conversation/Network.php:361 msgid "Network feed not available." msgstr "" @@ -6949,7 +6942,7 @@ msgid "Twitter Source / Tweet URL (requires API key)" msgstr "" #: src/Module/Debug/Feed.php:39 src/Module/Filer/SaveTag.php:33 -#: src/Module/Settings/Profile/Index.php:166 +#: src/Module/Settings/Profile/Index.php:190 msgid "You must be logged in to use this module" msgstr "" @@ -7024,11 +7017,11 @@ msgstr "" msgid "Site Directory" msgstr "" -#: src/Module/Filer/RemoveTag.php:91 +#: src/Module/Filer/RemoveTag.php:90 msgid "Item was not deleted" msgstr "" -#: src/Module/Filer/RemoveTag.php:101 +#: src/Module/Filer/RemoveTag.php:100 msgid "Item was not removed" msgstr "" @@ -7057,52 +7050,52 @@ msgstr "" msgid "Suggest a friend for %s" msgstr "" -#: src/Module/Friendica.php:71 +#: src/Module/Friendica.php:87 msgid "Installed addons/apps:" msgstr "" -#: src/Module/Friendica.php:76 +#: src/Module/Friendica.php:92 msgid "No installed addons/apps" msgstr "" -#: src/Module/Friendica.php:81 +#: src/Module/Friendica.php:97 #, php-format msgid "Read about the Terms of Service of this node." msgstr "" -#: src/Module/Friendica.php:88 +#: src/Module/Friendica.php:104 msgid "On this server the following remote servers are blocked." msgstr "" -#: src/Module/Friendica.php:91 +#: src/Module/Friendica.php:107 #: src/Module/Moderation/Blocklist/Server/Index.php:76 #: src/Module/Moderation/Blocklist/Server/Index.php:100 -#: src/Module/Settings/Channels.php:218 +#: src/Module/Settings/Channels.php:223 msgid "Reason for the block" msgstr "" -#: src/Module/Friendica.php:93 +#: src/Module/Friendica.php:109 msgid "Download this list in CSV format" msgstr "" -#: src/Module/Friendica.php:108 +#: src/Module/Friendica.php:126 #, 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:114 +#: src/Module/Friendica.php:132 msgid "Please visit Friendi.ca to learn more about the Friendica project." msgstr "" -#: src/Module/Friendica.php:115 +#: src/Module/Friendica.php:133 msgid "Bug reports and issues: please visit" msgstr "" -#: src/Module/Friendica.php:115 +#: src/Module/Friendica.php:133 msgid "the bugtracker at github" msgstr "" -#: src/Module/Friendica.php:116 +#: src/Module/Friendica.php:134 msgid "Suggestions, praise, etc. - please email \"info\" at \"friendi - dot - ca" msgstr "" @@ -7427,84 +7420,84 @@ msgid "File upload failed." msgstr "" #: src/Module/Media/Photo/Upload.php:136 src/Module/Media/Photo/Upload.php:137 -#: src/Module/Profile/Photos.php:212 +#: src/Module/Profile/Photos.php:255 #: src/Module/Settings/Profile/Photo/Index.php:53 msgid "Unable to process image." msgstr "" -#: src/Module/Media/Photo/Upload.php:162 src/Module/Profile/Photos.php:232 +#: src/Module/Media/Photo/Upload.php:162 src/Module/Profile/Photos.php:278 #: src/Module/Settings/Profile/Photo/Index.php:80 msgid "Image upload failed." msgstr "" -#: src/Module/Moderation/BaseUsers.php:61 +#: src/Module/Moderation/BaseUsers.php:79 msgid "List of all users" msgstr "" -#: src/Module/Moderation/BaseUsers.php:66 +#: src/Module/Moderation/BaseUsers.php:84 msgid "Active" msgstr "" -#: src/Module/Moderation/BaseUsers.php:69 +#: src/Module/Moderation/BaseUsers.php:87 msgid "List of active accounts" msgstr "" -#: src/Module/Moderation/BaseUsers.php:77 +#: src/Module/Moderation/BaseUsers.php:95 msgid "List of pending registrations" msgstr "" -#: src/Module/Moderation/BaseUsers.php:85 +#: src/Module/Moderation/BaseUsers.php:103 msgid "List of blocked users" msgstr "" -#: src/Module/Moderation/BaseUsers.php:90 +#: src/Module/Moderation/BaseUsers.php:108 msgid "Deleted" msgstr "" -#: src/Module/Moderation/BaseUsers.php:93 +#: src/Module/Moderation/BaseUsers.php:111 msgid "List of pending user deletions" msgstr "" -#: src/Module/Moderation/BaseUsers.php:110 src/Module/Settings/Account.php:431 +#: src/Module/Moderation/BaseUsers.php:138 src/Module/Settings/Account.php:431 msgid "Normal Account Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:111 src/Module/Settings/Account.php:438 +#: src/Module/Moderation/BaseUsers.php:139 src/Module/Settings/Account.php:438 msgid "Soapbox Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:112 src/Module/Settings/Account.php:445 +#: src/Module/Moderation/BaseUsers.php:140 src/Module/Settings/Account.php:445 msgid "Public Group" msgstr "" -#: src/Module/Moderation/BaseUsers.php:113 src/Module/Settings/Account.php:452 +#: src/Module/Moderation/BaseUsers.php:141 src/Module/Settings/Account.php:452 msgid "Public Group - Restricted" msgstr "" -#: src/Module/Moderation/BaseUsers.php:114 src/Module/Settings/Account.php:459 +#: src/Module/Moderation/BaseUsers.php:142 src/Module/Settings/Account.php:459 msgid "Automatic Friend Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:115 +#: src/Module/Moderation/BaseUsers.php:143 msgid "Private Group" msgstr "" -#: src/Module/Moderation/BaseUsers.php:118 src/Module/Moderation/Summary.php:42 +#: src/Module/Moderation/BaseUsers.php:146 src/Module/Moderation/Summary.php:42 #: src/Module/Settings/Account.php:402 msgid "Personal Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:119 src/Module/Moderation/Summary.php:43 +#: src/Module/Moderation/BaseUsers.php:147 src/Module/Moderation/Summary.php:43 #: src/Module/Settings/Account.php:409 msgid "Organisation Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:120 src/Module/Moderation/Summary.php:44 +#: src/Module/Moderation/BaseUsers.php:148 src/Module/Moderation/Summary.php:44 #: src/Module/Settings/Account.php:416 msgid "News Page" msgstr "" -#: src/Module/Moderation/BaseUsers.php:121 src/Module/Moderation/Summary.php:45 +#: src/Module/Moderation/BaseUsers.php:149 src/Module/Moderation/Summary.php:45 #: src/Module/Settings/Account.php:423 msgid "Community Group" msgstr "" @@ -7760,7 +7753,7 @@ msgstr "" #: src/Module/Moderation/Blocklist/Server/Index.php:75 #: src/Module/Moderation/Blocklist/Server/Index.php:99 -#: src/Module/Settings/Channels.php:217 +#: src/Module/Settings/Channels.php:222 msgid "Blocked server domain pattern" msgstr "" @@ -7883,176 +7876,180 @@ msgstr "" msgid "Item Guid" msgstr "" -#: src/Module/Moderation/Report/Create.php:81 +#: src/Module/Moderation/Report/Create.php:80 msgid "Contact not found or their server is already blocked on this node." msgstr "" -#: src/Module/Moderation/Report/Create.php:122 +#: src/Module/Moderation/Report/Create.php:121 msgid "Please login to access this page." msgstr "" -#: src/Module/Moderation/Report/Create.php:151 -#: src/Module/Moderation/Report/Create.php:166 -#: src/Module/Moderation/Report/Create.php:194 -#: src/Module/Moderation/Report/Create.php:246 -#: src/Module/Moderation/Report/Create.php:265 +#: src/Module/Moderation/Report/Create.php:150 +#: src/Module/Moderation/Report/Create.php:165 +#: src/Module/Moderation/Report/Create.php:193 +#: src/Module/Moderation/Report/Create.php:253 +#: src/Module/Moderation/Report/Create.php:277 msgid "Create Moderation Report" msgstr "" -#: src/Module/Moderation/Report/Create.php:152 +#: src/Module/Moderation/Report/Create.php:151 msgid "Pick Contact" msgstr "" -#: src/Module/Moderation/Report/Create.php:153 +#: src/Module/Moderation/Report/Create.php:152 msgid "Please enter below the contact address or profile URL you would like to create a moderation report about." msgstr "" -#: src/Module/Moderation/Report/Create.php:157 +#: src/Module/Moderation/Report/Create.php:156 msgid "Contact address/URL" msgstr "" -#: src/Module/Moderation/Report/Create.php:167 +#: src/Module/Moderation/Report/Create.php:166 msgid "Pick Category" msgstr "" -#: src/Module/Moderation/Report/Create.php:168 +#: src/Module/Moderation/Report/Create.php:167 msgid "Please pick below the category of your report." msgstr "" -#: src/Module/Moderation/Report/Create.php:172 -#: src/Module/Moderation/Report/Create.php:297 +#: src/Module/Moderation/Report/Create.php:171 +#: src/Module/Moderation/Report/Create.php:309 msgid "Spam" msgstr "" -#: src/Module/Moderation/Report/Create.php:172 +#: src/Module/Moderation/Report/Create.php:171 msgid "This contact is publishing many repeated/overly long posts/replies or advertising their product/websites in otherwise irrelevant conversations." msgstr "" -#: src/Module/Moderation/Report/Create.php:173 -#: src/Module/Moderation/Report/Create.php:298 +#: src/Module/Moderation/Report/Create.php:172 +#: src/Module/Moderation/Report/Create.php:311 msgid "Illegal Content" msgstr "" -#: src/Module/Moderation/Report/Create.php:173 +#: src/Module/Moderation/Report/Create.php:172 msgid "This contact is publishing content that is considered illegal in this node's hosting juridiction." msgstr "" -#: src/Module/Moderation/Report/Create.php:174 -#: src/Module/Moderation/Report/Create.php:299 +#: src/Module/Moderation/Report/Create.php:173 +#: src/Module/Moderation/Report/Create.php:313 msgid "Community Safety" msgstr "" -#: src/Module/Moderation/Report/Create.php:174 +#: src/Module/Moderation/Report/Create.php:173 msgid "This contact aggravated you or other people, by being provocative or insensitive, intentionally or not. This includes disclosing people's private information (doxxing), posting threats or offensive pictures in posts or replies." msgstr "" -#: src/Module/Moderation/Report/Create.php:175 -#: src/Module/Moderation/Report/Create.php:300 +#: src/Module/Moderation/Report/Create.php:174 +#: src/Module/Moderation/Report/Create.php:315 msgid "Unwanted Content/Behavior" msgstr "" -#: src/Module/Moderation/Report/Create.php:175 +#: src/Module/Moderation/Report/Create.php:174 msgid "This contact has repeatedly published content irrelevant to the node's theme or is openly criticizing the node's administration/moderation without directly engaging with the relevant people for example or repeatedly nitpicking on a sensitive topic." msgstr "" -#: src/Module/Moderation/Report/Create.php:176 -#: src/Module/Moderation/Report/Create.php:301 +#: src/Module/Moderation/Report/Create.php:175 +#: src/Module/Moderation/Report/Create.php:317 msgid "Rules Violation" msgstr "" -#: src/Module/Moderation/Report/Create.php:176 +#: src/Module/Moderation/Report/Create.php:175 msgid "This contact violated one or more rules of this node. You will be able to pick which one(s) in the next step." msgstr "" -#: src/Module/Moderation/Report/Create.php:177 +#: src/Module/Moderation/Report/Create.php:176 msgid "Please elaborate below why you submitted this report. The more details you provide, the better your report can be handled." msgstr "" -#: src/Module/Moderation/Report/Create.php:179 +#: src/Module/Moderation/Report/Create.php:178 msgid "Additional Information" msgstr "" -#: src/Module/Moderation/Report/Create.php:179 +#: src/Module/Moderation/Report/Create.php:178 msgid "Please provide any additional information relevant to this particular report. You will be able to attach posts by this contact in the next step, but any context is welcome." msgstr "" -#: src/Module/Moderation/Report/Create.php:195 +#: src/Module/Moderation/Report/Create.php:194 msgid "Pick Rules" msgstr "" -#: src/Module/Moderation/Report/Create.php:196 +#: src/Module/Moderation/Report/Create.php:195 msgid "Please pick below the node rules you believe this contact violated." msgstr "" -#: src/Module/Moderation/Report/Create.php:247 +#: src/Module/Moderation/Report/Create.php:254 msgid "Pick Posts" msgstr "" -#: src/Module/Moderation/Report/Create.php:248 +#: src/Module/Moderation/Report/Create.php:255 msgid "Please optionally pick posts to attach to your report." msgstr "" -#: src/Module/Moderation/Report/Create.php:267 -msgid "Submit Report" +#: src/Module/Moderation/Report/Create.php:271 +msgid "Would you like to forward this report to the remote server?" msgstr "" -#: src/Module/Moderation/Report/Create.php:268 -msgid "Further Action" -msgstr "" - -#: src/Module/Moderation/Report/Create.php:269 -msgid "You can also perform one of the following action on the contact you reported:" -msgstr "" - -#: src/Module/Moderation/Report/Create.php:277 -msgid "Nothing" -msgstr "" - -#: src/Module/Moderation/Report/Create.php:278 -msgid "Collapse contact" -msgstr "" - -#: src/Module/Moderation/Report/Create.php:278 -msgid "Their posts and replies will keep appearing in your Network page but their content will be collapsed by default." -msgstr "" - -#: src/Module/Moderation/Report/Create.php:279 -msgid "Their posts won't appear in your Network page anymore, but their replies can appear in forum threads. They still can follow you." -msgstr "" - -#: src/Module/Moderation/Report/Create.php:280 -msgid "Block contact" -msgstr "" - -#: src/Module/Moderation/Report/Create.php:280 -msgid "Their posts won't appear in your Network page anymore, but their replies can appear in forum threads, with their content collapsed by default. They cannot follow you but still can have access to your public posts by other means." -msgstr "" - -#: src/Module/Moderation/Report/Create.php:283 -msgid "Forward report" -msgstr "" - -#: src/Module/Moderation/Report/Create.php:283 +#: src/Module/Moderation/Report/Create.php:273 msgid "Would you ike to forward this report to the remote server?" msgstr "" -#: src/Module/Moderation/Report/Create.php:316 +#: src/Module/Moderation/Report/Create.php:279 +msgid "Submit Report" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:280 +msgid "Further Action" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:281 +msgid "You can also perform one of the following action on the contact you reported:" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:289 +msgid "Nothing" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:290 +msgid "Collapse contact" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:290 +msgid "Their posts and replies will keep appearing in your Network page but their content will be collapsed by default." +msgstr "" + +#: src/Module/Moderation/Report/Create.php:291 +msgid "Their posts won't appear in your Network page anymore, but their replies can appear in forum threads. They still can follow you." +msgstr "" + +#: src/Module/Moderation/Report/Create.php:292 +msgid "Block contact" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:292 +msgid "Their posts won't appear in your Network page anymore, but their replies can appear in forum threads, with their content collapsed by default. They cannot follow you but still can have access to your public posts by other means." +msgstr "" + +#: src/Module/Moderation/Report/Create.php:295 +msgid "Forward report" +msgstr "" + +#: src/Module/Moderation/Report/Create.php:334 msgid "1. Pick a contact" msgstr "" -#: src/Module/Moderation/Report/Create.php:317 +#: src/Module/Moderation/Report/Create.php:335 msgid "2. Pick a category" msgstr "" -#: src/Module/Moderation/Report/Create.php:318 +#: src/Module/Moderation/Report/Create.php:336 msgid "2a. Pick rules" msgstr "" -#: src/Module/Moderation/Report/Create.php:319 +#: src/Module/Moderation/Report/Create.php:337 msgid "2b. Add comment" msgstr "" -#: src/Module/Moderation/Report/Create.php:320 +#: src/Module/Moderation/Report/Create.php:338 msgid "3. Pick posts" msgstr "" @@ -8522,54 +8519,54 @@ msgstr "" msgid "Remove" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:57 +#: src/Module/Privacy/PermissionTooltip.php:76 #, php-format msgid "Wrong type \"%s\", expected one of: %s" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:87 +#: src/Module/Privacy/PermissionTooltip.php:106 msgid "Model not found" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:104 +#: src/Module/Privacy/PermissionTooltip.php:133 msgid "Unlisted" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:110 +#: src/Module/Privacy/PermissionTooltip.php:141 msgid "Remote privacy information not available." msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:117 +#: src/Module/Privacy/PermissionTooltip.php:148 msgid "Visible to:" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:119 +#: src/Module/Privacy/PermissionTooltip.php:150 msgid "CC:" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:120 +#: src/Module/Privacy/PermissionTooltip.php:151 msgid "BCC:" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:121 +#: src/Module/Privacy/PermissionTooltip.php:152 msgid "Audience:" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:122 +#: src/Module/Privacy/PermissionTooltip.php:153 msgid "Attributed To:" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:220 +#: src/Module/Privacy/PermissionTooltip.php:251 #, php-format msgid "Collection (%s)" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:224 +#: src/Module/Privacy/PermissionTooltip.php:255 #, php-format msgid "Followers (%s)" msgstr "" -#: src/Module/Privacy/PermissionTooltip.php:241 +#: src/Module/Privacy/PermissionTooltip.php:272 #, php-format msgid "%d more" msgstr "" @@ -8578,86 +8575,86 @@ msgstr "" msgid "No contacts." msgstr "" -#: src/Module/Profile/Conversations.php:96 src/Module/Profile/Profile.php:342 +#: src/Module/Profile/Conversations.php:96 src/Module/Profile/Profile.php:362 #: src/Protocol/Feed.php:1124 #, php-format msgid "%s's posts" msgstr "" -#: src/Module/Profile/Conversations.php:97 src/Module/Profile/Profile.php:343 +#: src/Module/Profile/Conversations.php:97 src/Module/Profile/Profile.php:363 #: src/Protocol/Feed.php:1127 #, php-format msgid "%s's comments" msgstr "" -#: src/Module/Profile/Conversations.php:98 src/Module/Profile/Profile.php:344 +#: src/Module/Profile/Conversations.php:98 src/Module/Profile/Profile.php:364 #: src/Protocol/Feed.php:1120 #, php-format msgid "%s's timeline" msgstr "" -#: src/Module/Profile/Photos.php:157 src/Module/Profile/Photos.php:160 -#: src/Module/Profile/Photos.php:189 +#: src/Module/Profile/Photos.php:192 src/Module/Profile/Photos.php:195 +#: src/Module/Profile/Photos.php:226 #: src/Module/Settings/Profile/Photo/Index.php:44 #, php-format msgid "Image exceeds size limit of %s" msgstr "" -#: src/Module/Profile/Photos.php:163 +#: src/Module/Profile/Photos.php:198 msgid "Image upload didn't complete, please try again" msgstr "" -#: src/Module/Profile/Photos.php:166 +#: src/Module/Profile/Photos.php:201 msgid "Image file is missing" msgstr "" -#: src/Module/Profile/Photos.php:171 +#: src/Module/Profile/Photos.php:206 msgid "Server can't accept new file upload at this time, please contact your administrator" msgstr "" -#: src/Module/Profile/Photos.php:197 +#: src/Module/Profile/Photos.php:237 msgid "Image file is empty." msgstr "" -#: src/Module/Profile/Photos.php:349 +#: src/Module/Profile/Photos.php:396 msgid "View Album" msgstr "" -#: src/Module/Profile/Profile.php:103 src/Module/Profile/Restricted.php:38 +#: src/Module/Profile/Profile.php:121 src/Module/Profile/Restricted.php:38 msgid "Profile not found." msgstr "" -#: src/Module/Profile/Profile.php:149 +#: src/Module/Profile/Profile.php:167 #, php-format msgid "You're currently viewing your profile as %s Cancel" msgstr "" -#: src/Module/Profile/Profile.php:158 +#: src/Module/Profile/Profile.php:176 msgid "Full Name:" msgstr "" -#: src/Module/Profile/Profile.php:163 +#: src/Module/Profile/Profile.php:181 msgid "Member since:" msgstr "" -#: src/Module/Profile/Profile.php:169 +#: src/Module/Profile/Profile.php:187 msgid "j F, Y" msgstr "" -#: src/Module/Profile/Profile.php:170 +#: src/Module/Profile/Profile.php:188 msgid "j F" msgstr "" -#: src/Module/Profile/Profile.php:178 src/Util/Temporal.php:155 +#: src/Module/Profile/Profile.php:196 src/Util/Temporal.php:155 msgid "Birthday:" msgstr "" -#: src/Module/Profile/Profile.php:181 src/Module/Settings/Profile/Index.php:282 +#: src/Module/Profile/Profile.php:199 src/Module/Settings/Profile/Index.php:307 #: src/Util/Temporal.php:157 msgid "Age: " msgstr "" -#: src/Module/Profile/Profile.php:181 src/Module/Settings/Profile/Index.php:282 +#: src/Module/Profile/Profile.php:199 src/Module/Settings/Profile/Index.php:307 #: src/Util/Temporal.php:157 #, php-format msgid "%d year old" @@ -8665,19 +8662,19 @@ msgid_plural "%d years old" msgstr[0] "" msgstr[1] "" -#: src/Module/Profile/Profile.php:186 src/Module/Settings/Profile/Index.php:275 +#: src/Module/Profile/Profile.php:204 src/Module/Settings/Profile/Index.php:300 msgid "Description:" msgstr "" -#: src/Module/Profile/Profile.php:252 +#: src/Module/Profile/Profile.php:270 msgid "Groups:" msgstr "" -#: src/Module/Profile/Profile.php:264 +#: src/Module/Profile/Profile.php:282 msgid "View profile as:" msgstr "" -#: src/Module/Profile/Profile.php:281 +#: src/Module/Profile/Profile.php:299 msgid "View as" msgstr "" @@ -8735,160 +8732,160 @@ msgstr "" msgid "Remove post" msgstr "" -#: src/Module/Register.php:77 +#: src/Module/Register.php:81 msgid "Only parent users can create additional accounts." msgstr "" -#: src/Module/Register.php:92 src/Module/User/Import.php:98 +#: src/Module/Register.php:96 src/Module/User/Import.php:98 msgid "This site has exceeded the number of allowed daily account registrations. Please try again tomorrow." msgstr "" -#: src/Module/Register.php:109 +#: src/Module/Register.php:113 msgid "You may (optionally) fill in this form via OpenID by supplying your OpenID and clicking \"Register\"." msgstr "" -#: src/Module/Register.php:110 +#: src/Module/Register.php:114 msgid "If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items." msgstr "" -#: src/Module/Register.php:111 +#: src/Module/Register.php:115 msgid "Your OpenID (optional): " msgstr "" -#: src/Module/Register.php:120 +#: src/Module/Register.php:124 msgid "Include your profile in member directory?" msgstr "" -#: src/Module/Register.php:141 +#: src/Module/Register.php:149 msgid "Note for the admin" msgstr "" -#: src/Module/Register.php:141 +#: src/Module/Register.php:149 msgid "Leave a message for the admin, why you want to join this node" msgstr "" -#: src/Module/Register.php:142 +#: src/Module/Register.php:150 msgid "Membership on this site is by invitation only." msgstr "" -#: src/Module/Register.php:143 +#: src/Module/Register.php:151 msgid "Your invitation code: " msgstr "" -#: src/Module/Register.php:151 +#: src/Module/Register.php:159 msgid "Your Display Name (as you would like it to be displayed on this system):" msgstr "" -#: src/Module/Register.php:152 +#: src/Module/Register.php:160 msgid "Your Email Address (initial information will be sent there, so this must be a valid address):" msgstr "" -#: src/Module/Register.php:153 +#: src/Module/Register.php:161 msgid "Please repeat your e-mail address:" msgstr "" -#: src/Module/Register.php:155 src/Module/Security/PasswordTooLong.php:86 +#: src/Module/Register.php:163 src/Module/Security/PasswordTooLong.php:86 #: src/Module/Settings/Account.php:513 msgid "New Password:" msgstr "" -#: src/Module/Register.php:155 +#: src/Module/Register.php:163 msgid "Leave empty for an auto generated password." msgstr "" -#: src/Module/Register.php:156 src/Module/Security/PasswordTooLong.php:87 +#: src/Module/Register.php:164 src/Module/Security/PasswordTooLong.php:87 #: src/Module/Settings/Account.php:514 msgid "Confirm:" msgstr "" -#: src/Module/Register.php:157 +#: src/Module/Register.php:165 #, php-format msgid "Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \"nickname@%s\"." msgstr "" -#: src/Module/Register.php:158 +#: src/Module/Register.php:166 msgid "Choose a nickname: " msgstr "" -#: src/Module/Register.php:166 src/Module/User/Import.php:104 +#: src/Module/Register.php:174 src/Module/User/Import.php:104 msgid "Import" msgstr "" -#: src/Module/Register.php:167 +#: src/Module/Register.php:175 msgid "Import your profile to this friendica instance" msgstr "" -#: src/Module/Register.php:174 +#: src/Module/Register.php:182 msgid "Note: This node explicitly contains adult content" msgstr "" -#: src/Module/Register.php:176 src/Module/Settings/Delegation.php:167 +#: src/Module/Register.php:184 src/Module/Settings/Delegation.php:167 msgid "Parent Password:" msgstr "" -#: src/Module/Register.php:176 src/Module/Settings/Delegation.php:167 +#: src/Module/Register.php:184 src/Module/Settings/Delegation.php:167 msgid "Please enter the password of the parent account to legitimize your request." msgstr "" -#: src/Module/Register.php:205 +#: src/Module/Register.php:218 msgid "Password doesn't match." msgstr "" -#: src/Module/Register.php:211 +#: src/Module/Register.php:224 msgid "Please enter your password." msgstr "" -#: src/Module/Register.php:253 +#: src/Module/Register.php:266 msgid "You have entered too much information." msgstr "" -#: src/Module/Register.php:276 +#: src/Module/Register.php:289 msgid "Please enter the identical mail address in the second field." msgstr "" -#: src/Module/Register.php:284 +#: src/Module/Register.php:297 msgid "Nickname cannot start with a digit." msgstr "" -#: src/Module/Register.php:286 +#: src/Module/Register.php:299 msgid "Nickname can only contain US-ASCII characters." msgstr "" -#: src/Module/Register.php:315 +#: src/Module/Register.php:328 msgid "The additional account was created." msgstr "" -#: src/Module/Register.php:340 +#: src/Module/Register.php:353 msgid "Registration successful. Please check your email for further instructions." msgstr "" -#: src/Module/Register.php:348 +#: src/Module/Register.php:361 #, php-format msgid "Failed to send email message. Here your accout details:
login: %s
password: %s

You can change your password after login." msgstr "" -#: src/Module/Register.php:355 +#: src/Module/Register.php:368 msgid "Registration successful." msgstr "" -#: src/Module/Register.php:364 src/Module/Register.php:371 -#: src/Module/Register.php:381 +#: src/Module/Register.php:377 src/Module/Register.php:384 +#: src/Module/Register.php:394 msgid "Your registration can not be processed." msgstr "" -#: src/Module/Register.php:370 +#: src/Module/Register.php:383 msgid "You have to leave a request note for the admin." msgstr "" -#: src/Module/Register.php:380 +#: src/Module/Register.php:393 msgid "An internal error occured." msgstr "" -#: src/Module/Register.php:402 +#: src/Module/Register.php:415 msgid "Your registration is pending approval by the site owner." msgstr "" -#: src/Module/Search/Acl.php:64 +#: src/Module/Search/Acl.php:78 msgid "You must be logged in to use this module." msgstr "" @@ -9263,7 +9260,7 @@ msgid "Basic Settings" msgstr "" #: src/Module/Settings/Account.php:522 -#: src/Module/Settings/Profile/Index.php:274 +#: src/Module/Settings/Profile/Index.php:299 msgid "Display name:" msgstr "" @@ -9563,42 +9560,42 @@ msgstr "" 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:176 src/Module/Settings/Channels.php:197 +#: src/Module/Settings/Channels.php:176 src/Module/Settings/Channels.php:202 #: src/Module/Settings/Display.php:339 msgid "Label" msgstr "" -#: src/Module/Settings/Channels.php:177 src/Module/Settings/Channels.php:198 +#: src/Module/Settings/Channels.php:177 src/Module/Settings/Channels.php:203 #: src/Module/Settings/Display.php:340 #: src/Module/Settings/TwoFactor/AppSpecific.php:123 msgid "Description" msgstr "" -#: src/Module/Settings/Channels.php:178 src/Module/Settings/Channels.php:199 +#: src/Module/Settings/Channels.php:178 src/Module/Settings/Channels.php:204 msgid "Access Key" msgstr "" -#: src/Module/Settings/Channels.php:179 src/Module/Settings/Channels.php:200 +#: src/Module/Settings/Channels.php:179 src/Module/Settings/Channels.php:205 msgid "Circle/Channel" msgstr "" -#: src/Module/Settings/Channels.php:180 src/Module/Settings/Channels.php:201 +#: src/Module/Settings/Channels.php:180 src/Module/Settings/Channels.php:206 msgid "Include Tags" msgstr "" -#: src/Module/Settings/Channels.php:181 src/Module/Settings/Channels.php:202 +#: src/Module/Settings/Channels.php:181 src/Module/Settings/Channels.php:207 msgid "Exclude Tags" msgstr "" -#: src/Module/Settings/Channels.php:182 src/Module/Settings/Channels.php:203 +#: src/Module/Settings/Channels.php:182 src/Module/Settings/Channels.php:208 msgid "Minimum Size" msgstr "" -#: src/Module/Settings/Channels.php:183 src/Module/Settings/Channels.php:204 +#: src/Module/Settings/Channels.php:183 src/Module/Settings/Channels.php:209 msgid "Maximum Size" msgstr "" -#: src/Module/Settings/Channels.php:184 src/Module/Settings/Channels.php:205 +#: src/Module/Settings/Channels.php:184 src/Module/Settings/Channels.php:210 msgid "Full Text Search" msgstr "" @@ -9614,76 +9611,80 @@ msgstr "" msgid "Check to delete this entry from the channel list" msgstr "" -#: src/Module/Settings/Channels.php:197 -msgid "Short name for the channel. It is displayed on the channels widget." +#: src/Module/Settings/Channels.php:196 +msgid "Comma separated list of tags. If a post contain any of these tags, then it will not be part of this channel." msgstr "" #: src/Module/Settings/Channels.php:198 -msgid "This should describe the content of the channel in a few word." -msgstr "" - -#: src/Module/Settings/Channels.php:199 -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:200 -msgid "Select a circle or channel, that your channel should be based on." -msgstr "" - -#: src/Module/Settings/Channels.php:201 -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:202 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:202 +msgid "Short name for the channel. It is displayed on the channels widget." +msgstr "" + #: src/Module/Settings/Channels.php:203 -msgid "Minimum post size. Leave empty for no minimum size. The size is calculated without links, attached posts, mentions or hashtags." +msgid "This should describe the content of the channel in a few word." msgstr "" #: src/Module/Settings/Channels.php:204 -msgid "Maximum post size. Leave empty for no maximum size. The size is calculated without links, attached posts, mentions or hashtags." +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:205 +msgid "Select a circle or channel, that your channel should be based on." +msgstr "" + +#: src/Module/Settings/Channels.php:206 +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:208 +msgid "Minimum post size. Leave empty for no minimum size. The size is calculated without links, attached posts, mentions or hashtags." +msgstr "" + +#: src/Module/Settings/Channels.php:209 +msgid "Maximum post size. Leave empty for no maximum size. The size is calculated without links, attached posts, mentions or hashtags." +msgstr "" + +#: src/Module/Settings/Channels.php:210 #, php-format msgid "Search terms for the body, supports the \"boolean mode\" operators from MariaDB. See the help for a complete list of operators and additional keywords: %s" msgstr "" -#: src/Module/Settings/Channels.php:206 +#: src/Module/Settings/Channels.php:211 msgid "Check to display images in the channel." msgstr "" -#: src/Module/Settings/Channels.php:207 +#: src/Module/Settings/Channels.php:212 msgid "Check to display videos in the channel." msgstr "" -#: src/Module/Settings/Channels.php:208 +#: src/Module/Settings/Channels.php:213 msgid "Check to display audio in the channel." msgstr "" -#: src/Module/Settings/Channels.php:209 +#: src/Module/Settings/Channels.php:214 msgid "Select all languages that you want to see in this channel." msgstr "" -#: src/Module/Settings/Channels.php:213 +#: src/Module/Settings/Channels.php:218 msgid "Add new entry to the channel list" msgstr "" -#: src/Module/Settings/Channels.php:214 +#: src/Module/Settings/Channels.php:219 msgid "Add" msgstr "" -#: src/Module/Settings/Channels.php:216 +#: src/Module/Settings/Channels.php:221 msgid "Current Entries in the channel list" msgstr "" -#: src/Module/Settings/Channels.php:219 +#: src/Module/Settings/Channels.php:224 msgid "Delete entry from the channel list" msgstr "" -#: src/Module/Settings/Channels.php:220 +#: src/Module/Settings/Channels.php:225 msgid "Delete entry from the channel list?" msgstr "" @@ -10175,81 +10176,81 @@ msgstr "" msgid "Remove authorization" msgstr "" -#: src/Module/Settings/Profile/Index.php:102 +#: src/Module/Settings/Profile/Index.php:126 msgid "Display Name is required." msgstr "" -#: src/Module/Settings/Profile/Index.php:156 +#: src/Module/Settings/Profile/Index.php:180 msgid "Profile couldn't be updated." msgstr "" -#: src/Module/Settings/Profile/Index.php:196 -#: src/Module/Settings/Profile/Index.php:217 +#: src/Module/Settings/Profile/Index.php:220 +#: src/Module/Settings/Profile/Index.php:241 msgid "Label:" msgstr "" -#: src/Module/Settings/Profile/Index.php:197 -#: src/Module/Settings/Profile/Index.php:218 +#: src/Module/Settings/Profile/Index.php:221 +#: src/Module/Settings/Profile/Index.php:242 msgid "Value:" msgstr "" -#: src/Module/Settings/Profile/Index.php:208 -#: src/Module/Settings/Profile/Index.php:229 +#: src/Module/Settings/Profile/Index.php:232 +#: src/Module/Settings/Profile/Index.php:253 msgid "Field Permissions" msgstr "" -#: src/Module/Settings/Profile/Index.php:209 -#: src/Module/Settings/Profile/Index.php:230 +#: src/Module/Settings/Profile/Index.php:233 +#: src/Module/Settings/Profile/Index.php:254 msgid "(click to open/close)" msgstr "" -#: src/Module/Settings/Profile/Index.php:215 +#: src/Module/Settings/Profile/Index.php:239 msgid "Add a new profile field" msgstr "" -#: src/Module/Settings/Profile/Index.php:238 +#: src/Module/Settings/Profile/Index.php:262 msgid "The homepage is verified. A rel=\"me\" link back to your Friendica profile page was found on the homepage." msgstr "" -#: src/Module/Settings/Profile/Index.php:240 +#: src/Module/Settings/Profile/Index.php:264 #, php-format msgid "To verify your homepage, add a rel=\"me\" link to it, pointing to your profile URL (%s)." msgstr "" -#: src/Module/Settings/Profile/Index.php:246 +#: src/Module/Settings/Profile/Index.php:270 msgid "Profile Actions" msgstr "" -#: src/Module/Settings/Profile/Index.php:247 +#: src/Module/Settings/Profile/Index.php:271 msgid "Edit Profile Details" msgstr "" -#: src/Module/Settings/Profile/Index.php:249 +#: src/Module/Settings/Profile/Index.php:273 msgid "Change Profile Photo" msgstr "" -#: src/Module/Settings/Profile/Index.php:252 +#: src/Module/Settings/Profile/Index.php:276 msgid "Profile picture" msgstr "" -#: src/Module/Settings/Profile/Index.php:253 +#: src/Module/Settings/Profile/Index.php:277 msgid "Location" msgstr "" -#: src/Module/Settings/Profile/Index.php:254 src/Util/Temporal.php:83 +#: src/Module/Settings/Profile/Index.php:278 src/Util/Temporal.php:83 #: src/Util/Temporal.php:85 msgid "Miscellaneous" msgstr "" -#: src/Module/Settings/Profile/Index.php:255 +#: src/Module/Settings/Profile/Index.php:279 msgid "Custom Profile Fields" msgstr "" -#: src/Module/Settings/Profile/Index.php:256 src/Module/Welcome.php:44 +#: src/Module/Settings/Profile/Index.php:280 src/Module/Welcome.php:44 msgid "Upload Profile Photo" msgstr "" -#: src/Module/Settings/Profile/Index.php:257 +#: src/Module/Settings/Profile/Index.php:282 #, php-format msgid "" "

Custom fields appear on your profile page.

\n" @@ -10259,59 +10260,59 @@ msgid "" "\t\t\t\t

Non-public fields can only be seen by the selected Friendica contacts or the Friendica contacts in the selected circles.

" msgstr "" -#: src/Module/Settings/Profile/Index.php:277 +#: src/Module/Settings/Profile/Index.php:302 msgid "Street Address:" msgstr "" -#: src/Module/Settings/Profile/Index.php:278 +#: src/Module/Settings/Profile/Index.php:303 msgid "Locality/City:" msgstr "" -#: src/Module/Settings/Profile/Index.php:279 +#: src/Module/Settings/Profile/Index.php:304 msgid "Region/State:" msgstr "" -#: src/Module/Settings/Profile/Index.php:280 +#: src/Module/Settings/Profile/Index.php:305 msgid "Postal/Zip Code:" msgstr "" -#: src/Module/Settings/Profile/Index.php:281 +#: src/Module/Settings/Profile/Index.php:306 msgid "Country:" msgstr "" -#: src/Module/Settings/Profile/Index.php:283 +#: src/Module/Settings/Profile/Index.php:308 msgid "XMPP (Jabber) address:" msgstr "" -#: src/Module/Settings/Profile/Index.php:283 +#: src/Module/Settings/Profile/Index.php:308 msgid "The XMPP address will be published so that people can follow you there." msgstr "" -#: src/Module/Settings/Profile/Index.php:284 +#: src/Module/Settings/Profile/Index.php:309 msgid "Matrix (Element) address:" msgstr "" -#: src/Module/Settings/Profile/Index.php:284 +#: src/Module/Settings/Profile/Index.php:309 msgid "The Matrix address will be published so that people can follow you there." msgstr "" -#: src/Module/Settings/Profile/Index.php:285 +#: src/Module/Settings/Profile/Index.php:310 msgid "Homepage URL:" msgstr "" -#: src/Module/Settings/Profile/Index.php:286 +#: src/Module/Settings/Profile/Index.php:311 msgid "Public Keywords:" msgstr "" -#: src/Module/Settings/Profile/Index.php:286 +#: src/Module/Settings/Profile/Index.php:311 msgid "(Used for suggesting potential friends, can be seen by others)" msgstr "" -#: src/Module/Settings/Profile/Index.php:287 +#: src/Module/Settings/Profile/Index.php:312 msgid "Private Keywords:" msgstr "" -#: src/Module/Settings/Profile/Index.php:287 +#: src/Module/Settings/Profile/Index.php:312 msgid "(Used for searching profiles, never shown to others)" msgstr "" @@ -10393,8 +10394,8 @@ msgid "If this error persists, please contact your administrator." msgstr "" #: src/Module/Settings/RemoveMe.php:76 -#: src/Navigation/Notifications/Repository/Notify.php:463 -#: src/Navigation/Notifications/Repository/Notify.php:487 +#: src/Navigation/Notifications/Repository/Notify.php:475 +#: src/Navigation/Notifications/Repository/Notify.php:499 msgid "[Friendica System Notify]" msgstr "" @@ -11197,217 +11198,217 @@ msgstr "" msgid "%1$s commented on your thread %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:210 -#: src/Navigation/Notifications/Repository/Notify.php:754 +#: src/Navigation/Notifications/Repository/Notify.php:222 +#: src/Navigation/Notifications/Repository/Notify.php:770 msgid "[Friendica:Notify]" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:278 +#: src/Navigation/Notifications/Repository/Notify.php:290 #, php-format msgid "%s New mail received at %s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:280 +#: src/Navigation/Notifications/Repository/Notify.php:292 #, php-format msgid "%1$s sent you a new private message at %2$s." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:281 +#: src/Navigation/Notifications/Repository/Notify.php:293 msgid "a private message" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:281 +#: src/Navigation/Notifications/Repository/Notify.php:293 #, php-format msgid "%1$s sent you %2$s." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:283 +#: src/Navigation/Notifications/Repository/Notify.php:295 #, php-format msgid "Please visit %s to view and/or reply to your private messages." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:313 +#: src/Navigation/Notifications/Repository/Notify.php:325 #, php-format msgid "%1$s commented on %2$s's %3$s %4$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:318 +#: src/Navigation/Notifications/Repository/Notify.php:330 #, php-format msgid "%1$s commented on your %2$s %3$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:322 +#: src/Navigation/Notifications/Repository/Notify.php:334 #, php-format msgid "%1$s commented on their %2$s %3$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:326 -#: src/Navigation/Notifications/Repository/Notify.php:788 +#: src/Navigation/Notifications/Repository/Notify.php:338 +#: src/Navigation/Notifications/Repository/Notify.php:804 #, php-format msgid "%1$s Comment to conversation #%2$d by %3$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:328 +#: src/Navigation/Notifications/Repository/Notify.php:340 #, php-format msgid "%s commented on an item/conversation you have been following." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:332 -#: src/Navigation/Notifications/Repository/Notify.php:348 -#: src/Navigation/Notifications/Repository/Notify.php:814 +#: src/Navigation/Notifications/Repository/Notify.php:344 +#: src/Navigation/Notifications/Repository/Notify.php:360 +#: src/Navigation/Notifications/Repository/Notify.php:830 #, php-format msgid "Please visit %s to view and/or reply to the conversation." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:339 +#: src/Navigation/Notifications/Repository/Notify.php:351 #, php-format msgid "%s %s posted to your profile wall" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:341 +#: src/Navigation/Notifications/Repository/Notify.php:353 #, php-format msgid "%1$s posted to your profile wall at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:343 +#: src/Navigation/Notifications/Repository/Notify.php:355 #, php-format msgid "%1$s posted to [url=%2$s]your wall[/url]" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:356 +#: src/Navigation/Notifications/Repository/Notify.php:368 #, php-format msgid "%s Introduction received" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:358 +#: src/Navigation/Notifications/Repository/Notify.php:370 #, php-format msgid "You've received an introduction from '%1$s' at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:360 +#: src/Navigation/Notifications/Repository/Notify.php:372 #, php-format msgid "You've received [url=%1$s]an introduction[/url] from %2$s." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:365 -#: src/Navigation/Notifications/Repository/Notify.php:414 +#: src/Navigation/Notifications/Repository/Notify.php:377 +#: src/Navigation/Notifications/Repository/Notify.php:426 #, php-format msgid "You may visit their profile at %s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:367 +#: src/Navigation/Notifications/Repository/Notify.php:379 #, php-format msgid "Please visit %s to approve or reject the introduction." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:374 +#: src/Navigation/Notifications/Repository/Notify.php:386 #, php-format msgid "%s A new person is sharing with you" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:376 -#: src/Navigation/Notifications/Repository/Notify.php:378 +#: src/Navigation/Notifications/Repository/Notify.php:388 +#: src/Navigation/Notifications/Repository/Notify.php:390 #, php-format msgid "%1$s is sharing with you at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:385 +#: src/Navigation/Notifications/Repository/Notify.php:397 #, php-format msgid "%s You have a new follower" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:387 -#: src/Navigation/Notifications/Repository/Notify.php:389 +#: src/Navigation/Notifications/Repository/Notify.php:399 +#: src/Navigation/Notifications/Repository/Notify.php:401 #, php-format msgid "You have a new follower at %2$s : %1$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:402 +#: src/Navigation/Notifications/Repository/Notify.php:414 #, php-format msgid "%s Friend suggestion received" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:404 +#: src/Navigation/Notifications/Repository/Notify.php:416 #, php-format msgid "You've received a friend suggestion from '%1$s' at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:406 +#: src/Navigation/Notifications/Repository/Notify.php:418 #, php-format msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:412 +#: src/Navigation/Notifications/Repository/Notify.php:424 msgid "Name:" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:413 +#: src/Navigation/Notifications/Repository/Notify.php:425 msgid "Photo:" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:416 +#: src/Navigation/Notifications/Repository/Notify.php:428 #, php-format msgid "Please visit %s to approve or reject the suggestion." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:424 -#: src/Navigation/Notifications/Repository/Notify.php:440 +#: src/Navigation/Notifications/Repository/Notify.php:436 +#: src/Navigation/Notifications/Repository/Notify.php:452 #, php-format msgid "%s Connection accepted" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:426 -#: src/Navigation/Notifications/Repository/Notify.php:442 +#: src/Navigation/Notifications/Repository/Notify.php:438 +#: src/Navigation/Notifications/Repository/Notify.php:454 #, php-format msgid "'%1$s' has accepted your connection request at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:428 -#: src/Navigation/Notifications/Repository/Notify.php:444 +#: src/Navigation/Notifications/Repository/Notify.php:440 +#: src/Navigation/Notifications/Repository/Notify.php:456 #, php-format msgid "%2$s has accepted your [url=%1$s]connection request[/url]." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:433 +#: src/Navigation/Notifications/Repository/Notify.php:445 msgid "You are now mutual friends and may exchange status updates, photos, and email without restriction." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:435 +#: src/Navigation/Notifications/Repository/Notify.php:447 #, php-format msgid "Please visit %s if you wish to make any changes to this relationship." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:449 +#: src/Navigation/Notifications/Repository/Notify.php:461 #, php-format msgid "'%1$s' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:451 +#: src/Navigation/Notifications/Repository/Notify.php:463 #, php-format msgid "'%1$s' may choose to extend this into a two-way or more permissive relationship in the future." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:453 +#: src/Navigation/Notifications/Repository/Notify.php:465 #, php-format msgid "Please visit %s if you wish to make any changes to this relationship." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:463 +#: src/Navigation/Notifications/Repository/Notify.php:475 msgid "registration request" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:465 +#: src/Navigation/Notifications/Repository/Notify.php:477 #, php-format msgid "You've received a registration request from '%1$s' at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:467 +#: src/Navigation/Notifications/Repository/Notify.php:479 #, php-format msgid "You've received a [url=%1$s]registration request[/url] from %2$s." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:473 -#: src/Navigation/Notifications/Repository/Notify.php:497 +#: src/Navigation/Notifications/Repository/Notify.php:485 +#: src/Navigation/Notifications/Repository/Notify.php:509 #, php-format msgid "" "Display Name:\t%s\n" @@ -11415,46 +11416,46 @@ msgid "" "Login Name:\t%s (%s)" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:480 +#: src/Navigation/Notifications/Repository/Notify.php:492 #, php-format msgid "Please visit %s to approve or reject the request." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:487 +#: src/Navigation/Notifications/Repository/Notify.php:499 msgid "new registration" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:489 +#: src/Navigation/Notifications/Repository/Notify.php:501 #, php-format msgid "You've received a new registration from '%1$s' at %2$s" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:491 +#: src/Navigation/Notifications/Repository/Notify.php:503 #, php-format msgid "You've received a [url=%1$s]new registration[/url] from %2$s." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:504 +#: src/Navigation/Notifications/Repository/Notify.php:516 #, php-format msgid "Please visit %s to have a look at the new registration." msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:782 +#: src/Navigation/Notifications/Repository/Notify.php:798 #, php-format msgid "%s %s tagged you" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:785 +#: src/Navigation/Notifications/Repository/Notify.php:801 #, php-format msgid "%s %s shared a new post" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:793 +#: src/Navigation/Notifications/Repository/Notify.php:809 #, php-format msgid "%1$s %2$s liked your post #%3$d" msgstr "" -#: src/Navigation/Notifications/Repository/Notify.php:796 +#: src/Navigation/Notifications/Repository/Notify.php:812 #, php-format msgid "%1$s %2$s liked your comment on #%3$d" msgstr "" @@ -11478,282 +11479,282 @@ msgstr "" msgid "%s posted an update." msgstr "" -#: src/Object/Post.php:124 +#: src/Object/Post.php:123 msgid "Private Message" msgstr "" -#: src/Object/Post.php:128 +#: src/Object/Post.php:127 msgid "Public Message" msgstr "" -#: src/Object/Post.php:132 +#: src/Object/Post.php:131 msgid "Unlisted Message" msgstr "" -#: src/Object/Post.php:168 +#: src/Object/Post.php:167 msgid "This entry was edited" msgstr "" -#: src/Object/Post.php:196 +#: src/Object/Post.php:195 msgid "Connector Message" msgstr "" -#: src/Object/Post.php:225 src/Object/Post.php:227 +#: src/Object/Post.php:224 src/Object/Post.php:226 msgid "Edit" msgstr "" -#: src/Object/Post.php:261 +#: src/Object/Post.php:260 msgid "Delete globally" msgstr "" -#: src/Object/Post.php:261 +#: src/Object/Post.php:260 msgid "Remove locally" msgstr "" -#: src/Object/Post.php:268 +#: src/Object/Post.php:267 #, php-format msgid "Block %s" msgstr "" -#: src/Object/Post.php:273 +#: src/Object/Post.php:272 #, php-format msgid "Ignore %s" msgstr "" -#: src/Object/Post.php:278 +#: src/Object/Post.php:277 #, php-format msgid "Collapse %s" msgstr "" -#: src/Object/Post.php:282 +#: src/Object/Post.php:281 msgid "Report post" msgstr "" -#: src/Object/Post.php:293 +#: src/Object/Post.php:292 msgid "Save to folder" msgstr "" -#: src/Object/Post.php:339 +#: src/Object/Post.php:338 msgid "I will attend" msgstr "" -#: src/Object/Post.php:339 +#: src/Object/Post.php:338 msgid "I will not attend" msgstr "" -#: src/Object/Post.php:339 +#: src/Object/Post.php:338 msgid "I might attend" msgstr "" -#: src/Object/Post.php:386 +#: src/Object/Post.php:385 msgid "Ignore thread" msgstr "" -#: src/Object/Post.php:387 +#: src/Object/Post.php:386 msgid "Unignore thread" msgstr "" -#: src/Object/Post.php:388 +#: src/Object/Post.php:387 msgid "Toggle ignore status" msgstr "" -#: src/Object/Post.php:398 +#: src/Object/Post.php:397 msgid "Add star" msgstr "" -#: src/Object/Post.php:399 +#: src/Object/Post.php:398 msgid "Remove star" msgstr "" -#: src/Object/Post.php:400 +#: src/Object/Post.php:399 msgid "Toggle star status" msgstr "" -#: src/Object/Post.php:411 +#: src/Object/Post.php:410 msgid "Pin" msgstr "" -#: src/Object/Post.php:412 +#: src/Object/Post.php:411 msgid "Unpin" msgstr "" -#: src/Object/Post.php:413 +#: src/Object/Post.php:412 msgid "Toggle pin status" msgstr "" -#: src/Object/Post.php:416 +#: src/Object/Post.php:415 msgid "Pinned" msgstr "" -#: src/Object/Post.php:421 +#: src/Object/Post.php:420 msgid "Add tag" msgstr "" -#: src/Object/Post.php:436 +#: src/Object/Post.php:435 msgid "Quote share this" msgstr "" -#: src/Object/Post.php:436 +#: src/Object/Post.php:435 msgid "Quote Share" msgstr "" -#: src/Object/Post.php:439 +#: src/Object/Post.php:438 msgid "Reshare this" msgstr "" -#: src/Object/Post.php:439 +#: src/Object/Post.php:438 msgid "Reshare" msgstr "" -#: src/Object/Post.php:440 +#: src/Object/Post.php:439 msgid "Cancel your Reshare" msgstr "" -#: src/Object/Post.php:440 +#: src/Object/Post.php:439 msgid "Unshare" msgstr "" -#: src/Object/Post.php:484 +#: src/Object/Post.php:483 #, php-format msgid "%s (Received %s)" msgstr "" -#: src/Object/Post.php:490 +#: src/Object/Post.php:489 msgid "Comment this item on your system" msgstr "" -#: src/Object/Post.php:490 +#: src/Object/Post.php:489 msgid "Remote comment" msgstr "" -#: src/Object/Post.php:514 +#: src/Object/Post.php:513 msgid "Share via ..." msgstr "" -#: src/Object/Post.php:514 +#: src/Object/Post.php:513 msgid "Share via external services" msgstr "" -#: src/Object/Post.php:521 +#: src/Object/Post.php:520 msgid "Unknown parent" msgstr "" -#: src/Object/Post.php:525 +#: src/Object/Post.php:524 #, php-format msgid "in reply to %s" msgstr "" -#: src/Object/Post.php:527 +#: src/Object/Post.php:526 msgid "Parent is probably private or not federated." msgstr "" -#: src/Object/Post.php:551 +#: src/Object/Post.php:550 msgid "to" msgstr "" -#: src/Object/Post.php:552 +#: src/Object/Post.php:551 msgid "via" msgstr "" -#: src/Object/Post.php:553 +#: src/Object/Post.php:552 msgid "Wall-to-Wall" msgstr "" -#: src/Object/Post.php:554 +#: src/Object/Post.php:553 msgid "via Wall-To-Wall:" msgstr "" -#: src/Object/Post.php:609 +#: src/Object/Post.php:608 #, php-format msgid "Reply to %s" msgstr "" -#: src/Object/Post.php:631 +#: src/Object/Post.php:630 msgid "Notifier task is pending" msgstr "" -#: src/Object/Post.php:632 +#: src/Object/Post.php:631 msgid "Delivery to remote servers is pending" msgstr "" -#: src/Object/Post.php:633 +#: src/Object/Post.php:632 msgid "Delivery to remote servers is underway" msgstr "" -#: src/Object/Post.php:634 +#: src/Object/Post.php:633 msgid "Delivery to remote servers is mostly done" msgstr "" -#: src/Object/Post.php:635 +#: src/Object/Post.php:634 msgid "Delivery to remote servers is done" msgstr "" -#: src/Object/Post.php:660 +#: src/Object/Post.php:659 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: src/Object/Post.php:661 +#: src/Object/Post.php:660 msgid "Show more" msgstr "" -#: src/Object/Post.php:662 +#: src/Object/Post.php:661 msgid "Show fewer" msgstr "" -#: src/Object/Post.php:699 +#: src/Object/Post.php:698 #, php-format msgid "Reshared by: %s" msgstr "" -#: src/Object/Post.php:704 +#: src/Object/Post.php:703 #, php-format msgid "Viewed by: %s" msgstr "" -#: src/Object/Post.php:709 +#: src/Object/Post.php:708 #, php-format msgid "Read by: %s" msgstr "" -#: src/Object/Post.php:714 +#: src/Object/Post.php:713 #, php-format msgid "Liked by: %s" msgstr "" -#: src/Object/Post.php:719 +#: src/Object/Post.php:718 #, php-format msgid "Disliked by: %s" msgstr "" -#: src/Object/Post.php:724 +#: src/Object/Post.php:723 #, php-format msgid "Attended by: %s" msgstr "" -#: src/Object/Post.php:729 +#: src/Object/Post.php:728 #, php-format msgid "Maybe attended by: %s" msgstr "" -#: src/Object/Post.php:734 +#: src/Object/Post.php:733 #, php-format msgid "Not attended by: %s" msgstr "" -#: src/Object/Post.php:739 +#: src/Object/Post.php:738 #, php-format msgid "Commented by: %s" msgstr "" -#: src/Object/Post.php:744 +#: src/Object/Post.php:743 #, php-format msgid "Reacted with %s by: %s" msgstr "" -#: src/Object/Post.php:767 +#: src/Object/Post.php:766 #, php-format msgid "Quote shared by: %s" msgstr "" @@ -12123,7 +12124,7 @@ msgstr "" msgid "Community Pages" msgstr "" -#: view/theme/vier/config.php:127 view/theme/vier/theme.php:136 +#: view/theme/vier/config.php:127 view/theme/vier/theme.php:135 msgid "Community Profiles" msgstr "" @@ -12131,7 +12132,7 @@ msgstr "" msgid "Help or @NewHere ?" msgstr "" -#: view/theme/vier/config.php:129 view/theme/vier/theme.php:307 +#: view/theme/vier/config.php:129 view/theme/vier/theme.php:308 msgid "Connect Services" msgstr "" @@ -12139,10 +12140,10 @@ msgstr "" msgid "Find Friends" msgstr "" -#: view/theme/vier/config.php:131 view/theme/vier/theme.php:163 +#: view/theme/vier/config.php:131 view/theme/vier/theme.php:162 msgid "Last users" msgstr "" -#: view/theme/vier/theme.php:222 +#: view/theme/vier/theme.php:221 msgid "Quick Start" msgstr "" From 3af5caa950265b1b6460bd36f76d071e977d0db7 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 18 Apr 2025 04:22:56 +0000 Subject: [PATCH 09/33] Use alias for profile link in reshare --- src/Content/Text/BBCode.php | 24 +++++++++++++++++++++--- src/Protocol/ATProtocol/Processor.php | 11 ++++------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index d111437dff..55a46b88aa 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -913,13 +913,18 @@ class BBCode default: $text = ($is_quote_share ? "\n" : ''); - $contact = Contact::getByURL($attributes['profile'], false, ['network']); + $contact = Contact::getByURL($attributes['profile'], false, ['network', 'url', 'alias']); $network = $contact['network'] ?? Protocol::PHANTOM; + if (!empty($contact)) { + $profile = Contact::getProfileLink($contact); + } else { + $profile = $attributes['profile']; + } $gsid = ContactSelector::getServerIdForProfile($attributes['profile']); $tpl = Renderer::getMarkupTemplate('shared_content.tpl'); $text .= self::SHARED_ANCHOR . Renderer::replaceMacros($tpl, [ - '$profile' => $attributes['profile'], + '$profile' => $profile, '$avatar' => $attributes['avatar'], '$author' => $attributes['author'], '$link' => $attributes['link'], @@ -1984,12 +1989,25 @@ class BBCode '', $text ); - } elseif (in_array($simple_html, [self::INTERNAL, self::EXTERNAL, self::TWITTER_API])) { + } elseif (in_array($simple_html, [self::EXTERNAL, self::TWITTER_API])) { $text = preg_replace( "/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '$1$3', $text ); + } elseif ($simple_html == self::INTERNAL) { + if (preg_match_all("/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", $text, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $contact = Contact::getByURL($match[2], false, ['network', 'url', 'alias']); + if (!empty($contact)) { + $url = Contact::getProfileLink($contact); + } else { + $url = $match[2]; + } + $text = str_replace($match[0], '' . $match[1] . '' . $match[3] . '', $text); + } + + } } elseif ($simple_html == self::MASTODON_API) { $text = preg_replace( "/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", diff --git a/src/Protocol/ATProtocol/Processor.php b/src/Protocol/ATProtocol/Processor.php index 2c0e2528c5..1ac2a9f00c 100755 --- a/src/Protocol/ATProtocol/Processor.php +++ b/src/Protocol/ATProtocol/Processor.php @@ -506,13 +506,10 @@ class Processor break; case 'app.bsky.richtext.facet#mention': - $contact = Contact::getByURL($feature->did, null, ['id']); - if (!empty($contact['id'])) { - $url = $this->baseURL . '/contact/' . $contact['id']; - if (substr($linktext, 0, 1) == '@') { - $prefix .= '@'; - $linktext = substr($linktext, 1); - } + $url = $feature->did; + if (substr($linktext, 0, 1) == '@') { + $prefix .= '@'; + $linktext = substr($linktext, 1); } break; From 35ae7278f704b13786d16b6f17d25fe5afd7f7e4 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 18 May 2025 12:29:46 +0000 Subject: [PATCH 10/33] Added test --- tests/datasets/api.fixture.php | 48 +++++++++++++++++++-------- tests/src/Content/Text/BBCodeTest.php | 23 +++++++++++++ 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/tests/datasets/api.fixture.php b/tests/datasets/api.fixture.php index 1596726114..5a31cfb3b9 100644 --- a/tests/datasets/api.fixture.php +++ b/tests/datasets/api.fixture.php @@ -13,11 +13,11 @@ use Friendica\Model\Notification; return [ 'gserver' => [ [ - 'url' => 'https://friendica.local', - 'nurl' => 'http://friendica.local', - 'register_policy' => 0, + 'url' => 'https://friendica.local', + 'nurl' => 'http://friendica.local', + 'register_policy' => 0, 'registered-users' => 0, - 'network' => 'unkn', + 'network' => 'unkn', ], ], // Base test config to avoid notice messages @@ -88,6 +88,11 @@ return [ 'uri' => 'https://friendica.local/profile/mutualcontact', 'guid' => '46', ], + [ + 'id' => 49, + 'uri' => 'https://domain.tld/profile/remotecontact', + 'guid' => '49', + ], [ 'id' => 100, 'uri' => 'https://friendica.local/posts/100', @@ -214,6 +219,23 @@ return [ 'network' => Protocol::DFRN, 'location' => 'DFRN', ], + [ + 'id' => 49, + 'uid' => 0, + 'uri-id' => 43, + 'name' => 'Remote user', + 'nick' => 'remotecontact', + 'self' => 0, + 'nurl' => 'http://domain.tld/profile/remotecontact', + 'url' => 'https://domain.tld/profile/remotecontact', + 'alias' => 'https://domain.tld/~remotecontact', + 'about' => 'User used in tests', + 'pending' => 0, + 'blocked' => 0, + 'rel' => Contact::FOLLOWER, + 'network' => Protocol::ACTIVITYPUB, + 'location' => 'AP', + ], ], 'apcontact' => [ [ @@ -343,7 +365,7 @@ return [ 'suscipit aut facilis ut inventore omnis exercitationem quo magnam ' . 'consequatur maxime aut illum soluta quaerat natus unde aspernatur ' . 'et sed beatae nihil ullam temporibus corporis ratione blanditiis', - 'plink' => 'https://friendica.local/display/6', + 'plink' => 'https://friendica.local/display/6', ], [ 'uri-id' => 100, @@ -912,8 +934,8 @@ return [ ], 'profile' => [ [ - 'id' => 1, - 'uid' => 42, + 'id' => 1, + 'uid' => 42, 'locality' => 'DFRN', ], ], @@ -933,18 +955,18 @@ return [ ], 'group_member' => [ [ - 'id' => 1, - 'gid' => 1, + 'id' => 1, + 'gid' => 1, 'contact-id' => 43, ], [ - 'id' => 2, - 'gid' => 1, + 'id' => 2, + 'gid' => 1, 'contact-id' => 43, ], [ - 'id' => 3, - 'gid' => 2, + 'id' => 3, + 'gid' => 2, 'contact-id' => 43, ], ], diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index 9c61e10887..c7c7220cd9 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -615,4 +615,27 @@ Lucas: For the right price, yes.[/share]', self::assertEquals($expected, $actual); } + + public function dataProfileLink(): array + { + return [ + 'mention' => [ + 'expected' => 'Test 1: @Remote contact', + 'text' => 'Test 1: @[url=https://domain.tld/profile/remotecontact]Remote contact[/url]', + ], + ]; + } + + /** + * @dataProvider dataProfileLink + * + * @param string $expected Expected BBCode output + * @param string $text Input text + */ + public function testProfileLink(string $expected, string $text) + { + $actual = BBCode::convertForUriId(0, $text); + + self::assertEquals($expected, $actual); + } } From 70e57b54c3bb6693c87e3760c7178b6bf8fb21ea Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Tue, 20 May 2025 22:16:18 +0200 Subject: [PATCH 11/33] Support YouTube links without www. --- src/Content/Text/BBCode.php | 6 +++--- src/Content/Text/Markdown.php | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 55a46b88aa..38beb89d80 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1210,9 +1210,9 @@ class BBCode */ private static function normalizeVideoLinks(string $text): string { - $text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); - $text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); - $text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/shorts\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/(www.)?youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/(www.)?youtube.com\/embed\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/(www.)?youtube.com\/shorts\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); $text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); $text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 8aa9453041..1dd0151718 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -122,8 +122,9 @@ class Markdown //$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$1[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/www.youtube.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$1[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/embed\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism', '[vimeo]$1[/vimeo]', 'url', $s); From 978dda0b4eb3f193155d8f816024d9e74197fc1f Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Tue, 20 May 2025 22:54:00 +0200 Subject: [PATCH 12/33] same order (watch, embed, shorts) --- src/Content/Text/Markdown.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 1dd0151718..c3d069a5f6 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -123,8 +123,8 @@ class Markdown //$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/embed\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism', '[vimeo]$1[/vimeo]', 'url', $s); From 423ab06010e540eab30ede9e0e7ded701d94ae37 Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Thu, 22 May 2025 01:53:48 +0200 Subject: [PATCH 13/33] escape the dots --- src/Content/Text/BBCode.php | 12 ++++++------ src/Content/Text/Markdown.php | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 38beb89d80..9c999e789a 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1210,13 +1210,13 @@ class BBCode */ private static function normalizeVideoLinks(string $text): string { - $text = preg_replace("/\[youtube\]https?:\/\/(www.)?youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); - $text = preg_replace("/\[youtube\]https?:\/\/(www.)?youtube.com\/embed\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); - $text = preg_replace("/\[youtube\]https?:\/\/(www.)?youtube.com\/shorts\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); - $text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/(www\.)?youtube\.com\/watch\?v\=(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/(www\.)?youtube\.com\/embed\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/(www\.)?youtube\.com\/shorts\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); + $text = preg_replace("/\[youtube\]https?:\/\/youtu\.be\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); - $text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); - $text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); + $text = preg_replace("/\[vimeo\]https?:\/\/player\.vimeo\.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); + $text = preg_replace("/\[vimeo\]https?:\/\/vimeo\.com\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); return $text; } diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index c3d069a5f6..17911eae39 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -121,12 +121,13 @@ class Markdown $s = str_replace('♲', html_entity_decode('♲', ENT_QUOTES, 'UTF-8'), $s); //$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s); - $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/embed\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www.)?youtube.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism', '[vimeo]$1[/vimeo]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/www\.youtube\.com\/watch\?v\=(.*?)\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/embed\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/vimeo\.com\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/player\.vimeo\.com\/video\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/vimeo\.com\/([0-9]+)\](.*?)\[\/url\]/ism', '[vimeo]$1[/vimeo]', 'url', $s); // remove duplicate adjacent code tags $s = preg_replace('/(\[code\])+(.*?)(\[\/code\])+/ism', '[code]$2[/code]', $s); From 6e84c0ade7cbead1be66fd17bd7c530bcad83d98 Mon Sep 17 00:00:00 2001 From: cluster15 Date: Fri, 23 May 2025 09:56:28 +0200 Subject: [PATCH 14/33] Added casts to binary for regexp comparison in mysql. mysql rejects comparison of UTF with binary strings. see https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-22.html#mysqld-8-0-22-feature The SQL statements also work for mariadb. --- src/Module/Contact.php | 4 +++- src/Security/PermissionSet/Repository/PermissionSet.php | 8 ++++---- src/Security/Security.php | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Module/Contact.php b/src/Module/Contact.php index e998160845..28b0bed379 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -254,7 +254,9 @@ class Contact extends BaseModule $searching = true; $search_hdr = $search; $search_txt = preg_quote(trim($search, ' @!')); - $sql_extra .= " AND (`name` REGEXP ? OR `url` REGEXP ? OR `nick` REGEXP ? OR `addr` REGEXP ? OR `alias` REGEXP ?)"; + $sql_extra .= " AND (CAST(`name` AS BINARY) REGEXP BINARY ? OR CAST(`url` AS BINARY) REGEXP BINARY ?"; + $sql_extra .= " OR CAST(`nick` AS BINARY) REGEXP BINARY ? OR CAST(`addr` AS BINARY) REGEXP BINARY ?"; + $sql_extra .= " OR CAST(`alias` AS BINARY) REGEXP BINARY ?)"; $sql_values[] = $search_txt; $sql_values[] = $search_txt; $sql_values[] = $search_txt; diff --git a/src/Security/PermissionSet/Repository/PermissionSet.php b/src/Security/PermissionSet/Repository/PermissionSet.php index 42b6219e9c..8eca294662 100644 --- a/src/Security/PermissionSet/Repository/PermissionSet.php +++ b/src/Security/PermissionSet/Repository/PermissionSet.php @@ -132,13 +132,13 @@ class PermissionSet extends BaseRepository } if (!empty($user_contact_str)) { - $condition = ["`uid` = ? AND (NOT (LOCATE(?, `deny_cid`) OR LOCATE(?, `deny_cid`) OR deny_gid REGEXP ?) - AND (LOCATE(?, allow_cid) OR LOCATE(?, allow_cid) OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", + $condition = ["`uid` = ? AND (NOT (LOCATE(?, `deny_cid`) OR LOCATE(?, `deny_cid`) OR CAST(deny_gid AS BINARY) REGEXP BINARY ?) + AND (LOCATE(?, allow_cid) OR LOCATE(?, allow_cid) OR CAST(allow_gid AS BINARY) REGEXP BINARY ? OR (allow_cid = '' AND allow_gid = '')))", $uid, $user_contact_str, $public_contact_str, $circle_str, $user_contact_str, $public_contact_str, $circle_str]; } else { - $condition = ["`uid` = ? AND (NOT (LOCATE(?, `deny_cid`) OR deny_gid REGEXP ?) - AND (LOCATE(?, allow_cid) OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", + $condition = ["`uid` = ? AND (NOT (LOCATE(?, `deny_cid`) OR CAST(deny_gid AS BINARY) REGEXP BINARY ?) + AND (LOCATE(?, allow_cid) OR CAST(allow_gid AS BINARY) REGEXP BINARY ? OR (allow_cid = '' AND allow_gid = '')))", $uid, $public_contact_str, $circle_str, $public_contact_str, $circle_str]; } diff --git a/src/Security/Security.php b/src/Security/Security.php index f04af42061..96e3386141 100644 --- a/src/Security/Security.php +++ b/src/Security/Security.php @@ -105,8 +105,8 @@ class Security } $sql = sprintf( - " AND (NOT (deny_cid REGEXP '<%d>' OR deny_gid REGEXP '%s') - AND (allow_cid REGEXP '<%d>' OR allow_gid REGEXP '%s' + " AND (NOT (CAST(deny_cid AS BINARY) REGEXP BINARY '<%d>' OR CAST(deny_gid AS BINARY) REGEXP BINARY '%s') + AND (CAST(allow_cid AS BINARY) REGEXP BINARY '<%d>' OR CAST(allow_gid AS BINARY) REGEXP BINARY '%s' OR (allow_cid = '' AND allow_gid = ''))" . $acc_sql . ") ", intval($remote_contact), DBA::escape($circleIds), From 0db3d4a70fc5d99a48eb64d3866ef582c0402d54 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 24 May 2025 19:03:22 +0000 Subject: [PATCH 15/33] Clean input values --- src/Module/Admin/Site.php | 6 +++--- src/Module/Profile/Photos.php | 4 ++-- src/Module/Settings/Profile/Index.php | 25 +++++++++++++++---------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php index 72ea6fa5a4..584237db91 100644 --- a/src/Module/Admin/Site.php +++ b/src/Module/Admin/Site.php @@ -41,13 +41,13 @@ class Site extends BaseAdmin return; } - $sitename = (!empty($_POST['sitename']) ? trim($_POST['sitename']) : ''); + $sitename = (!empty($_POST['sitename']) ? strip_tags(trim($_POST['sitename'])) : ''); $sender_email = (!empty($_POST['sender_email']) ? trim($_POST['sender_email']) : ''); $banner = (!empty($_POST['banner']) ? trim($_POST['banner']) : false); $email_banner = (!empty($_POST['email_banner']) ? trim($_POST['email_banner']) : false); $shortcut_icon = (!empty($_POST['shortcut_icon']) ? trim($_POST['shortcut_icon']) : ''); $touch_icon = (!empty($_POST['touch_icon']) ? trim($_POST['touch_icon']) : ''); - $additional_info = (!empty($_POST['additional_info']) ? trim($_POST['additional_info']) : ''); + $additional_info = (!empty($_POST['additional_info']) ? strip_tags(trim($_POST['additional_info'])) : ''); $language = (!empty($_POST['language']) ? trim($_POST['language']) : ''); $theme = (!empty($_POST['theme']) ? trim($_POST['theme']) : ''); $theme_mobile = (!empty($_POST['theme_mobile']) ? trim($_POST['theme_mobile']) : ''); @@ -57,7 +57,7 @@ class Site extends BaseAdmin $jpegimagequality = (!empty($_POST['jpegimagequality']) ? intval(trim($_POST['jpegimagequality'])) : 100); $register_policy = (!empty($_POST['register_policy']) ? intval(trim($_POST['register_policy'])) : 0); - $max_registered_users = (!empty($_POST['max_registered_users']) ? intval(trim($_POST['max_registered_users'])) : 0); + $max_registered_users = (!empty($_POST['max_registered_users']) ? intval(trim($_POST['max_registered_users'])) : 0); $daily_registrations = (!empty($_POST['max_daily_registrations']) ? intval(trim($_POST['max_daily_registrations'])) : 0); $abandon_days = (!empty($_POST['abandon_days']) ? intval(trim($_POST['abandon_days'])) : 0); diff --git a/src/Module/Profile/Photos.php b/src/Module/Profile/Photos.php index 6d9bca26e3..5fe798730c 100644 --- a/src/Module/Profile/Photos.php +++ b/src/Module/Profile/Photos.php @@ -128,8 +128,8 @@ class Photos extends \Friendica\Module\BaseProfile $request = $hook_data['request'] ?? $request; // Determine the album to use - $album = trim($request['album'] ?? ''); - $newalbum = trim($request['newalbum'] ?? ''); + $album = strip_tags(trim($request['album'] ?? '')); + $newalbum = strip_tags(trim($request['newalbum'] ?? '')); $this->logger->debug('album= ' . $album . ' newalbum= ' . $newalbum); diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index 6f7a3a6204..9a342aa3b3 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -99,7 +99,7 @@ class Index extends BaseSettings new ArrayFilterEvent(ArrayFilterEvent::PROFILE_SETTINGS_POST, $request), )->getArray(); - $dob = trim($request['dob'] ?? ''); + $dob = $this->cleanInput($request['dob'] ?? ''); if ($dob && !in_array($dob, ['0000-00-00', DBA::NULL_DATE])) { $y = substr($dob, 0, 4); @@ -121,18 +121,18 @@ class Index extends BaseSettings } } - $username = trim($request['username'] ?? ''); + $username = $this->cleanInputText($request['username'] ?? ''); if (!$username) { $this->systemMessages->addNotice($this->t('Display Name is required.')); return; } - $about = trim($request['about']); - $address = trim($request['address']); - $locality = trim($request['locality']); - $region = trim($request['region']); - $postal_code = trim($request['postal_code']); - $country_name = trim($request['country_name']); + $about = $this->cleanInputText($request['about']); + $address = $this->cleanInputText($request['address']); + $locality = $this->cleanInputText($request['locality']); + $region = $this->cleanInputText($request['region']); + $postal_code = $this->cleanInputText($request['postal_code']); + $country_name = $this->cleanInputText($request['country_name']); $pub_keywords = self::cleanKeywords(trim($request['pub_keywords'])); $prv_keywords = self::cleanKeywords(trim($request['prv_keywords'])); $xmpp = $this->cleanInput(trim($request['xmpp'])); @@ -377,9 +377,14 @@ class Index extends BaseSettings return $profileFields; } + private function cleanInputText(string $input): string + { + return trim(strip_tags($input)); + } + private function cleanInput(string $input): string { - return str_replace(['<', '>', '"', ' '], '', $input); + return str_replace(['<', '>', '"', "'", ' '], '', $input); } private static function cleanKeywords($keywords): string @@ -389,7 +394,7 @@ class Index extends BaseSettings $cleaned = []; foreach ($keywords as $keyword) { - $keyword = trim($keyword); + $keyword = trim(str_replace(['<', '>', '"', "'"], '', $keyword)); $keyword = trim($keyword, '#'); if ($keyword != '') { $cleaned[] = $keyword; From 2335af9bf26e646b042c6564f5ce046b889840d1 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 24 May 2025 19:09:49 +0000 Subject: [PATCH 16/33] Fix some warnings --- src/Protocol/ATProtocol/Actor.php | 8 +++++--- src/Protocol/ATProtocol/Jetstream.php | 8 ++++++-- src/Protocol/ActivityPub/Receiver.php | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Protocol/ATProtocol/Actor.php b/src/Protocol/ATProtocol/Actor.php index db310813b3..38da819dfc 100755 --- a/src/Protocol/ATProtocol/Actor.php +++ b/src/Protocol/ATProtocol/Actor.php @@ -145,9 +145,11 @@ class Actor $fields['gsid'] = GServer::getRealID($fields['baseurl'], true); } - foreach ($directory->verificationMethod as $method) { - if (!empty($method->publicKeyMultibase)) { - $fields['pubkey'] = $method->publicKeyMultibase; + if (!empty($directory->verificationMethod)) { + foreach ($directory->verificationMethod as $method) { + if (!empty($method->publicKeyMultibase)) { + $fields['pubkey'] = $method->publicKeyMultibase; + } } } } diff --git a/src/Protocol/ATProtocol/Jetstream.php b/src/Protocol/ATProtocol/Jetstream.php index cb37fabeec..8051e47126 100755 --- a/src/Protocol/ATProtocol/Jetstream.php +++ b/src/Protocol/ATProtocol/Jetstream.php @@ -105,8 +105,12 @@ class Jetstream $last_timeout = time(); while (true) { try { - $message = $this->client->receive(); - $data = json_decode($message); + $message = @$this->client->receive(); + if (empty($message)) { + $this->logger->notice('Empty message received'); + break; + } + $data = json_decode($message); if (is_object($data)) { $timestamp = $data->time_us; $this->route($data); diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 76f4d31d3d..c217d491ca 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -2065,7 +2065,7 @@ class Receiver } foreach ($object_data['tags'] as $tag) { - if (HTTPSignature::isValidContentType($tag['mediaType'] ?? '', $tag['href'])) { + if (HTTPSignature::isValidContentType($tag['mediaType'] ?? '', $tag['href'] ?? '')) { $object_data['quote-url'] = $tag['href']; } } From 69ee39b72566c4e2733337da82a596918a7ab28d Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 25 May 2025 19:17:17 +0200 Subject: [PATCH 17/33] Add tests --- tests/src/Content/Text/BBCodeTest.php | 90 +++++++++++++++++++------ tests/src/Content/Text/MarkdownTest.php | 38 +++++++++++ 2 files changed, 109 insertions(+), 19 deletions(-) diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index c7c7220cd9..df4f5c6bfc 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -73,51 +73,51 @@ class BBCodeTest extends FixtureTestCase ], 'no-protocol' => [ 'data' => 'example.com/path', - 'assertHTML' => false + 'assertHTML' => false, ], 'wrong-protocol' => [ 'data' => 'ftp://example.com', - 'assertHTML' => false + 'assertHTML' => false, ], 'wrong-domain-without-path' => [ 'data' => 'http://example', - 'assertHTML' => false + 'assertHTML' => false, ], 'wrong-domain-with-path' => [ 'data' => 'http://example/path', - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-6857-domain-start' => [ 'data' => "http://\nexample.com", - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-6857-domain-end' => [ 'data' => "http://example\n.com", - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-6857-tld' => [ 'data' => "http://example.\ncom", - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-6857-end' => [ 'data' => "http://example.com\ntest", - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-6901' => [ 'data' => "http://example.com
    ", - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-7150' => [ 'data' => html_entity_decode('http://example.com ', ENT_QUOTES, 'UTF-8'), - 'assertHTML' => false + 'assertHTML' => false, ], 'bug-7271-query-string-brackets' => [ 'data' => 'https://example.com/search?q=square+brackets+[url]', - 'assertHTML' => true + 'assertHTML' => true, ], 'bug-7271-path-brackets' => [ 'data' => 'http://example.com/path/to/file[3].html', - 'assertHTML' => true + 'assertHTML' => true, ], ]; } @@ -215,19 +215,19 @@ class BBCodeTest extends FixtureTestCase ], 'bug-9611-purify-xss-nobb' => [ 'expectedHTML' => 'dare to move your mouse here', - 'text' => '[nobb]dare to move your mouse here[/nobb]' + 'text' => '[nobb]dare to move your mouse here[/nobb]', ], 'bug-9611-purify-xss-noparse' => [ 'expectedHTML' => 'dare to move your mouse here', - 'text' => '[noparse]dare to move your mouse here[/noparse]' + 'text' => '[noparse]dare to move your mouse here[/noparse]', ], 'bug-9611-purify-xss-attributes' => [ 'expectedHTML' => 'dare to move your mouse here', - 'text' => '[color="onmouseover=alert(0) style="]dare to move your mouse here[/color]' + 'text' => '[color="onmouseover=alert(0) style="]dare to move your mouse here[/color]', ], 'bug-9611-purify-attributes-correct' => [ 'expectedHTML' => 'dare to move your mouse here', - 'text' => '[color=FFFFFF]dare to move your mouse here[/color]' + 'text' => '[color=FFFFFF]dare to move your mouse here[/color]', ], 'bug-9639-span-classes' => [ 'expectedHTML' => 'Test', @@ -308,11 +308,11 @@ Karl Marx - Die ursprüngliche Akkumulation ], 'bug-12701-quotes' => [ 'expected' => '[![abc"fgh](https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png)](https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581)', - 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abc"fgh[/img][/url]' + 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abc"fgh[/img][/url]', ], 'bug-12701-no-quotes' => [ 'expected' => '[![abcfgh](https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png "abcfgh")](https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581)', - 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abcfgh[/img][/url]' + 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abcfgh[/img][/url]', ], ]; } @@ -345,7 +345,7 @@ Karl Marx - Die ursprüngliche Akkumulation 'bug-10692-start-line' => [ '#[url=https://friendica.local/search?tag=L160]L160[/url]', '#L160', - ] + ], ]; } @@ -362,6 +362,58 @@ Karl Marx - Die ursprüngliche Akkumulation self::assertEquals($expected, $actual); } + public function dataExpandVideoLinks(): array + { + return [ + /** @see https://github.com/friendica/friendica/pull/14940 */ + 'task-14940-youtube-watch-with-www' => [ + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://www.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', + ], + 'task-14940-youtube-watch-without-www' => [ + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://youtube.com/watch?v=hfwbmTzBFT0[/youtube]', + ], + 'task-14940-youtube-shorts-with-www' => [ + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://www.youtube.com/shorts/hfwbmTzBFT0[/youtube]', + ], + 'task-14940-youtube-shorts-without-www' => [ + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://youtube.com/shorts/hfwbmTzBFT0[/youtube]', + ], + 'task-14940-youtube-embed-with-www' => [ + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://www.youtube.com/embed/hfwbmTzBFT0[/youtube]', + ], + 'task-14940-youtube-embed-without-www' => [ + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://youtube.com/embed/hfwbmTzBFT0[/youtube]', + ], + 'task-14940-vimeo' => [ + 'expectedBBCode' => '[url=https://vimeo.com/2345345]https://vimeo.com/2345345[/url]', + 'text' => '[vimeo]https://vimeo.com/2345345[/vimeo]', + ], + 'task-14940-player-vimeo' => [ + 'expectedBBCode' => '[url=https://vimeo.com/2345345]https://vimeo.com/2345345[/url]', + 'text' => '[vimeo]https://player.vimeo.com/video/2345345[/vimeo]', + ], + ]; + } + + /** + * @dataProvider dataExpandVideoLinks + * + * @param string $expected Expected BBCode output + * @param string $text Input text + */ + public function testExpandVideoLinks(string $expected, string $text) + { + $actual = BBCode::expandVideoLinks($text); + + self::assertEquals($expected, $actual); + } + public function dataGetAbstract(): array { return [ diff --git a/tests/src/Content/Text/MarkdownTest.php b/tests/src/Content/Text/MarkdownTest.php index 6882bec7f1..2174b7670c 100644 --- a/tests/src/Content/Text/MarkdownTest.php +++ b/tests/src/Content/Text/MarkdownTest.php @@ -53,6 +53,44 @@ class MarkdownTest extends FixtureTestCase 'expectedBBCode' => 'with the and tag', 'markdown' => 'with the <sup> and </sup> tag', ], + /** @see https://github.com/friendica/friendica/pull/14940 */ + 'task-14940-youtube-watch-with-www' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + ], + 'task-14940-youtube-watch-without-www' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://youtube.com/watch?v=hfwbmTzBFT0]https://youtube.com/watch?v=hfwbmTzBFT0[/url]', + ], + 'task-14940-youtube-shorts-with-www' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://www.youtube.com/shorts/hfwbmTzBFT0]https://www.youtube.com/shorts/hfwbmTzBFT0[/url]', + ], + 'task-14940-youtube-shorts-without-www' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://youtube.com/shorts/hfwbmTzBFT0]https://youtube.com/shorts/hfwbmTzBFT0[/url]', + ], + 'task-14940-youtube-embed-with-www' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://www.youtube.com/embed/hfwbmTzBFT0]https://www.youtube.com/embed/hfwbmTzBFT0[/url]', + ], + 'task-14940-youtube-embed-without-www' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://youtube.com/embed/hfwbmTzBFT0]https://youtube.com/embed/hfwbmTzBFT0[/url]', + ], + // @todo - should we really ignore the URL content in favor of parsing the link of the body? + 'task-14940-vimeo-custom-url' => [ + 'expectedBBCode' => '[vimeo]2345345[/vimeo]', + 'markdown' => '[url=https://no.thing]https://vimeo.com/2345345[/url]', + ], + 'task-14940-vimeo-custom-text' => [ + 'expectedBBCode' => '[vimeo]2345345[/vimeo]', + 'markdown' => '[url=https://vimeo.com/2345345]CustomText[/url]', + ], + 'task-14940-player-vimeo' => [ + 'expectedBBCode' => '[vimeo]2345345[/vimeo]', + 'markdown' => '[url=https://player.vimeo.com/video/2345345]https://player.vimeo.com/video/2345345[/url]', + ], ]; } From 5c6b7d9293fe295def5f6c99ca4c7551bf70796e Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 25 May 2025 22:22:53 +0200 Subject: [PATCH 18/33] Fix PHP-CS --- tests/src/Content/Text/BBCodeTest.php | 16 ++++++++-------- tests/src/Content/Text/MarkdownTest.php | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index df4f5c6bfc..26c381c429 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -368,35 +368,35 @@ Karl Marx - Die ursprüngliche Akkumulation /** @see https://github.com/friendica/friendica/pull/14940 */ 'task-14940-youtube-watch-with-www' => [ 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://www.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://www.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', ], 'task-14940-youtube-watch-without-www' => [ 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://youtube.com/watch?v=hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://youtube.com/watch?v=hfwbmTzBFT0[/youtube]', ], 'task-14940-youtube-shorts-with-www' => [ 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://www.youtube.com/shorts/hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://www.youtube.com/shorts/hfwbmTzBFT0[/youtube]', ], 'task-14940-youtube-shorts-without-www' => [ 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://youtube.com/shorts/hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://youtube.com/shorts/hfwbmTzBFT0[/youtube]', ], 'task-14940-youtube-embed-with-www' => [ 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://www.youtube.com/embed/hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://www.youtube.com/embed/hfwbmTzBFT0[/youtube]', ], 'task-14940-youtube-embed-without-www' => [ 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://youtube.com/embed/hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://youtube.com/embed/hfwbmTzBFT0[/youtube]', ], 'task-14940-vimeo' => [ 'expectedBBCode' => '[url=https://vimeo.com/2345345]https://vimeo.com/2345345[/url]', - 'text' => '[vimeo]https://vimeo.com/2345345[/vimeo]', + 'text' => '[vimeo]https://vimeo.com/2345345[/vimeo]', ], 'task-14940-player-vimeo' => [ 'expectedBBCode' => '[url=https://vimeo.com/2345345]https://vimeo.com/2345345[/url]', - 'text' => '[vimeo]https://player.vimeo.com/video/2345345[/vimeo]', + 'text' => '[vimeo]https://player.vimeo.com/video/2345345[/vimeo]', ], ]; } diff --git a/tests/src/Content/Text/MarkdownTest.php b/tests/src/Content/Text/MarkdownTest.php index 2174b7670c..c372180df5 100644 --- a/tests/src/Content/Text/MarkdownTest.php +++ b/tests/src/Content/Text/MarkdownTest.php @@ -51,45 +51,45 @@ class MarkdownTest extends FixtureTestCase return [ 'bug-8358-double-decode' => [ 'expectedBBCode' => 'with the and tag', - 'markdown' => 'with the <sup> and </sup> tag', + 'markdown' => 'with the <sup> and </sup> tag', ], /** @see https://github.com/friendica/friendica/pull/14940 */ 'task-14940-youtube-watch-with-www' => [ 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', - 'markdown' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'markdown' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', ], 'task-14940-youtube-watch-without-www' => [ 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', - 'markdown' => '[url=https://youtube.com/watch?v=hfwbmTzBFT0]https://youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'markdown' => '[url=https://youtube.com/watch?v=hfwbmTzBFT0]https://youtube.com/watch?v=hfwbmTzBFT0[/url]', ], 'task-14940-youtube-shorts-with-www' => [ 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', - 'markdown' => '[url=https://www.youtube.com/shorts/hfwbmTzBFT0]https://www.youtube.com/shorts/hfwbmTzBFT0[/url]', + 'markdown' => '[url=https://www.youtube.com/shorts/hfwbmTzBFT0]https://www.youtube.com/shorts/hfwbmTzBFT0[/url]', ], 'task-14940-youtube-shorts-without-www' => [ 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', - 'markdown' => '[url=https://youtube.com/shorts/hfwbmTzBFT0]https://youtube.com/shorts/hfwbmTzBFT0[/url]', + 'markdown' => '[url=https://youtube.com/shorts/hfwbmTzBFT0]https://youtube.com/shorts/hfwbmTzBFT0[/url]', ], 'task-14940-youtube-embed-with-www' => [ 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', - 'markdown' => '[url=https://www.youtube.com/embed/hfwbmTzBFT0]https://www.youtube.com/embed/hfwbmTzBFT0[/url]', + 'markdown' => '[url=https://www.youtube.com/embed/hfwbmTzBFT0]https://www.youtube.com/embed/hfwbmTzBFT0[/url]', ], 'task-14940-youtube-embed-without-www' => [ 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', - 'markdown' => '[url=https://youtube.com/embed/hfwbmTzBFT0]https://youtube.com/embed/hfwbmTzBFT0[/url]', + 'markdown' => '[url=https://youtube.com/embed/hfwbmTzBFT0]https://youtube.com/embed/hfwbmTzBFT0[/url]', ], // @todo - should we really ignore the URL content in favor of parsing the link of the body? 'task-14940-vimeo-custom-url' => [ 'expectedBBCode' => '[vimeo]2345345[/vimeo]', - 'markdown' => '[url=https://no.thing]https://vimeo.com/2345345[/url]', + 'markdown' => '[url=https://no.thing]https://vimeo.com/2345345[/url]', ], 'task-14940-vimeo-custom-text' => [ 'expectedBBCode' => '[vimeo]2345345[/vimeo]', - 'markdown' => '[url=https://vimeo.com/2345345]CustomText[/url]', + 'markdown' => '[url=https://vimeo.com/2345345]CustomText[/url]', ], 'task-14940-player-vimeo' => [ 'expectedBBCode' => '[vimeo]2345345[/vimeo]', - 'markdown' => '[url=https://player.vimeo.com/video/2345345]https://player.vimeo.com/video/2345345[/url]', + 'markdown' => '[url=https://player.vimeo.com/video/2345345]https://player.vimeo.com/video/2345345[/url]', ], ]; } From 8be3c2bc99d359c2a6933de537b791dc545da470 Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Wed, 28 May 2025 20:31:36 +0200 Subject: [PATCH 19/33] Support YouTube mobile links --- src/Content/Text/BBCode.php | 2 +- src/Content/Text/Markdown.php | 1 + tests/src/Content/Text/BBCodeTest.php | 4 ++++ tests/src/Content/Text/MarkdownTest.php | 4 ++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 9c999e789a..3d02319e61 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1214,7 +1214,7 @@ class BBCode $text = preg_replace("/\[youtube\]https?:\/\/(www\.)?youtube\.com\/embed\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); $text = preg_replace("/\[youtube\]https?:\/\/(www\.)?youtube\.com\/shorts\/(.*?)\[\/youtube\]/ism", '[youtube]$2[/youtube]', $text); $text = preg_replace("/\[youtube\]https?:\/\/youtu\.be\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); - + $text = preg_replace("/\[youtube\]https?:\/\/m\.youtube\.com\/watch\?v\=(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text); $text = preg_replace("/\[vimeo\]https?:\/\/player\.vimeo\.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); $text = preg_replace("/\[vimeo\]https?:\/\/vimeo\.com\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text); diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 17911eae39..99d5aae89a 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -125,6 +125,7 @@ class Markdown $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/embed\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/m\.youtube\.com\/watch\?v\=(.*?)\[\/url\]/ism', '[youtube]$1[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/vimeo\.com\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/player\.vimeo\.com\/video\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/vimeo\.com\/([0-9]+)\](.*?)\[\/url\]/ism', '[vimeo]$1[/vimeo]', 'url', $s); diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index 26c381c429..ba3678a780 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -390,6 +390,10 @@ Karl Marx - Die ursprüngliche Akkumulation 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', 'text' => '[youtube]https://youtube.com/embed/hfwbmTzBFT0[/youtube]', ], + 'task-14940-youtube-mobile' => [ + 'expectedBBCode' => '[url=https://m.youtube.com/watch?v=hfwbmTzBFT0]https://m.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'text' => '[youtube]https://www.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', + ], 'task-14940-vimeo' => [ 'expectedBBCode' => '[url=https://vimeo.com/2345345]https://vimeo.com/2345345[/url]', 'text' => '[vimeo]https://vimeo.com/2345345[/vimeo]', diff --git a/tests/src/Content/Text/MarkdownTest.php b/tests/src/Content/Text/MarkdownTest.php index c372180df5..0e4552dcbe 100644 --- a/tests/src/Content/Text/MarkdownTest.php +++ b/tests/src/Content/Text/MarkdownTest.php @@ -78,6 +78,10 @@ class MarkdownTest extends FixtureTestCase 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', 'markdown' => '[url=https://youtube.com/embed/hfwbmTzBFT0]https://youtube.com/embed/hfwbmTzBFT0[/url]', ], + 'task-14940-youtube-mobile' => [ + 'expectedBBCode' => '[youtube]hfwbmTzBFT0[/youtube]', + 'markdown' => '[url=https://m.youtube.com/watch?v=hfwbmTzBFT0]https://m.youtube.com/watch?v=hfwbmTzBFT0[/url]', + ], // @todo - should we really ignore the URL content in favor of parsing the link of the body? 'task-14940-vimeo-custom-url' => [ 'expectedBBCode' => '[vimeo]2345345[/vimeo]', From 1e818053f6c7fdb883c8c48cc7eef97e4634bd33 Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Wed, 28 May 2025 20:53:39 +0200 Subject: [PATCH 20/33] fix test --- tests/src/Content/Text/BBCodeTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index ba3678a780..a4b740703d 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -392,7 +392,7 @@ Karl Marx - Die ursprüngliche Akkumulation ], 'task-14940-youtube-mobile' => [ 'expectedBBCode' => '[url=https://m.youtube.com/watch?v=hfwbmTzBFT0]https://m.youtube.com/watch?v=hfwbmTzBFT0[/url]', - 'text' => '[youtube]https://www.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', + 'text' => '[youtube]https://m.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', ], 'task-14940-vimeo' => [ 'expectedBBCode' => '[url=https://vimeo.com/2345345]https://vimeo.com/2345345[/url]', From 2e701df21a146cb0775efc4a2295e9a8e84ae2c0 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 27 May 2025 21:26:17 +0000 Subject: [PATCH 21/33] Avoid warnings in the Jetstream process --- bin/console.php | 3 ++ src/Protocol/ATProtocol/Actor.php | 2 +- src/Protocol/ATProtocol/Jetstream.php | 46 ++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/bin/console.php b/bin/console.php index a20f3f7e02..88382e1665 100755 --- a/bin/console.php +++ b/bin/console.php @@ -13,6 +13,9 @@ if (php_sapi_name() !== 'cli') { exit(); } +// Ensure that te console is executed from the base path of the installation +chdir(dirname(__DIR__)); + require dirname(__DIR__) . '/vendor/autoload.php'; $container = \Friendica\Core\DiceContainer::fromBasePath(dirname(__DIR__)); diff --git a/src/Protocol/ATProtocol/Actor.php b/src/Protocol/ATProtocol/Actor.php index 38da819dfc..4dae8b75cf 100755 --- a/src/Protocol/ATProtocol/Actor.php +++ b/src/Protocol/ATProtocol/Actor.php @@ -133,7 +133,7 @@ class Actor } $directory = $this->atprotocol->get(ATProtocol::DIRECTORY . '/' . $profile->did); - if (!empty($directory)) { + if (!empty($directory->service)) { foreach ($directory->service as $service) { if (($service->id == '#atproto_pds') && ($service->type == 'AtprotoPersonalDataServer') && !empty($service->serviceEndpoint)) { $fields['baseurl'] = $service->serviceEndpoint; diff --git a/src/Protocol/ATProtocol/Jetstream.php b/src/Protocol/ATProtocol/Jetstream.php index 8051e47126..86e28c0124 100755 --- a/src/Protocol/ATProtocol/Jetstream.php +++ b/src/Protocol/ATProtocol/Jetstream.php @@ -84,6 +84,8 @@ class Jetstream $timeout_limit = 10; $timestamp = $this->keyValue->get('jetstream_timestamp') ?? 0; $cursor = ''; + $this->logger->notice('Start listening'); + while (true) { if ($timestamp) { $cursor = '&cursor=' . $timestamp; @@ -92,12 +94,21 @@ class Jetstream $this->syncContacts(); try { + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); // @todo make the path configurable $this->client = new \WebSocket\Client('wss://jetstream1.us-west.bsky.network/subscribe?requireHello=true' . $cursor); $this->client->setTimeout($timeout); $this->client->setLogger($this->logger); + restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { - $this->logger->error('Error while trying to establish the connection', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to establish the connection', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + echo "Connection wasn't established.\n"; + exit(1); + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to establish the connection', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); echo "Connection wasn't established.\n"; exit(1); } @@ -105,7 +116,13 @@ class Jetstream $last_timeout = time(); while (true) { try { - $message = @$this->client->receive(); + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); + $message = $this->client->receive(); + restore_error_handler(); + if (empty($message)) { $this->logger->notice('Empty message received'); break; @@ -128,19 +145,31 @@ class Jetstream break; } $this->logger->notice('Timeout', ['duration' => $timeout_duration, 'timestamp' => $timestamp, 'code' => $e->getCode(), 'message' => $e->getMessage()]); + break; } else { - $this->logger->error('Error', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to receive a message', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); break; } + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to receive a message', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + break; } $last_timeout = time(); } try { + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); $this->client->close(); + restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { - $this->logger->error('Error while trying to close the connection', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to close the connection', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to close the connection', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); } } + $this->logger->notice('Stop listening'); } /** @@ -234,9 +263,16 @@ class Jetstream ] ]; try { + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); $this->client->send(json_encode($update)); + restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { - $this->logger->error('Error while trying to send options.', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to send options.', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to send options.', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); } } From 3def76649b38b31dfc9f5254e593142852abc024 Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 29 May 2025 19:06:13 +0200 Subject: [PATCH 22/33] Fix PHP-CS --- src/Module/Contact.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 28b0bed379..3897b917cd 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -256,7 +256,7 @@ class Contact extends BaseModule $search_txt = preg_quote(trim($search, ' @!')); $sql_extra .= " AND (CAST(`name` AS BINARY) REGEXP BINARY ? OR CAST(`url` AS BINARY) REGEXP BINARY ?"; $sql_extra .= " OR CAST(`nick` AS BINARY) REGEXP BINARY ? OR CAST(`addr` AS BINARY) REGEXP BINARY ?"; - $sql_extra .= " OR CAST(`alias` AS BINARY) REGEXP BINARY ?)"; + $sql_extra .= " OR CAST(`alias` AS BINARY) REGEXP BINARY ?)"; $sql_values[] = $search_txt; $sql_values[] = $search_txt; $sql_values[] = $search_txt; From 3bd6335fa6668c2c3cd01c7ef50341f4578e5cb5 Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 29 May 2025 19:11:24 +0200 Subject: [PATCH 23/33] Add test --- tests/src/Content/Text/BBCodeTest.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index 9c61e10887..17f48ddae6 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -294,26 +294,31 @@ Karl Marx - Die ursprüngliche Akkumulation public function dataBBCodesToMarkdown() { return [ - 'bug-7808-gt' => [ + 'bug-7808-gt' => [ 'expected' => '>`>`', 'text' => '>[code]>[/code]', ], - 'bug-7808-lt' => [ + 'bug-7808-lt' => [ 'expected' => '<`<`', 'text' => '<[code]<[/code]', ], - 'bug-7808-amp' => [ + 'bug-7808-amp' => [ 'expected' => '&`&`', 'text' => '&[code]&[/code]', ], - 'bug-12701-quotes' => [ + 'bug-12701-quotes' => [ 'expected' => '[![abc"fgh](https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png)](https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581)', 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abc"fgh[/img][/url]' ], - 'bug-12701-no-quotes' => [ + 'bug-12701-no-quotes' => [ 'expected' => '[![abcfgh](https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png "abcfgh")](https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581)', 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abcfgh[/img][/url]' ], + /** @see https://github.com/friendica/friendica/pull/14908 */ + 'task-14908-strip-tags' => [ + 'expected' => 'Norddeutscher Bürger !\[Noddeutscher Bürger - Bismark Brötchen (Roger Cziwerny - pixapay)\](/rscamo/……)', + 'text' => '[class=postbox-ocean]Norddeutscher Bürger ![Noddeutscher Bürger - Bismark Brötchen (Roger Cziwerny - pixapay)](/rscamo/……)[/class]', + ], ]; } From f2ee3602ac0b48e7e53e9fe55ebe23ddcacd197c Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 29 May 2025 19:14:43 +0200 Subject: [PATCH 24/33] Fix PHP-CS --- tests/src/Content/Text/BBCodeTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index e51bb997d0..472ebc52dd 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -294,23 +294,23 @@ Karl Marx - Die ursprüngliche Akkumulation public function dataBBCodesToMarkdown() { return [ - 'bug-7808-gt' => [ + 'bug-7808-gt' => [ 'expected' => '>`>`', 'text' => '>[code]>[/code]', ], - 'bug-7808-lt' => [ + 'bug-7808-lt' => [ 'expected' => '<`<`', 'text' => '<[code]<[/code]', ], - 'bug-7808-amp' => [ + 'bug-7808-amp' => [ 'expected' => '&`&`', 'text' => '&[code]&[/code]', ], - 'bug-12701-quotes' => [ + 'bug-12701-quotes' => [ 'expected' => '[![abc"fgh](https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png)](https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581)', 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abc"fgh[/img][/url]', ], - 'bug-12701-no-quotes' => [ + 'bug-12701-no-quotes' => [ 'expected' => '[![abcfgh](https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png "abcfgh")](https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581)', 'text' => '[url=https://domain.tld/photos/user/image/86912721086415cdc8e0a03226831581][img=https://domain.tld/photo/86912721086415cdc8e0a03226831581-1.png]abcfgh[/img][/url]', ], From 3c4ae5a124f695751b64241a935e2d7d2a36070f Mon Sep 17 00:00:00 2001 From: Hannes Heute Date: Thu, 29 May 2025 20:48:22 +0200 Subject: [PATCH 25/33] fix tests.. again --- src/Content/Text/Markdown.php | 2 +- tests/src/Content/Text/BBCodeTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Content/Text/Markdown.php b/src/Content/Text/Markdown.php index 99d5aae89a..c47cff66e3 100644 --- a/src/Content/Text/Markdown.php +++ b/src/Content/Text/Markdown.php @@ -125,7 +125,7 @@ class Markdown $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/embed\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/(www\.)?youtube\.com\/shorts\/(.*?)\].*?\[\/url\]/ism', '[youtube]$2[/youtube]', 'url', $s); - $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/m\.youtube\.com\/watch\?v\=(.*?)\[\/url\]/ism', '[youtube]$1[/youtube]', 'url', $s); + $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/m\.youtube\.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism', '[youtube]$1[/youtube]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/vimeo\.com\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=?(.*?)\]https?:\/\/player\.vimeo\.com\/video\/([0-9]+)(.*?)\[\/url\]/ism', '[vimeo]$2[/vimeo]', 'url', $s); $s = BBCode::pregReplaceInTag('/\[url\=https?:\/\/vimeo\.com\/([0-9]+)\](.*?)\[\/url\]/ism', '[vimeo]$1[/vimeo]', 'url', $s); diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index a4b740703d..c7278438fe 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -391,7 +391,7 @@ Karl Marx - Die ursprüngliche Akkumulation 'text' => '[youtube]https://youtube.com/embed/hfwbmTzBFT0[/youtube]', ], 'task-14940-youtube-mobile' => [ - 'expectedBBCode' => '[url=https://m.youtube.com/watch?v=hfwbmTzBFT0]https://m.youtube.com/watch?v=hfwbmTzBFT0[/url]', + 'expectedBBCode' => '[url=https://www.youtube.com/watch?v=hfwbmTzBFT0]https://www.youtube.com/watch?v=hfwbmTzBFT0[/url]', 'text' => '[youtube]https://m.youtube.com/watch?v=hfwbmTzBFT0[/youtube]', ], 'task-14940-vimeo' => [ From 3883bdf96f1d6a123854ef6e3334348e79aac3da Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 May 2025 05:55:18 +0000 Subject: [PATCH 26/33] Updated PHP package --- composer.json | 2 +- composer.lock | 178 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 125 insertions(+), 55 deletions(-) diff --git a/composer.json b/composer.json index d86bfac2b2..9973336590 100644 --- a/composer.json +++ b/composer.json @@ -67,6 +67,7 @@ "patrickschur/language-detection": "^5.0.0", "pear/console_table": "^1.3", "phpseclib/phpseclib": "^3.0", + "phrity/websocket": "^1.7", "pragmarx/google2fa": "^5.0", "pragmarx/recovery": "^0.2", "psr/clock": "^1.0", @@ -76,7 +77,6 @@ "seld/cli-prompt": "^1.0", "smarty/smarty": "^4", "symfony/event-dispatcher": "^5.4", - "textalk/websocket": "^1.6", "ua-parser/uap-php": "^3.9", "xemlock/htmlpurifier-html5": "^0.1.11" }, diff --git a/composer.lock b/composer.lock index bca6007c01..fb9fadddbd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8aa73e21ed198d8013c09de14e8230cd", + "content-hash": "897b878d6db24b9a6437bd9f971478be", "packages": [ { "name": "asika/simple-console", @@ -2860,6 +2860,66 @@ ], "time": "2024-03-03T02:14:58+00:00" }, + { + "name": "phrity/net-stream", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/phrity-net-stream.git", + "reference": "9105931b65ad90c75f4885a40b268b0f65802e3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/phrity-net-stream/zipball/9105931b65ad90c75f4885a40b268b0f65802e3e", + "reference": "9105931b65ad90c75f4885a40b268b0f65802e3e", + "shasum": "" + }, + "require": { + "php": "^7.4 | ^8.0", + "phrity/util-errorhandler": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 | ^2.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^9.0 | ^10.0", + "phrity/net-uri": "^1.1", + "squizlabs/php_codesniffer": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Phrity\\Net\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "Socket stream classes implementing PSR-7 Stream and PSR-17 StreamFactory", + "homepage": "https://phrity.sirn.se/net-stream", + "keywords": [ + "Socket", + "client", + "psr-17", + "psr-7", + "server", + "stream", + "stream factory" + ], + "support": { + "issues": "https://github.com/sirn-se/phrity-net-stream/issues", + "source": "https://github.com/sirn-se/phrity-net-stream/tree/1.3.0" + }, + "time": "2023-10-22T10:47:03+00:00" + }, { "name": "phrity/net-uri", "version": "1.3.0", @@ -2958,6 +3018,67 @@ ], "time": "2024-09-12T06:49:16+00:00" }, + { + "name": "phrity/websocket", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/sirn-se/websocket-php.git", + "reference": "8a525da4457b599ab1960f24183f25626c96ce3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sirn-se/websocket-php/zipball/8a525da4457b599ab1960f24183f25626c96ce3c", + "reference": "8a525da4457b599ab1960f24183f25626c96ce3c", + "shasum": "" + }, + "require": { + "php": "^7.4 | ^8.0", + "phrity/net-stream": "^1.2", + "phrity/net-uri": "^1.2", + "phrity/util-errorhandler": "^1.0", + "psr/http-message": "^1.1 | ^2.0", + "psr/log": "^1.0 | ^2.0 | ^3.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^9.0 | ^10.0", + "phrity/net-mock": "^1.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "WebSocket\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Fredrik Liljegren" + }, + { + "name": "Sören Jensen", + "email": "sirn@sirn.se", + "homepage": "https://phrity.sirn.se" + } + ], + "description": "WebSocket client and server", + "homepage": "https://phrity.sirn.se/websocket", + "keywords": [ + "client", + "server", + "websocket" + ], + "support": { + "issues": "https://github.com/sirn-se/websocket-php/issues", + "source": "https://github.com/sirn-se/websocket-php/tree/1.7.3" + }, + "time": "2024-05-31T13:43:32+00:00" + }, { "name": "pragmarx/google2fa", "version": "v5.0.0", @@ -4140,57 +4261,6 @@ ], "time": "2024-09-09T11:45:10+00:00" }, - { - "name": "textalk/websocket", - "version": "1.6.3", - "source": { - "type": "git", - "url": "https://github.com/Textalk/websocket-php.git", - "reference": "67de79745b1a357caf812bfc44e0abf481cee012" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/67de79745b1a357caf812bfc44e0abf481cee012", - "reference": "67de79745b1a357caf812bfc44e0abf481cee012", - "shasum": "" - }, - "require": { - "php": "^7.4 | ^8.0", - "phrity/net-uri": "^1.0", - "phrity/util-errorhandler": "^1.0", - "psr/http-message": "^1.0", - "psr/log": "^1.0 | ^2.0 | ^3.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.0", - "phpunit/phpunit": "^9.0", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "WebSocket\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Fredrik Liljegren" - }, - { - "name": "Sören Jensen" - } - ], - "description": "WebSocket client and server", - "support": { - "issues": "https://github.com/Textalk/websocket-php/issues", - "source": "https://github.com/Textalk/websocket-php/tree/1.6.3" - }, - "time": "2022-11-07T18:59:33+00:00" - }, { "name": "ua-parser/uap-php", "version": "v3.9.14", @@ -7698,9 +7768,9 @@ "ext-simplexml": "*", "ext-xml": "*" }, - "platform-dev": [], + "platform-dev": {}, "platform-overrides": { "php": "7.4" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } From 9a1470d2a4dd8288a4129fd8656ad8d69d6cb888 Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Sat, 31 May 2025 18:08:49 +0200 Subject: [PATCH 27/33] Frio bookface: Fix vertical alignment in the main menu (user menu) --- view/theme/frio/css/style.css | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index e20add6d67..51e205fda4 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -572,6 +572,11 @@ nav.navbar { } } +button#main-menu { + align-items: center; + display: flex; + gap: 5px; +} #topbar-first .navbar-toggle { margin-top: 5px; margin-bottom: 0; @@ -602,7 +607,6 @@ nav.navbar .nav > li > button:focus { margin-left: 20px; } #topbar-first .nav > .account img { - margin-left: 10px; height: 32px; width: 32px; border-radius: 3px; @@ -784,7 +788,6 @@ nav.navbar .nav > li > button:focus { /* The Top Nav Bar user menu */ #topbar-first .account .user-title { text-align: right; - margin-top: 7px; } #topbar-first .account .user-title span { color: $nav_icon_color; From 130ae2d7736ff54fb282ccbfafb83329a46ab4d0 Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Sat, 31 May 2025 19:28:49 +0200 Subject: [PATCH 28/33] Fix vertical alignment of search button --- view/theme/frio/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index e20add6d67..2488b02c03 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -2460,7 +2460,7 @@ input[type="range"].form-control { .form-group-search .form-button-search { position: absolute; - top: 4px; + top: 2px; right: 4px; border-radius: 30px; } From 441584b0d1339c36d9f48e4efa189aae1b296eee Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Sat, 31 May 2025 21:01:15 +0200 Subject: [PATCH 29/33] Show page-specific title before site name --- src/App/Page.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App/Page.php b/src/App/Page.php index 623f464086..a7337485ec 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -201,8 +201,8 @@ class Page implements ArrayAccess $this->page['title'] = $l10n->t(ucfirst($args->getModuleName())); } - // Prepend the sitename to the page title - $this->page['title'] = $config->get('config', 'sitename', '') . (!empty($this->page['title']) ? ' | ' . $this->page['title'] : ''); + // Append the sitename to the page title + $this->page['title'] = (!empty($this->page['title']) ? $this->page['title'] . ' | ' : '') . $config->get('config', 'sitename', ''); if (!empty(Renderer::$theme['stylesheet'])) { $stylesheet = Renderer::$theme['stylesheet']; From 497798b45522bcc33b1ed176b150e021b9430202 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 1 Jun 2025 04:27:52 +0000 Subject: [PATCH 30/33] Warning handler removed --- src/Protocol/ATProtocol/Jetstream.php | 31 --------------------------- 1 file changed, 31 deletions(-) diff --git a/src/Protocol/ATProtocol/Jetstream.php b/src/Protocol/ATProtocol/Jetstream.php index 86e28c0124..a4771cae44 100755 --- a/src/Protocol/ATProtocol/Jetstream.php +++ b/src/Protocol/ATProtocol/Jetstream.php @@ -94,34 +94,20 @@ class Jetstream $this->syncContacts(); try { - set_error_handler(function ($errno, $errstr, $errfile, $errline) { - restore_error_handler(); - throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); - }, E_WARNING); // @todo make the path configurable $this->client = new \WebSocket\Client('wss://jetstream1.us-west.bsky.network/subscribe?requireHello=true' . $cursor); $this->client->setTimeout($timeout); $this->client->setLogger($this->logger); - restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { $this->logger->error('Error while trying to establish the connection', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); echo "Connection wasn't established.\n"; exit(1); - } catch (\ErrorException $e) { - $this->logger->notice('Warning while trying to establish the connection', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); - echo "Connection wasn't established.\n"; - exit(1); } $this->setOptions(); $last_timeout = time(); while (true) { try { - set_error_handler(function ($errno, $errstr, $errfile, $errline) { - restore_error_handler(); - throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); - }, E_WARNING); $message = $this->client->receive(); - restore_error_handler(); if (empty($message)) { $this->logger->notice('Empty message received'); @@ -150,23 +136,13 @@ class Jetstream $this->logger->error('Error while trying to receive a message', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); break; } - } catch (\ErrorException $e) { - $this->logger->notice('Warning while trying to receive a message', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); - break; } $last_timeout = time(); } try { - set_error_handler(function ($errno, $errstr, $errfile, $errline) { - restore_error_handler(); - throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); - }, E_WARNING); $this->client->close(); - restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { $this->logger->error('Error while trying to close the connection', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); - } catch (\ErrorException $e) { - $this->logger->notice('Warning while trying to close the connection', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); } } $this->logger->notice('Stop listening'); @@ -263,16 +239,9 @@ class Jetstream ] ]; try { - set_error_handler(function ($errno, $errstr, $errfile, $errline) { - restore_error_handler(); - throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); - }, E_WARNING); $this->client->send(json_encode($update)); - restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { $this->logger->error('Error while trying to send options.', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); - } catch (\ErrorException $e) { - $this->logger->notice('Warning while trying to send options.', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); } } From 3e8080d67deb2acd6aaac7e27159682f0be23112 Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Mon, 2 Jun 2025 19:18:45 +0200 Subject: [PATCH 31/33] Replace fleeting 'No messages' notification with regular text --- mod/message.php | 2 +- view/lang/C/messages.po | 122 ++++++++++++++++++++-------------------- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/mod/message.php b/mod/message.php index 6ee7a8745a..7205f4d38c 100644 --- a/mod/message.php +++ b/mod/message.php @@ -207,7 +207,7 @@ function message_content() $r = get_messages(DI::userSession()->getLocalUserId(), $pager->getStart(), $pager->getItemsPerPage()); if (!DBA::isResult($r)) { - DI::sysmsg()->addNotice(DI::l10n()->t('No messages.')); + $o .= DI::l10n()->t('You have no messages.'); return $o; } diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 417322fd6c..fa7da735ef 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2025.02-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-17 21:51+0200\n" +"POT-Creation-Date: 2025-06-02 19:22+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -314,7 +314,7 @@ msgid "Submit" msgstr "" #: mod/message.php:210 -msgid "No messages." +msgid "You have no messages." msgstr "" #: mod/message.php:266 @@ -589,7 +589,7 @@ msgid "Rotate CCW (left)" msgstr "" #: mod/photos.php:1094 mod/photos.php:1150 mod/photos.php:1230 -#: src/Module/Contact.php:599 src/Module/Item/Compose.php:187 +#: src/Module/Contact.php:601 src/Module/Item/Compose.php:187 #: src/Object/Post.php:1156 msgid "This is you" msgstr "" @@ -779,19 +779,19 @@ msgid "All contacts" msgstr "" #: src/BaseModule.php:440 src/Content/Conversation/Factory/Channel.php:32 -#: src/Content/Widget.php:257 src/Core/ACL.php:185 src/Module/Contact.php:394 +#: src/Content/Widget.php:257 src/Core/ACL.php:185 src/Module/Contact.php:396 #: src/Module/Privacy/PermissionTooltip.php:181 #: src/Module/Privacy/PermissionTooltip.php:203 #: src/Module/Settings/Channels.php:146 msgid "Followers" msgstr "" -#: src/BaseModule.php:445 src/Content/Widget.php:258 src/Module/Contact.php:397 +#: src/BaseModule.php:445 src/Content/Widget.php:258 src/Module/Contact.php:399 #: src/Module/Settings/Channels.php:145 msgid "Following" msgstr "" -#: src/BaseModule.php:450 src/Content/Widget.php:259 src/Module/Contact.php:400 +#: src/BaseModule.php:450 src/Content/Widget.php:259 src/Module/Contact.php:402 msgid "Mutual friends" msgstr "" @@ -1695,7 +1695,7 @@ msgid "Network Widgets" msgstr "" #: src/Content/Feature.php:126 src/Content/Widget.php:233 -#: src/Model/Circle.php:587 src/Module/Contact.php:380 +#: src/Model/Circle.php:587 src/Module/Contact.php:382 #: src/Module/Welcome.php:62 msgid "Circles" msgstr "" @@ -1880,7 +1880,7 @@ msgstr "" msgid "Send PM" msgstr "" -#: src/Content/Item.php:428 src/Module/Contact.php:448 +#: src/Content/Item.php:428 src/Module/Contact.php:450 #: src/Module/Contact/Profile.php:560 #: src/Module/Moderation/Blocklist/Contact.php:104 #: src/Module/Moderation/Users/Active.php:93 @@ -1888,7 +1888,7 @@ msgstr "" msgid "Block" msgstr "" -#: src/Content/Item.php:429 src/Module/Contact.php:449 +#: src/Content/Item.php:429 src/Module/Contact.php:451 #: src/Module/Contact/Profile.php:568 #: src/Module/Notifications/Introductions.php:126 #: src/Module/Notifications/Introductions.php:199 @@ -1896,7 +1896,7 @@ msgstr "" msgid "Ignore" msgstr "" -#: src/Content/Item.php:430 src/Module/Contact.php:450 +#: src/Content/Item.php:430 src/Module/Contact.php:452 #: src/Module/Contact/Profile.php:576 msgid "Collapse" msgstr "" @@ -1963,7 +1963,7 @@ msgid "Sign in" msgstr "" #: src/Content/Nav.php:225 src/Module/BaseProfile.php:42 -#: src/Module/Contact.php:492 +#: src/Module/Contact.php:494 msgid "Conversations" msgstr "" @@ -1972,7 +1972,7 @@ msgid "Conversations you started" msgstr "" #: src/Content/Nav.php:226 src/Module/BaseProfile.php:34 -#: src/Module/BaseSettings.php:86 src/Module/Contact.php:484 +#: src/Module/BaseSettings.php:86 src/Module/Contact.php:486 #: src/Module/Contact/Profile.php:462 src/Module/Profile/Profile.php:277 #: src/Module/Welcome.php:43 view/theme/frio/theme.php:219 msgid "Profile" @@ -1992,7 +1992,7 @@ msgid "Your photos" msgstr "" #: src/Content/Nav.php:228 src/Module/BaseProfile.php:58 -#: src/Module/BaseProfile.php:61 src/Module/Contact.php:508 +#: src/Module/BaseProfile.php:61 src/Module/Contact.php:510 #: view/theme/frio/theme.php:224 msgid "Media" msgstr "" @@ -2074,8 +2074,8 @@ msgstr "" #: src/Content/Nav.php:270 src/Content/Nav.php:325 #: src/Content/Text/HTML.php:872 src/Module/BaseProfile.php:112 -#: src/Module/BaseProfile.php:115 src/Module/Contact.php:406 -#: src/Module/Contact.php:516 view/theme/frio/theme.php:232 +#: src/Module/BaseProfile.php:115 src/Module/Contact.php:408 +#: src/Module/Contact.php:518 view/theme/frio/theme.php:232 msgid "Contacts" msgstr "" @@ -2240,28 +2240,28 @@ msgstr "" msgid "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:926 src/Model/Item.php:3850 +#: src/Content/Text/BBCode.php:931 src/Model/Item.php:3850 #: src/Model/Item.php:3856 src/Model/Item.php:3857 msgid "Link to source" msgstr "" -#: src/Content/Text/BBCode.php:1748 src/Content/Text/HTML.php:900 +#: src/Content/Text/BBCode.php:1753 src/Content/Text/HTML.php:900 msgid "Click to open/close" msgstr "" -#: src/Content/Text/BBCode.php:1803 +#: src/Content/Text/BBCode.php:1808 msgid "$1 wrote:" msgstr "" -#: src/Content/Text/BBCode.php:1877 src/Content/Text/BBCode.php:1878 +#: src/Content/Text/BBCode.php:1882 src/Content/Text/BBCode.php:1883 msgid "Encrypted content" msgstr "" -#: src/Content/Text/BBCode.php:2211 +#: src/Content/Text/BBCode.php:2229 msgid "Invalid source protocol" msgstr "" -#: src/Content/Text/BBCode.php:2230 +#: src/Content/Text/BBCode.php:2248 msgid "Invalid link protocol" msgstr "" @@ -2313,7 +2313,7 @@ msgstr "" msgid "Examples: Robert Morgenstein, Fishing" msgstr "" -#: src/Content/Widget.php:67 src/Module/Contact.php:440 +#: src/Content/Widget.php:67 src/Module/Contact.php:442 #: src/Module/Directory.php:82 view/theme/vier/theme.php:184 msgid "Find" msgstr "" @@ -2348,7 +2348,7 @@ msgstr "" msgid "Everyone" msgstr "" -#: src/Content/Widget.php:260 src/Module/Contact.php:403 +#: src/Content/Widget.php:260 src/Module/Contact.php:405 msgid "No relationship" msgstr "" @@ -2357,7 +2357,7 @@ msgid "Relationships" msgstr "" #: src/Content/Widget.php:267 src/Module/Circle.php:281 -#: src/Module/Contact.php:324 +#: src/Module/Contact.php:326 msgid "All Contacts" msgstr "" @@ -4377,7 +4377,7 @@ msgid "Policies" msgstr "" #: src/Module/Admin/Site.php:454 src/Module/Calendar/Event/Form.php:238 -#: src/Module/Contact.php:527 src/Module/Profile/Profile.php:285 +#: src/Module/Contact.php:529 src/Module/Profile/Profile.php:285 msgid "Advanced" msgstr "" @@ -5718,7 +5718,7 @@ msgstr "" msgid "Item Source" msgstr "" -#: src/Module/BaseProfile.php:37 src/Module/Contact.php:487 +#: src/Module/BaseProfile.php:37 src/Module/Contact.php:489 msgid "Profile Details" msgstr "" @@ -5742,8 +5742,8 @@ msgstr "" msgid "Tips for New Members" msgstr "" -#: src/Module/BaseProfile.php:141 src/Module/Contact.php:390 -#: src/Module/Contact.php:537 src/Module/Conversation/Channel.php:98 +#: src/Module/BaseProfile.php:141 src/Module/Contact.php:392 +#: src/Module/Contact.php:539 src/Module/Conversation/Channel.php:98 #: src/Module/Conversation/Community.php:91 #: src/Module/Conversation/Network.php:349 #: src/Module/Moderation/BaseUsers.php:130 src/Object/Post.php:611 @@ -6041,142 +6041,142 @@ msgid_plural "%d contacts edited." msgstr[0] "" msgstr[1] "" -#: src/Module/Contact.php:327 +#: src/Module/Contact.php:329 msgid "Show all contacts" msgstr "" -#: src/Module/Contact.php:332 src/Module/Contact.php:411 +#: src/Module/Contact.php:334 src/Module/Contact.php:413 #: src/Module/Moderation/BaseUsers.php:92 msgid "Pending" msgstr "" -#: src/Module/Contact.php:335 +#: src/Module/Contact.php:337 msgid "Only show pending contacts" msgstr "" -#: src/Module/Contact.php:340 src/Module/Contact.php:414 +#: src/Module/Contact.php:342 src/Module/Contact.php:416 #: src/Module/Moderation/BaseUsers.php:100 msgid "Blocked" msgstr "" -#: src/Module/Contact.php:343 +#: src/Module/Contact.php:345 msgid "Only show blocked contacts" msgstr "" -#: src/Module/Contact.php:348 src/Module/Contact.php:420 +#: src/Module/Contact.php:350 src/Module/Contact.php:422 #: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:390 msgid "Ignored" msgstr "" -#: src/Module/Contact.php:351 +#: src/Module/Contact.php:353 msgid "Only show ignored contacts" msgstr "" -#: src/Module/Contact.php:356 src/Module/Contact.php:423 +#: src/Module/Contact.php:358 src/Module/Contact.php:425 msgid "Collapsed" msgstr "" -#: src/Module/Contact.php:359 +#: src/Module/Contact.php:361 msgid "Only show collapsed contacts" msgstr "" -#: src/Module/Contact.php:364 src/Module/Contact.php:426 +#: src/Module/Contact.php:366 src/Module/Contact.php:428 msgid "Archived" msgstr "" -#: src/Module/Contact.php:367 +#: src/Module/Contact.php:369 msgid "Only show archived contacts" msgstr "" -#: src/Module/Contact.php:372 src/Module/Contact.php:417 +#: src/Module/Contact.php:374 src/Module/Contact.php:419 msgid "Hidden" msgstr "" -#: src/Module/Contact.php:375 +#: src/Module/Contact.php:377 msgid "Only show hidden contacts" msgstr "" -#: src/Module/Contact.php:383 +#: src/Module/Contact.php:385 msgid "Organize your contact circles" msgstr "" -#: src/Module/Contact.php:438 +#: src/Module/Contact.php:440 msgid "Search your contacts" msgstr "" -#: src/Module/Contact.php:439 src/Module/Search/Index.php:202 +#: src/Module/Contact.php:441 src/Module/Search/Index.php:202 #, php-format msgid "Results for: %s" msgstr "" -#: src/Module/Contact.php:447 +#: src/Module/Contact.php:449 msgid "Update" msgstr "" -#: src/Module/Contact.php:448 src/Module/Contact/Profile.php:560 +#: src/Module/Contact.php:450 src/Module/Contact/Profile.php:560 #: src/Module/Moderation/Blocklist/Contact.php:105 #: src/Module/Moderation/Users/Blocked.php:94 #: src/Module/Moderation/Users/Index.php:103 msgid "Unblock" msgstr "" -#: src/Module/Contact.php:449 src/Module/Contact/Profile.php:568 +#: src/Module/Contact.php:451 src/Module/Contact/Profile.php:568 msgid "Unignore" msgstr "" -#: src/Module/Contact.php:450 src/Module/Contact/Profile.php:576 +#: src/Module/Contact.php:452 src/Module/Contact/Profile.php:576 msgid "Uncollapse" msgstr "" -#: src/Module/Contact.php:452 +#: src/Module/Contact.php:454 msgid "Batch Actions" msgstr "" -#: src/Module/Contact.php:495 +#: src/Module/Contact.php:497 msgid "Conversations started by this contact" msgstr "" -#: src/Module/Contact.php:500 +#: src/Module/Contact.php:502 msgid "Posts and Comments" msgstr "" -#: src/Module/Contact.php:503 +#: src/Module/Contact.php:505 msgid "Individual Posts and Replies" msgstr "" -#: src/Module/Contact.php:511 +#: src/Module/Contact.php:513 msgid "Posts containing media objects" msgstr "" -#: src/Module/Contact.php:519 +#: src/Module/Contact.php:521 msgid "View all known contacts" msgstr "" -#: src/Module/Contact.php:530 +#: src/Module/Contact.php:532 msgid "Advanced Contact Settings" msgstr "" -#: src/Module/Contact.php:566 +#: src/Module/Contact.php:568 msgid "Mutual Friendship" msgstr "" -#: src/Module/Contact.php:570 +#: src/Module/Contact.php:572 msgid "is a fan of yours" msgstr "" -#: src/Module/Contact.php:574 +#: src/Module/Contact.php:576 msgid "you are a fan of" msgstr "" -#: src/Module/Contact.php:592 +#: src/Module/Contact.php:594 msgid "Pending outgoing contact request" msgstr "" -#: src/Module/Contact.php:594 +#: src/Module/Contact.php:596 msgid "Pending incoming contact request" msgstr "" -#: src/Module/Contact.php:607 src/Module/Contact/Profile.php:414 +#: src/Module/Contact.php:609 src/Module/Contact/Profile.php:414 #, php-format msgid "Visit %s's profile [%s]" msgstr "" From 69dd232ee8f4208191b071c014ebccf5c8d0b891 Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Mon, 2 Jun 2025 21:35:32 +0200 Subject: [PATCH 32/33] Make PHPCS happy --- mod/message.php | 76 +++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/mod/message.php b/mod/message.php index 7205f4d38c..f3a231601c 100644 --- a/mod/message.php +++ b/mod/message.php @@ -1,4 +1,5 @@ 'm', ]; - $tpl = Renderer::getMarkupTemplate('message_side.tpl'); + $tpl = Renderer::getMarkupTemplate('message_side.tpl'); DI::page()['aside'] = Renderer::replaceMacros($tpl, [ '$tabs' => $tabs, '$new' => $new, @@ -61,7 +62,7 @@ function message_post() $body = !empty($_REQUEST['body']) ? Strings::escapeHtml(trim($_REQUEST['body'])) : ''; $recipient = !empty($_REQUEST['recipient']) ? intval($_REQUEST['recipient']) : 0; - $ret = Mail::send($sender_id, $recipient, $body, $subject, $replyto); + $ret = Mail::send($sender_id, $recipient, $body, $subject, $replyto); $norecip = false; switch ($ret) { @@ -131,7 +132,7 @@ function message_content() $cmd = DI::args()->getArgv()[1]; if ($cmd === 'drop') { $message = DBA::selectFirst('mail', ['convid'], ['id' => DI::args()->getArgv()[2], 'uid' => DI::userSession()->getLocalUserId()]); - if(!DBA::isResult($message)){ + if (!DBA::isResult($message)) { DI::sysmsg()->addNotice(DI::l10n()->t('Conversation not found.')); DI::baseUrl()->redirect('message'); } @@ -141,7 +142,7 @@ function message_content() } $conversation = DBA::selectFirst('mail', ['id'], ['convid' => $message['convid'], 'uid' => DI::userSession()->getLocalUserId()]); - if(!DBA::isResult($conversation)){ + if (!DBA::isResult($conversation)) { DI::baseUrl()->redirect('message'); } @@ -165,7 +166,7 @@ function message_content() $tpl = Renderer::getMarkupTemplate('msg-header.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ '$nickname' => DI::userSession()->getLocalUserNickname(), - '$linkurl' => DI::l10n()->t('Please enter a link URL:') + '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); $recipientId = DI::args()->getArgv()[2] ?? null; @@ -178,7 +179,7 @@ function message_content() '$to' => DI::l10n()->t('To:'), '$subject' => DI::l10n()->t('Subject:'), '$subjtxt' => $_REQUEST['subject'] ?? '', - '$text' => $_REQUEST['body'] ?? '', + '$text' => $_REQUEST['body'] ?? '', '$readonly' => '', '$yourmessage' => DI::l10n()->t('Your message:'), '$select' => $select, @@ -222,7 +223,8 @@ function message_content() $o .= $header; - $message = DBA::fetchFirst(" + $message = DBA::fetchFirst( + " SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb` FROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id` @@ -241,11 +243,12 @@ function message_content() if ($message['convid']) { $sql_extra = "AND (`mail`.`parent-uri` = ? OR `mail`.`convid` = ?)"; - $params[] = $message['convid']; + $params[] = $message['convid']; } else { $sql_extra = "AND `mail`.`parent-uri` = ?"; } - $messages_stmt = DBA::p(" + $messages_stmt = DBA::p( + " SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb` FROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id` @@ -270,11 +273,11 @@ function message_content() $tpl = Renderer::getMarkupTemplate('msg-header.tpl'); DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [ '$nickname' => DI::userSession()->getLocalUserNickname(), - '$linkurl' => DI::l10n()->t('Please enter a link URL:') + '$linkurl' => DI::l10n()->t('Please enter a link URL:') ]); - $mails = []; - $seen = 0; + $mails = []; + $seen = 0; $unknown = false; foreach ($messages as $message) { @@ -284,18 +287,18 @@ function message_content() if ($message['from-url'] == $myprofile) { $from_url = $myprofile; - $sparkle = ''; + $sparkle = ''; } else { $from_url = Contact::magicLink($message['from-url']); - $sparkle = ' sparkle'; + $sparkle = ' sparkle'; } $from_name_e = $message['from-name']; - $subject_e = $message['title']; - $body_e = BBCode::convertForUriId($message['uri-id'], $message['body']); - $to_name_e = $message['name']; + $subject_e = $message['title']; + $body_e = BBCode::convertForUriId($message['uri-id'], $message['body']); + $to_name_e = $message['name']; - $contact = Contact::getByURL($message['from-url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']); + $contact = Contact::getByURL($message['from-url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']); $from_photo = Contact::getThumb($contact); $mails[] = [ @@ -320,7 +323,7 @@ function message_content() $parent = ''; $tpl = Renderer::getMarkupTemplate('mail_display.tpl'); - $o = Renderer::replaceMacros($tpl, [ + $o = Renderer::replaceMacros($tpl, [ '$thread_id' => DI::args()->getArgv()[1], '$thread_subject' => $message['title'], '$thread_seen' => $seen, @@ -329,19 +332,19 @@ function message_content() '$unknown_text' => DI::l10n()->t("No secure communications available. You may be able to respond from the sender's profile page."), '$mails' => $mails, // reply - '$header' => DI::l10n()->t('Send Reply'), - '$to' => DI::l10n()->t('To:'), - '$subject' => DI::l10n()->t('Subject:'), - '$subjtxt' => $message['title'], - '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', - '$yourmessage' => DI::l10n()->t('Your message:'), - '$text' => '', - '$select' => $select, - '$parent' => $parent, - '$upload' => DI::l10n()->t('Upload photo'), - '$insert' => DI::l10n()->t('Insert web link'), - '$submit' => DI::l10n()->t('Submit'), - '$wait' => DI::l10n()->t('Please wait') + '$header' => DI::l10n()->t('Send Reply'), + '$to' => DI::l10n()->t('To:'), + '$subject' => DI::l10n()->t('Subject:'), + '$subjtxt' => $message['title'], + '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', + '$yourmessage' => DI::l10n()->t('Your message:'), + '$text' => '', + '$select' => $select, + '$parent' => $parent, + '$upload' => DI::l10n()->t('Upload photo'), + '$insert' => DI::l10n()->t('Insert web link'), + '$submit' => DI::l10n()->t('Submit'), + '$wait' => DI::l10n()->t('Please wait') ]); return $o; @@ -396,13 +399,12 @@ function get_messages(int $uid, int $start, int $limit): array LEFT JOIN `contact` c ON m.`contact-id` = c.`id` WHERE m.`uid` = ? ORDER BY m2.`mailcreated` DESC - LIMIT ?, ?' - , $uid, $uid, $start, $limit)); + LIMIT ?, ?', $uid, $uid, $start, $limit)); } function render_messages(array $msg, string $t): string { - $tpl = Renderer::getMarkupTemplate($t); + $tpl = Renderer::getMarkupTemplate($t); $rslt = ''; $myprofile = DI::baseUrl() . '/profile/' . DI::userSession()->getLocalUserNickname(); @@ -416,7 +418,7 @@ function render_messages(array $msg, string $t): string $participants = DI::l10n()->t("%s and You", $rr['from-name']); } - $body_e = $rr['body']; + $body_e = $rr['body']; $to_name_e = $rr['name']; if (is_null($rr['url'])) { @@ -424,7 +426,7 @@ function render_messages(array $msg, string $t): string continue; } - $contact = Contact::getByURL($rr['url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']); + $contact = Contact::getByURL($rr['url'], false, ['thumb', 'addr', 'id', 'avatar', 'url']); $from_photo = Contact::getThumb($contact); $rslt .= Renderer::replaceMacros($tpl, [ From 02f6bb1256beeef1659f0201bf0e56e5700c5ba4 Mon Sep 17 00:00:00 2001 From: Marcus Funch Date: Sat, 31 May 2025 19:54:51 +0200 Subject: [PATCH 33/33] Shorten placeholder text for adding a new contact ...so it actually fits the size of the search box --- src/Content/Widget.php | 2 +- view/lang/C/messages.po | 72 ++++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/Content/Widget.php b/src/Content/Widget.php index b86b3e9b1c..860256ed74 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -35,7 +35,7 @@ class Widget return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/follow.tpl'), [ '$connect' => DI::l10n()->t('Add New Contact'), '$desc' => DI::l10n()->t('Enter address or web location'), - '$hint' => DI::l10n()->t('Example: bob@example.com, http://example.com/barbara'), + '$hint' => DI::l10n()->t('user@x.tld, x.tld/user'), '$value' => $value, '$follow' => DI::l10n()->t('Connect') ]); diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index fa7da735ef..6b0e5e433d 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2025.02-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-02 19:22+0200\n" +"POT-Creation-Date: 2025-06-03 20:17+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -44,7 +44,7 @@ msgstr "" msgid "Item not found." msgstr "" -#: mod/item.php:461 mod/message.php:54 mod/message.php:100 mod/notes.php:34 +#: mod/item.php:461 mod/message.php:55 mod/message.php:101 mod/notes.php:34 #: mod/photos.php:131 mod/photos.php:623 src/Model/Event.php:511 #: src/Module/Attach.php:40 src/Module/BaseApi.php:90 #: src/Module/BaseNotifications.php:83 src/Module/BaseSettings.php:38 @@ -210,86 +210,86 @@ msgstr "" msgid "Your password has been changed at %s" msgstr "" -#: mod/message.php:33 mod/message.php:115 src/Content/Nav.php:317 +#: mod/message.php:34 mod/message.php:116 src/Content/Nav.php:317 msgid "New Message" msgstr "" -#: mod/message.php:69 +#: mod/message.php:70 msgid "No recipient selected." msgstr "" -#: mod/message.php:74 +#: mod/message.php:75 msgid "Unable to locate contact information." msgstr "" -#: mod/message.php:78 +#: mod/message.php:79 msgid "Message could not be sent." msgstr "" -#: mod/message.php:82 +#: mod/message.php:83 msgid "Message collection failure." msgstr "" -#: mod/message.php:109 src/Module/Notifications/Introductions.php:127 +#: mod/message.php:110 src/Module/Notifications/Introductions.php:127 #: src/Module/Notifications/Introductions.php:163 #: src/Module/Notifications/Notification.php:71 msgid "Discard" msgstr "" -#: mod/message.php:122 src/Content/Nav.php:314 view/theme/frio/theme.php:230 +#: mod/message.php:123 src/Content/Nav.php:314 view/theme/frio/theme.php:230 msgid "Messages" msgstr "" -#: mod/message.php:135 +#: mod/message.php:136 msgid "Conversation not found." msgstr "" -#: mod/message.php:140 +#: mod/message.php:141 msgid "Message was not deleted." msgstr "" -#: mod/message.php:155 +#: mod/message.php:156 msgid "Conversation was not removed." msgstr "" -#: mod/message.php:168 mod/message.php:273 +#: mod/message.php:169 mod/message.php:276 msgid "Please enter a link URL:" msgstr "" -#: mod/message.php:177 +#: mod/message.php:178 msgid "Send Private Message" msgstr "" -#: mod/message.php:178 mod/message.php:333 +#: mod/message.php:179 mod/message.php:336 #: src/Module/Privacy/PermissionTooltip.php:149 msgid "To:" msgstr "" -#: mod/message.php:179 mod/message.php:334 +#: mod/message.php:180 mod/message.php:337 msgid "Subject:" msgstr "" -#: mod/message.php:183 mod/message.php:337 src/Module/Invite.php:155 +#: mod/message.php:184 mod/message.php:340 src/Module/Invite.php:155 msgid "Your message:" msgstr "" -#: mod/message.php:186 mod/message.php:341 src/Content/Conversation.php:362 +#: mod/message.php:187 mod/message.php:344 src/Content/Conversation.php:362 #: src/Module/Post/Edit.php:127 msgid "Upload photo" msgstr "" -#: mod/message.php:187 mod/message.php:342 src/Module/Post/Edit.php:131 +#: mod/message.php:188 mod/message.php:345 src/Module/Post/Edit.php:131 msgid "Insert web link" msgstr "" -#: mod/message.php:188 mod/message.php:344 mod/photos.php:1256 +#: mod/message.php:189 mod/message.php:347 mod/photos.php:1256 #: src/Content/Conversation.php:393 src/Content/Conversation.php:1572 #: src/Module/Item/Compose.php:205 src/Module/Post/Edit.php:141 #: src/Object/Post.php:613 msgid "Please wait" msgstr "" -#: mod/message.php:189 mod/message.php:343 mod/photos.php:658 +#: mod/message.php:190 mod/message.php:346 mod/photos.php:658 #: mod/photos.php:778 mod/photos.php:1055 mod/photos.php:1097 #: mod/photos.php:1153 mod/photos.php:1233 #: src/Module/Calendar/Event/Form.php:236 src/Module/Contact/Advanced.php:118 @@ -313,50 +313,50 @@ msgstr "" msgid "Submit" msgstr "" -#: mod/message.php:210 +#: mod/message.php:211 msgid "You have no messages." msgstr "" -#: mod/message.php:266 +#: mod/message.php:269 msgid "Message not available." msgstr "" -#: mod/message.php:310 +#: mod/message.php:313 msgid "Delete message" msgstr "" -#: mod/message.php:312 mod/message.php:441 +#: mod/message.php:315 mod/message.php:443 msgid "D, d M Y - g:i A" msgstr "" -#: mod/message.php:327 mod/message.php:438 +#: mod/message.php:330 mod/message.php:440 msgid "Delete conversation" msgstr "" -#: mod/message.php:329 +#: mod/message.php:332 msgid "No secure communications available. You may be able to respond from the sender's profile page." msgstr "" -#: mod/message.php:332 +#: mod/message.php:335 msgid "Send Reply" msgstr "" -#: mod/message.php:412 -#, php-format -msgid "Unknown sender - %s" -msgstr "" - #: mod/message.php:414 #, php-format -msgid "You and %s" +msgid "Unknown sender - %s" msgstr "" #: mod/message.php:416 #, php-format +msgid "You and %s" +msgstr "" + +#: mod/message.php:418 +#, php-format msgid "%s and You" msgstr "" -#: mod/message.php:444 +#: mod/message.php:446 #, php-format msgid "%d message" msgid_plural "%d messages" @@ -2287,7 +2287,7 @@ msgid "Enter address or web location" msgstr "" #: src/Content/Widget.php:38 -msgid "Example: bob@example.com, http://example.com/barbara" +msgid "user@x.tld, x.tld/user" msgstr "" #: src/Content/Widget.php:40