Merge pull request #14529 from Art4/add-static-code-analysis

Add static code analysis with PHPStan level 0
This commit is contained in:
Hypolite Petovan 2024-11-15 13:52:45 -05:00 committed by GitHub
commit b8aa6f15c9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 472 additions and 337 deletions

14
.phpstan.neon Normal file
View file

@ -0,0 +1,14 @@
# SPDX-FileCopyrightText: 2010 - 2024 the Friendica project
#
# SPDX-License-Identifier: CC0-1.0
parameters:
level: 0
paths:
- src/
scanDirectories:
- mod
- vendor
- view

View file

@ -152,13 +152,16 @@
"mikey179/vfsstream": "^1.6", "mikey179/vfsstream": "^1.6",
"mockery/mockery": "^1.3", "mockery/mockery": "^1.3",
"php-mock/php-mock-phpunit": "^2.10", "php-mock/php-mock-phpunit": "^2.10",
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^9" "phpunit/phpunit": "^9"
}, },
"scripts": { "scripts": {
"test": "phpunit", "test": "phpunit",
"test:unit": "phpunit -c tests/phpunit.xml --testsuite unit", "test:unit": "phpunit -c tests/phpunit.xml --testsuite unit",
"phpstan": "phpstan analyze --memory-limit 1024M --configuration .phpstan.neon",
"lint": "find . -name \\*.php -not -path './vendor/*' -not -path './view/asset/*' -print0 | xargs -0 -n1 php -l", "lint": "find . -name \\*.php -not -path './vendor/*' -not -path './view/asset/*' -print0 | xargs -0 -n1 php -l",
"docker:translate": "docker run --rm -v $PWD:/data -w /data friendicaci/transifex bin/run_xgettext.sh", "docker:translate": "docker run --rm -v $PWD:/data -w /data friendicaci/transifex bin/run_xgettext.sh",
"lang:recreate": "bin/run_xgettext.sh",
"cs:install": "@composer install --working-dir=bin/dev/php-cs-fixer", "cs:install": "@composer install --working-dir=bin/dev/php-cs-fixer",
"cs:check": [ "cs:check": [
"@cs:install", "@cs:install",

60
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "d51158b9593011921144e90af146a86a", "content-hash": "3e31a2243fb69e47e1b7000cca946fa2",
"packages": [ "packages": [
{ {
"name": "asika/simple-console", "name": "asika/simple-console",
@ -4832,6 +4832,64 @@
], ],
"time": "2024-02-11T07:24:16+00:00" "time": "2024-02-11T07:24:16+00:00"
}, },
{
"name": "phpstan/phpstan",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "ab4e9b4415a5fc9e4d27f7fe16c8bc9d067dcd6d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/ab4e9b4415a5fc9e4d27f7fe16c8bc9d067dcd6d",
"reference": "ab4e9b4415a5fc9e4d27f7fe16c8bc9d067dcd6d",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
"issues": "https://github.com/phpstan/phpstan/issues",
"security": "https://github.com/phpstan/phpstan/security/policy",
"source": "https://github.com/phpstan/phpstan-src"
},
"funding": [
{
"url": "https://github.com/ondrejmirtes",
"type": "github"
},
{
"url": "https://github.com/phpstan",
"type": "github"
}
],
"time": "2024-11-11T15:43:04+00:00"
},
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
"version": "9.2.31", "version": "9.2.31",

View file

@ -210,7 +210,7 @@ class Mode
public function isInstall(): bool public function isInstall(): bool
{ {
return !$this->has(Mode::LOCALCONFIGPRESENT) || return !$this->has(Mode::LOCALCONFIGPRESENT) ||
!$this->has(MODE::DBAVAILABLE); !$this->has(Mode::DBAVAILABLE);
} }
/** /**

View file

@ -89,7 +89,9 @@ class BaseCollection extends \ArrayIterator
*/ */
public function map(callable $callback): BaseCollection public function map(callable $callback): BaseCollection
{ {
return new static(array_map($callback, $this->getArrayCopy()), $this->getTotalCount()); $class = get_class($this);
return new $class(array_map($callback, $this->getArrayCopy()), $this->getTotalCount());
} }
/** /**
@ -102,7 +104,9 @@ class BaseCollection extends \ArrayIterator
*/ */
public function filter(callable $callback = null, int $flag = 0): BaseCollection public function filter(callable $callback = null, int $flag = 0): BaseCollection
{ {
return new static(array_filter($this->getArrayCopy(), $callback, $flag)); $class = get_class($this);
return new $class(array_filter($this->getArrayCopy(), $callback, $flag));
} }
/** /**
@ -112,7 +116,9 @@ class BaseCollection extends \ArrayIterator
*/ */
public function reverse(): BaseCollection public function reverse(): BaseCollection
{ {
return new static(array_reverse($this->getArrayCopy()), $this->getTotalCount()); $class = get_class($this);
return new $class(array_reverse($this->getArrayCopy()), $this->getTotalCount());
} }
/** /**
@ -128,7 +134,9 @@ class BaseCollection extends \ArrayIterator
} }
return array_map(function ($array) { return array_map(function ($array) {
return new static($array); $class = get_class($this);
return new $class($array);
}, array_chunk($this->getArrayCopy(), $length)); }, array_chunk($this->getArrayCopy(), $length));
} }

View file

@ -144,6 +144,8 @@ HELP;
} }
$this->out($table->getTable()); $this->out($table->getTable());
return 0;
} }
/** /**

View file

@ -8,6 +8,7 @@
namespace Friendica\Console; namespace Friendica\Console;
use Asika\SimpleConsole\Console; use Asika\SimpleConsole\Console;
use Exception;
use Friendica\App; use Friendica\App;
use Friendica\App\BaseURL; use Friendica\App\BaseURL;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;

View file

@ -158,9 +158,10 @@ HELP;
if ($result['success']) { if ($result['success']) {
$this->out('User ' . $user['nickname'] . ' now connected to ' . $url . ', contact ID ' . $result['cid']); $this->out('User ' . $user['nickname'] . ' now connected to ' . $url . ', contact ID ' . $result['cid']);
} else { return true;
throw new RuntimeException($result['message']);
} }
throw new RuntimeException($result['message']);
} }
/** /**

View file

@ -7,12 +7,11 @@
namespace Friendica\Console; namespace Friendica\Console;
use Friendica\App; use Asika\SimpleConsole\CommandArgsException;
use Friendica\App\Mode;
use Friendica\Core\L10n;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Util\Strings;
use RuntimeException; use RuntimeException;
/** /**
@ -23,13 +22,17 @@ class FixAPDeliveryWorkerTaskParameters extends \Asika\SimpleConsole\Console
protected $helpOptions = ['h', 'help', '?']; protected $helpOptions = ['h', 'help', '?'];
/** /**
* @var App\Mode * @var Mode
*/ */
private $appMode; private $appMode;
/** /**
* @var Database * @var Database
*/ */
private $dba; private $dba;
/**
* @var L10n
*/
private $l10n;
/** /**
* @var int * @var int
*/ */
@ -62,7 +65,7 @@ HELP;
return $help; return $help;
} }
public function __construct(App\Mode $appMode, Database $dba, \Friendica\Core\L10n $l10n, array $argv = null) public function __construct(Mode $appMode, Database $dba, L10n $l10n, array $argv = null)
{ {
parent::__construct($argv); parent::__construct($argv);
@ -80,7 +83,7 @@ HELP;
} }
if (count($this->args) > 0) { if (count($this->args) > 0) {
throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); throw new CommandArgsException('Too many arguments');
} }
if ($this->appMode->isInstall()) { if ($this->appMode->isInstall()) {

View file

@ -122,7 +122,7 @@ HELP;
case 'search': case 'search':
return $this->searchUser(); return $this->searchUser();
case 'config': case 'config':
return $this->configUser(); return ($this->configUser()) ? 0 : 1;
default: default:
throw new \Asika\SimpleConsole\CommandArgsException('Wrong command.'); throw new \Asika\SimpleConsole\CommandArgsException('Wrong command.');
} }
@ -512,5 +512,7 @@ HELP;
$this->out($this->getHelp()); $this->out($this->getHelp());
return false; return false;
} }
return true;
} }
} }

View file

@ -228,7 +228,7 @@ class PostMedia extends BaseEntity
$newHeight = $dimensionts['height']; $newHeight = $dimensionts['height'];
} }
return new static( return new self(
$this->uriId, $this->uriId,
$this->url, $this->url,
$this->type, $this->type,
@ -255,7 +255,7 @@ class PostMedia extends BaseEntity
public function withUrl(\GuzzleHttp\Psr7\Uri $url): self public function withUrl(\GuzzleHttp\Psr7\Uri $url): self
{ {
return new static( return new self(
$this->uriId, $this->uriId,
$url, $url,
$this->type, $this->type,

View file

@ -26,7 +26,6 @@ class ContactBlock
/** /**
* Get HTML for contact block * Get HTML for contact block
* *
* @template widget/contacts.tpl
* @hook contact_block_end (contacts=>array, output=>string) * @hook contact_block_end (contacts=>array, output=>string)
* @return string Formatted HTML code or empty string * @return string Formatted HTML code or empty string
*/ */

View file

@ -26,7 +26,6 @@ class VCard
/** /**
* Get HTML for vcard block * Get HTML for vcard block
* *
* @template widget/vcard.tpl
* @param array $contact * @param array $contact
* @param bool $hide_mention * @param bool $hide_mention
* @param bool $hide_follow * @param bool $hide_follow

View file

@ -41,11 +41,8 @@ class APCuCache extends AbstractCache implements ICanCacheInMemory
$ns = $this->getCacheKey($prefix ?? ''); $ns = $this->getCacheKey($prefix ?? '');
$ns = preg_quote($ns, '/'); $ns = preg_quote($ns, '/');
if (class_exists('\APCIterator')) { /** @phpstan-ignore-next-line see https://github.com/friendica/friendica-addons/pull/1363 */
$iterator = new \APCIterator('user', '/^' . $ns. '/', APC_ITER_KEY);
} else {
$iterator = new \APCUIterator('/^' . $ns . '/', APC_ITER_KEY); $iterator = new \APCUIterator('/^' . $ns . '/', APC_ITER_KEY);
}
$keys = []; $keys = [];
foreach ($iterator as $item) { foreach ($iterator as $item) {
@ -122,11 +119,8 @@ class APCuCache extends AbstractCache implements ICanCacheInMemory
$prefix = $this->getPrefix(); $prefix = $this->getPrefix();
$prefix = preg_quote($prefix, '/'); $prefix = preg_quote($prefix, '/');
if (class_exists('\APCIterator')) { /** @phpstan-ignore-next-line see https://github.com/friendica/friendica-addons/pull/1363 */
$iterator = new \APCIterator('user', '/^' . $prefix . '/', APC_ITER_KEY);
} else {
$iterator = new \APCUIterator('/^' . $prefix . '/', APC_ITER_KEY); $iterator = new \APCUIterator('/^' . $prefix . '/', APC_ITER_KEY);
}
return apcu_delete($iterator); return apcu_delete($iterator);
} }
@ -149,10 +143,7 @@ class APCuCache extends AbstractCache implements ICanCacheInMemory
return false; return false;
} elseif (!ini_get('apc.enabled') && !ini_get('apc.enable_cli')) { } elseif (!ini_get('apc.enabled') && !ini_get('apc.enable_cli')) {
return false; return false;
} elseif ( } elseif (version_compare(phpversion('apcu') ?: '0.0.0', '5.1.0', '<')) {
version_compare(phpversion('apc') ?: '0.0.0', '4.0.6') === -1 &&
version_compare(phpversion('apcu') ?: '0.0.0', '5.1.0') === -1
) {
return false; return false;
} }

View file

@ -2706,8 +2706,6 @@ class Contact
* *
* @param int $id * @param int $id
* @param array $contact * @param array $contact
*
* @return boolean
*/ */
private static function hasLocalData(int $id, array $contact): bool private static function hasLocalData(int $id, array $contact): bool
{ {
@ -2767,6 +2765,8 @@ class Contact
'network', 'alias', 'baseurl', 'gsid', 'forum', 'prv', 'contact-type', 'pubkey', 'last-item', 'xmpp', 'matrix', 'network', 'alias', 'baseurl', 'gsid', 'forum', 'prv', 'contact-type', 'pubkey', 'last-item', 'xmpp', 'matrix',
'created', 'last-update' 'created', 'last-update'
]; ];
/** @var array<string,mixed> */
$contact = DBA::selectFirst('contact', $fields, ['id' => $id]); $contact = DBA::selectFirst('contact', $fields, ['id' => $id]);
if (!DBA::isResult($contact)) { if (!DBA::isResult($contact)) {
return false; return false;
@ -2792,22 +2792,22 @@ class Contact
$has_local_data = self::hasLocalData($id, $contact); $has_local_data = self::hasLocalData($id, $contact);
$uid = $contact['uid']; $uid = $contact['uid'] ?? null;
unset($contact['uid']); unset($contact['uid']);
$uriid = $contact['uri-id']; $uriid = $contact['uri-id'] ?? null;
unset($contact['uri-id']); unset($contact['uri-id']);
$pubkey = $contact['pubkey']; $pubkey = $contact['pubkey'] ?? null;
unset($contact['pubkey']); unset($contact['pubkey']);
$created = $contact['created']; $created = $contact['created'] ?? '';
unset($contact['created']); unset($contact['created']);
$last_update = $contact['last-update']; $last_update = $contact['last-update'] ?? '';
unset($contact['last-update']); unset($contact['last-update']);
$contact['photo'] = $contact['avatar']; $contact['photo'] = $contact['avatar'] ?? null;
unset($contact['avatar']); unset($contact['avatar']);
$updated = DateTimeFormat::utcNow(); $updated = DateTimeFormat::utcNow();

View file

@ -3198,10 +3198,10 @@ class Item
} elseif ($remote_user) { } elseif ($remote_user) {
// Authenticated visitor - fetch the matching permissionsets // Authenticated visitor - fetch the matching permissionsets
$permissionSets = DI::permissionSet()->selectByContactId($remote_user, $owner_id); $permissionSets = DI::permissionSet()->selectByContactId($remote_user, $owner_id);
if (!empty($set)) { if (!empty($permissionSets)) {
$condition = [ $condition = [
"(`private` != ? OR (`private` = ? AND `wall` "(`private` != ? OR (`private` = ? AND `wall`
AND `psid` IN (" . implode(', ', array_fill(0, count($set), '?')) . ")))", AND `psid` IN (" . implode(', ', array_fill(0, count($permissionSets), '?')) . ")))",
self::PRIVATE, self::PRIVATE self::PRIVATE, self::PRIVATE
]; ];
$condition = array_merge($condition, $permissionSets->column('id')); $condition = array_merge($condition, $permissionSets->column('id'));
@ -3247,7 +3247,7 @@ class Item
*/ */
$permissionSets = DI::permissionSet()->selectByContactId($remote_user, $owner_id); $permissionSets = DI::permissionSet()->selectByContactId($remote_user, $owner_id);
if (!empty($set)) { if (!empty($permissionSets)) {
$sql_set = sprintf(" OR (" . $table . "`private` = %d AND " . $table . "`wall` AND " . $table . "`psid` IN (", self::PRIVATE) . implode(',', $permissionSets->column('id')) . "))"; $sql_set = sprintf(" OR (" . $table . "`private` = %d AND " . $table . "`wall` AND " . $table . "`psid` IN (", self::PRIVATE) . implode(',', $permissionSets->column('id')) . "))";
} else { } else {
$sql_set = ''; $sql_set = '';

View file

@ -157,10 +157,6 @@ class Search extends BaseApi
$condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $max_id]); $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $max_id]);
} }
if (!empty($since_id)) {
$condition = DBA::mergeConditions($condition, ["`uri-id` > ?", $since_id]);
}
if (!empty($min_id)) { if (!empty($min_id)) {
$condition = DBA::mergeConditions($condition, ["`uri-id` > ?", $min_id]); $condition = DBA::mergeConditions($condition, ["`uri-id` > ?", $min_id]);

View file

@ -23,12 +23,12 @@ class ActivityPubConversion extends BaseModule
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
function visible_whitespace($s)
{
return '<pre>' . htmlspecialchars($s) . '</pre>';
}
$results = []; $results = [];
$visible_whitespace = function (string $s): string {
return '<pre>' . htmlspecialchars($s) . '</pre>';
};
if (!empty($_REQUEST['source'])) { if (!empty($_REQUEST['source'])) {
try { try {
$source = json_decode($_REQUEST['source'], true); $source = json_decode($_REQUEST['source'], true);
@ -43,11 +43,11 @@ class ActivityPubConversion extends BaseModule
$formatted = json_encode($source, JSON_PRETTY_PRINT); $formatted = json_encode($source, JSON_PRETTY_PRINT);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Formatted'), 'title' => DI::l10n()->t('Formatted'),
'content' => visible_whitespace(trim(var_export($formatted, true), "'")), 'content' => $visible_whitespace(trim(var_export($formatted, true), "'")),
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source'), 'title' => DI::l10n()->t('Source'),
'content' => visible_whitespace(var_export($source, true)) 'content' => $visible_whitespace(var_export($source, true))
]; ];
$activity = JsonLD::compact($source); $activity = JsonLD::compact($source);
if (!$activity) { if (!$activity) {
@ -55,7 +55,7 @@ class ActivityPubConversion extends BaseModule
} }
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Activity'), 'title' => DI::l10n()->t('Activity'),
'content' => visible_whitespace(var_export($activity, true)) 'content' => $visible_whitespace(var_export($activity, true))
]; ];
$type = JsonLD::fetchElement($activity, '@type'); $type = JsonLD::fetchElement($activity, '@type');
@ -92,10 +92,6 @@ class ActivityPubConversion extends BaseModule
throw new \Exception('No trust for activity type "' . $type . '", so we quit now.'); throw new \Exception('No trust for activity type "' . $type . '", so we quit now.');
} }
if (!empty($body) && empty($object_data['raw'])) {
$object_data['raw'] = $body;
}
// Internal flag for thread completion. See Processor.php // Internal flag for thread completion. See Processor.php
if (!empty($activity['thread-completion'])) { if (!empty($activity['thread-completion'])) {
$object_data['thread-completion'] = $activity['thread-completion']; $object_data['thread-completion'] = $activity['thread-completion'];
@ -107,14 +103,14 @@ class ActivityPubConversion extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Object data'), 'title' => DI::l10n()->t('Object data'),
'content' => visible_whitespace(var_export($object_data, true)) 'content' => $visible_whitespace(var_export($object_data, true))
]; ];
$item = ActivityPub\Processor::createItem($object_data, true); $item = ActivityPub\Processor::createItem($object_data, true);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Result Item'), 'title' => DI::l10n()->t('Result Item'),
'content' => visible_whitespace(var_export($item, true)) 'content' => $visible_whitespace(var_export($item, true))
]; ];
} catch (\Throwable $e) { } catch (\Throwable $e) {
$results[] = [ $results[] = [

View file

@ -29,12 +29,12 @@ class Babel extends BaseModule
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
function visible_whitespace($s)
{
return '<pre>' . htmlspecialchars($s) . '</pre>';
}
$results = []; $results = [];
$visible_whitespace = function (string $s): string {
return '<pre>' . htmlspecialchars($s) . '</pre>';
};
if (!empty($request['text'])) { if (!empty($request['text'])) {
self::checkFormSecurityTokenForbiddenOnError('babel'); self::checkFormSecurityTokenForbiddenOnError('babel');
switch (($request['type'] ?? '') ?: 'bbcode') { switch (($request['type'] ?? '') ?: 'bbcode') {
@ -42,24 +42,24 @@ class Babel extends BaseModule
$bbcode = $request['text']; $bbcode = $request['text'];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source input'), 'title' => DI::l10n()->t('Source input'),
'content' => visible_whitespace($bbcode) 'content' => $visible_whitespace($bbcode)
]; ];
$plain = Text\BBCode::toPlaintext($bbcode, false); $plain = Text\BBCode::toPlaintext($bbcode, false);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toPlaintext'), 'title' => DI::l10n()->t('BBCode::toPlaintext'),
'content' => visible_whitespace($plain) 'content' => $visible_whitespace($plain)
]; ];
$html = Text\BBCode::convertForUriId(0, $bbcode); $html = Text\BBCode::convertForUriId(0, $bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::convert (raw HTML)'), 'title' => DI::l10n()->t('BBCode::convert (raw HTML)'),
'content' => visible_whitespace($html) 'content' => $visible_whitespace($html)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::convert (hex)'), 'title' => DI::l10n()->t('BBCode::convert (hex)'),
'content' => visible_whitespace(bin2hex($html)), 'content' => $visible_whitespace(bin2hex($html)),
]; ];
$results[] = [ $results[] = [
@ -70,19 +70,19 @@ class Babel extends BaseModule
$bbcode2 = Text\HTML::toBBCode($html); $bbcode2 = Text\HTML::toBBCode($html);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::convert => HTML::toBBCode'), 'title' => DI::l10n()->t('BBCode::convert => HTML::toBBCode'),
'content' => visible_whitespace($bbcode2) 'content' => $visible_whitespace($bbcode2)
]; ];
$markdown = Text\BBCode::toMarkdown($bbcode); $markdown = Text\BBCode::toMarkdown($bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown'), 'title' => DI::l10n()->t('BBCode::toMarkdown'),
'content' => visible_whitespace($markdown) 'content' => $visible_whitespace($markdown)
]; ];
$html2 = Text\Markdown::convert($markdown); $html2 = Text\Markdown::convert($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert (raw HTML)'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert (raw HTML)'),
'content' => visible_whitespace($html2) 'content' => $visible_whitespace($html2)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert'),
@ -92,13 +92,13 @@ class Babel extends BaseModule
$bbcode3 = Text\Markdown::toBBCode($markdown); $bbcode3 = Text\Markdown::toBBCode($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::toBBCode'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::toBBCode'),
'content' => visible_whitespace($bbcode3) 'content' => $visible_whitespace($bbcode3)
]; ];
$bbcode4 = Text\HTML::toBBCode($html2); $bbcode4 = Text\HTML::toBBCode($html2);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert => HTML::toBBCode'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert => HTML::toBBCode'),
'content' => visible_whitespace($bbcode4) 'content' => $visible_whitespace($bbcode4)
]; ];
$tags = Text\BBCode::getTags($bbcode); $tags = Text\BBCode::getTags($bbcode);
@ -106,22 +106,22 @@ class Babel extends BaseModule
$body = Item::setHashtags($bbcode); $body = Item::setHashtags($bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Item Body'), 'title' => DI::l10n()->t('Item Body'),
'content' => visible_whitespace($body) 'content' => $visible_whitespace($body)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Item Tags'), 'title' => DI::l10n()->t('Item Tags'),
'content' => visible_whitespace(var_export($tags, true)), 'content' => $visible_whitespace(var_export($tags, true)),
]; ];
$body2 = PageInfo::searchAndAppendToBody($bbcode, true); $body2 = PageInfo::searchAndAppendToBody($bbcode, true);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('PageInfo::appendToBody'), 'title' => DI::l10n()->t('PageInfo::appendToBody'),
'content' => visible_whitespace($body2) 'content' => $visible_whitespace($body2)
]; ];
$html3 = Text\BBCode::convertForUriId(0, $body2); $html3 = Text\BBCode::convertForUriId(0, $body2);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert (raw HTML)'), 'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert (raw HTML)'),
'content' => visible_whitespace($html3) 'content' => $visible_whitespace($html3)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert'), 'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert'),
@ -132,7 +132,7 @@ class Babel extends BaseModule
$diaspora = trim($request['text']); $diaspora = trim($request['text']);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source input (Diaspora format)'), 'title' => DI::l10n()->t('Source input (Diaspora format)'),
'content' => visible_whitespace($diaspora), 'content' => $visible_whitespace($diaspora),
]; ];
$markdown = XML::unescape($diaspora); $markdown = XML::unescape($diaspora);
@ -141,13 +141,13 @@ class Babel extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source input (Markdown)'), 'title' => DI::l10n()->t('Source input (Markdown)'),
'content' => visible_whitespace($markdown), 'content' => $visible_whitespace($markdown),
]; ];
$html = Text\Markdown::convert($markdown); $html = Text\Markdown::convert($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Markdown::convert (raw HTML)'), 'title' => DI::l10n()->t('Markdown::convert (raw HTML)'),
'content' => visible_whitespace($html), 'content' => $visible_whitespace($html),
]; ];
$results[] = [ $results[] = [
@ -158,14 +158,14 @@ class Babel extends BaseModule
$bbcode = Text\Markdown::toBBCode($markdown); $bbcode = Text\Markdown::toBBCode($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Markdown::toBBCode'), 'title' => DI::l10n()->t('Markdown::toBBCode'),
'content' => visible_whitespace($bbcode), 'content' => $visible_whitespace($bbcode),
]; ];
break; break;
case 'html' : case 'html' :
$html = trim($request['text']); $html = trim($request['text']);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Raw HTML input'), 'title' => DI::l10n()->t('Raw HTML input'),
'content' => visible_whitespace($html), 'content' => $visible_whitespace($html),
]; ];
$results[] = [ $results[] = [
@ -177,12 +177,12 @@ class Babel extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML Purified (raw)'), 'title' => DI::l10n()->t('HTML Purified (raw)'),
'content' => visible_whitespace($purified), 'content' => $visible_whitespace($purified),
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML Purified (hex)'), 'title' => DI::l10n()->t('HTML Purified (hex)'),
'content' => visible_whitespace(bin2hex($purified)), 'content' => $visible_whitespace(bin2hex($purified)),
]; ];
$results[] = [ $results[] = [
@ -193,7 +193,7 @@ class Babel extends BaseModule
$bbcode = Text\HTML::toBBCode($html); $bbcode = Text\HTML::toBBCode($html);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toBBCode'), 'title' => DI::l10n()->t('HTML::toBBCode'),
'content' => visible_whitespace($bbcode) 'content' => $visible_whitespace($bbcode)
]; ];
$html2 = Text\BBCode::convertForUriId(0, $bbcode); $html2 = Text\BBCode::convertForUriId(0, $bbcode);
@ -210,25 +210,25 @@ class Babel extends BaseModule
$bbcode2plain = Text\BBCode::toPlaintext($bbcode); $bbcode2plain = Text\BBCode::toPlaintext($bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toBBCode => BBCode::toPlaintext'), 'title' => DI::l10n()->t('HTML::toBBCode => BBCode::toPlaintext'),
'content' => visible_whitespace($bbcode2plain), 'content' => $visible_whitespace($bbcode2plain),
]; ];
$markdown = Text\HTML::toMarkdown($html); $markdown = Text\HTML::toMarkdown($html);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toMarkdown'), 'title' => DI::l10n()->t('HTML::toMarkdown'),
'content' => visible_whitespace($markdown) 'content' => $visible_whitespace($markdown)
]; ];
$text = Text\HTML::toPlaintext($html, 0); $text = Text\HTML::toPlaintext($html, 0);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toPlaintext'), 'title' => DI::l10n()->t('HTML::toPlaintext'),
'content' => visible_whitespace($text), 'content' => $visible_whitespace($text),
]; ];
$text = Text\HTML::toPlaintext($html, 0, true); $text = Text\HTML::toPlaintext($html, 0, true);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toPlaintext (compact)'), 'title' => DI::l10n()->t('HTML::toPlaintext (compact)'),
'content' => visible_whitespace($text), 'content' => $visible_whitespace($text),
]; ];
break; break;
case 'twitter': case 'twitter':
@ -237,16 +237,11 @@ class Babel extends BaseModule
if (file_exists('addon/twitter/twitter.php')) { if (file_exists('addon/twitter/twitter.php')) {
require_once 'addon/twitter/twitter.php'; require_once 'addon/twitter/twitter.php';
if (parse_url($json) !== false) {
preg_match('#^https?://(?:mobile\.|www\.)?twitter.com/[^/]+/status/(\d+).*#', $json, $matches);
$status = twitter_statuses_show($matches[1]);
} else {
$status = json_decode($json); $status = json_decode($json);
}
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Decoded post'), 'title' => DI::l10n()->t('Decoded post'),
'content' => visible_whitespace(var_export($status, true)), 'content' => $visible_whitespace(var_export($status, true)),
]; ];
$postarray = []; $postarray = [];
@ -263,23 +258,9 @@ class Babel extends BaseModule
$postarray['object-type'] = Activity\ObjectType::BOOKMARK; $postarray['object-type'] = Activity\ObjectType::BOOKMARK;
} }
$picture = \twitter_media_entities($status, $postarray);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Post array before expand entities'), 'title' => DI::l10n()->t('Post array before expand entities'),
'content' => visible_whitespace(var_export($postarray, true)), 'content' => $visible_whitespace(var_export($postarray, true)),
];
$converted = \twitter_expand_entities($postarray['body'], $status, $picture);
$results[] = [
'title' => DI::l10n()->t('Post converted'),
'content' => visible_whitespace(var_export($converted, true)),
];
$results[] = [
'title' => DI::l10n()->t('Converted body'),
'content' => visible_whitespace($converted['body']),
]; ];
} else { } else {
$results[] = [ $results[] = [

View file

@ -11,36 +11,43 @@ use Friendica\BaseModule;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Post; use Friendica\Model\Post;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Network\HTTPException\UnauthorizedException;
/** /**
* Print the body of an Item * Print the body of an Item
*/ */
class ItemBody extends BaseModule class ItemBody extends BaseModule
{ {
/**
* @throws NotFoundException|UnauthorizedException
*
* @return string|never
*/
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
if (!DI::userSession()->getLocalUserId()) { if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('Access denied.')); throw new UnauthorizedException(DI::l10n()->t('Access denied.'));
} }
if (empty($this->parameters['item'])) { if (empty($this->parameters['item'])) {
throw new HTTPException\NotFoundException(DI::l10n()->t('Item not found.')); throw new NotFoundException(DI::l10n()->t('Item not found.'));
} }
$itemId = intval($this->parameters['item']); $itemId = intval($this->parameters['item']);
$item = Post::selectFirst(['body'], ['uid' => [0, DI::userSession()->getLocalUserId()], 'uri-id' => $itemId]); $item = Post::selectFirst(['body'], ['uid' => [0, DI::userSession()->getLocalUserId()], 'uri-id' => $itemId]);
if (!empty($item)) { if (empty($item)) {
throw new NotFoundException(DI::l10n()->t('Item not found.'));
}
// TODO: Extract this code into controller
if (DI::mode()->isAjax()) { if (DI::mode()->isAjax()) {
echo str_replace("\n", '<br />', $item['body']); echo str_replace("\n", '<br />', $item['body']);
System::exit(); System::exit();
} else { }
return str_replace("\n", '<br />', $item['body']); return str_replace("\n", '<br />', $item['body']);
} }
} else {
throw new HTTPException\NotFoundException(DI::l10n()->t('Item not found.'));
}
}
} }

View file

@ -17,16 +17,30 @@ use Friendica\BaseDataTransferObject;
*/ */
class Preferences extends BaseDataTransferObject class Preferences extends BaseDataTransferObject
{ {
// /** @var string (Enumerable, oneOf) */ /**
// protected $posting_default_visibility; * @var string (Enumerable, oneOf)
// /** @var bool */ */
// protected $posting_default_sensitive; private $visibility;
// /** @var string (ISO 639-1 language two-letter code), or null*/
// protected $posting_default_language; /**
// /** @var string (Enumerable, oneOf) */ * @var bool
// protected $reading_expand_media; */
// /** @var bool */ private $sensitive;
// protected $reading_expand_spoilers;
/**
* @var string (ISO 639-1 language two-letter code), or null
*/
private $language;
/**
* @var string (Enumerable, oneOf)
*/
private $media;
/**
* @var bool
*/
private $spoilers;
/** /**
* Creates a preferences record. * Creates a preferences record.
@ -39,10 +53,26 @@ class Preferences extends BaseDataTransferObject
*/ */
public function __construct(string $visibility, bool $sensitive, string $language, string $media, bool $spoilers) public function __construct(string $visibility, bool $sensitive, string $language, string $media, bool $spoilers)
{ {
$this->{'posting:default:visibility'} = $visibility; $this->visibility = $visibility;
$this->{'posting:default:sensitive'} = $sensitive; $this->sensitive = $sensitive;
$this->{'posting:default:language'} = $language; $this->language = $language;
$this->{'reading:expand:media'} = $media; $this->media = $media;
$this->{'reading:expand:spoilers'} = $spoilers; $this->spoilers = $spoilers;
}
/**
* Returns the current entity as an array
*
* @return array
*/
public function toArray(): array
{
return [
'posting:default:visibility' => $this->visibility,
'posting:default:sensitive' => $this->sensitive,
'posting:default:language' => $this->language,
'reading:expand:media' => $this->media,
'reading:expand:spoilers' => $this->spoilers,
];
} }
} }

View file

@ -1880,25 +1880,29 @@ class Receiver
$object_data = self::getObjectDataFromActivity($object); $object_data = self::getObjectDataFromActivity($object);
$object_data['receiver_urls'] = self::getReceiverURL($object);
$object_data['receiver'] = [];
$object_data['reception_type'] = [];
$object_data['unlisted'] = false;
$receiverdata = self::getReceivers($object, $actor ?: $object_data['actor'] ?? '', $object_data['tags'], true, false); $receiverdata = self::getReceivers($object, $actor ?: $object_data['actor'] ?? '', $object_data['tags'], true, false);
$receivers = $reception_types = [];
foreach ($receiverdata as $key => $data) { foreach ($receiverdata as $key => $data) {
$receivers[$key] = $data['uid']; if ($data['uid'] !== -1) {
$reception_types[$data['uid']] = $data['type'] ?? 0; $object_data['reception_type'][$data['uid']] = $data['type'] ?? 0;
} }
$object_data['receiver_urls'] = self::getReceiverURL($object); if ($key !== -1) {
$object_data['receiver'] = $receivers; $object_data['receiver'][$key] = $data['uid'];
$object_data['reception_type'] = $reception_types; } else {
$object_data['unlisted'] = true;
}
}
if (!empty($object['pixelfed:capabilities'])) { if (!empty($object['pixelfed:capabilities'])) {
$object_data['capabilities'] = self::getCapabilities($object); $object_data['capabilities'] = self::getCapabilities($object);
} }
$object_data['unlisted'] = in_array(-1, $object_data['receiver']);
unset($object_data['receiver'][-1]);
unset($object_data['reception_type'][-1]);
return $object_data; return $object_data;
} }

View file

@ -359,6 +359,8 @@ class Temporal
return sprintf($format, $r, (($r == 1) ? $str[0] : $str[1])); return sprintf($format, $r, (($r == 1) ? $str[0] : $str[1]));
} }
} }
return '';
} }
/** /**

View file

@ -0,0 +1,46 @@
<?php
// Copyright (C) 2010-2024, the Friendica project
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
//
// SPDX-License-Identifier: AGPL-3.0-or-later
namespace Friendica\Test\Unit\Object\Api\Mastodon;
use Friendica\Object\Api\Mastodon\Preferences;
use PHPUnit\Framework\TestCase;
class PreferencesTest extends TestCase
{
public function testToArrayReturnsArray(): void
{
$preferences = new Preferences('visibility', true, 'language', 'media', false);
self::assertSame(
[
'posting:default:visibility' => 'visibility',
'posting:default:sensitive' => true,
'posting:default:language' => 'language',
'reading:expand:media' => 'media',
'reading:expand:spoilers' => false,
],
$preferences->toArray(),
);
}
public function testJsonSerializeReturnsArray(): void
{
$preferences = new Preferences('visibility', true, 'language', 'media', false);
self::assertSame(
[
'posting:default:visibility' => 'visibility',
'posting:default:sensitive' => true,
'posting:default:language' => 'language',
'reading:expand:media' => 'media',
'reading:expand:spoilers' => false,
],
$preferences->jsonSerialize(),
);
}
}

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2024.09-dev\n" "Project-Id-Version: 2024.09-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-07 20:46+0000\n" "POT-Creation-Date: 2024-11-10 07:44+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -39,8 +39,8 @@ msgid "Empty post discarded."
msgstr "" msgstr ""
#: mod/item.php:425 src/Module/Admin/Themes/Details.php:31 #: mod/item.php:425 src/Module/Admin/Themes/Details.php:31
#: src/Module/Admin/Themes/Index.php:51 src/Module/Debug/ItemBody.php:28 #: src/Module/Admin/Themes/Index.php:51 src/Module/Debug/ItemBody.php:34
#: src/Module/Debug/ItemBody.php:43 src/Module/Item/Feed.php:66 #: src/Module/Debug/ItemBody.php:42 src/Module/Item/Feed.php:66
msgid "Item not found." msgid "Item not found."
msgstr "" msgstr ""
@ -291,9 +291,9 @@ msgstr ""
#: mod/photos.php:778 mod/photos.php:1055 mod/photos.php:1096 #: mod/photos.php:778 mod/photos.php:1055 mod/photos.php:1096
#: mod/photos.php:1152 mod/photos.php:1232 #: mod/photos.php:1152 mod/photos.php:1232
#: src/Module/Calendar/Event/Form.php:236 src/Module/Contact/Advanced.php:118 #: src/Module/Calendar/Event/Form.php:236 src/Module/Contact/Advanced.php:118
#: src/Module/Contact/Profile.php:370 #: src/Module/Contact/Profile.php:371
#: src/Module/Debug/ActivityPubConversion.php:132 #: src/Module/Debug/ActivityPubConversion.php:124
#: src/Module/Debug/Babel.php:307 src/Module/Debug/Localtime.php:50 #: src/Module/Debug/Babel.php:283 src/Module/Debug/Localtime.php:50
#: src/Module/Debug/Probe.php:40 src/Module/Debug/WebFinger.php:37 #: src/Module/Debug/Probe.php:40 src/Module/Debug/WebFinger.php:37
#: src/Module/FriendSuggest.php:131 src/Module/Install.php:220 #: src/Module/FriendSuggest.php:131 src/Module/Install.php:220
#: src/Module/Install.php:260 src/Module/Install.php:295 #: src/Module/Install.php:260 src/Module/Install.php:295
@ -792,15 +792,15 @@ msgstr ""
msgid "Common" msgid "Common"
msgstr "" msgstr ""
#: src/Console/Addon.php:161 src/Console/Addon.php:185 #: src/Console/Addon.php:163 src/Console/Addon.php:187
msgid "Addon not found" msgid "Addon not found"
msgstr "" msgstr ""
#: src/Console/Addon.php:165 #: src/Console/Addon.php:167
msgid "Addon already enabled" msgid "Addon already enabled"
msgstr "" msgstr ""
#: src/Console/Addon.php:189 #: src/Console/Addon.php:191
msgid "Addon already disabled" msgid "Addon already disabled"
msgstr "" msgstr ""
@ -1065,7 +1065,7 @@ msgstr ""
msgid "Email" msgid "Email"
msgstr "" msgstr ""
#: src/Content/ContactSelector.php:116 src/Module/Debug/Babel.php:301 #: src/Content/ContactSelector.php:116 src/Module/Debug/Babel.php:277
msgid "Diaspora" msgid "Diaspora"
msgstr "" msgstr ""
@ -1365,7 +1365,7 @@ msgstr ""
msgid "Public post" msgid "Public post"
msgstr "" msgstr ""
#: src/Content/Conversation.php:410 src/Content/Widget/VCard.php:117 #: src/Content/Conversation.php:410 src/Content/Widget/VCard.php:116
#: src/Model/Profile.php:462 src/Module/Admin/Logs/View.php:80 #: src/Model/Profile.php:462 src/Module/Admin/Logs/View.php:80
#: src/Module/Post/Edit.php:167 #: src/Module/Post/Edit.php:167
msgid "Message" msgid "Message"
@ -1881,7 +1881,7 @@ msgid "Send PM"
msgstr "" msgstr ""
#: src/Content/Item.php:421 src/Module/Contact.php:449 #: src/Content/Item.php:421 src/Module/Contact.php:449
#: src/Module/Contact/Profile.php:518 #: src/Module/Contact/Profile.php:519
#: src/Module/Moderation/Blocklist/Contact.php:102 #: src/Module/Moderation/Blocklist/Contact.php:102
#: src/Module/Moderation/Users/Active.php:123 #: src/Module/Moderation/Users/Active.php:123
#: src/Module/Moderation/Users/Index.php:138 #: src/Module/Moderation/Users/Index.php:138
@ -1889,7 +1889,7 @@ msgid "Block"
msgstr "" msgstr ""
#: src/Content/Item.php:422 src/Module/Contact.php:450 #: src/Content/Item.php:422 src/Module/Contact.php:450
#: src/Module/Contact/Profile.php:526 #: src/Module/Contact/Profile.php:527
#: src/Module/Notifications/Introductions.php:126 #: src/Module/Notifications/Introductions.php:126
#: src/Module/Notifications/Introductions.php:198 #: src/Module/Notifications/Introductions.php:198
#: src/Module/Notifications/Notification.php:75 #: src/Module/Notifications/Notification.php:75
@ -1897,7 +1897,7 @@ msgid "Ignore"
msgstr "" msgstr ""
#: src/Content/Item.php:423 src/Module/Contact.php:451 #: src/Content/Item.php:423 src/Module/Contact.php:451
#: src/Module/Contact/Profile.php:534 #: src/Module/Contact/Profile.php:535
msgid "Collapse" msgid "Collapse"
msgstr "" msgstr ""
@ -1969,7 +1969,7 @@ msgstr ""
#: src/Content/Nav.php:216 src/Module/BaseProfile.php:35 #: src/Content/Nav.php:216 src/Module/BaseProfile.php:35
#: src/Module/BaseSettings.php:84 src/Module/Contact.php:485 #: src/Module/BaseSettings.php:84 src/Module/Contact.php:485
#: src/Module/Contact/Profile.php:425 src/Module/Profile/Profile.php:256 #: src/Module/Contact/Profile.php:426 src/Module/Profile/Profile.php:256
#: src/Module/Welcome.php:43 view/theme/frio/theme.php:221 #: src/Module/Welcome.php:43 view/theme/frio/theme.php:221
msgid "Profile" msgid "Profile"
msgstr "" msgstr ""
@ -2278,8 +2278,8 @@ msgstr ""
msgid "The end" msgid "The end"
msgstr "" msgstr ""
#: src/Content/Text/HTML.php:847 src/Content/Widget/VCard.php:113 #: src/Content/Text/HTML.php:847 src/Content/Widget/VCard.php:112
#: src/Model/Profile.php:456 src/Module/Contact/Profile.php:478 #: src/Model/Profile.php:456 src/Module/Contact/Profile.php:479
msgid "Follow" msgid "Follow"
msgstr "" msgstr ""
@ -2421,18 +2421,18 @@ msgstr ""
msgid "Export calendar as csv" msgid "Export calendar as csv"
msgstr "" msgstr ""
#: src/Content/Widget/ContactBlock.php:65 #: src/Content/Widget/ContactBlock.php:64
msgid "No contacts" msgid "No contacts"
msgstr "" msgstr ""
#: src/Content/Widget/ContactBlock.php:96 #: src/Content/Widget/ContactBlock.php:95
#, php-format #, php-format
msgid "%d Contact" msgid "%d Contact"
msgid_plural "%d Contacts" msgid_plural "%d Contacts"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Content/Widget/ContactBlock.php:113 #: src/Content/Widget/ContactBlock.php:112
msgid "View Contacts" msgid "View Contacts"
msgstr "" msgstr ""
@ -2451,46 +2451,46 @@ msgstr[1] ""
msgid "More Trending Tags" msgid "More Trending Tags"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:91 src/Model/Contact.php:1212 #: src/Content/Widget/VCard.php:90 src/Model/Contact.php:1212
#: src/Model/Profile.php:441 #: src/Model/Profile.php:441
msgid "Post to group" msgid "Post to group"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:96 src/Model/Contact.php:1216 #: src/Content/Widget/VCard.php:95 src/Model/Contact.php:1216
#: src/Model/Profile.php:445 src/Module/Moderation/Item/Source.php:77 #: src/Model/Profile.php:445 src/Module/Moderation/Item/Source.php:77
msgid "Mention" msgid "Mention"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:106 src/Model/Profile.php:360 #: src/Content/Widget/VCard.php:105 src/Model/Profile.php:360
#: src/Module/Contact/Profile.php:414 src/Module/Profile/Profile.php:187 #: src/Module/Contact/Profile.php:415 src/Module/Profile/Profile.php:187
msgid "XMPP:" msgid "XMPP:"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:107 src/Model/Profile.php:361 #: src/Content/Widget/VCard.php:106 src/Model/Profile.php:361
#: src/Module/Contact/Profile.php:416 src/Module/Profile/Profile.php:191 #: src/Module/Contact/Profile.php:417 src/Module/Profile/Profile.php:191
msgid "Matrix:" msgid "Matrix:"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:108 src/Model/Event.php:68 #: src/Content/Widget/VCard.php:107 src/Model/Event.php:68
#: src/Model/Event.php:95 src/Model/Event.php:457 src/Model/Event.php:946 #: src/Model/Event.php:95 src/Model/Event.php:457 src/Model/Event.php:946
#: src/Model/Profile.php:355 src/Module/Contact/Profile.php:412 #: src/Model/Profile.php:355 src/Module/Contact/Profile.php:413
#: src/Module/Directory.php:134 src/Module/Notifications/Introductions.php:179 #: src/Module/Directory.php:134 src/Module/Notifications/Introductions.php:179
#: src/Module/Profile/Profile.php:209 #: src/Module/Profile/Profile.php:209
msgid "Location:" msgid "Location:"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:111 src/Model/Profile.php:469 #: src/Content/Widget/VCard.php:110 src/Model/Profile.php:469
#: src/Module/Notifications/Introductions.php:193 #: src/Module/Notifications/Introductions.php:193
msgid "Network:" msgid "Network:"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:115 src/Model/Contact.php:1244 #: src/Content/Widget/VCard.php:114 src/Model/Contact.php:1244
#: src/Model/Contact.php:1256 src/Model/Profile.php:458 #: src/Model/Contact.php:1256 src/Model/Profile.php:458
#: src/Module/Contact/Profile.php:470 #: src/Module/Contact/Profile.php:471
msgid "Unfollow" msgid "Unfollow"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:121 src/Model/Contact.php:1214 #: src/Content/Widget/VCard.php:120 src/Model/Contact.php:1214
#: src/Model/Profile.php:443 #: src/Model/Profile.php:443
msgid "View group" msgid "View group"
msgstr "" msgstr ""
@ -3481,7 +3481,7 @@ msgstr ""
msgid "Homepage:" msgid "Homepage:"
msgstr "" msgstr ""
#: src/Model/Profile.php:359 src/Module/Contact/Profile.php:418 #: src/Model/Profile.php:359 src/Module/Contact/Profile.php:419
#: src/Module/Notifications/Introductions.php:181 #: src/Module/Notifications/Introductions.php:181
msgid "About:" msgid "About:"
msgstr "" msgstr ""
@ -4198,7 +4198,7 @@ msgid "Data"
msgstr "" msgstr ""
#: src/Module/Admin/Logs/View.php:86 #: src/Module/Admin/Logs/View.php:86
#: src/Module/Debug/ActivityPubConversion.php:49 #: src/Module/Debug/ActivityPubConversion.php:45
msgid "Source" msgid "Source"
msgstr "" msgstr ""
@ -5175,7 +5175,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." 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 "" msgstr ""
#: src/Module/Admin/Site.php:584 src/Module/Contact/Profile.php:314 #: src/Module/Admin/Site.php:584 src/Module/Contact/Profile.php:315
#: src/Module/Settings/TwoFactor/Index.php:132 #: src/Module/Settings/TwoFactor/Index.php:132
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr ""
@ -5628,7 +5628,7 @@ msgstr ""
msgid "Babel" msgid "Babel"
msgstr "" msgstr ""
#: src/Module/BaseAdmin.php:97 src/Module/Debug/ActivityPubConversion.php:129 #: src/Module/BaseAdmin.php:97 src/Module/Debug/ActivityPubConversion.php:121
msgid "ActivityPub Conversion" msgid "ActivityPub Conversion"
msgstr "" msgstr ""
@ -5928,8 +5928,8 @@ msgstr ""
#: src/Module/Contact/Conversations.php:77 #: src/Module/Contact/Conversations.php:77
#: src/Module/Contact/Conversations.php:82 src/Module/Contact/Media.php:47 #: src/Module/Contact/Conversations.php:82 src/Module/Contact/Media.php:47
#: src/Module/Contact/Posts.php:64 src/Module/Contact/Posts.php:69 #: src/Module/Contact/Posts.php:64 src/Module/Contact/Posts.php:69
#: src/Module/Contact/Posts.php:74 src/Module/Contact/Profile.php:145 #: src/Module/Contact/Posts.php:74 src/Module/Contact/Profile.php:146
#: src/Module/Contact/Profile.php:150 src/Module/Contact/Profile.php:169 #: src/Module/Contact/Profile.php:151 src/Module/Contact/Profile.php:170
#: src/Module/Contact/Redir.php:77 src/Module/Contact/Redir.php:131 #: src/Module/Contact/Redir.php:77 src/Module/Contact/Redir.php:131
#: src/Module/FriendSuggest.php:57 src/Module/FriendSuggest.php:95 #: src/Module/FriendSuggest.php:57 src/Module/FriendSuggest.php:95
msgid "Contact not found." msgid "Contact not found."
@ -6086,18 +6086,18 @@ msgstr ""
msgid "Update" msgid "Update"
msgstr "" msgstr ""
#: src/Module/Contact.php:449 src/Module/Contact/Profile.php:518 #: src/Module/Contact.php:449 src/Module/Contact/Profile.php:519
#: src/Module/Moderation/Blocklist/Contact.php:103 #: src/Module/Moderation/Blocklist/Contact.php:103
#: src/Module/Moderation/Users/Blocked.php:124 #: src/Module/Moderation/Users/Blocked.php:124
#: src/Module/Moderation/Users/Index.php:140 #: src/Module/Moderation/Users/Index.php:140
msgid "Unblock" msgid "Unblock"
msgstr "" msgstr ""
#: src/Module/Contact.php:450 src/Module/Contact/Profile.php:526 #: src/Module/Contact.php:450 src/Module/Contact/Profile.php:527
msgid "Unignore" msgid "Unignore"
msgstr "" msgstr ""
#: src/Module/Contact.php:451 src/Module/Contact/Profile.php:534 #: src/Module/Contact.php:451 src/Module/Contact/Profile.php:535
msgid "Uncollapse" msgid "Uncollapse"
msgstr "" msgstr ""
@ -6149,7 +6149,7 @@ msgstr ""
msgid "Pending incoming contact request" msgid "Pending incoming contact request"
msgstr "" msgstr ""
#: src/Module/Contact.php:608 src/Module/Contact/Profile.php:377 #: src/Module/Contact.php:608 src/Module/Contact/Profile.php:378
#, php-format #, php-format
msgid "Visit %s's profile [%s]" msgid "Visit %s's profile [%s]"
msgstr "" msgstr ""
@ -6246,7 +6246,7 @@ msgstr[1] ""
#: src/Module/Contact/Follow.php:56 src/Module/Contact/Redir.php:45 #: src/Module/Contact/Follow.php:56 src/Module/Contact/Redir.php:45
#: src/Module/Contact/Redir.php:206 src/Module/Conversation/Community.php:154 #: src/Module/Contact/Redir.php:206 src/Module/Conversation/Community.php:154
#: src/Module/Debug/ItemBody.php:24 src/Module/Diaspora/Receive.php:45 #: src/Module/Debug/ItemBody.php:30 src/Module/Diaspora/Receive.php:45
#: src/Module/Item/Display.php:82 src/Module/Item/Feed.php:45 #: src/Module/Item/Display.php:82 src/Module/Item/Feed.php:45
#: src/Module/Item/Follow.php:27 src/Module/Item/Ignore.php:27 #: src/Module/Item/Follow.php:27 src/Module/Item/Ignore.php:27
#: src/Module/Item/Language.php:39 src/Module/Item/Pin.php:27 #: src/Module/Item/Language.php:39 src/Module/Item/Pin.php:27
@ -6280,7 +6280,7 @@ msgstr ""
msgid "Your Identity Address:" msgid "Your Identity Address:"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:151 src/Module/Contact/Profile.php:408 #: src/Module/Contact/Follow.php:151 src/Module/Contact/Profile.php:409
#: src/Module/Contact/Unfollow.php:115 #: src/Module/Contact/Unfollow.php:115
#: src/Module/Moderation/Blocklist/Contact.php:117 #: src/Module/Moderation/Blocklist/Contact.php:117
#: src/Module/Moderation/Reports.php:109 #: src/Module/Moderation/Reports.php:109
@ -6289,7 +6289,7 @@ msgstr ""
msgid "Profile URL" msgid "Profile URL"
msgstr "" msgstr ""
#: src/Module/Contact/Follow.php:152 src/Module/Contact/Profile.php:420 #: src/Module/Contact/Follow.php:152 src/Module/Contact/Profile.php:421
#: src/Module/Notifications/Introductions.php:183 #: src/Module/Notifications/Introductions.php:183
#: src/Module/Profile/Profile.php:222 #: src/Module/Profile/Profile.php:222
msgid "Tags:" msgid "Tags:"
@ -6332,297 +6332,297 @@ msgstr ""
msgid "Failed to update contact record." msgid "Failed to update contact record."
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:195 #: src/Module/Contact/Profile.php:196
msgid "Contact has been unblocked" msgid "Contact has been unblocked"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:199 #: src/Module/Contact/Profile.php:200
msgid "Contact has been blocked" msgid "Contact has been blocked"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:211 #: src/Module/Contact/Profile.php:212
msgid "Contact has been unignored" msgid "Contact has been unignored"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:215 #: src/Module/Contact/Profile.php:216
msgid "Contact has been ignored" msgid "Contact has been ignored"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:227 #: src/Module/Contact/Profile.php:228
msgid "Contact has been uncollapsed" msgid "Contact has been uncollapsed"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:231 #: src/Module/Contact/Profile.php:232
msgid "Contact has been collapsed" msgid "Contact has been collapsed"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:259
#, php-format
msgid "You are mutual friends with %s"
msgstr ""
#: src/Module/Contact/Profile.php:260 #: src/Module/Contact/Profile.php:260
#, php-format #, php-format
msgid "You are sharing with %s" msgid "You are mutual friends with %s"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:261 #: src/Module/Contact/Profile.php:261
#, php-format #, php-format
msgid "You are sharing with %s"
msgstr ""
#: src/Module/Contact/Profile.php:262
#, php-format
msgid "%s is sharing with you" msgid "%s is sharing with you"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:277 #: src/Module/Contact/Profile.php:278
msgid "Private communications are not available for this contact." msgid "Private communications are not available for this contact."
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:287 #: src/Module/Contact/Profile.php:288
msgid "This contact is on a server you ignored." msgid "This contact is on a server you ignored."
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:290 #: src/Module/Contact/Profile.php:291
msgid "Never" msgid "Never"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:293 #: src/Module/Contact/Profile.php:294
msgid "(Update was not successful)" msgid "(Update was not successful)"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:293 #: src/Module/Contact/Profile.php:294
msgid "(Update was successful)" msgid "(Update was successful)"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:295 src/Module/Contact/Profile.php:489 #: src/Module/Contact/Profile.php:296 src/Module/Contact/Profile.php:490
msgid "Suggest friends" msgid "Suggest friends"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:299 #: src/Module/Contact/Profile.php:300
#, php-format #, php-format
msgid "Network type: %s" msgid "Network type: %s"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:304 #: src/Module/Contact/Profile.php:305
msgid "Communications lost with this contact!" msgid "Communications lost with this contact!"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:310 #: src/Module/Contact/Profile.php:311
msgid "Fetch further information for feeds" msgid "Fetch further information for feeds"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:312 #: src/Module/Contact/Profile.php:313
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." 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 "" msgstr ""
#: src/Module/Contact/Profile.php:315 #: src/Module/Contact/Profile.php:316
msgid "Fetch information" msgid "Fetch information"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:316 #: src/Module/Contact/Profile.php:317
msgid "Fetch keywords" msgid "Fetch keywords"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:317 #: src/Module/Contact/Profile.php:318
msgid "Fetch information and keywords" msgid "Fetch information and keywords"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:327 src/Module/Contact/Profile.php:332 #: src/Module/Contact/Profile.php:328 src/Module/Contact/Profile.php:333
#: src/Module/Contact/Profile.php:337 src/Module/Contact/Profile.php:343 #: src/Module/Contact/Profile.php:338 src/Module/Contact/Profile.php:344
msgid "No mirroring" msgid "No mirroring"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:328 src/Module/Contact/Profile.php:338 #: src/Module/Contact/Profile.php:329 src/Module/Contact/Profile.php:339
#: src/Module/Contact/Profile.php:344 #: src/Module/Contact/Profile.php:345
msgid "Mirror as my own posting" msgid "Mirror as my own posting"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:333 src/Module/Contact/Profile.php:339 #: src/Module/Contact/Profile.php:334 src/Module/Contact/Profile.php:340
msgid "Native reshare" msgid "Native reshare"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:359 #: src/Module/Contact/Profile.php:360
msgid "Contact Information / Notes" msgid "Contact Information / Notes"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:360 #: src/Module/Contact/Profile.php:361
msgid "Contact Settings" msgid "Contact Settings"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:368 #: src/Module/Contact/Profile.php:369
msgid "Contact" msgid "Contact"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:372 #: src/Module/Contact/Profile.php:373
msgid "Their personal note" msgid "Their personal note"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:374 #: src/Module/Contact/Profile.php:375
msgid "Edit contact notes" msgid "Edit contact notes"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:378 #: src/Module/Contact/Profile.php:379
msgid "Block/Unblock contact" msgid "Block/Unblock contact"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:379 #: src/Module/Contact/Profile.php:380
#: src/Module/Moderation/Report/Create.php:279 #: src/Module/Moderation/Report/Create.php:279
msgid "Ignore contact" msgid "Ignore contact"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:380 #: src/Module/Contact/Profile.php:381
msgid "View conversations" msgid "View conversations"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:385 #: src/Module/Contact/Profile.php:386
msgid "Last update:" msgid "Last update:"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:387 #: src/Module/Contact/Profile.php:388
msgid "Update public posts" msgid "Update public posts"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:389 src/Module/Contact/Profile.php:499 #: src/Module/Contact/Profile.php:390 src/Module/Contact/Profile.php:500
msgid "Update now" msgid "Update now"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:391 #: src/Module/Contact/Profile.php:392
msgid "Awaiting connection acknowledge" msgid "Awaiting connection acknowledge"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:392 #: src/Module/Contact/Profile.php:393
msgid "Currently blocked" msgid "Currently blocked"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:393 #: src/Module/Contact/Profile.php:394
msgid "Currently ignored" msgid "Currently ignored"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:394 #: src/Module/Contact/Profile.php:395
msgid "Currently collapsed" msgid "Currently collapsed"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:395 #: src/Module/Contact/Profile.php:396
msgid "Currently archived" msgid "Currently archived"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:398 #: src/Module/Contact/Profile.php:399
msgid "Manage remote servers" msgid "Manage remote servers"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:400 #: src/Module/Contact/Profile.php:401
#: src/Module/Notifications/Introductions.php:184 #: src/Module/Notifications/Introductions.php:184
msgid "Hide this contact from others" msgid "Hide this contact from others"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:400 #: src/Module/Contact/Profile.php:401
msgid "Replies/likes to your public posts <strong>may</strong> still be visible" msgid "Replies/likes to your public posts <strong>may</strong> still be visible"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:401 #: src/Module/Contact/Profile.php:402
msgid "Notification for new posts" msgid "Notification for new posts"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:401 #: src/Module/Contact/Profile.php:402
msgid "Send a notification of every new post of this contact" msgid "Send a notification of every new post of this contact"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:403 #: src/Module/Contact/Profile.php:404
msgid "Keyword Deny List" msgid "Keyword Deny List"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:403 #: src/Module/Contact/Profile.php:404
msgid "Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected" msgid "Comma separated list of keywords that should not be converted to hashtags, when \"Fetch information and keywords\" is selected"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:421 #: src/Module/Contact/Profile.php:422
#: src/Module/Settings/TwoFactor/Index.php:146 #: src/Module/Settings/TwoFactor/Index.php:146
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:423 #: src/Module/Contact/Profile.php:424
#: src/Module/Settings/TwoFactor/Index.php:126 view/theme/frio/theme.php:220 #: src/Module/Settings/TwoFactor/Index.php:126 view/theme/frio/theme.php:220
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:429 #: src/Module/Contact/Profile.php:430
msgid "Mirror postings from this contact" msgid "Mirror postings from this contact"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:431 #: src/Module/Contact/Profile.php:432
msgid "Mark this contact as remote_self, this will cause friendica to repost new entries from this contact." msgid "Mark this contact as remote_self, this will cause friendica to repost new entries from this contact."
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:434 #: src/Module/Contact/Profile.php:435
msgid "Channel Settings" msgid "Channel Settings"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:435 #: src/Module/Contact/Profile.php:436
msgid "Frequency of this contact in relevant channels" msgid "Frequency of this contact in relevant channels"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:436 #: src/Module/Contact/Profile.php:437
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." 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 "" msgstr ""
#: src/Module/Contact/Profile.php:437 #: src/Module/Contact/Profile.php:438
msgid "Default frequency" msgid "Default frequency"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:437 #: src/Module/Contact/Profile.php:438
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." 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 "" msgstr ""
#: src/Module/Contact/Profile.php:438 #: src/Module/Contact/Profile.php:439
msgid "Display all posts of this contact" msgid "Display all posts of this contact"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:438 #: src/Module/Contact/Profile.php:439
msgid "All posts from this contact will appear on the \"for you\" channel" msgid "All posts from this contact will appear on the \"for you\" channel"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:439 #: src/Module/Contact/Profile.php:440
msgid "Display only few posts" msgid "Display only few posts"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:439 #: src/Module/Contact/Profile.php:440
msgid "When a contact creates a lot of posts in a short period, this setting reduces the number of displayed posts in every channel." 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 "" msgstr ""
#: src/Module/Contact/Profile.php:440 #: src/Module/Contact/Profile.php:441
msgid "Never display posts" msgid "Never display posts"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:440 #: src/Module/Contact/Profile.php:441
msgid "Posts from this contact will never be displayed in any channel" msgid "Posts from this contact will never be displayed in any channel"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:441 #: src/Module/Contact/Profile.php:442
msgid "Channel Only" msgid "Channel Only"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:441 #: src/Module/Contact/Profile.php:442
msgid "If enabled, posts from this contact will only appear in channels and network streams in circles, but not in the general network stream." 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 "" msgstr ""
#: src/Module/Contact/Profile.php:509 #: src/Module/Contact/Profile.php:510
msgid "Refetch contact data" msgid "Refetch contact data"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:520 #: src/Module/Contact/Profile.php:521
msgid "Toggle Blocked status" msgid "Toggle Blocked status"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:528 #: src/Module/Contact/Profile.php:529
msgid "Toggle Ignored status" msgid "Toggle Ignored status"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:536 #: src/Module/Contact/Profile.php:537
msgid "Toggle Collapsed status" msgid "Toggle Collapsed status"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:543 src/Module/Contact/Revoke.php:89 #: src/Module/Contact/Profile.php:544 src/Module/Contact/Revoke.php:89
msgid "Revoke Follow" msgid "Revoke Follow"
msgstr "" msgstr ""
#: src/Module/Contact/Profile.php:545 #: src/Module/Contact/Profile.php:546
msgid "Revoke the follow from this contact" msgid "Revoke the follow from this contact"
msgstr "" msgstr ""
@ -6722,207 +6722,199 @@ msgstr ""
msgid "Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!" msgid "Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"
msgstr "" msgstr ""
#: src/Module/Debug/ActivityPubConversion.php:45 #: src/Module/Debug/ActivityPubConversion.php:41
msgid "Formatted" msgid "Formatted"
msgstr "" msgstr ""
#: src/Module/Debug/ActivityPubConversion.php:57 #: src/Module/Debug/ActivityPubConversion.php:53
msgid "Activity" msgid "Activity"
msgstr "" msgstr ""
#: src/Module/Debug/ActivityPubConversion.php:109 #: src/Module/Debug/ActivityPubConversion.php:101
msgid "Object data" msgid "Object data"
msgstr "" msgstr ""
#: src/Module/Debug/ActivityPubConversion.php:116 #: src/Module/Debug/ActivityPubConversion.php:108
msgid "Result Item" msgid "Result Item"
msgstr "" msgstr ""
#: src/Module/Debug/ActivityPubConversion.php:121 #: src/Module/Debug/ActivityPubConversion.php:113
#: src/Module/Debug/Babel.php:286 src/Module/Moderation/Item/Source.php:79 #: src/Module/Debug/Babel.php:262 src/Module/Moderation/Item/Source.php:79
#: src/Module/Security/TwoFactor/Verify.php:84 #: src/Module/Security/TwoFactor/Verify.php:84
msgid "Error" msgid "Error"
msgid_plural "Errors" msgid_plural "Errors"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Debug/ActivityPubConversion.php:130 #: src/Module/Debug/ActivityPubConversion.php:122
msgid "Source activity" msgid "Source activity"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:44 #: src/Module/Debug/Babel.php:39
msgid "Source input" msgid "Source input"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:50 #: src/Module/Debug/Babel.php:45
msgid "BBCode::toPlaintext" msgid "BBCode::toPlaintext"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:56 #: src/Module/Debug/Babel.php:51
msgid "BBCode::convert (raw HTML)" msgid "BBCode::convert (raw HTML)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:61 #: src/Module/Debug/Babel.php:56
msgid "BBCode::convert (hex)" msgid "BBCode::convert (hex)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:66 #: src/Module/Debug/Babel.php:61
msgid "BBCode::convert" msgid "BBCode::convert"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:72 #: src/Module/Debug/Babel.php:67
msgid "BBCode::convert => HTML::toBBCode" msgid "BBCode::convert => HTML::toBBCode"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:78 #: src/Module/Debug/Babel.php:73
msgid "BBCode::toMarkdown" msgid "BBCode::toMarkdown"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:84 #: src/Module/Debug/Babel.php:79
msgid "BBCode::toMarkdown => Markdown::convert (raw HTML)" msgid "BBCode::toMarkdown => Markdown::convert (raw HTML)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:88 #: src/Module/Debug/Babel.php:83
msgid "BBCode::toMarkdown => Markdown::convert" msgid "BBCode::toMarkdown => Markdown::convert"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:94 #: src/Module/Debug/Babel.php:89
msgid "BBCode::toMarkdown => Markdown::toBBCode" msgid "BBCode::toMarkdown => Markdown::toBBCode"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:100 #: src/Module/Debug/Babel.php:95
msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode" msgid "BBCode::toMarkdown => Markdown::convert => HTML::toBBCode"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:108 #: src/Module/Debug/Babel.php:103
msgid "Item Body" msgid "Item Body"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:112 #: src/Module/Debug/Babel.php:107
msgid "Item Tags" msgid "Item Tags"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:118 #: src/Module/Debug/Babel.php:113
msgid "PageInfo::appendToBody" msgid "PageInfo::appendToBody"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:123 #: src/Module/Debug/Babel.php:118
msgid "PageInfo::appendToBody => BBCode::convert (raw HTML)" msgid "PageInfo::appendToBody => BBCode::convert (raw HTML)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:127 #: src/Module/Debug/Babel.php:122
msgid "PageInfo::appendToBody => BBCode::convert" msgid "PageInfo::appendToBody => BBCode::convert"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:134 #: src/Module/Debug/Babel.php:129
msgid "Source input (Diaspora format)" msgid "Source input (Diaspora format)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:143 #: src/Module/Debug/Babel.php:138
msgid "Source input (Markdown)" msgid "Source input (Markdown)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:149 #: src/Module/Debug/Babel.php:144
msgid "Markdown::convert (raw HTML)" msgid "Markdown::convert (raw HTML)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:154 #: src/Module/Debug/Babel.php:149
msgid "Markdown::convert" msgid "Markdown::convert"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:160 #: src/Module/Debug/Babel.php:155
msgid "Markdown::toBBCode" msgid "Markdown::toBBCode"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:167 #: src/Module/Debug/Babel.php:162
msgid "Raw HTML input" msgid "Raw HTML input"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:172 #: src/Module/Debug/Babel.php:167
msgid "HTML Input" msgid "HTML Input"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:179 #: src/Module/Debug/Babel.php:174
msgid "HTML Purified (raw)" msgid "HTML Purified (raw)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:184 #: src/Module/Debug/Babel.php:179
msgid "HTML Purified (hex)" msgid "HTML Purified (hex)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:189 #: src/Module/Debug/Babel.php:184
msgid "HTML Purified" msgid "HTML Purified"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:195 #: src/Module/Debug/Babel.php:190
msgid "HTML::toBBCode" msgid "HTML::toBBCode"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:201 #: src/Module/Debug/Babel.php:196
msgid "HTML::toBBCode => BBCode::convert" msgid "HTML::toBBCode => BBCode::convert"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:206 #: src/Module/Debug/Babel.php:201
msgid "HTML::toBBCode => BBCode::convert (raw HTML)" msgid "HTML::toBBCode => BBCode::convert (raw HTML)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:212 #: src/Module/Debug/Babel.php:207
msgid "HTML::toBBCode => BBCode::toPlaintext" msgid "HTML::toBBCode => BBCode::toPlaintext"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:218 #: src/Module/Debug/Babel.php:213
msgid "HTML::toMarkdown" msgid "HTML::toMarkdown"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:224 #: src/Module/Debug/Babel.php:219
msgid "HTML::toPlaintext" msgid "HTML::toPlaintext"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:230 #: src/Module/Debug/Babel.php:225
msgid "HTML::toPlaintext (compact)" msgid "HTML::toPlaintext (compact)"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:248 #: src/Module/Debug/Babel.php:238
msgid "Decoded post" msgid "Decoded post"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:269 #: src/Module/Debug/Babel.php:257
msgid "Post array before expand entities" msgid "Post array before expand entities"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:276 #: src/Module/Debug/Babel.php:263
msgid "Post converted"
msgstr ""
#: src/Module/Debug/Babel.php:281
msgid "Converted body"
msgstr ""
#: src/Module/Debug/Babel.php:287
msgid "Twitter addon is absent from the addon/ folder." msgid "Twitter addon is absent from the addon/ folder."
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:297 #: src/Module/Debug/Babel.php:273
msgid "Babel Diagnostic" msgid "Babel Diagnostic"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:299 #: src/Module/Debug/Babel.php:275
msgid "Source text" msgid "Source text"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:300 #: src/Module/Debug/Babel.php:276
msgid "BBCode" msgid "BBCode"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:302 #: src/Module/Debug/Babel.php:278
msgid "Markdown" msgid "Markdown"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:303 #: src/Module/Debug/Babel.php:279
msgid "HTML" msgid "HTML"
msgstr "" msgstr ""
#: src/Module/Debug/Babel.php:305 #: src/Module/Debug/Babel.php:281
msgid "Twitter Source / Tweet URL (requires API key)" msgid "Twitter Source / Tweet URL (requires API key)"
msgstr "" msgstr ""