mirror of
https://github.com/friendica/friendica
synced 2025-04-25 13:50:10 +00:00
Merge branch 'develop' into merge-2024.09-rc-branch
This commit is contained in:
commit
eb04f3b079
25 changed files with 340 additions and 205 deletions
14
.phpstan.neon
Normal file
14
.phpstan.neon
Normal 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
|
|
@ -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
60
composer.lock
generated
|
@ -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",
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,8 @@ HELP;
|
||||||
|
|
||||||
}
|
}
|
||||||
$this->out($table->getTable());
|
$this->out($table->getTable());
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -54,12 +55,12 @@ Options
|
||||||
-d|--dbdata <database> The name of the mysql/mariadb database (env MYSQL_DATABASE)
|
-d|--dbdata <database> The name of the mysql/mariadb database (env MYSQL_DATABASE)
|
||||||
-u|--dbuser <username> The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME)
|
-u|--dbuser <username> The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME)
|
||||||
-P|--dbpass <password> The password of the mysql/mariadb database login (env MYSQL_PASSWORD)
|
-P|--dbpass <password> The password of the mysql/mariadb database login (env MYSQL_PASSWORD)
|
||||||
-U|--url <url> The full base URL of Friendica - f.e. 'https://friendica.local/sub' (env FRIENDICA_URL)
|
-U|--url <url> The full base URL of Friendica - f.e. 'https://friendica.local/sub' (env FRIENDICA_URL)
|
||||||
-B|--phppath <php_path> The path of the PHP binary (env FRIENDICA_PHP_PATH)
|
-B|--phppath <php_path> The path of the PHP binary (env FRIENDICA_PHP_PATH)
|
||||||
-b|--basepath <base_path> The basepath of Friendica (env FRIENDICA_BASE_PATH)
|
-b|--basepath <base_path> The basepath of Friendica (env FRIENDICA_BASE_PATH)
|
||||||
-t|--tz <timezone> The timezone of Friendica (env FRIENDICA_TZ)
|
-t|--tz <timezone> The timezone of Friendica (env FRIENDICA_TZ)
|
||||||
-L|--lang <language> The language of Friendica (env FRIENDICA_LANG)
|
-L|--lang <language> The language of Friendica (env FRIENDICA_LANG)
|
||||||
|
|
||||||
Environment variables
|
Environment variables
|
||||||
MYSQL_HOST The host of the mysql/mariadb database (mandatory if mysql and environment is used)
|
MYSQL_HOST The host of the mysql/mariadb database (mandatory if mysql and environment is used)
|
||||||
MYSQL_PORT The port of the mysql/mariadb database
|
MYSQL_PORT The port of the mysql/mariadb database
|
||||||
|
@ -73,7 +74,7 @@ Environment variables
|
||||||
FRIENDICA_ADMIN_MAIL The admin email address of Friendica (this email will be used for admin access)
|
FRIENDICA_ADMIN_MAIL The admin email address of Friendica (this email will be used for admin access)
|
||||||
FRIENDICA_TZ The timezone of Friendica
|
FRIENDICA_TZ The timezone of Friendica
|
||||||
FRIENDICA_LANG The langauge of Friendica
|
FRIENDICA_LANG The langauge of Friendica
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
bin/console autoinstall -f 'input.config.php
|
bin/console autoinstall -f 'input.config.php
|
||||||
Installs Friendica with the prepared 'input.config.php' file
|
Installs Friendica with the prepared 'input.config.php' 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']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -53,7 +56,7 @@ Usage
|
||||||
Description
|
Description
|
||||||
During the 2020.12 RC period some worker task parameters have been corrupted, resulting in the impossibility to execute them.
|
During the 2020.12 RC period some worker task parameters have been corrupted, resulting in the impossibility to execute them.
|
||||||
This command restores their expected parameters.
|
This command restores their expected parameters.
|
||||||
If you didn't run Friendica during the 2020.12 RC period, you do not need to use this command.
|
If you didn't run Friendica during the 2020.12 RC period, you do not need to use this command.
|
||||||
|
|
||||||
Options
|
Options
|
||||||
-h|--help|-? Show help information
|
-h|--help|-? Show help information
|
||||||
|
@ -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()) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
$iterator = new \APCUIterator('/^' . $ns . '/', APC_ITER_KEY);
|
||||||
} else {
|
|
||||||
$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);
|
$iterator = new \APCUIterator('/^' . $prefix . '/', APC_ITER_KEY);
|
||||||
} else {
|
|
||||||
$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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2709,8 +2709,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
|
||||||
{
|
{
|
||||||
|
@ -2770,6 +2768,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;
|
||||||
|
@ -2795,22 +2795,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();
|
||||||
|
|
|
@ -3199,10 +3199,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'));
|
||||||
|
@ -3248,7 +3248,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 = '';
|
||||||
|
|
|
@ -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]);
|
||||||
|
|
||||||
|
|
|
@ -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[] = [
|
||||||
|
|
|
@ -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) {
|
$status = json_decode($json);
|
||||||
preg_match('#^https?://(?:mobile\.|www\.)?twitter.com/[^/]+/status/(\d+).*#', $json, $matches);
|
|
||||||
$status = twitter_statuses_show($matches[1]);
|
|
||||||
} else {
|
|
||||||
$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[] = [
|
||||||
|
|
|
@ -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)) {
|
||||||
if (DI::mode()->isAjax()) {
|
throw new NotFoundException(DI::l10n()->t('Item not found.'));
|
||||||
echo str_replace("\n", '<br />', $item['body']);
|
|
||||||
System::exit();
|
|
||||||
} else {
|
|
||||||
return str_replace("\n", '<br />', $item['body']);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new HTTPException\NotFoundException(DI::l10n()->t('Item not found.'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Extract this code into controller
|
||||||
|
if (DI::mode()->isAjax()) {
|
||||||
|
echo str_replace("\n", '<br />', $item['body']);
|
||||||
|
System::exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
return str_replace("\n", '<br />', $item['body']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1880,25 +1880,29 @@ class Receiver
|
||||||
|
|
||||||
$object_data = self::getObjectDataFromActivity($object);
|
$object_data = self::getObjectDataFromActivity($object);
|
||||||
|
|
||||||
$receiverdata = self::getReceivers($object, $actor ?: $object_data['actor'] ?? '', $object_data['tags'], true, false);
|
|
||||||
$receivers = $reception_types = [];
|
|
||||||
foreach ($receiverdata as $key => $data) {
|
|
||||||
$receivers[$key] = $data['uid'];
|
|
||||||
$reception_types[$data['uid']] = $data['type'] ?? 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$object_data['receiver_urls'] = self::getReceiverURL($object);
|
$object_data['receiver_urls'] = self::getReceiverURL($object);
|
||||||
$object_data['receiver'] = $receivers;
|
$object_data['receiver'] = [];
|
||||||
$object_data['reception_type'] = $reception_types;
|
$object_data['reception_type'] = [];
|
||||||
|
$object_data['unlisted'] = false;
|
||||||
|
|
||||||
|
$receiverdata = self::getReceivers($object, $actor ?: $object_data['actor'] ?? '', $object_data['tags'], true, false);
|
||||||
|
|
||||||
|
foreach ($receiverdata as $key => $data) {
|
||||||
|
if ($data['uid'] !== -1) {
|
||||||
|
$object_data['reception_type'][$data['uid']] = $data['type'] ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($key !== -1) {
|
||||||
|
$object_data['receiver'][$key] = $data['uid'];
|
||||||
|
} 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
46
tests/Unit/Object/Api/Mastodon/PreferencesTest.php
Normal file
46
tests/Unit/Object/Api/Mastodon/PreferencesTest.php
Normal 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(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: 2024.09-rc\n"
|
"Project-Id-Version: 2024.09-rc\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2024-11-15 06:54+0000\n"
|
"POT-Creation-Date: 2024-11-16 08:31+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 ""
|
||||||
|
|
||||||
|
@ -292,8 +292,8 @@ msgstr ""
|
||||||
#: 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:376
|
#: src/Module/Contact/Profile.php:376
|
||||||
#: src/Module/Debug/ActivityPubConversion.php:132
|
#: src/Module/Debug/ActivityPubConversion.php:128
|
||||||
#: src/Module/Debug/Babel.php:307 src/Module/Debug/Localtime.php:50
|
#: src/Module/Debug/Babel.php:288 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:221
|
#: src/Module/FriendSuggest.php:131 src/Module/Install.php:221
|
||||||
#: src/Module/Install.php:261 src/Module/Install.php:296
|
#: src/Module/Install.php:261 src/Module/Install.php:296
|
||||||
|
@ -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:122 src/Module/Debug/Babel.php:301
|
#: src/Content/ContactSelector.php:122 src/Module/Debug/Babel.php:282
|
||||||
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:122
|
#: src/Content/Conversation.php:410 src/Content/Widget/VCard.php:121
|
||||||
#: 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"
|
||||||
|
@ -2273,7 +2273,7 @@ msgstr ""
|
||||||
msgid "The end"
|
msgid "The end"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:847 src/Content/Widget/VCard.php:118
|
#: src/Content/Text/HTML.php:847 src/Content/Widget/VCard.php:117
|
||||||
#: src/Model/Profile.php:456 src/Module/Contact/Profile.php:484
|
#: src/Model/Profile.php:456 src/Module/Contact/Profile.php:484
|
||||||
msgid "Follow"
|
msgid "Follow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2416,18 +2416,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 ""
|
||||||
|
|
||||||
|
@ -2446,27 +2446,27 @@ msgstr[1] ""
|
||||||
msgid "More Trending Tags"
|
msgid "More Trending Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:96 src/Model/Contact.php:1207
|
#: src/Content/Widget/VCard.php:95 src/Model/Contact.php:1207
|
||||||
#: 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:101 src/Model/Contact.php:1211
|
#: src/Content/Widget/VCard.php:100 src/Model/Contact.php:1211
|
||||||
#: 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:111 src/Model/Profile.php:360
|
#: src/Content/Widget/VCard.php:110 src/Model/Profile.php:360
|
||||||
#: src/Module/Contact/Profile.php:420 src/Module/Profile/Profile.php:187
|
#: src/Module/Contact/Profile.php:420 src/Module/Profile/Profile.php:187
|
||||||
msgid "XMPP:"
|
msgid "XMPP:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:112 src/Model/Profile.php:361
|
#: src/Content/Widget/VCard.php:111 src/Model/Profile.php:361
|
||||||
#: src/Module/Contact/Profile.php:422 src/Module/Profile/Profile.php:191
|
#: src/Module/Contact/Profile.php:422 src/Module/Profile/Profile.php:191
|
||||||
msgid "Matrix:"
|
msgid "Matrix:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:113 src/Model/Event.php:68
|
#: src/Content/Widget/VCard.php:112 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:418
|
#: src/Model/Profile.php:355 src/Module/Contact/Profile.php:418
|
||||||
#: src/Module/Directory.php:134 src/Module/Notifications/Introductions.php:180
|
#: src/Module/Directory.php:134 src/Module/Notifications/Introductions.php:180
|
||||||
|
@ -2474,18 +2474,18 @@ msgstr ""
|
||||||
msgid "Location:"
|
msgid "Location:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:116 src/Model/Profile.php:469
|
#: src/Content/Widget/VCard.php:115 src/Model/Profile.php:469
|
||||||
#: src/Module/Notifications/Introductions.php:194
|
#: src/Module/Notifications/Introductions.php:194
|
||||||
msgid "Network:"
|
msgid "Network:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:120 src/Model/Contact.php:1239
|
#: src/Content/Widget/VCard.php:119 src/Model/Contact.php:1239
|
||||||
#: src/Model/Contact.php:1251 src/Model/Profile.php:458
|
#: src/Model/Contact.php:1251 src/Model/Profile.php:458
|
||||||
#: src/Module/Contact/Profile.php:476
|
#: src/Module/Contact/Profile.php:476
|
||||||
msgid "Unfollow"
|
msgid "Unfollow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:126 src/Model/Contact.php:1209
|
#: src/Content/Widget/VCard.php:125 src/Model/Contact.php:1209
|
||||||
#: src/Model/Profile.php:443
|
#: src/Model/Profile.php:443
|
||||||
msgid "View group"
|
msgid "View group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -5630,7 +5630,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:125
|
||||||
msgid "ActivityPub Conversion"
|
msgid "ActivityPub Conversion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -6248,7 +6248,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
|
||||||
|
@ -6732,23 +6732,23 @@ msgstr ""
|
||||||
msgid "Activity"
|
msgid "Activity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/ActivityPubConversion.php:109
|
#: src/Module/Debug/ActivityPubConversion.php:105
|
||||||
msgid "Object data"
|
msgid "Object data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/ActivityPubConversion.php:116
|
#: src/Module/Debug/ActivityPubConversion.php:112
|
||||||
msgid "Result Item"
|
msgid "Result Item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/ActivityPubConversion.php:121
|
#: src/Module/Debug/ActivityPubConversion.php:117
|
||||||
#: src/Module/Debug/Babel.php:286 src/Module/Moderation/Item/Source.php:79
|
#: src/Module/Debug/Babel.php:267 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:126
|
||||||
msgid "Source activity"
|
msgid "Source activity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -6884,47 +6884,39 @@ msgstr ""
|
||||||
msgid "HTML::toPlaintext (compact)"
|
msgid "HTML::toPlaintext (compact)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:248
|
#: src/Module/Debug/Babel.php:243
|
||||||
msgid "Decoded post"
|
msgid "Decoded post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:269
|
#: src/Module/Debug/Babel.php:262
|
||||||
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:268
|
||||||
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:278
|
||||||
msgid "Babel Diagnostic"
|
msgid "Babel Diagnostic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:299
|
#: src/Module/Debug/Babel.php:280
|
||||||
msgid "Source text"
|
msgid "Source text"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:300
|
#: src/Module/Debug/Babel.php:281
|
||||||
msgid "BBCode"
|
msgid "BBCode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:302
|
#: src/Module/Debug/Babel.php:283
|
||||||
msgid "Markdown"
|
msgid "Markdown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:303
|
#: src/Module/Debug/Babel.php:284
|
||||||
msgid "HTML"
|
msgid "HTML"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/Debug/Babel.php:305
|
#: src/Module/Debug/Babel.php:286
|
||||||
msgid "Twitter Source / Tweet URL (requires API key)"
|
msgid "Twitter Source / Tweet URL (requires API key)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue