1
0
Fork 0

Merge branch 'develop' into rewrite/gravity-constants

This commit is contained in:
Roland Häder 2022-10-18 16:34:40 +02:00 committed by GitHub
commit 26e0469de7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
181 changed files with 2408 additions and 2405 deletions

2
Vagrantfile vendored
View file

@ -1,5 +1,5 @@
server_ip = "192.168.22.10" server_ip = "192.168.56.10"
server_memory = "2048" # MB server_memory = "2048" # MB
server_timezone = "UTC" server_timezone = "UTC"

View file

@ -26,6 +26,7 @@ if (php_sapi_name() !== 'cli') {
} }
use Dice\Dice; use Dice\Dice;
use Friendica\DI;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
require dirname(__DIR__) . '/vendor/autoload.php'; require dirname(__DIR__) . '/vendor/autoload.php';
@ -33,6 +34,8 @@ require dirname(__DIR__) . '/vendor/autoload.php';
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php'); $dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => ['console']]); $dice = $dice->addRule(LoggerInterface::class,['constructParams' => ['console']]);
/// @fixme Necessary until Hooks inside the Logger can get loaded without the DI-class
DI::init($dice);
\Friendica\Core\Logger\Handler\ErrorHandler::register($dice->create(\Psr\Log\LoggerInterface::class)); \Friendica\Core\Logger\Handler\ErrorHandler::register($dice->create(\Psr\Log\LoggerInterface::class));
(new Friendica\Core\Console($dice, $argv))->execute(); (new Friendica\Core\Console($dice, $argv))->execute();

View file

@ -45,13 +45,13 @@ apt-get install -qq apache2
a2enmod rewrite actions ssl a2enmod rewrite actions ssl
cp /vagrant/bin/dev/vagrant_vhost.sh /usr/local/bin/vhost cp /vagrant/bin/dev/vagrant_vhost.sh /usr/local/bin/vhost
chmod guo+x /usr/local/bin/vhost chmod guo+x /usr/local/bin/vhost
vhost -s 192.168.22.10.xip.io -d /var/www -p /etc/ssl/xip.io -c xip.io -a friendica.local vhost -s 192.168.56.10.xip.io -d /var/www -p /etc/ssl/xip.io -c xip.io -a friendica.local
a2dissite 000-default a2dissite 000-default
service apache2 restart service apache2 restart
#Install php #Install php
echo ">>> Installing PHP7" echo ">>> Installing PHP7"
apt-get install -qq php libapache2-mod-php php-cli php-mysql php-curl php-gd php-mbstring php-xml imagemagick php-imagick php-zip apt-get install -qq php libapache2-mod-php php-cli php-mysql php-curl php-gd php-mbstring php-xml imagemagick php-imagick php-zip php-gmp
systemctl restart apache2 systemctl restart apache2
echo ">>> Installing PHP8" echo ">>> Installing PHP8"
@ -59,7 +59,7 @@ apt-get install -qq -y lsb-release ca-certificates apt-transport-https software-
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add - wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
apt update apt update
apt-get install -qq php8.0 php8.0-cli php8.0-mysql php8.0-curl php8.0-gd php8.0-mbstring php8.0-xml php8.0-imagick php8.0-zip apt-get install -qq php8.0 php8.0-cli php8.0-mysql php8.0-curl php8.0-gd php8.0-mbstring php8.0-xml php8.0-imagick php8.0-zip php8.0-gmp
systemctl restart apache2 systemctl restart apache2
#Install mysql #Install mysql

133
boot.php
View file

@ -27,156 +27,37 @@
* easily as email does today. * easily as email does today.
*/ */
use Friendica\Model\Contact; use Friendica\Core\Session;
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Giant Rhubarb');
define('FRIENDICA_VERSION', '2022.12-dev');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('NEW_TABLE_STRUCTURE_VERSION', 1288);
/**
* Constant with a HTML line break.
*
* Contains a HTML line break (br) element and a real carriage return with line
* feed for the source.
* This can be used in HTML and JavaScript where needed a line break.
*/
define('EOL', "<br />\r\n");
/**
* @name CP
*
* Type of the community page
* @{
*/
define('CP_NO_INTERNAL_COMMUNITY', -2);
define('CP_NO_COMMUNITY_PAGE', -1);
define('CP_USERS_ON_SERVER', 0);
define('CP_GLOBAL_COMMUNITY', 1);
define('CP_USERS_AND_GLOBAL', 2);
/**
* @}
*/
/**
* @name Priority
*
* Process priority for the worker
* @{
*/
define('PRIORITY_UNDEFINED', 0);
define('PRIORITY_CRITICAL', 10);
define('PRIORITY_HIGH', 20);
define('PRIORITY_MEDIUM', 30);
define('PRIORITY_LOW', 40);
define('PRIORITY_NEGLIGIBLE', 50);
define('PRIORITIES', [PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW, PRIORITY_NEGLIGIBLE]);
/* @}*/
// Normally this constant is defined - but not if "pcntl" isn't installed
if (!defined('SIGTERM')) {
define('SIGTERM', 15);
}
/**
* Depending on the PHP version this constant does exist - or not.
* See here: http://php.net/manual/en/curl.constants.php#117928
*/
if (!defined('CURLE_OPERATION_TIMEDOUT')) {
define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED);
}
if (!function_exists('exif_imagetype')) {
function exif_imagetype($file)
{
$size = getimagesize($file);
return $size[2];
}
}
/** /**
* Returns the user id of locally logged in user or false. * Returns the user id of locally logged in user or false.
* *
* @return int|bool user id or false * @return int|bool user id or false
* @deprecated since version 2022.12, use Core\Session::getLocalUser() instead
*/ */
function local_user() function local_user()
{ {
if (!empty($_SESSION['authenticated']) && !empty($_SESSION['uid'])) { return Session::getLocalUser();
return intval($_SESSION['uid']);
}
return false;
} }
/** /**
* Returns the public contact id of logged in user or false. * Returns the public contact id of logged in user or false.
* *
* @return int|bool public contact id or false * @return int|bool public contact id or false
* @deprecated since version 2022.12, use Core\Session:: getPublicContact() instead
*/ */
function public_contact() function public_contact()
{ {
static $public_contact_id = false; return Session::getPublicContact();
if (!$public_contact_id && !empty($_SESSION['authenticated'])) {
if (!empty($_SESSION['my_address'])) {
// Local user
$public_contact_id = intval(Contact::getIdForURL($_SESSION['my_address'], 0, false));
} elseif (!empty($_SESSION['visitor_home'])) {
// Remote user
$public_contact_id = intval(Contact::getIdForURL($_SESSION['visitor_home'], 0, false));
}
} elseif (empty($_SESSION['authenticated'])) {
$public_contact_id = false;
}
return $public_contact_id;
} }
/** /**
* Returns public contact id of authenticated site visitor or false * Returns public contact id of authenticated site visitor or false
* *
* @return int|bool visitor_id or false * @return int|bool visitor_id or false
* @deprecated since version 2022.12, use Core\Session:: getRemoteUser() instead
*/ */
function remote_user() function remote_user()
{ {
if (empty($_SESSION['authenticated'])) { return Session::getRemoteUser();
return false;
}
if (!empty($_SESSION['visitor_id'])) {
return intval($_SESSION['visitor_id']);
}
return false;
}
/**
* Show an error message to user.
*
* This function save text in session, to be shown to the user at next page load
*
* @param string $s - Text of notice
*
* @return void
* @deprecated since version 2022.09, use \Friendica\Navigation\SystemMessages instead
*/
function notice(string $s)
{
\Friendica\DI::sysmsg()->addNotice($s);
}
/**
* Show an info message to user.
*
* This function save text in session, to be shown to the user at next page load
*
* @param string $s - Text of notice
*
* @return void
* @deprecated since version 2022.09, use \Friendica\Navigation\SystemMessages instead
*/
function info(string $s)
{
\Friendica\DI::sysmsg()->addInfo($s);
} }

View file

@ -41,7 +41,6 @@
"michelf/php-markdown": "^1.7", "michelf/php-markdown": "^1.7",
"minishlink/web-push": "^6.0", "minishlink/web-push": "^6.0",
"mobiledetect/mobiledetectlib": "^2.8", "mobiledetect/mobiledetectlib": "^2.8",
"monolog/monolog": "^1.25",
"nikic/fast-route": "^1.3", "nikic/fast-route": "^1.3",
"paragonie/hidden-string": "^1.0", "paragonie/hidden-string": "^1.0",
"patrickschur/language-detection": "^5.0.0", "patrickschur/language-detection": "^5.0.0",
@ -50,6 +49,7 @@
"pragmarx/google2fa": "^5.0", "pragmarx/google2fa": "^5.0",
"pragmarx/recovery": "^0.2", "pragmarx/recovery": "^0.2",
"psr/container": "^1.0", "psr/container": "^1.0",
"psr/log": "^1.1",
"seld/cli-prompt": "^1.0", "seld/cli-prompt": "^1.0",
"smarty/smarty": "^4", "smarty/smarty": "^4",
"ua-parser/uap-php": "^3.9", "ua-parser/uap-php": "^3.9",

84
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": "f5922f03b367e68a5930df6ed80c5c2f", "content-hash": "c851fbba46ed090d0fbaf68e9b3b94df",
"packages": [ "packages": [
{ {
"name": "asika/simple-console", "name": "asika/simple-console",
@ -1543,88 +1543,6 @@
], ],
"time": "2022-02-17T19:24:25+00:00" "time": "2022-02-17T19:24:25+00:00"
}, },
{
"name": "monolog/monolog",
"version": "1.27.1",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "904713c5929655dc9b97288b69cfeedad610c9a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1",
"reference": "904713c5929655dc9b97288b69cfeedad610c9a1",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/log": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
"phpstan/phpstan": "^0.12.59",
"phpunit/phpunit": "~4.5",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-mongo": "Allow sending log messages to a MongoDB server",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"php-console/php-console": "Allow sending log messages to Google Chrome",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"funding": [
{
"url": "https://github.com/Seldaek",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
"type": "tidelift"
}
],
"time": "2022-06-09T08:53:42+00:00"
},
{ {
"name": "nikic/fast-route", "name": "nikic/fast-route",
"version": "v1.3.0", "version": "v1.3.0",

View file

@ -1,6 +1,6 @@
-- ------------------------------------------ -- ------------------------------------------
-- Friendica 2022.09-rc (Giant Rhubarb) -- Friendica 2022.12-dev (Giant Rhubarb)
-- DB_UPDATE_VERSION 1484 -- DB_UPDATE_VERSION 1486
-- ------------------------------------------ -- ------------------------------------------
@ -1186,6 +1186,7 @@ CREATE TABLE IF NOT EXISTS `post-content` (
`content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '', `content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`body` mediumtext COMMENT 'item body content', `body` mediumtext COMMENT 'item body content',
`raw-body` mediumtext COMMENT 'Body without embedded media links', `raw-body` mediumtext COMMENT 'Body without embedded media links',
`quote-uri-id` int unsigned COMMENT 'Id of the item-uri table that contains the quoted uri',
`location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated', `location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated',
`coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated', `coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
`language` text COMMENT 'Language information about this post', `language` text COMMENT 'Language information about this post',
@ -1202,7 +1203,9 @@ CREATE TABLE IF NOT EXISTS `post-content` (
INDEX `plink` (`plink`(191)), INDEX `plink` (`plink`(191)),
INDEX `resource-id` (`resource-id`), INDEX `resource-id` (`resource-id`),
FULLTEXT INDEX `title-content-warning-body` (`title`,`content-warning`,`body`), FULLTEXT INDEX `title-content-warning-body` (`title`,`content-warning`,`body`),
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE INDEX `quote-uri-id` (`quote-uri-id`),
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
FOREIGN KEY (`quote-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Content for all posts'; ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Content for all posts';
-- --
@ -1289,6 +1292,7 @@ CREATE TABLE IF NOT EXISTS `post-media` (
`id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri', `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
`url` varbinary(1024) NOT NULL COMMENT 'Media URL', `url` varbinary(1024) NOT NULL COMMENT 'Media URL',
`media-uri-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the activities uri-id',
`type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Media type', `type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Media type',
`mimetype` varchar(60) COMMENT '', `mimetype` varchar(60) COMMENT '',
`height` smallint unsigned COMMENT 'Height of the media', `height` smallint unsigned COMMENT 'Height of the media',
@ -1308,7 +1312,9 @@ CREATE TABLE IF NOT EXISTS `post-media` (
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
UNIQUE INDEX `uri-id-url` (`uri-id`,`url`(512)), UNIQUE INDEX `uri-id-url` (`uri-id`,`url`(512)),
INDEX `uri-id-id` (`uri-id`,`id`), INDEX `uri-id-id` (`uri-id`,`id`),
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE INDEX `media-uri-id` (`media-uri-id`),
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
FOREIGN KEY (`media-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Attached media'; ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Attached media';
-- --
@ -1807,6 +1813,8 @@ CREATE VIEW `post-user-view` AS SELECT
`post-user`.`thr-parent-id` AS `thr-parent-id`, `post-user`.`thr-parent-id` AS `thr-parent-id`,
`conversation-item-uri`.`uri` AS `conversation`, `conversation-item-uri`.`uri` AS `conversation`,
`post-thread-user`.`conversation-id` AS `conversation-id`, `post-thread-user`.`conversation-id` AS `conversation-id`,
`quote-item-uri`.`uri` AS `quote-uri`,
`post-content`.`quote-uri-id` AS `quote-uri-id`,
`item-uri`.`guid` AS `guid`, `item-uri`.`guid` AS `guid`,
`post-user`.`wall` AS `wall`, `post-user`.`wall` AS `wall`,
`post-user`.`gravity` AS `gravity`, `post-user`.`gravity` AS `gravity`,
@ -1962,6 +1970,7 @@ CREATE VIEW `post-user-view` AS SELECT
LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id` LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-user`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-user`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-user`.`uri-id` AND `post-user`.`origin` LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-user`.`uri-id` AND `post-user`.`origin`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-user`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-user`.`psid` LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-user`.`psid`
@ -1985,6 +1994,8 @@ CREATE VIEW `post-thread-user-view` AS SELECT
`post-user`.`thr-parent-id` AS `thr-parent-id`, `post-user`.`thr-parent-id` AS `thr-parent-id`,
`conversation-item-uri`.`uri` AS `conversation`, `conversation-item-uri`.`uri` AS `conversation`,
`post-thread-user`.`conversation-id` AS `conversation-id`, `post-thread-user`.`conversation-id` AS `conversation-id`,
`quote-item-uri`.`uri` AS `quote-uri`,
`post-content`.`quote-uri-id` AS `quote-uri-id`,
`item-uri`.`guid` AS `guid`, `item-uri`.`guid` AS `guid`,
`post-thread-user`.`wall` AS `wall`, `post-thread-user`.`wall` AS `wall`,
`post-user`.`gravity` AS `gravity`, `post-user`.`gravity` AS `gravity`,
@ -2138,6 +2149,7 @@ CREATE VIEW `post-thread-user-view` AS SELECT
LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id` LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread-user`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread-user`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-thread-user`.`uri-id` AND `post-thread-user`.`origin` LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-thread-user`.`uri-id` AND `post-thread-user`.`origin`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread-user`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-thread-user`.`psid` LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-thread-user`.`psid`
@ -2157,6 +2169,8 @@ CREATE VIEW `post-view` AS SELECT
`post`.`thr-parent-id` AS `thr-parent-id`, `post`.`thr-parent-id` AS `thr-parent-id`,
`conversation-item-uri`.`uri` AS `conversation`, `conversation-item-uri`.`uri` AS `conversation`,
`post-thread`.`conversation-id` AS `conversation-id`, `post-thread`.`conversation-id` AS `conversation-id`,
`quote-item-uri`.`uri` AS `quote-uri`,
`post-content`.`quote-uri-id` AS `quote-uri-id`,
`item-uri`.`guid` AS `guid`, `item-uri`.`guid` AS `guid`,
`post`.`gravity` AS `gravity`, `post`.`gravity` AS `gravity`,
`external-item-uri`.`uri` AS `extid`, `external-item-uri`.`uri` AS `extid`,
@ -2279,6 +2293,7 @@ CREATE VIEW `post-view` AS SELECT
LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid` LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post`.`uri-id`
LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id` LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id`
LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`; LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`;
@ -2296,6 +2311,8 @@ CREATE VIEW `post-thread-view` AS SELECT
`post`.`thr-parent-id` AS `thr-parent-id`, `post`.`thr-parent-id` AS `thr-parent-id`,
`conversation-item-uri`.`uri` AS `conversation`, `conversation-item-uri`.`uri` AS `conversation`,
`post-thread`.`conversation-id` AS `conversation-id`, `post-thread`.`conversation-id` AS `conversation-id`,
`quote-item-uri`.`uri` AS `quote-uri`,
`post-content`.`quote-uri-id` AS `quote-uri-id`,
`item-uri`.`guid` AS `guid`, `item-uri`.`guid` AS `guid`,
`post`.`gravity` AS `gravity`, `post`.`gravity` AS `gravity`,
`external-item-uri`.`uri` AS `extid`, `external-item-uri`.`uri` AS `extid`,
@ -2418,6 +2435,7 @@ CREATE VIEW `post-thread-view` AS SELECT
LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid` LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread`.`uri-id`
LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id` LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id`
LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`; LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`;

View file

@ -919,6 +919,10 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep-
Hook::callAll('block', $hook_data); Hook::callAll('block', $hook_data);
Hook::callAll('unblock', $hook_data); Hook::callAll('unblock', $hook_data);
### src/Core/Logger/Factory.php
Hook::callAll('logger_instance', $data);
### src/Core/StorageManager ### src/Core/StorageManager
Hook::callAll('storage_instance', $data); Hook::callAll('storage_instance', $data);

View file

@ -34,7 +34,7 @@ Due to the large variety of operating systems and PHP platforms in existence we
* The POSIX module of PHP needs to be activated (e.g. [RHEL, CentOS](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) have disabled it) * The POSIX module of PHP needs to be activated (e.g. [RHEL, CentOS](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) have disabled it)
* Some form of email server or email gateway such that PHP mail() works. * Some form of email server or email gateway such that PHP mail() works.
If you cannot set up your own email server, you can use the [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) addon and use a remote SMTP server. If you cannot set up your own email server, you can use the [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) addon and use a remote SMTP server.
* MySQL 5.6+ or an equivalent alternative for MySQL (MariaDB, Percona Server etc.) * MySQL with support of InnoDB and Barracuda (we suggest a MariaDB server as all development is done using these, but alternatives like MySQL or Percona Server etc. might work as well)
* ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows) * ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows)
* installation into a top-level domain or sub-domain (without a directory/path component in the URL) is RECOMMENDED. Directory paths will not be as convenient to use and have not been thoroughly tested. This is REQUIRED if you wish to communicate with the Diaspora network. * installation into a top-level domain or sub-domain (without a directory/path component in the URL) is RECOMMENDED. Directory paths will not be as convenient to use and have not been thoroughly tested. This is REQUIRED if you wish to communicate with the Diaspora network.

View file

@ -10,7 +10,7 @@ Getting started
No need to setup up a webserver, database etc. before actually starting. No need to setup up a webserver, database etc. before actually starting.
Vagrant creates a virtual machine for you that you can just run inside VirtualBox and start to work directly on Friendica. Vagrant creates a virtual machine for you that you can just run inside VirtualBox and start to work directly on Friendica.
It brings an Debian Bullseye with PHP 7.4 and MariaDB 10.5.11. It brings an Debian Bullseye with PHP 8.0 and MariaDB 10.5.11.
What you need to do: What you need to do:
@ -24,7 +24,7 @@ This will start the virtual machine.
Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica. Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica.
4. Run `vagrant ssh` to log into the virtual machine to log in to the VM in case you need to debug something on the server. 4. Run `vagrant ssh` to log into the virtual machine to log in to the VM in case you need to debug something on the server.
5. Open you test installation in a browser. 5. Open you test installation in a browser.
Go to friendica.local (or 192.168.22.10). Go to friendica.local (or 192.168.56.10).
friendica.local is using a self-signed TLS certificate, so you will need to add an exception to trust the certificate the first time you are visiting the page. friendica.local is using a self-signed TLS certificate, so you will need to add an exception to trust the certificate the first time you are visiting the page.
The mysql database is called "friendica", the mysql user and password both are "friendica". The mysql database is called "friendica", the mysql user and password both are "friendica".
6. Work on Friendica's code in your git clone on your machine (not in the VM). 6. Work on Friendica's code in your git clone on your machine (not in the VM).

View file

@ -13,6 +13,7 @@ Fields
| content-warning | | varchar(255) | NO | | | | | content-warning | | varchar(255) | NO | | | |
| body | item body content | mediumtext | YES | | NULL | | | body | item body content | mediumtext | YES | | NULL | |
| raw-body | Body without embedded media links | mediumtext | YES | | NULL | | | raw-body | Body without embedded media links | mediumtext | YES | | NULL | |
| quote-uri-id | Id of the item-uri table that contains the quoted uri | int unsigned | YES | | NULL | |
| location | text location where this item originated | varchar(255) | NO | | | | | location | text location where this item originated | varchar(255) | NO | | | |
| coord | longitude/latitude pair representing location where this item originated | varchar(255) | NO | | | | | coord | longitude/latitude pair representing location where this item originated | varchar(255) | NO | | | |
| language | Language information about this post | text | YES | | NULL | | | language | Language information about this post | text | YES | | NULL | |
@ -35,6 +36,7 @@ Indexes
| plink | plink(191) | | plink | plink(191) |
| resource-id | resource-id | | resource-id | resource-id |
| title-content-warning-body | FULLTEXT, title, content-warning, body | | title-content-warning-body | FULLTEXT, title, content-warning, body |
| quote-uri-id | quote-uri-id |
Foreign Keys Foreign Keys
------------ ------------
@ -42,5 +44,6 @@ Foreign Keys
| Field | Target Table | Target Field | | Field | Target Table | Target Field |
|-------|--------------|--------------| |-------|--------------|--------------|
| uri-id | [item-uri](help/database/db_item-uri) | id | | uri-id | [item-uri](help/database/db_item-uri) | id |
| quote-uri-id | [item-uri](help/database/db_item-uri) | id |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View file

@ -7,10 +7,11 @@ Fields
------ ------
| Field | Description | Type | Null | Key | Default | Extra | | Field | Description | Type | Null | Key | Default | Extra |
| --------------- | --------------------------------------------------------- | ----------------- | ---- | --- | ------- | -------------- | | --------------- | ------------------------------------------------------------------ | ----------------- | ---- | --- | ------- | -------------- |
| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | | id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | | | uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
| url | Media URL | varbinary(1024) | NO | | NULL | | | url | Media URL | varbinary(1024) | NO | | NULL | |
| media-uri-id | Id of the item-uri table entry that contains the activities uri-id | int unsigned | YES | | NULL | |
| type | Media type | tinyint unsigned | NO | | 0 | | | type | Media type | tinyint unsigned | NO | | 0 | |
| mimetype | | varchar(60) | YES | | NULL | | | mimetype | | varchar(60) | YES | | NULL | |
| height | Height of the media | smallint unsigned | YES | | NULL | | | height | Height of the media | smallint unsigned | YES | | NULL | |
@ -32,10 +33,11 @@ Indexes
------------ ------------
| Name | Fields | | Name | Fields |
| ---------- | ------------------------ | | ------------ | ------------------------ |
| PRIMARY | id | | PRIMARY | id |
| uri-id-url | UNIQUE, uri-id, url(512) | | uri-id-url | UNIQUE, uri-id, url(512) |
| uri-id-id | uri-id, id | | uri-id-id | uri-id, id |
| media-uri-id | media-uri-id |
Foreign Keys Foreign Keys
------------ ------------
@ -43,5 +45,6 @@ Foreign Keys
| Field | Target Table | Target Field | | Field | Target Table | Target Field |
|-------|--------------|--------------| |-------|--------------|--------------|
| uri-id | [item-uri](help/database/db_item-uri) | id | | uri-id | [item-uri](help/database/db_item-uri) | id |
| media-uri-id | [item-uri](help/database/db_item-uri) | id |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View file

@ -405,6 +405,10 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap
Hook::callAll('block', $hook_data); Hook::callAll('block', $hook_data);
Hook::callAll('unblock', $hook_data); Hook::callAll('unblock', $hook_data);
### src/Core/Logger/Factory.php
Hook::callAll('logger_instance', $data);
### src/Core/StorageManager ### src/Core/StorageManager
Hook::callAll('storage_instance', $data); Hook::callAll('storage_instance', $data);

View file

@ -31,7 +31,7 @@ Requirements
* Das POSIX Modul muss aktiviert sein ([CentOS, RHEL](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) haben dies z.B. deaktiviert) * Das POSIX Modul muss aktiviert sein ([CentOS, RHEL](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) haben dies z.B. deaktiviert)
* Einen E-Mail Server, so dass PHP `mail()` funktioniert. * Einen E-Mail Server, so dass PHP `mail()` funktioniert.
Wenn kein eigener E-Mail Server zur Verfügung steht, kann alternativ das [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) Addon mit einem externen SMTP Account verwendet werden. Wenn kein eigener E-Mail Server zur Verfügung steht, kann alternativ das [phpmailer](https://github.com/friendica/friendica-addons/tree/develop/phpmailer) Addon mit einem externen SMTP Account verwendet werden.
* Mysql 5.6+ (oder eine äquivalente Alternative: MariaDB, Percona Server etc.) * Mysql Server mit Unterstützung vom InnoDB und Barracuda (wir empfehlen MariaDB da die Entwicklung mit solchen Server erfolgt, aber Alternativen wie MySQL, Percona Server etc. sollten auch funktionieren)
* die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden] * die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden]
* Installation in einer Top-Level-Domain oder Subdomain (ohne eine Verzeichnis/Pfad-Komponente in der URL) wird bevorzugt. Verzeichnispfade sind für diesen Zweck nicht so günstig und wurden auch nicht ausführlich getestet. * Installation in einer Top-Level-Domain oder Subdomain (ohne eine Verzeichnis/Pfad-Komponente in der URL) wird bevorzugt. Verzeichnispfade sind für diesen Zweck nicht so günstig und wurden auch nicht ausführlich getestet.

View file

@ -119,7 +119,7 @@ function cal_content(App $a)
$is_owner = local_user() == $owner['uid']; $is_owner = local_user() == $owner['uid'];
if ($owner['hidewall'] && !$is_owner && !$remote_contact) { if ($owner['hidewall'] && !$is_owner && !$remote_contact) {
notice(DI::l10n()->t('Access to this profile has been restricted.')); DI::sysmsg()->addNotice(DI::l10n()->t('Access to this profile has been restricted.'));
return; return;
} }
@ -262,7 +262,7 @@ function cal_content(App $a)
if ($mode == 'export') { if ($mode == 'export') {
if (!$owner_uid) { if (!$owner_uid) {
notice(DI::l10n()->t('User not found')); DI::sysmsg()->addNotice(DI::l10n()->t('User not found'));
return; return;
} }
@ -271,9 +271,9 @@ function cal_content(App $a)
if (!$evexport["success"]) { if (!$evexport["success"]) {
if ($evexport["content"]) { if ($evexport["content"]) {
notice(DI::l10n()->t('This calendar format is not supported')); DI::sysmsg()->addNotice(DI::l10n()->t('This calendar format is not supported'));
} else { } else {
notice(DI::l10n()->t('No exportable data found')); DI::sysmsg()->addNotice(DI::l10n()->t('No exportable data found'));
} }
// If it the own calendar return to the events page // If it the own calendar return to the events page

View file

@ -35,14 +35,14 @@ function editpost_content(App $a)
$o = ''; $o = '';
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
$post_id = ((DI::args()->getArgc() > 1) ? intval(DI::args()->getArgv()[1]) : 0); $post_id = ((DI::args()->getArgc() > 1) ? intval(DI::args()->getArgv()[1]) : 0);
if (!$post_id) { if (!$post_id) {
notice(DI::l10n()->t('Item not found')); DI::sysmsg()->addNotice(DI::l10n()->t('Item not found'));
return; return;
} }
@ -52,7 +52,7 @@ function editpost_content(App $a)
$item = Post::selectFirstForUser(local_user(), $fields, ['id' => $post_id, 'uid' => local_user()]); $item = Post::selectFirstForUser(local_user(), $fields, ['id' => $post_id, 'uid' => local_user()]);
if (!DBA::isResult($item)) { if (!DBA::isResult($item)) {
notice(DI::l10n()->t('Item not found')); DI::sysmsg()->addNotice(DI::l10n()->t('Item not found'));
return; return;
} }

View file

@ -121,7 +121,7 @@ function events_post(App $a)
$onerror_path = 'events/' . $action . '?' . http_build_query($params, '', '&', PHP_QUERY_RFC3986); $onerror_path = 'events/' . $action . '?' . http_build_query($params, '', '&', PHP_QUERY_RFC3986);
if (strcmp($finish, $start) < 0 && !$nofinish) { if (strcmp($finish, $start) < 0 && !$nofinish) {
notice(DI::l10n()->t('Event can not end before it has started.')); DI::sysmsg()->addNotice(DI::l10n()->t('Event can not end before it has started.'));
if (intval($_REQUEST['preview'])) { if (intval($_REQUEST['preview'])) {
System::httpExit(DI::l10n()->t('Event can not end before it has started.')); System::httpExit(DI::l10n()->t('Event can not end before it has started.'));
} }
@ -129,7 +129,7 @@ function events_post(App $a)
} }
if (!$summary || ($start === DBA::NULL_DATETIME)) { if (!$summary || ($start === DBA::NULL_DATETIME)) {
notice(DI::l10n()->t('Event title and start time are required.')); DI::sysmsg()->addNotice(DI::l10n()->t('Event title and start time are required.'));
if (intval($_REQUEST['preview'])) { if (intval($_REQUEST['preview'])) {
System::httpExit(DI::l10n()->t('Event title and start time are required.')); System::httpExit(DI::l10n()->t('Event title and start time are required.'));
} }
@ -206,7 +206,7 @@ function events_post(App $a)
} }
if (!$cid && $uri_id) { if (!$cid && $uri_id) {
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, (int)$uri_id, (int)$uid); Worker::add(Worker::PRIORITY_HIGH, "Notifier", Delivery::POST, (int)$uri_id, (int)$uid);
} }
DI::baseUrl()->redirect('events'); DI::baseUrl()->redirect('events');
@ -215,7 +215,7 @@ function events_post(App $a)
function events_content(App $a) function events_content(App $a)
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form(); return Login::form();
} }
@ -532,7 +532,7 @@ function events_content(App $a)
} }
if (Post::exists(['id' => $ev[0]['itemid']])) { if (Post::exists(['id' => $ev[0]['itemid']])) {
notice(DI::l10n()->t('Failed to remove event')); DI::sysmsg()->addNotice(DI::l10n()->t('Failed to remove event'));
} }
DI::baseUrl()->redirect('events'); DI::baseUrl()->redirect('events');

View file

@ -53,7 +53,7 @@ function follow_content(App $a)
$return_path = 'contact'; $return_path = 'contact';
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
// NOTREACHED // NOTREACHED
} }
@ -81,7 +81,7 @@ function follow_content(App $a)
if (DBA::isResult($user_contact)) { if (DBA::isResult($user_contact)) {
if ($user_contact['pending']) { if ($user_contact['pending']) {
notice(DI::l10n()->t('You already added this contact.')); DI::sysmsg()->addNotice(DI::l10n()->t('You already added this contact.'));
$submit = ''; $submit = '';
} }
} }
@ -97,7 +97,7 @@ function follow_content(App $a)
// Possibly it is a remote item and not an account // Possibly it is a remote item and not an account
follow_remote_item($url); follow_remote_item($url);
notice(DI::l10n()->t("The network type couldn't be detected. Contact can't be added.")); DI::sysmsg()->addNotice(DI::l10n()->t("The network type couldn't be detected. Contact can't be added."));
$submit = ''; $submit = '';
$contact = ['url' => $url, 'network' => Protocol::PHANTOM, 'name' => $url, 'keywords' => '']; $contact = ['url' => $url, 'network' => Protocol::PHANTOM, 'name' => $url, 'keywords' => ''];
} }
@ -105,12 +105,12 @@ function follow_content(App $a)
$protocol = Contact::getProtocol($contact['url'], $contact['network']); $protocol = Contact::getProtocol($contact['url'], $contact['network']);
if (($protocol == Protocol::DIASPORA) && !DI::config()->get('system', 'diaspora_enabled')) { if (($protocol == Protocol::DIASPORA) && !DI::config()->get('system', 'diaspora_enabled')) {
notice(DI::l10n()->t("Diaspora support isn't enabled. Contact can't be added.")); DI::sysmsg()->addNotice(DI::l10n()->t("Diaspora support isn't enabled. Contact can't be added."));
$submit = ''; $submit = '';
} }
if (($protocol == Protocol::OSTATUS) && DI::config()->get('system', 'ostatus_disabled')) { if (($protocol == Protocol::OSTATUS) && DI::config()->get('system', 'ostatus_disabled')) {
notice(DI::l10n()->t("OStatus support is disabled. Contact can't be added.")); DI::sysmsg()->addNotice(DI::l10n()->t("OStatus support is disabled. Contact can't be added."));
$submit = ''; $submit = '';
} }
@ -127,7 +127,7 @@ function follow_content(App $a)
$owner = User::getOwnerDataById($uid); $owner = User::getOwnerDataById($uid);
if (empty($owner)) { if (empty($owner)) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
// NOTREACHED // NOTREACHED
} }
@ -181,14 +181,14 @@ function follow_process(App $a, string $url)
follow_remote_item($url); follow_remote_item($url);
if ($result['message']) { if ($result['message']) {
notice($result['message']); DI::sysmsg()->addNotice($result['message']);
} }
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} elseif ($result['cid']) { } elseif ($result['cid']) {
DI::baseUrl()->redirect('contact/' . $result['cid']); DI::baseUrl()->redirect('contact/' . $result['cid']);
} }
notice(DI::l10n()->t('The contact could not be added.')); DI::sysmsg()->addNotice(DI::l10n()->t('The contact could not be added.'));
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} }

View file

@ -36,6 +36,7 @@ use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Session; use Friendica\Core\Session;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Attach; use Friendica\Model\Attach;
@ -128,7 +129,7 @@ function item_post(App $a) {
} }
if (!DBA::isResult($toplevel_item)) { if (!DBA::isResult($toplevel_item)) {
notice(DI::l10n()->t('Unable to locate original post.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate original post.'));
if ($return_path) { if ($return_path) {
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} }
@ -178,7 +179,7 @@ function item_post(App $a) {
// Now check that valid personal details have been provided // Now check that valid personal details have been provided
if (!Security::canWriteToUserWall($profile_uid) && !$allow_comment) { if (!Security::canWriteToUserWall($profile_uid) && !$allow_comment) {
Logger::warning('Permission denied.', ['local' => local_user(), 'profile_uid' => $profile_uid, 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]); Logger::warning('Permission denied.', ['local' => local_user(), 'profile_uid' => $profile_uid, 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]);
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
if ($return_path) { if ($return_path) {
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} }
@ -334,7 +335,7 @@ function item_post(App $a) {
System::jsonExit(['preview' => '']); System::jsonExit(['preview' => '']);
} }
notice(DI::l10n()->t('Empty post discarded.')); DI::sysmsg()->addNotice(DI::l10n()->t('Empty post discarded.'));
if ($return_path) { if ($return_path) {
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} }
@ -632,7 +633,7 @@ function item_post(App $a) {
unset($datarray['self']); unset($datarray['self']);
unset($datarray['api_source']); unset($datarray['api_source']);
Post\Delayed::add($datarray['uri'], $datarray, PRIORITY_HIGH, Post\Delayed::PREPARED_NO_HOOK, $scheduled_at); Post\Delayed::add($datarray['uri'], $datarray, Worker::PRIORITY_HIGH, Post\Delayed::PREPARED_NO_HOOK, $scheduled_at);
item_post_return(DI::baseUrl(), $api_source, $return_path); item_post_return(DI::baseUrl(), $api_source, $return_path);
} }
} }
@ -681,7 +682,7 @@ function item_post(App $a) {
$post_id = Item::insert($datarray); $post_id = Item::insert($datarray);
if (!$post_id) { if (!$post_id) {
notice(DI::l10n()->t('Item wasn\'t stored.')); DI::sysmsg()->addNotice(DI::l10n()->t('Item wasn\'t stored.'));
if ($return_path) { if ($return_path) {
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} }
@ -837,7 +838,7 @@ function drop_item(int $id, string $return = ''): string
$item = Post::selectFirstForUser(local_user(), ['id', 'uid', 'guid', 'contact-id', 'deleted', 'gravity', 'parent'], ['id' => $id]); $item = Post::selectFirstForUser(local_user(), ['id', 'uid', 'guid', 'contact-id', 'deleted', 'gravity', 'parent'], ['id' => $id]);
if (!DBA::isResult($item)) { if (!DBA::isResult($item)) {
notice(DI::l10n()->t('Item not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Item not found.'));
DI::baseUrl()->redirect('network'); DI::baseUrl()->redirect('network');
//NOTREACHED //NOTREACHED
} }
@ -861,7 +862,7 @@ function drop_item(int $id, string $return = ''): string
//NOTREACHED //NOTREACHED
} else { } else {
Logger::warning('Permission denied.', ['local' => local_user(), 'uid' => $item['uid'], 'cid' => $contact_id]); Logger::warning('Permission denied.', ['local' => local_user(), 'uid' => $item['uid'], 'cid' => $contact_id]);
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('display/' . $item['guid']); DI::baseUrl()->redirect('display/' . $item['guid']);
//NOTREACHED //NOTREACHED
} }

View file

@ -37,7 +37,7 @@ function lostpass_post(App $a)
$condition = ['(`email` = ? OR `nickname` = ?) AND `verified` = 1 AND `blocked` = 0', $loginame, $loginame]; $condition = ['(`email` = ? OR `nickname` = ?) AND `verified` = 1 AND `blocked` = 0', $loginame, $loginame];
$user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'email', 'language'], $condition); $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'email', 'language'], $condition);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t('No valid account found.')); DI::sysmsg()->addNotice(DI::l10n()->t('No valid account found.'));
DI::baseUrl()->redirect(); DI::baseUrl()->redirect();
} }
@ -49,7 +49,7 @@ function lostpass_post(App $a)
]; ];
$result = DBA::update('user', $fields, ['uid' => $user['uid']]); $result = DBA::update('user', $fields, ['uid' => $user['uid']]);
if ($result) { if ($result) {
info(DI::l10n()->t('Password reset request issued. Check your email.')); DI::sysmsg()->addInfo(DI::l10n()->t('Password reset request issued. Check your email.'));
} }
$sitename = DI::config()->get('config', 'sitename'); $sitename = DI::config()->get('config', 'sitename');
@ -97,7 +97,7 @@ function lostpass_content(App $a)
$user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'email', 'pwdreset_time', 'language'], ['pwdreset' => hash('sha256', $pwdreset_token)]); $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'email', 'pwdreset_time', 'language'], ['pwdreset' => hash('sha256', $pwdreset_token)]);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.")); DI::sysmsg()->addNotice(DI::l10n()->t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed."));
return lostpass_form(); return lostpass_form();
} }
@ -110,7 +110,7 @@ function lostpass_content(App $a)
]; ];
DBA::update('user', $fields, ['uid' => $user['uid']]); DBA::update('user', $fields, ['uid' => $user['uid']]);
notice(DI::l10n()->t('Request has expired, please make a new one.')); DI::sysmsg()->addNotice(DI::l10n()->t('Request has expired, please make a new one.'));
return lostpass_form(); return lostpass_form();
} }
@ -152,7 +152,7 @@ function lostpass_generate_password($user)
'$newpass' => $new_password, '$newpass' => $new_password,
]); ]);
info(DI::l10n()->t("Your password has been reset.")); DI::sysmsg()->addInfo(DI::l10n()->t("Your password has been reset."));
$sitename = DI::config()->get('config', 'sitename'); $sitename = DI::config()->get('config', 'sitename');
$preamble = Strings::deindent(DI::l10n()->t(' $preamble = Strings::deindent(DI::l10n()->t('

View file

@ -59,7 +59,7 @@ function match_content(App $a)
return ''; return '';
} }
if (!$profile['pub_keywords'] && (!$profile['prv_keywords'])) { if (!$profile['pub_keywords'] && (!$profile['prv_keywords'])) {
notice(DI::l10n()->t('No keywords to match. Please add keywords to your profile.')); DI::sysmsg()->addNotice(DI::l10n()->t('No keywords to match. Please add keywords to your profile.'));
return ''; return '';
} }
@ -90,7 +90,7 @@ function match_content(App $a)
} }
if (empty($entries)) { if (empty($entries)) {
info(DI::l10n()->t('No matches')); DI::sysmsg()->addInfo(DI::l10n()->t('No matches'));
} }
$tpl = Renderer::getMarkupTemplate('viewcontact_template.tpl'); $tpl = Renderer::getMarkupTemplate('viewcontact_template.tpl');

View file

@ -66,7 +66,7 @@ function message_init(App $a)
function message_post(App $a) function message_post(App $a)
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
@ -80,20 +80,20 @@ function message_post(App $a)
switch ($ret) { switch ($ret) {
case -1: case -1:
notice(DI::l10n()->t('No recipient selected.')); DI::sysmsg()->addNotice(DI::l10n()->t('No recipient selected.'));
$norecip = true; $norecip = true;
break; break;
case -2: case -2:
notice(DI::l10n()->t('Unable to locate contact information.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate contact information.'));
break; break;
case -3: case -3:
notice(DI::l10n()->t('Message could not be sent.')); DI::sysmsg()->addNotice(DI::l10n()->t('Message could not be sent.'));
break; break;
case -4: case -4:
notice(DI::l10n()->t('Message collection failure.')); DI::sysmsg()->addNotice(DI::l10n()->t('Message collection failure.'));
break; break;
} }
@ -111,7 +111,7 @@ function message_content(App $a)
Nav::setSelected('messages'); Nav::setSelected('messages');
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form(); return Login::form();
} }
@ -146,12 +146,12 @@ function message_content(App $a)
if ($cmd === 'drop') { if ($cmd === 'drop') {
$message = DBA::selectFirst('mail', ['convid'], ['id' => DI::args()->getArgv()[2], 'uid' => local_user()]); $message = DBA::selectFirst('mail', ['convid'], ['id' => DI::args()->getArgv()[2], 'uid' => local_user()]);
if(!DBA::isResult($message)){ if(!DBA::isResult($message)){
notice(DI::l10n()->t('Conversation not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Conversation not found.'));
DI::baseUrl()->redirect('message'); DI::baseUrl()->redirect('message');
} }
if (!DBA::delete('mail', ['id' => DI::args()->getArgv()[2], 'uid' => local_user()])) { if (!DBA::delete('mail', ['id' => DI::args()->getArgv()[2], 'uid' => local_user()])) {
notice(DI::l10n()->t('Message was not deleted.')); DI::sysmsg()->addNotice(DI::l10n()->t('Message was not deleted.'));
} }
$conversation = DBA::selectFirst('mail', ['id'], ['convid' => $message['convid'], 'uid' => local_user()]); $conversation = DBA::selectFirst('mail', ['id'], ['convid' => $message['convid'], 'uid' => local_user()]);
@ -166,7 +166,7 @@ function message_content(App $a)
$parent = $parentmail['parent-uri']; $parent = $parentmail['parent-uri'];
if (!DBA::delete('mail', ['parent-uri' => $parent, 'uid' => local_user()])) { if (!DBA::delete('mail', ['parent-uri' => $parent, 'uid' => local_user()])) {
notice(DI::l10n()->t('Conversation was not removed.')); DI::sysmsg()->addNotice(DI::l10n()->t('Conversation was not removed.'));
} }
} }
DI::baseUrl()->redirect('message'); DI::baseUrl()->redirect('message');
@ -222,7 +222,7 @@ function message_content(App $a)
$r = get_messages(local_user(), $pager->getStart(), $pager->getItemsPerPage()); $r = get_messages(local_user(), $pager->getStart(), $pager->getItemsPerPage());
if (!DBA::isResult($r)) { if (!DBA::isResult($r)) {
notice(DI::l10n()->t('No messages.')); DI::sysmsg()->addNotice(DI::l10n()->t('No messages.'));
return $o; return $o;
} }
@ -278,7 +278,7 @@ function message_content(App $a)
} }
if (!DBA::isResult($messages)) { if (!DBA::isResult($messages)) {
notice(DI::l10n()->t('Message not available.')); DI::sysmsg()->addNotice(DI::l10n()->t('Message not available.'));
return $o; return $o;
} }

View file

@ -41,7 +41,7 @@ function notes_init(App $a)
function notes_content(App $a, bool $update = false) function notes_content(App $a, bool $update = false)
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }

View file

@ -30,7 +30,7 @@ use Friendica\Protocol\ActivityPub;
function ostatus_subscribe_content(App $a): string function ostatus_subscribe_content(App $a): string
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('ostatus_subscribe'); DI::baseUrl()->redirect('ostatus_subscribe');
// NOTREACHED // NOTREACHED
} }

View file

@ -157,14 +157,14 @@ function photos_post(App $a)
} }
if (!$can_post) { if (!$can_post) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
System::exit(); System::exit();
} }
$owner_record = User::getOwnerDataById($page_owner_uid); $owner_record = User::getOwnerDataById($page_owner_uid);
if (!$owner_record) { if (!$owner_record) {
notice(DI::l10n()->t('Contact information unavailable')); DI::sysmsg()->addNotice(DI::l10n()->t('Contact information unavailable'));
DI::logger()->info('photos_post: unable to locate contact record for page owner. uid=' . $page_owner_uid); DI::logger()->info('photos_post: unable to locate contact record for page owner. uid=' . $page_owner_uid);
System::exit(); System::exit();
} }
@ -193,7 +193,7 @@ function photos_post(App $a)
$album = hex2bin(DI::args()->getArgv()[3]); $album = hex2bin(DI::args()->getArgv()[3]);
if (!DBA::exists('photo', ['album' => $album, 'uid' => $page_owner_uid, 'photo-type' => Photo::DEFAULT])) { if (!DBA::exists('photo', ['album' => $album, 'uid' => $page_owner_uid, 'photo-type' => Photo::DEFAULT])) {
notice(DI::l10n()->t('Album not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Album not found.'));
DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album'); DI::baseUrl()->redirect('photos/' . $user['nickname'] . '/album');
return; // NOTREACHED return; // NOTREACHED
} }
@ -247,9 +247,9 @@ function photos_post(App $a)
// Update the photo albums cache // Update the photo albums cache
Photo::clearAlbumCache($page_owner_uid); Photo::clearAlbumCache($page_owner_uid);
notice(DI::l10n()->t('Album successfully deleted')); DI::sysmsg()->addNotice(DI::l10n()->t('Album successfully deleted'));
} else { } else {
notice(DI::l10n()->t('Album was empty.')); DI::sysmsg()->addNotice(DI::l10n()->t('Album was empty.'));
} }
} }
@ -281,7 +281,7 @@ function photos_post(App $a)
// Update the photo albums cache // Update the photo albums cache
Photo::clearAlbumCache($page_owner_uid); Photo::clearAlbumCache($page_owner_uid);
} else { } else {
notice(DI::l10n()->t('Failed to delete the photo.')); DI::sysmsg()->addNotice(DI::l10n()->t('Failed to delete the photo.'));
DI::baseUrl()->redirect('photos/' . DI::args()->getArgv()[1] . '/image/' . DI::args()->getArgv()[3]); DI::baseUrl()->redirect('photos/' . DI::args()->getArgv()[1] . '/image/' . DI::args()->getArgv()[3]);
} }
@ -629,21 +629,21 @@ function photos_post(App $a)
if ($error !== UPLOAD_ERR_OK) { if ($error !== UPLOAD_ERR_OK) {
switch ($error) { switch ($error) {
case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_INI_SIZE:
notice(DI::l10n()->t('Image exceeds size limit of %s', ini_get('upload_max_filesize'))); DI::sysmsg()->addNotice(DI::l10n()->t('Image exceeds size limit of %s', ini_get('upload_max_filesize')));
break; break;
case UPLOAD_ERR_FORM_SIZE: case UPLOAD_ERR_FORM_SIZE:
notice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($_REQUEST['MAX_FILE_SIZE'] ?? 0))); DI::sysmsg()->addNotice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($_REQUEST['MAX_FILE_SIZE'] ?? 0)));
break; break;
case UPLOAD_ERR_PARTIAL: case UPLOAD_ERR_PARTIAL:
notice(DI::l10n()->t('Image upload didn\'t complete, please try again')); DI::sysmsg()->addNotice(DI::l10n()->t('Image upload didn\'t complete, please try again'));
break; break;
case UPLOAD_ERR_NO_FILE: case UPLOAD_ERR_NO_FILE:
notice(DI::l10n()->t('Image file is missing')); DI::sysmsg()->addNotice(DI::l10n()->t('Image file is missing'));
break; break;
case UPLOAD_ERR_NO_TMP_DIR: case UPLOAD_ERR_NO_TMP_DIR:
case UPLOAD_ERR_CANT_WRITE: case UPLOAD_ERR_CANT_WRITE:
case UPLOAD_ERR_EXTENSION: case UPLOAD_ERR_EXTENSION:
notice(DI::l10n()->t('Server can\'t accept new file upload at this time, please contact your administrator')); DI::sysmsg()->addNotice(DI::l10n()->t('Server can\'t accept new file upload at this time, please contact your administrator'));
break; break;
} }
@unlink($src); @unlink($src);
@ -659,7 +659,7 @@ function photos_post(App $a)
$maximagesize = DI::config()->get('system', 'maximagesize'); $maximagesize = DI::config()->get('system', 'maximagesize');
if ($maximagesize && ($filesize > $maximagesize)) { if ($maximagesize && ($filesize > $maximagesize)) {
notice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize))); DI::sysmsg()->addNotice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize)));
@unlink($src); @unlink($src);
$foo = 0; $foo = 0;
Hook::callAll('photo_post_end', $foo); Hook::callAll('photo_post_end', $foo);
@ -667,7 +667,7 @@ function photos_post(App $a)
} }
if (!$filesize) { if (!$filesize) {
notice(DI::l10n()->t('Image file is empty.')); DI::sysmsg()->addNotice(DI::l10n()->t('Image file is empty.'));
@unlink($src); @unlink($src);
$foo = 0; $foo = 0;
Hook::callAll('photo_post_end', $foo); Hook::callAll('photo_post_end', $foo);
@ -682,7 +682,7 @@ function photos_post(App $a)
if (!$image->isValid()) { if (!$image->isValid()) {
Logger::notice('unable to process image'); Logger::notice('unable to process image');
notice(DI::l10n()->t('Unable to process image.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to process image.'));
@unlink($src); @unlink($src);
$foo = 0; $foo = 0;
Hook::callAll('photo_post_end',$foo); Hook::callAll('photo_post_end',$foo);
@ -708,7 +708,7 @@ function photos_post(App $a)
if (!$r) { if (!$r) {
Logger::warning('image store failed'); Logger::warning('image store failed');
notice(DI::l10n()->t('Image upload failed.')); DI::sysmsg()->addNotice(DI::l10n()->t('Image upload failed.'));
return; return;
} }
@ -795,12 +795,12 @@ function photos_content(App $a)
} }
if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) {
notice(DI::l10n()->t('Public access denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.'));
return; return;
} }
if (empty($user)) { if (empty($user)) {
notice(DI::l10n()->t('No photos selected')); DI::sysmsg()->addNotice(DI::l10n()->t('No photos selected'));
return; return;
} }
@ -869,7 +869,7 @@ function photos_content(App $a)
} }
if ($user['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) { if ($user['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) {
notice(DI::l10n()->t('Access to this item is restricted.')); DI::sysmsg()->addNotice(DI::l10n()->t('Access to this item is restricted.'));
return; return;
} }
@ -884,7 +884,7 @@ function photos_content(App $a)
// Display upload form // Display upload form
if ($datatype === 'upload') { if ($datatype === 'upload') {
if (!$can_post) { if (!$can_post) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
@ -1084,9 +1084,9 @@ function photos_content(App $a)
if (!DBA::isResult($ph)) { if (!DBA::isResult($ph)) {
if (DBA::exists('photo', ['resource-id' => $datum, 'uid' => $owner_uid])) { if (DBA::exists('photo', ['resource-id' => $datum, 'uid' => $owner_uid])) {
notice(DI::l10n()->t('Permission denied. Access to this item may be restricted.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied. Access to this item may be restricted.'));
} else { } else {
notice(DI::l10n()->t('Photo not available')); DI::sysmsg()->addNotice(DI::l10n()->t('Photo not available'));
} }
return; return;
} }

View file

@ -28,7 +28,7 @@ use Friendica\Model\Contact;
function repair_ostatus_content(App $a) { function repair_ostatus_content(App $a) {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('ostatus_repair'); DI::baseUrl()->redirect('ostatus_repair');
// NOTREACHED // NOTREACHED
} }

View file

@ -37,7 +37,7 @@ use Friendica\Protocol\Email;
function settings_init(App $a) function settings_init(App $a)
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
@ -47,7 +47,7 @@ function settings_init(App $a)
function settings_post(App $a) function settings_post(App $a)
{ {
if (!$a->isLoggedIn()) { if (!$a->isLoggedIn()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
@ -119,7 +119,7 @@ function settings_post(App $a)
$mbox = Email::connect($mb, $mail_user, $dcrpass); $mbox = Email::connect($mb, $mail_user, $dcrpass);
unset($dcrpass); unset($dcrpass);
if (!$mbox) { if (!$mbox) {
notice(DI::l10n()->t('Failed to connect with email account using the settings provided.')); DI::sysmsg()->addNotice(DI::l10n()->t('Failed to connect with email account using the settings provided.'));
} }
} }
} }
@ -148,12 +148,12 @@ function settings_content(App $a)
Nav::setSelected('settings'); Nav::setSelected('settings');
if (!local_user()) { if (!local_user()) {
//notice(DI::l10n()->t('Permission denied.')); //DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form(); return Login::form();
} }
if (!empty($_SESSION['submanage'])) { if (!empty($_SESSION['submanage'])) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return ''; return '';
} }

View file

@ -166,6 +166,6 @@ EOT;
$post = Post::selectFirst(['uri-id', 'uid'], ['id' => $post_id]); $post = Post::selectFirst(['uri-id', 'uid'], ['id' => $post_id]);
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, $post['uri-id'], $post['uid']); Worker::add(Worker::PRIORITY_HIGH, "Notifier", Delivery::POST, $post['uri-id'], $post['uid']);
System::exit(); System::exit();
} }

View file

@ -30,7 +30,7 @@ use Friendica\DI;
function uimport_post(App $a) function uimport_post(App $a)
{ {
if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$a->isSiteAdmin()) { if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$a->isSiteAdmin()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
@ -43,7 +43,7 @@ function uimport_post(App $a)
function uimport_content(App $a) function uimport_content(App $a)
{ {
if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$a->isSiteAdmin()) { if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$a->isSiteAdmin()) {
notice(DI::l10n()->t('User imports on closed servers can only be done by an administrator.')); DI::sysmsg()->addNotice(DI::l10n()->t('User imports on closed servers can only be done by an administrator.'));
return; return;
} }
@ -52,7 +52,7 @@ function uimport_content(App $a)
$total = DBA::count('user', ["`register_date` > UTC_TIMESTAMP - INTERVAL 1 DAY"]); $total = DBA::count('user', ["`register_date` > UTC_TIMESTAMP - INTERVAL 1 DAY"]);
if ($total >= $max_dailies) { if ($total >= $max_dailies) {
Logger::notice('max daily registrations exceeded.'); Logger::notice('max daily registrations exceeded.');
notice(DI::l10n()->t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.')); DI::sysmsg()->addNotice(DI::l10n()->t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.'));
return; return;
} }
} }

View file

@ -32,7 +32,7 @@ use Friendica\Util\Strings;
function unfollow_post(App $a) function unfollow_post(App $a)
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('login'); DI::baseUrl()->redirect('login');
// NOTREACHED // NOTREACHED
} }
@ -47,7 +47,7 @@ function unfollow_content(App $a)
$base_return_path = 'contact'; $base_return_path = 'contact';
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('login'); DI::baseUrl()->redirect('login');
// NOTREACHED // NOTREACHED
} }
@ -62,13 +62,13 @@ function unfollow_content(App $a)
$contact = DBA::selectFirst('contact', ['url', 'id', 'uid', 'network', 'addr', 'name'], $condition); $contact = DBA::selectFirst('contact', ['url', 'id', 'uid', 'network', 'addr', 'name'], $condition);
if (!DBA::isResult($contact)) { if (!DBA::isResult($contact)) {
notice(DI::l10n()->t("You aren't following this contact.")); DI::sysmsg()->addNotice(DI::l10n()->t("You aren't following this contact."));
DI::baseUrl()->redirect($base_return_path); DI::baseUrl()->redirect($base_return_path);
// NOTREACHED // NOTREACHED
} }
if (!Protocol::supportsFollow($contact['network'])) { if (!Protocol::supportsFollow($contact['network'])) {
notice(DI::l10n()->t('Unfollowing is currently not supported by your network.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unfollowing is currently not supported by your network.'));
DI::baseUrl()->redirect($base_return_path . '/' . $contact['id']); DI::baseUrl()->redirect($base_return_path . '/' . $contact['id']);
// NOTREACHED // NOTREACHED
} }
@ -79,7 +79,7 @@ function unfollow_content(App $a)
$self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]); $self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]);
if (!DBA::isResult($self)) { if (!DBA::isResult($self)) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect($base_return_path); DI::baseUrl()->redirect($base_return_path);
// NOTREACHED // NOTREACHED
} }
@ -131,7 +131,7 @@ function unfollow_process(string $url)
$contact = DBA::selectFirst('contact', [], $condition); $contact = DBA::selectFirst('contact', [], $condition);
if (!DBA::isResult($contact)) { if (!DBA::isResult($contact)) {
notice(DI::l10n()->t("You aren't following this contact.")); DI::sysmsg()->addNotice(DI::l10n()->t("You aren't following this contact."));
DI::baseUrl()->redirect($base_return_path); DI::baseUrl()->redirect($base_return_path);
// NOTREACHED // NOTREACHED
} }
@ -146,6 +146,6 @@ function unfollow_process(string $url)
$notice_message = DI::l10n()->t('Unable to unfollow this contact, please contact your administrator'); $notice_message = DI::l10n()->t('Unable to unfollow this contact, please contact your administrator');
} }
notice($notice_message); DI::sysmsg()->addNotice($notice_message);
DI::baseUrl()->redirect($return_path); DI::baseUrl()->redirect($return_path);
} }

View file

@ -66,7 +66,7 @@ function wall_attach_post(App $a) {
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => DI::l10n()->t('Permission denied.')]); System::jsonExit(['error' => DI::l10n()->t('Permission denied.')]);
} }
notice(DI::l10n()->t('Permission denied.') . EOL ); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
System::exit(); System::exit();
} }
@ -90,12 +90,12 @@ function wall_attach_post(App $a) {
*/ */
if ($filesize <= 0) { if ($filesize <= 0) {
$msg = DI::l10n()->t('Sorry, maybe your upload is bigger than the PHP configuration allows') . EOL .(DI::l10n()->t('Or - did you try to upload an empty file?')); $msg = DI::l10n()->t('Sorry, maybe your upload is bigger than the PHP configuration allows') . '<br />' . (DI::l10n()->t('Or - did you try to upload an empty file?'));
@unlink($src); @unlink($src);
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => $msg]); System::jsonExit(['error' => $msg]);
} else { } else {
notice($msg); DI::sysmsg()->addNotice($msg);
} }
System::exit(); System::exit();
} }
@ -106,7 +106,7 @@ function wall_attach_post(App $a) {
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => $msg]); System::jsonExit(['error' => $msg]);
} else { } else {
echo $msg . EOL; echo $msg . '<br />';
} }
System::exit(); System::exit();
} }
@ -120,7 +120,7 @@ function wall_attach_post(App $a) {
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => $msg]); System::jsonExit(['error' => $msg]);
} else { } else {
echo $msg . EOL; echo $msg . '<br />';
} }
System::exit(); System::exit();
} }

View file

@ -88,7 +88,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => DI::l10n()->t('Permission denied.')]); System::jsonExit(['error' => DI::l10n()->t('Permission denied.')]);
} }
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
System::exit(); System::exit();
} }
@ -147,7 +147,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => DI::l10n()->t('Invalid request.')]); System::jsonExit(['error' => DI::l10n()->t('Invalid request.')]);
} }
notice(DI::l10n()->t('Invalid request.')); DI::sysmsg()->addNotice(DI::l10n()->t('Invalid request.'));
System::exit(); System::exit();
} }
@ -165,7 +165,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => $msg]); System::jsonExit(['error' => $msg]);
} else { } else {
echo $msg. EOL; echo $msg . '<br />';
} }
System::exit(); System::exit();
} }
@ -203,7 +203,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => $msg]); System::jsonExit(['error' => $msg]);
} else { } else {
echo $msg. EOL; echo $msg . '<br />';
} }
System::exit(); System::exit();
} }
@ -227,7 +227,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) { if ($r_json) {
System::jsonExit(['error' => $msg]); System::jsonExit(['error' => $msg]);
} else { } else {
echo $msg. EOL; echo $msg . '<br />';
} }
System::exit(); System::exit();
} }

View file

@ -34,7 +34,7 @@ function wallmessage_post(App $a) {
$replyto = Profile::getMyURL(); $replyto = Profile::getMyURL();
if (!$replyto) { if (!$replyto) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
@ -53,13 +53,13 @@ function wallmessage_post(App $a) {
} }
if (!$user['unkmail']) { if (!$user['unkmail']) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
$total = DBA::count('mail', ["`uid` = ? AND `created` > ? AND `unknown`", $user['uid'], DateTimeFormat::utc('now - 1 day')]); $total = DBA::count('mail', ["`uid` = ? AND `created` > ? AND `unknown`", $user['uid'], DateTimeFormat::utc('now - 1 day')]);
if ($total > $user['cntunkmail']) { if ($total > $user['cntunkmail']) {
notice(DI::l10n()->t('Number of daily wall messages for %s exceeded. Message failed.', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('Number of daily wall messages for %s exceeded. Message failed.', $user['username']));
return; return;
} }
@ -67,16 +67,16 @@ function wallmessage_post(App $a) {
switch ($ret) { switch ($ret) {
case -1: case -1:
notice(DI::l10n()->t('No recipient selected.')); DI::sysmsg()->addNotice(DI::l10n()->t('No recipient selected.'));
break; break;
case -2: case -2:
notice(DI::l10n()->t('Unable to check your home location.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to check your home location.'));
break; break;
case -3: case -3:
notice(DI::l10n()->t('Message could not be sent.')); DI::sysmsg()->addNotice(DI::l10n()->t('Message could not be sent.'));
break; break;
case -4: case -4:
notice(DI::l10n()->t('Message collection failure.')); DI::sysmsg()->addNotice(DI::l10n()->t('Message collection failure.'));
break; break;
} }
@ -87,33 +87,33 @@ function wallmessage_post(App $a) {
function wallmessage_content(App $a) { function wallmessage_content(App $a) {
if (!Profile::getMyURL()) { if (!Profile::getMyURL()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
$recipient = ((DI::args()->getArgc() > 1) ? DI::args()->getArgv()[1] : ''); $recipient = ((DI::args()->getArgc() > 1) ? DI::args()->getArgv()[1] : '');
if (!$recipient) { if (!$recipient) {
notice(DI::l10n()->t('No recipient.')); DI::sysmsg()->addNotice(DI::l10n()->t('No recipient.'));
return; return;
} }
$user = User::getByNickname($recipient); $user = User::getByNickname($recipient);
if (empty($user)) { if (empty($user)) {
notice(DI::l10n()->t('No recipient.')); DI::sysmsg()->addNotice(DI::l10n()->t('No recipient.'));
Logger::notice('wallmessage: no recipient'); Logger::notice('wallmessage: no recipient');
return; return;
} }
if (!$user['unkmail']) { if (!$user['unkmail']) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
$total = DBA::count('mail', ["`uid` = ? AND `created` > ? AND `unknown`", $user['uid'], DateTimeFormat::utc('now - 1 day')]); $total = DBA::count('mail', ["`uid` = ? AND `created` > ? AND `unknown`", $user['uid'], DateTimeFormat::utc('now - 1 day')]);
if ($total > $user['cntunkmail']) { if ($total > $user['cntunkmail']) {
notice(DI::l10n()->t('Number of daily wall messages for %s exceeded. Message failed.', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('Number of daily wall messages for %s exceeded. Message failed.', $user['username']));
return; return;
} }

View file

@ -29,7 +29,7 @@ return [
// **************************************************************** // ****************************************************************
'config' => [ 'config' => [
'hostname' => 'friendica.local', 'hostname' => '192.168.56.10',
'admin_email' => 'admin@friendica.local', 'admin_email' => 'admin@friendica.local',
'sitename' => 'Friendica Social Network', 'sitename' => 'Friendica Social Network',
'register_policy' => \Friendica\Module\Register::OPEN, 'register_policy' => \Friendica\Module\Register::OPEN,

View file

@ -58,6 +58,10 @@ use Psr\Log\LoggerInterface;
*/ */
class App class App
{ {
const PLATFORM = 'Friendica';
const CODENAME = 'Giant Rhubarb';
const VERSION = '2022.12-dev';
// Allow themes to control internal parameters // Allow themes to control internal parameters
// by changing App values in theme.php // by changing App values in theme.php
private $theme_info = [ private $theme_info = [
@ -347,6 +351,11 @@ class App
{ {
set_time_limit(0); set_time_limit(0);
// Normally this constant is defined - but not if "pcntl" isn't installed
if (!defined('SIGTERM')) {
define('SIGTERM', 15);
}
// Ensure that all "strtotime" operations do run timezone independent // Ensure that all "strtotime" operations do run timezone independent
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');

View file

@ -202,7 +202,7 @@ class Page implements ArrayAccess
*/ */
public function registerStylesheet(string $path, string $media = 'screen') public function registerStylesheet(string $path, string $media = 'screen')
{ {
$path = Network::appendQueryParam($path, ['v' => FRIENDICA_VERSION]); $path = Network::appendQueryParam($path, ['v' => App::VERSION]);
if (mb_strpos($path, $this->basePath . DIRECTORY_SEPARATOR) === 0) { if (mb_strpos($path, $this->basePath . DIRECTORY_SEPARATOR) === 0) {
$path = mb_substr($path, mb_strlen($this->basePath . DIRECTORY_SEPARATOR)); $path = mb_substr($path, mb_strlen($this->basePath . DIRECTORY_SEPARATOR));
@ -277,7 +277,7 @@ class Page implements ArrayAccess
*/ */
$this->page['htmlhead'] = Renderer::replaceMacros($tpl, [ $this->page['htmlhead'] = Renderer::replaceMacros($tpl, [
'$local_user' => local_user(), '$local_user' => local_user(),
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION, '$generator' => 'Friendica' . ' ' . App::VERSION,
'$delitem' => $l10n->t('Delete this item?'), '$delitem' => $l10n->t('Delete this item?'),
'$blockAuthor' => $l10n->t('Block this author? They won\'t be able to follow you nor see your public posts, and you won\'t be able to see their posts and their notifications.'), '$blockAuthor' => $l10n->t('Block this author? They won\'t be able to follow you nor see your public posts, and you won\'t be able to see their posts and their notifications.'),
'$update_interval' => $interval, '$update_interval' => $interval,
@ -395,7 +395,7 @@ class Page implements ArrayAccess
*/ */
public function registerFooterScript($path) public function registerFooterScript($path)
{ {
$path = Network::appendQueryParam($path, ['v' => FRIENDICA_VERSION]); $path = Network::appendQueryParam($path, ['v' => App::VERSION]);
$url = str_replace($this->basePath . DIRECTORY_SEPARATOR, '', $path); $url = str_replace($this->basePath . DIRECTORY_SEPARATOR, '', $path);
@ -543,7 +543,7 @@ class Page implements ArrayAccess
$page = $this->page; $page = $this->page;
header("X-Friendica-Version: " . FRIENDICA_VERSION); header("X-Friendica-Version: " . App::VERSION);
header("Content-type: text/html; charset=utf-8"); header("Content-type: text/html; charset=utf-8");
if ($config->get('system', 'hsts') && ($baseURL->getSSLPolicy() == BaseURL::SSL_POLICY_FULL)) { if ($config->get('system', 'hsts') && ($baseURL->getSSLPolicy() == BaseURL::SSL_POLICY_FULL)) {

View file

@ -389,7 +389,7 @@ abstract class BaseModule implements ICanHandleRequests
public static function getFormSecurityStandardErrorMessage(): string public static function getFormSecurityStandardErrorMessage(): string
{ {
return DI::l10n()->t("The form security token was not correct. This probably happened because the form has been opened for too long \x28>3 hours\x29 before submitting it.") . EOL; return DI::l10n()->t("The form security token was not correct. This probably happened because the form has been opened for too long \x28>3 hours\x29 before submitting it.");
} }
public static function checkFormSecurityTokenRedirectOnError(string $err_redirect, string $typename = '', string $formname = 'form_security_token') public static function checkFormSecurityTokenRedirectOnError(string $err_redirect, string $typename = '', string $formname = 'form_security_token')
@ -397,7 +397,7 @@ abstract class BaseModule implements ICanHandleRequests
if (!self::checkFormSecurityToken($typename, $formname)) { if (!self::checkFormSecurityToken($typename, $formname)) {
Logger::notice('checkFormSecurityToken failed: user ' . DI::app()->getLoggedInUserNickname() . ' - form element ' . $typename); Logger::notice('checkFormSecurityToken failed: user ' . DI::app()->getLoggedInUserNickname() . ' - form element ' . $typename);
Logger::debug('checkFormSecurityToken failed', ['request' => $_REQUEST]); Logger::debug('checkFormSecurityToken failed', ['request' => $_REQUEST]);
notice(self::getFormSecurityStandardErrorMessage()); DI::sysmsg()->addNotice(self::getFormSecurityStandardErrorMessage());
DI::baseUrl()->redirect($err_redirect); DI::baseUrl()->redirect($err_redirect);
} }
} }

View file

@ -197,7 +197,7 @@ HELP;
$this->out('Schedule relocation messages to remote Friendica and Diaspora hosts'); $this->out('Schedule relocation messages to remote Friendica and Diaspora hosts');
$users = $this->database->selectToArray('user', ['uid'], ['account_removed' => false, 'account_expired' => false]); $users = $this->database->selectToArray('user', ['uid'], ['account_removed' => false, 'account_expired' => false]);
foreach ($users as $user) { foreach ($users as $user) {
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, $user['uid']); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, $user['uid']);
} }
return 0; return 0;

View file

@ -261,7 +261,7 @@ class Conversation
break; break;
} }
$expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . EOL . '</p>'; $expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . '</p>';
} }
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [ $o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
@ -328,7 +328,7 @@ class Conversation
$created_at = ''; $created_at = '';
} }
$tpl = Renderer::getMarkupTemplate("jot.tpl"); $tpl = Renderer::getMarkupTemplate('jot.tpl');
$o .= Renderer::replaceMacros($tpl, [ $o .= Renderer::replaceMacros($tpl, [
'$new_post' => $this->l10n->t('New Post'), '$new_post' => $this->l10n->t('New Post'),
@ -394,6 +394,7 @@ class Conversation
'$browser' => $this->l10n->t('Browser'), '$browser' => $this->l10n->t('Browser'),
'$compose_link_title' => $this->l10n->t('Open Compose page'), '$compose_link_title' => $this->l10n->t('Open Compose page'),
'$always_open_compose' => $this->pConfig->get(local_user(), 'frio', 'always_open_compose', false),
]); ]);

View file

@ -574,9 +574,10 @@ class Item
* *
* @param string $url * @param string $url
* @param integer $uid * @param integer $uid
* @param bool $add_media
* @return string * @return string
*/ */
public function createSharedPostByUrl(string $url, int $uid = 0): string public function createSharedPostByUrl(string $url, int $uid = 0, bool $add_media = false): string
{ {
if (!empty($uid)) { if (!empty($uid)) {
$id = ModelItem::searchByLink($url, $uid); $id = ModelItem::searchByLink($url, $uid);
@ -599,7 +600,7 @@ class Item
return ''; return '';
} }
return $this->createSharedBlockByArray($shared_item); return $this->createSharedBlockByArray($shared_item, $add_media);
} }
/** /**
@ -607,9 +608,10 @@ class Item
* *
* @param integer $UriId * @param integer $UriId
* @param integer $uid * @param integer $uid
* @param bool $add_media
* @return string * @return string
*/ */
public function createSharedPostByUriId(int $UriId, int $uid = 0): string public function createSharedPostByUriId(int $UriId, int $uid = 0, bool $add_media = false): string
{ {
$fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network']; $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network'];
$shared_item = Post::selectFirst($fields, ['uri-id' => $UriId, 'uid' => [$uid, 0], 'private' => [ModelItem::PUBLIC, ModelItem::UNLISTED]]); $shared_item = Post::selectFirst($fields, ['uri-id' => $UriId, 'uid' => [$uid, 0], 'private' => [ModelItem::PUBLIC, ModelItem::UNLISTED]]);
@ -618,7 +620,7 @@ class Item
return ''; return '';
} }
return $this->createSharedBlockByArray($shared_item); return $this->createSharedBlockByArray($shared_item, $add_media);
} }
/** /**
@ -626,9 +628,10 @@ class Item
* *
* @param string $guid * @param string $guid
* @param integer $uid * @param integer $uid
* @param bool $add_media
* @return string * @return string
*/ */
public function createSharedPostByGuid(string $guid, int $uid = 0, string $host = ''): string public function createSharedPostByGuid(string $guid, int $uid = 0, string $host = '', bool $add_media = false): string
{ {
$fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network']; $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network'];
$shared_item = Post::selectFirst($fields, ['guid' => $guid, 'uid' => [$uid, 0], 'private' => [ModelItem::PUBLIC, ModelItem::UNLISTED]]); $shared_item = Post::selectFirst($fields, ['guid' => $guid, 'uid' => [$uid, 0], 'private' => [ModelItem::PUBLIC, ModelItem::UNLISTED]]);
@ -645,16 +648,17 @@ class Item
return ''; return '';
} }
return $this->createSharedBlockByArray($shared_item); return $this->createSharedBlockByArray($shared_item, $add_media);
} }
/** /**
* Add a share block for the given item array * Add a share block for the given item array
* *
* @param array $item * @param array $item
* @param bool $add_media
* @return string * @return string
*/ */
public function createSharedBlockByArray(array $item): string public function createSharedBlockByArray(array $item, bool $add_media = false): string
{ {
if ($item['network'] == Protocol::FEED) { if ($item['network'] == Protocol::FEED) {
return PageInfo::getFooterFromUrl($item['plink']); return PageInfo::getFooterFromUrl($item['plink']);
@ -662,6 +666,8 @@ class Item
$item['guid'] = ''; $item['guid'] = '';
$item['uri'] = ''; $item['uri'] = '';
$item['body'] = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']); $item['body'] = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']);
} elseif ($add_media) {
$item['body'] = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']);
} }
$shared_content = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['plink'], $item['created'], $item['guid'], $item['uri']); $shared_content = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['plink'], $item['created'], $item['guid'], $item['uri']);
@ -674,7 +680,7 @@ class Item
// If it is a reshared post then reformat it to avoid display problems with two share elements // If it is a reshared post then reformat it to avoid display problems with two share elements
if (Diaspora::isReshare($item['body'], false)) { if (Diaspora::isReshare($item['body'], false)) {
if (!empty($shared['guid']) && ($encaspulated_share = self::createSharedPostByGuid($shared['guid']))) { if (!empty($shared['guid']) && ($encaspulated_share = self::createSharedPostByGuid($shared['guid'], 0, '', $add_media))) {
$item['body'] = preg_replace("/\[share.*?\](.*)\[\/share\]/ism", $encaspulated_share, $item['body']); $item['body'] = preg_replace("/\[share.*?\](.*)\[\/share\]/ism", $encaspulated_share, $item['body']);
} }

View file

@ -30,6 +30,7 @@ use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\Conversation\Community;
class Nav class Nav
{ {
@ -251,8 +252,8 @@ class Nav
} }
} }
if ((local_user() || DI::config()->get('system', 'community_page_style') != CP_NO_COMMUNITY_PAGE) && if ((local_user() || DI::config()->get('system', 'community_page_style') != Community::DISABLED_VISITOR) &&
!(DI::config()->get('system', 'community_page_style') == CP_NO_INTERNAL_COMMUNITY)) { !(DI::config()->get('system', 'community_page_style') == Community::DISABLED)) {
$nav['community'] = ['community', DI::l10n()->t('Community'), '', DI::l10n()->t('Conversations on this and other servers')]; $nav['community'] = ['community', DI::l10n()->t('Community'), '', DI::l10n()->t('Conversations on this and other servers')];
} }

View file

@ -1069,6 +1069,38 @@ class BBCode
return $attributes; return $attributes;
} }
/**
* Replace the share block with a link
*
* @param string $body
* @return string
*/
public static function replaceSharedData(string $body): string
{
return BBCode::convertShare(
$body,
function (array $attributes) {
return '♲ ' . $attributes['link'];
}
);
}
/**
* Remove the share block
*
* @param string $body
* @return string
*/
public static function removeSharedData(string $body): string
{
return BBCode::convertShare(
$body,
function (array $attributes) {
return '';
}
);
}
/** /**
* This function converts a [share] block to text according to a provided callback function whose signature is: * This function converts a [share] block to text according to a provided callback function whose signature is:
* *
@ -1118,7 +1150,7 @@ class BBCode
); );
DI::profiler()->stopRecording(); DI::profiler()->stopRecording();
return $return; return trim($return);
} }
/** /**

View file

@ -23,6 +23,7 @@ namespace Friendica\Core;
use Dice\Dice; use Dice\Dice;
use Friendica; use Friendica;
use Friendica\App;
/** /**
* Description of Console * Description of Console
@ -133,7 +134,7 @@ HELP;
$command = null; $command = null;
if ($this->getOption('version')) { if ($this->getOption('version')) {
$this->out('Friendica Console version ' . FRIENDICA_VERSION); $this->out('Friendica Console version ' . App::VERSION);
return 0; return 0;
} elseif ((count($this->options) === 0 || $this->getOption($this->customHelpOptions) === true || $this->getOption($this->customHelpOptions) === 1) && count($this->args) === 0 } elseif ((count($this->options) === 0 || $this->getOption($this->customHelpOptions) === true || $this->getOption($this->customHelpOptions) === 1) && count($this->args) === 0

View file

@ -197,7 +197,7 @@ class Installer
$result = DBStructure::install(); $result = DBStructure::install();
if ($result) { if ($result) {
$txt = DI::l10n()->t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL; $txt = DI::l10n()->t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . '<br />';
$txt .= DI::l10n()->t('Please see the file "doc/INSTALL.md".'); $txt .= DI::l10n()->t('Please see the file "doc/INSTALL.md".');
$this->addCheck($txt, false, true, htmlentities($result, ENT_COMPAT, 'UTF-8')); $this->addCheck($txt, false, true, htmlentities($result, ENT_COMPAT, 'UTF-8'));
@ -259,9 +259,9 @@ class Installer
$help = ""; $help = "";
if (!$passed) { if (!$passed) {
$help .= DI::l10n()->t('Could not find a command line version of PHP in the web server PATH.') . EOL; $help .= DI::l10n()->t('Could not find a command line version of PHP in the web server PATH.') . '<br />';
$help .= DI::l10n()->t("If you don't have a command line version of PHP installed on your server, you will not be able to run the background processing. See <a href='https://github.com/friendica/friendica/blob/stable/doc/Install.md#set-up-the-worker'>'Setup the worker'</a>") . EOL; $help .= DI::l10n()->t("If you don't have a command line version of PHP installed on your server, you will not be able to run the background processing. See <a href='https://github.com/friendica/friendica/blob/stable/doc/Install.md#set-up-the-worker'>'Setup the worker'</a>") . '<br />';
$help .= EOL . EOL; $help .= '<br /><br />';
$tpl = Renderer::getMarkupTemplate('field_input.tpl'); $tpl = Renderer::getMarkupTemplate('field_input.tpl');
/// @todo Separate backend Installer class and presentation layer/view /// @todo Separate backend Installer class and presentation layer/view
$help .= Renderer::replaceMacros($tpl, [ $help .= Renderer::replaceMacros($tpl, [
@ -279,7 +279,7 @@ class Installer
[$result] = explode("\n", $result); [$result] = explode("\n", $result);
$help = ""; $help = "";
if (!$passed2) { if (!$passed2) {
$help .= DI::l10n()->t("PHP executable is not the php cli binary \x28could be cgi-fgci version\x29") . EOL; $help .= DI::l10n()->t("PHP executable is not the php cli binary \x28could be cgi-fgci version\x29") . '<br />';
$help .= DI::l10n()->t('Found PHP version: ') . "<tt>$result</tt>"; $help .= DI::l10n()->t('Found PHP version: ') . "<tt>$result</tt>";
} }
$this->addCheck(DI::l10n()->t('PHP cli binary'), $passed2, true, $help); $this->addCheck(DI::l10n()->t('PHP cli binary'), $passed2, true, $help);
@ -295,7 +295,7 @@ class Installer
$passed3 = $result == $str; $passed3 = $result == $str;
$help = ""; $help = "";
if (!$passed3) { if (!$passed3) {
$help .= DI::l10n()->t('The command line version of PHP on your system does not have "register_argc_argv" enabled.') . EOL; $help .= DI::l10n()->t('The command line version of PHP on your system does not have "register_argc_argv" enabled.') . '<br />';
$help .= DI::l10n()->t('This is required for message delivery to work.'); $help .= DI::l10n()->t('This is required for message delivery to work.');
} else { } else {
$this->phppath = $phppath; $this->phppath = $phppath;
@ -333,7 +333,7 @@ class Installer
// Get private key // Get private key
if (!$res) { if (!$res) {
$help .= DI::l10n()->t('Error: the "openssl_pkey_new" function on this system is not able to generate encryption keys') . EOL; $help .= DI::l10n()->t('Error: the "openssl_pkey_new" function on this system is not able to generate encryption keys') . '<br />';
$help .= DI::l10n()->t('If running under Windows, please see "http://www.php.net/manual/en/openssl.installation.php".'); $help .= DI::l10n()->t('If running under Windows, please see "http://www.php.net/manual/en/openssl.installation.php".');
$status = false; $status = false;
} }
@ -511,10 +511,10 @@ class Installer
(!file_exists('config/local.config.php') && !is_writable('.'))) { (!file_exists('config/local.config.php') && !is_writable('.'))) {
$status = false; $status = false;
$help = DI::l10n()->t('The web installer needs to be able to create a file called "local.config.php" in the "config" folder of your web server and it is unable to do so.') . EOL; $help = DI::l10n()->t('The web installer needs to be able to create a file called "local.config.php" in the "config" folder of your web server and it is unable to do so.') . '<br />';
$help .= DI::l10n()->t('This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.') . EOL; $help .= DI::l10n()->t('This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.') . '<br />';
$help .= DI::l10n()->t('At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica "config" folder.') . EOL; $help .= DI::l10n()->t('At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica "config" folder.') . '<br />';
$help .= DI::l10n()->t('You can alternatively skip this procedure and perform a manual installation. Please see the file "doc/INSTALL.md" for instructions.') . EOL; $help .= DI::l10n()->t('You can alternatively skip this procedure and perform a manual installation. Please see the file "doc/INSTALL.md" for instructions.') . '<br />';
} }
$this->addCheck(DI::l10n()->t('config/local.config.php is writable'), $status, false, $help); $this->addCheck(DI::l10n()->t('config/local.config.php is writable'), $status, false, $help);
@ -537,10 +537,10 @@ class Installer
if (!is_writable('view/smarty3')) { if (!is_writable('view/smarty3')) {
$status = false; $status = false;
$help = DI::l10n()->t('Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.') . EOL; $help = DI::l10n()->t('Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.') . '<br />';
$help .= DI::l10n()->t('In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder.') . EOL; $help .= DI::l10n()->t('In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder.') . '<br />';
$help .= DI::l10n()->t("Please ensure that the user that your web server runs as \x28e.g. www-data\x29 has write access to this folder.") . EOL; $help .= DI::l10n()->t("Please ensure that the user that your web server runs as \x28e.g. www-data\x29 has write access to this folder.") . '<br />';
$help .= DI::l10n()->t("Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files \x28.tpl\x29 that it contains.") . EOL; $help .= DI::l10n()->t("Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files \x28.tpl\x29 that it contains.") . '<br />';
} }
$this->addCheck(DI::l10n()->t('view/smarty3 is writable'), $status, true, $help); $this->addCheck(DI::l10n()->t('view/smarty3 is writable'), $status, true, $help);
@ -571,7 +571,7 @@ class Installer
if ($fetchResult->getReturnCode() != 204) { if ($fetchResult->getReturnCode() != 204) {
$status = false; $status = false;
$help = DI::l10n()->t('Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-dist to .htaccess.') . EOL; $help = DI::l10n()->t('Url rewrite in .htaccess seems not working. Make sure you copied .htaccess-dist to .htaccess.') . '<br />';
$help .= DI::l10n()->t('In some circumstances (like running inside containers), you can skip this error.'); $help .= DI::l10n()->t('In some circumstances (like running inside containers), you can skip this error.');
$error_msg = []; $error_msg = [];
$error_msg['head'] = DI::l10n()->t('Error message from Curl when fetching'); $error_msg['head'] = DI::l10n()->t('Error message from Curl when fetching');

View file

@ -22,19 +22,16 @@
namespace Friendica\Core\Logger\Factory; namespace Friendica\Core\Logger\Factory;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\Logger\Exception\LoggerException;
use Friendica\Core; use Friendica\Core;
use Friendica\Core\Logger\Exception\LogLevelException; use Friendica\Core\Logger\Exception\LogLevelException;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Network\HTTPException\InternalServerErrorException;
use Friendica\Util\FileSystem; use Friendica\Util\FileSystem;
use Friendica\Core\Logger\Util\Introspection; use Friendica\Core\Logger\Util\Introspection;
use Friendica\Core\Logger\Type\Monolog\DevelopHandler;
use Friendica\Core\Logger\Type\Monolog\IntrospectionProcessor;
use Friendica\Core\Logger\Type\ProfilerLogger; use Friendica\Core\Logger\Type\ProfilerLogger;
use Friendica\Core\Logger\Type\StreamLogger; use Friendica\Core\Logger\Type\StreamLogger;
use Friendica\Core\Logger\Type\SyslogLogger; use Friendica\Core\Logger\Type\SyslogLogger;
use Friendica\Util\Profiler; use Friendica\Util\Profiler;
use Monolog;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel; use Psr\Log\LogLevel;
use Psr\Log\NullLogger; use Psr\Log\NullLogger;
@ -60,9 +57,15 @@ class Logger
/** @var string The log-channel (app, worker, ...) */ /** @var string The log-channel (app, worker, ...) */
private $channel; private $channel;
public function __construct(string $channel) public function __construct(string $channel, bool $includeAddon = true)
{ {
$this->channel = $channel; $this->channel = $channel;
/// @fixme clean solution = Making Addon & Hook dynamic and load them inside the constructor, so there's no custom load logic necessary anymore
if ($includeAddon) {
Core\Addon::loadAddons();
Core\Hook::loadHooks();
}
} }
/** /**
@ -88,35 +91,9 @@ class Logger
$minLevel = $minLevel ?? $config->get('system', 'loglevel'); $minLevel = $minLevel ?? $config->get('system', 'loglevel');
$loglevel = self::mapLegacyConfigDebugLevel((string)$minLevel); $loglevel = self::mapLegacyConfigDebugLevel((string)$minLevel);
switch ($config->get('system', 'logger_config', 'stream')) { $name = $config->get('system', 'logger_config', 'stream');
case 'monolog':
$loggerTimeZone = new \DateTimeZone('UTC');
Monolog\Logger::setTimezone($loggerTimeZone);
$logger = new Monolog\Logger($this->channel);
$logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
$logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushProcessor(new IntrospectionProcessor($introspection, LogLevel::DEBUG));
$stream = $config->get('system', 'logfile');
// just add a stream in case it's either writable or not file
if (!is_file($stream) || is_writable($stream)) {
try {
static::addStreamHandler($logger, $stream, $loglevel);
} catch (\Throwable $e) {
// No Logger ..
try {
$logger = new SyslogLogger($this->channel, $introspection, $loglevel);
} catch (\Throwable $e) {
// No logger ...
$logger = new NullLogger();
}
}
}
break;
switch ($name) {
case 'syslog': case 'syslog':
try { try {
$logger = new SyslogLogger($this->channel, $introspection, $loglevel, $config->get('system', 'syslog_flags', SyslogLogger::DEFAULT_FLAGS), $config->get('system', 'syslog_facility', SyslogLogger::DEFAULT_FACILITY)); $logger = new SyslogLogger($this->channel, $introspection, $loglevel, $config->get('system', 'syslog_flags', SyslogLogger::DEFAULT_FLAGS), $config->get('system', 'syslog_facility', SyslogLogger::DEFAULT_FACILITY));
@ -132,6 +109,24 @@ class Logger
case 'stream': case 'stream':
default: default:
$data = [
'name' => $name,
'channel' => $this->channel,
'introspection' => $introspection,
'loglevel' => $loglevel,
'logger' => null,
];
try {
Core\Hook::callAll('logger_instance', $data);
} catch (InternalServerErrorException $exception) {
$data['logger'] = null;
}
if (($data['logger'] ?? null) instanceof LoggerInterface) {
$logger = $data['logger'];
}
if (empty($logger)) {
$stream = $config->get('system', 'logfile'); $stream = $config->get('system', 'logfile');
// just add a stream in case it's either writable or not file // just add a stream in case it's either writable or not file
if (!is_file($stream) || is_writable($stream)) { if (!is_file($stream) || is_writable($stream)) {
@ -157,6 +152,7 @@ class Logger
$logger = new NullLogger(); $logger = new NullLogger();
} }
} }
}
break; break;
} }
@ -197,27 +193,11 @@ class Logger
return new NullLogger(); return new NullLogger();
} }
$loggerTimeZone = new \DateTimeZone('UTC');
Monolog\Logger::setTimezone($loggerTimeZone);
$introspection = new Introspection(self::$ignoreClassList); $introspection = new Introspection(self::$ignoreClassList);
switch ($config->get('system', 'logger_config', 'stream')) { $name = $config->get('system', 'logger_config', 'stream');
case 'monolog': switch ($name) {
$loggerTimeZone = new \DateTimeZone('UTC');
Monolog\Logger::setTimezone($loggerTimeZone);
$logger = new Monolog\Logger(self::DEV_CHANNEL);
$logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor());
$logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor());
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushProcessor(new IntrospectionProcessor($introspection, LogLevel::DEBUG));
$logger->pushHandler(new DevelopHandler($developerIp));
static::addStreamHandler($logger, $stream, LogLevel::DEBUG);
break;
case 'syslog': case 'syslog':
$logger = new SyslogLogger(self::DEV_CHANNEL, $introspection, LogLevel::DEBUG); $logger = new SyslogLogger(self::DEV_CHANNEL, $introspection, LogLevel::DEBUG);
@ -225,6 +205,23 @@ class Logger
case 'stream': case 'stream':
default: default:
$data = [
'name' => $name,
'channel' => self::DEV_CHANNEL,
'introspection' => $introspection,
'loglevel' => LogLevel::DEBUG,
'logger' => null,
];
try {
Core\Hook::callAll('logger_instance', $data);
} catch (InternalServerErrorException $exception) {
$data['logger'] = null;
}
if (($data['logger'] ?? null) instanceof LoggerInterface) {
return $data['logger'];
}
$logger = new StreamLogger(self::DEV_CHANNEL, $stream, $introspection, $fileSystem, LogLevel::DEBUG); $logger = new StreamLogger(self::DEV_CHANNEL, $stream, $introspection, $fileSystem, LogLevel::DEBUG);
break; break;
} }
@ -273,38 +270,4 @@ class Logger
return $level; return $level;
} }
} }
/**
* Adding a handler to a given logger instance
*
* @param LoggerInterface $logger The logger instance
* @param mixed $stream The stream which handles the logger output
* @param string $level The level, for which this handler at least should handle logging
*
* @return void
*
* @throws LoggerException
*/
public static function addStreamHandler(LoggerInterface $logger, $stream, string $level = LogLevel::NOTICE)
{
if ($logger instanceof Monolog\Logger) {
$loglevel = Monolog\Logger::toMonologLevel($level);
// fallback to notice if an invalid loglevel is set
if (!is_int($loglevel)) {
$loglevel = LogLevel::NOTICE;
}
try {
$fileHandler = new Monolog\Handler\StreamHandler($stream, $loglevel);
$formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n");
$fileHandler->setFormatter($formatter);
$logger->pushHandler($fileHandler);
} catch (\Exception $exception) {
throw new LoggerException('Cannot create Monolog Logger.', $exception);
}
}
}
} }

View file

@ -1,76 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2022, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
namespace Friendica\Core\Logger\Type\Monolog;
use Friendica\App\Request;
use Monolog\Handler;
use Monolog\Logger;
/**
* Simple handler for Friendica developers to use for deeper logging
*
* If you want to debug only interactions from your IP or the IP of a remote server for federation debug,
* you'll use Logger::develop() for the duration of your work, and you clean it up when you're done before submitting your PR.
*/
class DevelopHandler extends Handler\AbstractHandler
{
/**
* @var string The IP of the developer who wants to debug
*/
private $developerIp;
/**
* @var string The IP of the current request
*/
private $remoteAddress;
/**
* @param Request $request The current http request
* @param string $developerIp The IP of the developer who wants to debug
* @param int $level The minimum logging level at which this handler will be triggered
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
*/
public function __construct(Request $request, $developerIp, int $level = Logger::DEBUG, bool $bubble = true)
{
parent::__construct($level, $bubble);
$this->developerIp = $developerIp;
$this->remoteAddress = $request->getRemoteAddress();
}
/**
* {@inheritdoc}
*/
public function handle(array $record): bool
{
if (!$this->isHandling($record)) {
return false;
}
/// Just in case the remote IP is the same as the developer IP log the output
if (!is_null($this->developerIp) && $this->remoteAddress != $this->developerIp) {
return false;
}
return false === $this->bubble;
}
}

View file

@ -1,62 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2022, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
namespace Friendica\Core\Logger\Type\Monolog;
use Friendica\Core\Logger\Util\Introspection;
use Monolog\Logger;
use Monolog\Processor\ProcessorInterface;
/**
* Injects line/file//function where the log message came from
*/
class IntrospectionProcessor implements ProcessorInterface
{
private $level;
private $introspection;
/**
* @param Introspection $introspection Holds the Introspection of the current call
* @param string|int $level The minimum logging level at which this Processor will be triggered
*/
public function __construct(Introspection $introspection, $level = Logger::DEBUG)
{
$this->level = Logger::toMonologLevel($level);
$introspection->addClasses(['Monolog\\']);
$this->introspection = $introspection;
}
public function __invoke(array $record): array
{
// return if the level is not high enough
if ($record['level'] < $this->level) {
return $record;
}
// we should have the call source now
$record['extra'] = array_merge(
$record['extra'],
$this->introspection->getRecord()
);
return $record;
}
}

View file

@ -5,7 +5,6 @@ This namespace contains the different implementations of a Logger.
### Configuration guideline ### Configuration guideline
The following settings are possible for `logger_config`: The following settings are possible for `logger_config`:
- `monolog`: A Logging framework with lots of additions (see [Monolog](https://github.com/Seldaek/monolog/)). There are just Friendica additions inside the Monolog directory
- [`stream`](StreamLogger.php): A small logger for files or streams - [`stream`](StreamLogger.php): A small logger for files or streams
- [`syslog`](SyslogLogger.php): Prints the logging output into the syslog - [`syslog`](SyslogLogger.php): Prints the logging output into the syslog

View file

@ -192,7 +192,7 @@ class Search
} }
// Add found profiles from the global directory to the local directory // Add found profiles from the global directory to the local directory
Worker::add(PRIORITY_LOW, 'SearchDirectory', $search); Worker::add(Worker::PRIORITY_LOW, 'SearchDirectory', $search);
return $resultList; return $resultList;
} }

View file

@ -69,6 +69,68 @@ class Session
DI::session()->clear(); DI::session()->clear();
} }
/**
* Returns the user id of locally logged in user or false.
*
* @return int|bool user id or false
*/
public static function getLocalUser()
{
$session = DI::session();
if (!empty($session->get('authenticated')) && !empty($session->get('uid'))) {
return intval($session->get('uid'));
}
return false;
}
/**
* Returns the public contact id of logged in user or false.
*
* @return int|bool public contact id or false
*/
public static function getPublicContact()
{
static $public_contact_id = false;
$session = DI::session();
if (!$public_contact_id && !empty($session->get('authenticated'))) {
if (!empty($session->get('my_address'))) {
// Local user
$public_contact_id = intval(Contact::getIdForURL($session->get('my_address'), 0, false));
} elseif (!empty($session->get('visitor_home'))) {
// Remote user
$public_contact_id = intval(Contact::getIdForURL($session->get('visitor_home'), 0, false));
}
} elseif (empty($session->get('authenticated'))) {
$public_contact_id = false;
}
return $public_contact_id;
}
/**
* Returns public contact id of authenticated site visitor or false
*
* @return int|bool visitor_id or false
*/
public static function getRemoteUser()
{
$session = DI::session();
if (empty($session->get('authenticated'))) {
return false;
}
if (!empty($session->get('visitor_id'))) {
return intval($session->get('visitor_id'));
}
return false;
}
/** /**
* Return the user contact ID of a visitor for the given user ID they are visiting * Return the user contact ID of a visitor for the given user ID they are visiting
* *

View file

@ -442,10 +442,13 @@ class System
*/ */
public static function getLoadAvg(): array public static function getLoadAvg(): array
{ {
if (is_readable('/proc/loadavg')) {
$content = @file_get_contents('/proc/loadavg'); $content = @file_get_contents('/proc/loadavg');
if (empty($content)) { if (empty($content)) {
$content = shell_exec('cat /proc/loadavg'); $content = shell_exec('cat /proc/loadavg');
} }
}
if (empty($content) || !preg_match("#([.\d]+)\s([.\d]+)\s([.\d]+)\s(\d+)/(\d+)#", $content, $matches)) { if (empty($content) || !preg_match("#([.\d]+)\s([.\d]+)\s([.\d]+)\s(\d+)/(\d+)#", $content, $matches)) {
$load_arr = sys_getloadavg(); $load_arr = sys_getloadavg();
if (empty($load_arr)) { if (empty($load_arr)) {

View file

@ -35,6 +35,8 @@ class Update
const SUCCESS = 0; const SUCCESS = 0;
const FAILED = 1; const FAILED = 1;
const NEW_TABLE_STRUCTURE_VERSION = 1288;
/** /**
* Function to check if the Database structure needs an update. * Function to check if the Database structure needs an update.
* *
@ -63,7 +65,7 @@ class Update
} }
// We don't support upgrading from very old versions anymore // We don't support upgrading from very old versions anymore
if ($build < NEW_TABLE_STRUCTURE_VERSION) { if ($build < self::NEW_TABLE_STRUCTURE_VERSION) {
$error = DI::l10n()->t('Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.', $build); $error = DI::l10n()->t('Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.', $build);
if (DI::mode()->getExecutor() == Mode::INDEX) { if (DI::mode()->getExecutor() == Mode::INDEX) {
die($error); die($error);
@ -73,8 +75,8 @@ class Update
} }
// The postupdate has to completed version 1288 for the new post views to take over // The postupdate has to completed version 1288 for the new post views to take over
$postupdate = DI::config()->get('system', 'post_update_version', NEW_TABLE_STRUCTURE_VERSION); $postupdate = DI::config()->get('system', 'post_update_version', self::NEW_TABLE_STRUCTURE_VERSION);
if ($postupdate < NEW_TABLE_STRUCTURE_VERSION) { if ($postupdate < self::NEW_TABLE_STRUCTURE_VERSION) {
$error = DI::l10n()->t('Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.', $postupdate); $error = DI::l10n()->t('Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.', $postupdate);
if (DI::mode()->getExecutor() == Mode::INDEX) { if (DI::mode()->getExecutor() == Mode::INDEX) {
die($error); die($error);
@ -92,7 +94,7 @@ class Update
*/ */
self::run($basePath); self::run($basePath);
} else { } else {
Worker::add(PRIORITY_CRITICAL, 'DBUpdate'); Worker::add(Worker::PRIORITY_CRITICAL, 'DBUpdate');
} }
} }
} }

View file

@ -123,13 +123,13 @@ class UserImport
$account = json_decode(file_get_contents($file['tmp_name']), true); $account = json_decode(file_get_contents($file['tmp_name']), true);
if ($account === null) { if ($account === null) {
notice(DI::l10n()->t("Error decoding account file")); DI::sysmsg()->addNotice(DI::l10n()->t("Error decoding account file"));
return; return;
} }
if (empty($account['version'])) { if (empty($account['version'])) {
notice(DI::l10n()->t("Error! No version data in file! This is not a Friendica account file?")); DI::sysmsg()->addNotice(DI::l10n()->t("Error! No version data in file! This is not a Friendica account file?"));
return; return;
} }
@ -137,7 +137,7 @@ class UserImport
// check if username matches deleted account // check if username matches deleted account
if (DBA::exists('user', ['nickname' => $account['user']['nickname']]) if (DBA::exists('user', ['nickname' => $account['user']['nickname']])
|| DBA::exists('userd', ['username' => $account['user']['nickname']])) { || DBA::exists('userd', ['username' => $account['user']['nickname']])) {
notice(DI::l10n()->t("User '%s' already exists on this server!", $account['user']['nickname'])); DI::sysmsg()->addNotice(DI::l10n()->t("User '%s' already exists on this server!", $account['user']['nickname']));
return; return;
} }
@ -173,7 +173,7 @@ class UserImport
$r = self::dbImportAssoc('user', $account['user']); $r = self::dbImportAssoc('user', $account['user']);
if ($r === false) { if ($r === false) {
Logger::warning("uimport:insert user : ERROR : " . DBA::errorMessage()); Logger::warning("uimport:insert user : ERROR : " . DBA::errorMessage());
notice(DI::l10n()->t("User creation error")); DI::sysmsg()->addNotice(DI::l10n()->t("User creation error"));
return; return;
} }
$newuid = self::lastInsertId(); $newuid = self::lastInsertId();
@ -218,7 +218,7 @@ class UserImport
} }
} }
if ($errorcount > 0) { if ($errorcount > 0) {
notice(DI::l10n()->tt("%d contact not imported", "%d contacts not imported", $errorcount)); DI::sysmsg()->addNotice(DI::l10n()->tt("%d contact not imported", "%d contacts not imported", $errorcount));
} }
foreach ($account['group'] as &$group) { foreach ($account['group'] as &$group) {
@ -271,7 +271,7 @@ class UserImport
if ($r === false) { if ($r === false) {
Logger::warning("uimport:insert profile: ERROR : " . DBA::errorMessage()); Logger::warning("uimport:insert profile: ERROR : " . DBA::errorMessage());
notice(DI::l10n()->t("User profile creation error")); DI::sysmsg()->addNotice(DI::l10n()->t("User profile creation error"));
DBA::delete('user', ['uid' => $newuid]); DBA::delete('user', ['uid' => $newuid]);
DBA::delete('profile_field', ['uid' => $newuid]); DBA::delete('profile_field', ['uid' => $newuid]);
return; return;
@ -322,9 +322,9 @@ class UserImport
} }
// send relocate messages // send relocate messages
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, $newuid); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, $newuid);
info(DI::l10n()->t("Done. You can now login with your username and password")); DI::sysmsg()->addInfo(DI::l10n()->t("Done. You can now login with your username and password"));
DI::baseUrl()->redirect('login'); DI::baseUrl()->redirect('login');
} }
} }

View file

@ -31,12 +31,20 @@ use Friendica\Util\DateTimeFormat;
*/ */
class Worker class Worker
{ {
const PRIORITY_UNDEFINED = PRIORITY_UNDEFINED; /**
const PRIORITY_CRITICAL = PRIORITY_CRITICAL; * @name Priority
const PRIORITY_HIGH = PRIORITY_HIGH; *
const PRIORITY_MEDIUM = PRIORITY_MEDIUM; * Process priority for the worker
const PRIORITY_LOW = PRIORITY_LOW; * @{
const PRIORITY_NEGLIGIBLE = PRIORITY_NEGLIGIBLE; */
const PRIORITY_UNDEFINED = 0;
const PRIORITY_CRITICAL = 10;
const PRIORITY_HIGH = 20;
const PRIORITY_MEDIUM = 30;
const PRIORITY_LOW = 40;
const PRIORITY_NEGLIGIBLE = 50;
const PRIORITIES = [self::PRIORITY_CRITICAL, self::PRIORITY_HIGH, self::PRIORITY_MEDIUM, self::PRIORITY_LOW, self::PRIORITY_NEGLIGIBLE];
/* @}*/
const STATE_STARTUP = 1; // Worker is in startup. This takes most time. const STATE_STARTUP = 1; // Worker is in startup. This takes most time.
const STATE_LONG_LOOP = 2; // Worker is processing the whole - long - loop. const STATE_LONG_LOOP = 2; // Worker is processing the whole - long - loop.
@ -807,7 +815,7 @@ class Worker
$top_priority = self::highestPriority(); $top_priority = self::highestPriority();
$high_running = self::processWithPriorityActive($top_priority); $high_running = self::processWithPriorityActive($top_priority);
if (!$high_running && ($top_priority > PRIORITY_UNDEFINED) && ($top_priority < PRIORITY_NEGLIGIBLE)) { if (!$high_running && ($top_priority > self::PRIORITY_UNDEFINED) && ($top_priority < self::PRIORITY_NEGLIGIBLE)) {
Logger::info('Jobs with a higher priority are waiting but none is executed. Open a fastlane.', ['priority' => $top_priority]); Logger::info('Jobs with a higher priority are waiting but none is executed. Open a fastlane.', ['priority' => $top_priority]);
$queues = $active + 1; $queues = $active + 1;
} }
@ -939,7 +947,7 @@ class Worker
private static function nextPriority() private static function nextPriority()
{ {
$waiting = []; $waiting = [];
$priorities = [PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW, PRIORITY_NEGLIGIBLE]; $priorities = [self::PRIORITY_CRITICAL, self::PRIORITY_HIGH, self::PRIORITY_MEDIUM, self::PRIORITY_LOW, self::PRIORITY_NEGLIGIBLE];
foreach ($priorities as $priority) { foreach ($priorities as $priority) {
$stamp = (float)microtime(true); $stamp = (float)microtime(true);
if (DBA::exists('workerqueue', ["`priority` = ? AND `pid` = 0 AND NOT `done` AND `next_try` < ?", $priority, DateTimeFormat::utcNow()])) { if (DBA::exists('workerqueue', ["`priority` = ? AND `pid` = 0 AND NOT `done` AND `next_try` < ?", $priority, DateTimeFormat::utcNow()])) {
@ -948,8 +956,8 @@ class Worker
self::$db_duration += (microtime(true) - $stamp); self::$db_duration += (microtime(true) - $stamp);
} }
if (!empty($waiting[PRIORITY_CRITICAL])) { if (!empty($waiting[self::PRIORITY_CRITICAL])) {
return PRIORITY_CRITICAL; return self::PRIORITY_CRITICAL;
} }
$running = []; $running = [];
@ -1206,8 +1214,8 @@ class Worker
* @param (integer|array) priority or parameter array, strings are deprecated and are ignored * @param (integer|array) priority or parameter array, strings are deprecated and are ignored
* *
* next args are passed as $cmd command line * next args are passed as $cmd command line
* or: Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::DELETION, $drop_id); * or: Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::DELETION, $drop_id);
* or: Worker::add(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), 'Delivery', $post_id); * or: Worker::add(array('priority' => Worker::PRIORITY_HIGH, 'dont_fork' => true), 'Delivery', $post_id);
* *
* @return int '0' if worker queue entry already existed or there had been an error, otherwise the ID of the worker task * @return int '0' if worker queue entry already existed or there had been an error, otherwise the ID of the worker task
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
@ -1230,7 +1238,7 @@ class Worker
return 1; return 1;
} }
$priority = PRIORITY_MEDIUM; $priority = self::PRIORITY_MEDIUM;
// Don't fork from frontend tasks by default // Don't fork from frontend tasks by default
$dont_fork = DI::config()->get('system', 'worker_dont_fork', false) || !DI::mode()->isBackend(); $dont_fork = DI::config()->get('system', 'worker_dont_fork', false) || !DI::mode()->isBackend();
$created = DateTimeFormat::utcNow(); $created = DateTimeFormat::utcNow();
@ -1266,9 +1274,9 @@ class Worker
$found = DBA::exists('workerqueue', ['command' => $command, 'parameter' => $parameters, 'done' => false]); $found = DBA::exists('workerqueue', ['command' => $command, 'parameter' => $parameters, 'done' => false]);
$added = 0; $added = 0;
if (!is_int($priority) || !in_array($priority, PRIORITIES)) { if (!is_int($priority) || !in_array($priority, self::PRIORITIES)) {
Logger::warning('Invalid priority', ['priority' => $priority, 'command' => $command, 'callstack' => System::callstack(20)]); Logger::warning('Invalid priority', ['priority' => $priority, 'command' => $command, 'callstack' => System::callstack(20)]);
$priority = PRIORITY_MEDIUM; $priority = self::PRIORITY_MEDIUM;
} }
// Quit if there was a database error - a precaution for the update process to 3.5.3 // Quit if there was a database error - a precaution for the update process to 3.5.3
@ -1383,12 +1391,12 @@ class Worker
$delay = (($new_retrial + 2) ** 4) + (rand(1, 30) * ($new_retrial)); $delay = (($new_retrial + 2) ** 4) + (rand(1, 30) * ($new_retrial));
$next = DateTimeFormat::utc('now + ' . $delay . ' seconds'); $next = DateTimeFormat::utc('now + ' . $delay . ' seconds');
if (($priority < PRIORITY_MEDIUM) && ($new_retrial > 3)) { if (($priority < self::PRIORITY_MEDIUM) && ($new_retrial > 3)) {
$priority = PRIORITY_MEDIUM; $priority = self::PRIORITY_MEDIUM;
} elseif (($priority < PRIORITY_LOW) && ($new_retrial > 6)) { } elseif (($priority < self::PRIORITY_LOW) && ($new_retrial > 6)) {
$priority = PRIORITY_LOW; $priority = self::PRIORITY_LOW;
} elseif (($priority < PRIORITY_NEGLIGIBLE) && ($new_retrial > 8)) { } elseif (($priority < self::PRIORITY_NEGLIGIBLE) && ($new_retrial > 8)) {
$priority = PRIORITY_NEGLIGIBLE; $priority = self::PRIORITY_NEGLIGIBLE;
} }
Logger::info('Deferred task', ['id' => $id, 'retrial' => $new_retrial, 'created' => $queue['created'], 'next_execution' => $next, 'old_prio' => $queue['priority'], 'new_prio' => $priority]); Logger::info('Deferred task', ['id' => $id, 'retrial' => $new_retrial, 'created' => $queue['created'], 'next_execution' => $next, 'old_prio' => $queue['priority'], 'new_prio' => $priority]);

View file

@ -47,10 +47,10 @@ class Cron
Logger::info('Add cron entries'); Logger::info('Add cron entries');
// Check for spooled items // Check for spooled items
Worker::add(['priority' => PRIORITY_HIGH, 'force_priority' => true], 'SpoolPost'); Worker::add(['priority' => Worker::PRIORITY_HIGH, 'force_priority' => true], 'SpoolPost');
// Run the cron job that calls all other jobs // Run the cron job that calls all other jobs
Worker::add(['priority' => PRIORITY_MEDIUM, 'force_priority' => true], 'Cron'); Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'Cron');
// Cleaning dead processes // Cleaning dead processes
self::killStaleWorkers(); self::killStaleWorkers();
@ -112,12 +112,12 @@ class Cron
// To avoid a blocking situation we reschedule the process at the beginning of the queue. // To avoid a blocking situation we reschedule the process at the beginning of the queue.
// Additionally we are lowering the priority. (But not PRIORITY_CRITICAL) // Additionally we are lowering the priority. (But not PRIORITY_CRITICAL)
$new_priority = $entry['priority']; $new_priority = $entry['priority'];
if ($entry['priority'] == PRIORITY_HIGH) { if ($entry['priority'] == Worker::PRIORITY_HIGH) {
$new_priority = PRIORITY_MEDIUM; $new_priority = Worker::PRIORITY_MEDIUM;
} elseif ($entry['priority'] == PRIORITY_MEDIUM) { } elseif ($entry['priority'] == Worker::PRIORITY_MEDIUM) {
$new_priority = PRIORITY_LOW; $new_priority = Worker::PRIORITY_LOW;
} elseif ($entry['priority'] != PRIORITY_CRITICAL) { } elseif ($entry['priority'] != Worker::PRIORITY_CRITICAL) {
$new_priority = PRIORITY_NEGLIGIBLE; $new_priority = Worker::PRIORITY_NEGLIGIBLE;
} }
DBA::update('workerqueue', ['executed' => DBA::NULL_DATETIME, 'created' => DateTimeFormat::utcNow(), 'priority' => $new_priority, 'pid' => 0], ['id' => $entry["id"]] DBA::update('workerqueue', ['executed' => DBA::NULL_DATETIME, 'created' => DateTimeFormat::utcNow(), 'priority' => $new_priority, 'pid' => 0], ['id' => $entry["id"]]
); );
@ -166,13 +166,13 @@ class Cron
Logger::info('Directly deliver inbox', ['inbox' => $delivery['inbox'], 'result' => $result['success']]); Logger::info('Directly deliver inbox', ['inbox' => $delivery['inbox'], 'result' => $result['success']]);
continue; continue;
} elseif ($delivery['failed'] < 3) { } elseif ($delivery['failed'] < 3) {
$priority = PRIORITY_HIGH; $priority = Worker::PRIORITY_HIGH;
} elseif ($delivery['failed'] < 6) { } elseif ($delivery['failed'] < 6) {
$priority = PRIORITY_MEDIUM; $priority = Worker::PRIORITY_MEDIUM;
} elseif ($delivery['failed'] < 8) { } elseif ($delivery['failed'] < 8) {
$priority = PRIORITY_LOW; $priority = Worker::PRIORITY_LOW;
} else { } else {
$priority = PRIORITY_NEGLIGIBLE; $priority = Worker::PRIORITY_NEGLIGIBLE;
} }
if ($delivery['failed'] >= DI::config()->get('system', 'worker_defer_limit')) { if ($delivery['failed'] >= DI::config()->get('system', 'worker_defer_limit')) {

View file

@ -150,7 +150,7 @@ class DBStructure
echo DI::l10n()->t("\nError %d occurred during database update:\n%s\n", echo DI::l10n()->t("\nError %d occurred during database update:\n%s\n",
DBA::errorNo(), DBA::errorMessage()); DBA::errorNo(), DBA::errorMessage());
return DI::l10n()->t('Errors encountered performing database changes: ') . $message . EOL; return DI::l10n()->t('Errors encountered performing database changes: ') . $message . '<br />';
} }
/** /**

View file

@ -36,6 +36,7 @@ use PDO;
use PDOException; use PDOException;
use PDOStatement; use PDOStatement;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
/** /**
* This class is for the low level database stuff that does driver specific things. * This class is for the low level database stuff that does driver specific things.
@ -80,15 +81,17 @@ class Database
/** @var ViewDefinition */ /** @var ViewDefinition */
protected $viewDefinition; protected $viewDefinition;
public function __construct(Cache $configCache, Profiler $profiler, DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition, LoggerInterface $logger) public function __construct(Cache $configCache, Profiler $profiler, DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition)
{ {
// We are storing these values for being able to perform a reconnect // We are storing these values for being able to perform a reconnect
$this->configCache = $configCache; $this->configCache = $configCache;
$this->profiler = $profiler; $this->profiler = $profiler;
$this->logger = $logger;
$this->dbaDefinition = $dbaDefinition; $this->dbaDefinition = $dbaDefinition;
$this->viewDefinition = $viewDefinition; $this->viewDefinition = $viewDefinition;
// Temporary NullLogger until we can fetch the logger class from the config
$this->logger = new NullLogger();
$this->connect(); $this->connect();
} }

View file

@ -319,7 +319,7 @@ class Contact
// Update the contact in the background if needed // Update the contact in the background if needed
if (Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { if (Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) {
Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']); Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']);
} }
// Remove the internal fields // Remove the internal fields
@ -884,7 +884,7 @@ class Contact
} }
// Delete it in the background // Delete it in the background
Worker::add(PRIORITY_MEDIUM, 'Contact\Remove', $id); Worker::add(Worker::PRIORITY_MEDIUM, 'Contact\Remove', $id);
} }
/** /**
@ -908,7 +908,7 @@ class Contact
if (in_array($contact['rel'], [self::SHARING, self::FRIEND])) { if (in_array($contact['rel'], [self::SHARING, self::FRIEND])) {
$cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']); $cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']);
if (!empty($cdata['public'])) { if (!empty($cdata['public'])) {
Worker::add(PRIORITY_HIGH, 'Contact\Unfollow', $cdata['public'], $contact['uid']); Worker::add(Worker::PRIORITY_HIGH, 'Contact\Unfollow', $cdata['public'], $contact['uid']);
} }
} }
@ -938,7 +938,7 @@ class Contact
if (in_array($contact['rel'], [self::FOLLOWER, self::FRIEND])) { if (in_array($contact['rel'], [self::FOLLOWER, self::FRIEND])) {
$cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']); $cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']);
if (!empty($cdata['public'])) { if (!empty($cdata['public'])) {
Worker::add(PRIORITY_HIGH, 'Contact\RevokeFollow', $cdata['public'], $contact['uid']); Worker::add(Worker::PRIORITY_HIGH, 'Contact\RevokeFollow', $cdata['public'], $contact['uid']);
} }
} }
@ -966,11 +966,11 @@ class Contact
$cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']); $cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']);
if (in_array($contact['rel'], [self::SHARING, self::FRIEND]) && !empty($cdata['public'])) { if (in_array($contact['rel'], [self::SHARING, self::FRIEND]) && !empty($cdata['public'])) {
Worker::add(PRIORITY_HIGH, 'Contact\Unfollow', $cdata['public'], $contact['uid']); Worker::add(Worker::PRIORITY_HIGH, 'Contact\Unfollow', $cdata['public'], $contact['uid']);
} }
if (in_array($contact['rel'], [self::FOLLOWER, self::FRIEND]) && !empty($cdata['public'])) { if (in_array($contact['rel'], [self::FOLLOWER, self::FRIEND]) && !empty($cdata['public'])) {
Worker::add(PRIORITY_HIGH, 'Contact\RevokeFollow', $cdata['public'], $contact['uid']); Worker::add(Worker::PRIORITY_HIGH, 'Contact\RevokeFollow', $cdata['public'], $contact['uid']);
} }
self::remove($contact['id']); self::remove($contact['id']);
@ -1248,7 +1248,7 @@ class Contact
$contact_id = $contact['id']; $contact_id = $contact['id'];
if (Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { if (Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) {
Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']); Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']);
} }
if (empty($update) && (!empty($contact['uri-id']) || is_bool($update))) { if (empty($update) && (!empty($contact['uri-id']) || is_bool($update))) {
@ -2365,7 +2365,7 @@ class Contact
return; return;
} }
Logger::warning('account-user exists for a different contact id', ['account_user' => $account_user, 'id' => $id, 'uid' => $uid, 'uri-id' => $uri_id, 'url' => $url]); Logger::warning('account-user exists for a different contact id', ['account_user' => $account_user, 'id' => $id, 'uid' => $uid, 'uri-id' => $uri_id, 'url' => $url]);
Worker::add(PRIORITY_HIGH, 'MergeContact', $account_user['id'], $id, $uid); Worker::add(Worker::PRIORITY_HIGH, 'MergeContact', $account_user['id'], $id, $uid);
} elseif (DBA::insert('account-user', ['id' => $id, 'uri-id' => $uri_id, 'uid' => $uid], Database::INSERT_IGNORE)) { } elseif (DBA::insert('account-user', ['id' => $id, 'uri-id' => $uri_id, 'uid' => $uid], Database::INSERT_IGNORE)) {
Logger::notice('account-user was added', ['id' => $id, 'uid' => $uid, 'uri-id' => $uri_id, 'url' => $url]); Logger::notice('account-user was added', ['id' => $id, 'uid' => $uid, 'uri-id' => $uri_id, 'url' => $url]);
} else { } else {
@ -2406,7 +2406,7 @@ class Contact
continue; continue;
} }
Worker::add(PRIORITY_HIGH, 'MergeContact', $first, $duplicate['id'], $uid); Worker::add(Worker::PRIORITY_HIGH, 'MergeContact', $first, $duplicate['id'], $uid);
} }
DBA::close($duplicates); DBA::close($duplicates);
Logger::info('Duplicates handled', ['uid' => $uid, 'nurl' => $nurl, 'callstack' => System::callstack(20)]); Logger::info('Duplicates handled', ['uid' => $uid, 'nurl' => $nurl, 'callstack' => System::callstack(20)]);
@ -2608,7 +2608,7 @@ class Contact
if ($ret['network'] == Protocol::ACTIVITYPUB) { if ($ret['network'] == Protocol::ACTIVITYPUB) {
$apcontact = APContact::getByURL($ret['url'], false); $apcontact = APContact::getByURL($ret['url'], false);
if (!empty($apcontact['featured'])) { if (!empty($apcontact['featured'])) {
Worker::add(PRIORITY_LOW, 'FetchFeaturedPosts', $ret['url']); Worker::add(Worker::PRIORITY_LOW, 'FetchFeaturedPosts', $ret['url']);
} }
} }
@ -2649,7 +2649,7 @@ class Contact
self::updateContact($id, $uid, $uriid, $contact['url'], ['failed' => false, 'local-data' => $has_local_data, 'last-update' => $updated, 'next-update' => $success_next_update, 'success_update' => $updated]); self::updateContact($id, $uid, $uriid, $contact['url'], ['failed' => false, 'local-data' => $has_local_data, 'last-update' => $updated, 'next-update' => $success_next_update, 'success_update' => $updated]);
if (Contact\Relation::isDiscoverable($ret['url'])) { if (Contact\Relation::isDiscoverable($ret['url'])) {
Worker::add(PRIORITY_LOW, 'ContactDiscovery', $ret['url']); Worker::add(Worker::PRIORITY_LOW, 'ContactDiscovery', $ret['url']);
} }
// Update the public contact // Update the public contact
@ -2693,7 +2693,7 @@ class Contact
self::updateContact($id, $uid, $ret['uri-id'], $ret['url'], $ret); self::updateContact($id, $uid, $ret['uri-id'], $ret['url'], $ret);
if (Contact\Relation::isDiscoverable($ret['url'])) { if (Contact\Relation::isDiscoverable($ret['url'])) {
Worker::add(PRIORITY_LOW, 'ContactDiscovery', $ret['url']); Worker::add(Worker::PRIORITY_LOW, 'ContactDiscovery', $ret['url']);
} }
return true; return true;
@ -2853,30 +2853,30 @@ class Contact
// do we have enough information? // do we have enough information?
if (empty($protocol) || ($protocol == Protocol::PHANTOM) || (empty($ret['url']) && empty($ret['addr']))) { if (empty($protocol) || ($protocol == Protocol::PHANTOM) || (empty($ret['url']) && empty($ret['addr']))) {
$result['message'] .= DI::l10n()->t('The profile address specified does not provide adequate information.') . EOL; $result['message'] .= DI::l10n()->t('The profile address specified does not provide adequate information.') . '<br />';
if (empty($ret['poll'])) { if (empty($ret['poll'])) {
$result['message'] .= DI::l10n()->t('No compatible communication protocols or feeds were discovered.') . EOL; $result['message'] .= DI::l10n()->t('No compatible communication protocols or feeds were discovered.') . '<br />';
} }
if (empty($ret['name'])) { if (empty($ret['name'])) {
$result['message'] .= DI::l10n()->t('An author or name was not found.') . EOL; $result['message'] .= DI::l10n()->t('An author or name was not found.') . '<br />';
} }
if (empty($ret['url'])) { if (empty($ret['url'])) {
$result['message'] .= DI::l10n()->t('No browser URL could be matched to this address.') . EOL; $result['message'] .= DI::l10n()->t('No browser URL could be matched to this address.') . '<br />';
} }
if (strpos($ret['url'], '@') !== false) { if (strpos($ret['url'], '@') !== false) {
$result['message'] .= DI::l10n()->t('Unable to match @-style Identity Address with a known protocol or email contact.') . EOL; $result['message'] .= DI::l10n()->t('Unable to match @-style Identity Address with a known protocol or email contact.') . '<br />';
$result['message'] .= DI::l10n()->t('Use mailto: in front of address to force email check.') . EOL; $result['message'] .= DI::l10n()->t('Use mailto: in front of address to force email check.') . '<br />';
} }
return $result; return $result;
} }
if ($protocol === Protocol::OSTATUS && DI::config()->get('system', 'ostatus_disabled')) { if ($protocol === Protocol::OSTATUS && DI::config()->get('system', 'ostatus_disabled')) {
$result['message'] .= DI::l10n()->t('The profile address specified belongs to a network which has been disabled on this site.') . EOL; $result['message'] .= DI::l10n()->t('The profile address specified belongs to a network which has been disabled on this site.') . '<br />';
$ret['notify'] = ''; $ret['notify'] = '';
} }
if (!$ret['notify']) { if (!$ret['notify']) {
$result['message'] .= DI::l10n()->t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL; $result['message'] .= DI::l10n()->t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . '<br />';
} }
$writeable = ((($protocol === Protocol::OSTATUS) && ($ret['notify'])) ? 1 : 0); $writeable = ((($protocol === Protocol::OSTATUS) && ($ret['notify'])) ? 1 : 0);
@ -2935,7 +2935,7 @@ class Contact
$contact = DBA::selectFirst('contact', [], ['url' => $ret['url'], 'network' => $ret['network'], 'uid' => $uid]); $contact = DBA::selectFirst('contact', [], ['url' => $ret['url'], 'network' => $ret['network'], 'uid' => $uid]);
if (!DBA::isResult($contact)) { if (!DBA::isResult($contact)) {
$result['message'] .= DI::l10n()->t('Unable to retrieve contact information.') . EOL; $result['message'] .= DI::l10n()->t('Unable to retrieve contact information.') . '<br />';
return $result; return $result;
} }
@ -2949,13 +2949,13 @@ class Contact
// pull feed and consume it, which should subscribe to the hub. // pull feed and consume it, which should subscribe to the hub.
if ($contact['network'] == Protocol::OSTATUS) { if ($contact['network'] == Protocol::OSTATUS) {
Worker::add(PRIORITY_HIGH, 'OnePoll', $contact_id, 'force'); Worker::add(Worker::PRIORITY_HIGH, 'OnePoll', $contact_id, 'force');
} }
if ($probed) { if ($probed) {
self::updateFromProbeArray($contact_id, $ret); self::updateFromProbeArray($contact_id, $ret);
} else { } else {
Worker::add(PRIORITY_HIGH, 'UpdateContact', $contact_id); Worker::add(Worker::PRIORITY_HIGH, 'UpdateContact', $contact_id);
} }
$result['success'] = Protocol::follow($uid, $contact, $protocol); $result['success'] = Protocol::follow($uid, $contact, $protocol);
@ -3407,10 +3407,10 @@ class Contact
} }
$contact = self::getByURL($url, false, ['id', 'network', 'next-update']); $contact = self::getByURL($url, false, ['id', 'network', 'next-update']);
if (empty($contact['id']) && Network::isValidHttpUrl($url)) { if (empty($contact['id']) && Network::isValidHttpUrl($url)) {
Worker::add(PRIORITY_LOW, 'AddContact', 0, $url); Worker::add(Worker::PRIORITY_LOW, 'AddContact', 0, $url);
++$added; ++$added;
} elseif (!empty($contact['network']) && Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) { } elseif (!empty($contact['network']) && Probe::isProbable($contact['network']) && ($contact['next-update'] < DateTimeFormat::utcNow())) {
Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']); Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], 'UpdateContact', $contact['id']);
++$updated; ++$updated;
} else { } else {
++$unchanged; ++$unchanged;

View file

@ -59,7 +59,7 @@ class FContact
$update = empty($person['guid']) || empty($person['uri-id']) || ($person['created'] <= DBA::NULL_DATETIME); $update = empty($person['guid']) || empty($person['uri-id']) || ($person['created'] <= DBA::NULL_DATETIME);
if (GServer::getNextUpdateDate(true, $person['created'], $person['updated'], false) < DateTimeFormat::utcNow()) { if (GServer::getNextUpdateDate(true, $person['created'], $person['updated'], false) < DateTimeFormat::utcNow()) {
Logger::debug('Start background update', ['handle' => $handle]); Logger::debug('Start background update', ['handle' => $handle]);
Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], 'UpdateFContact', $handle); Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], 'UpdateFContact', $handle);
} }
} }
} elseif (is_null($update)) { } elseif (is_null($update)) {

View file

@ -102,7 +102,7 @@ class GServer
return; return;
} }
Worker::add(PRIORITY_LOW, 'UpdateGServer', $url, $only_nodeinfo); Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $url, $only_nodeinfo);
} }
/** /**
@ -2108,10 +2108,10 @@ class GServer
while ($gserver = DBA::fetch($gservers)) { while ($gserver = DBA::fetch($gservers)) {
Logger::info('Update peer list', ['server' => $gserver['url'], 'id' => $gserver['id']]); Logger::info('Update peer list', ['server' => $gserver['url'], 'id' => $gserver['id']]);
Worker::add(PRIORITY_LOW, 'UpdateServerPeers', $gserver['url']); Worker::add(Worker::PRIORITY_LOW, 'UpdateServerPeers', $gserver['url']);
Logger::info('Update directory', ['server' => $gserver['url'], 'id' => $gserver['id']]); Logger::info('Update directory', ['server' => $gserver['url'], 'id' => $gserver['id']]);
Worker::add(PRIORITY_LOW, 'UpdateServerDirectory', $gserver); Worker::add(Worker::PRIORITY_LOW, 'UpdateServerDirectory', $gserver);
$fields = ['last_poco_query' => DateTimeFormat::utcNow()]; $fields = ['last_poco_query' => DateTimeFormat::utcNow()];
self::update($fields, ['nurl' => $gserver['nurl']]); self::update($fields, ['nurl' => $gserver['nurl']]);

View file

@ -102,7 +102,7 @@ class Group
$group = DBA::selectFirst('group', ['deleted'], ['id' => $gid]); $group = DBA::selectFirst('group', ['deleted'], ['id' => $gid]);
if (DBA::isResult($group) && $group['deleted']) { if (DBA::isResult($group) && $group['deleted']) {
DBA::update('group', ['deleted' => 0], ['id' => $gid]); DBA::update('group', ['deleted' => 0], ['id' => $gid]);
notice(DI::l10n()->t('A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.')); DI::sysmsg()->addNotice(DI::l10n()->t('A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.'));
} }
return true; return true;
} }

View file

@ -93,7 +93,7 @@ class Item
'commented', 'created', 'edited', 'received', 'verb', 'object-type', 'postopts', 'plink', 'commented', 'created', 'edited', 'received', 'verb', 'object-type', 'postopts', 'plink',
'wall', 'private', 'starred', 'origin', 'parent-origin', 'title', 'body', 'language', 'wall', 'private', 'starred', 'origin', 'parent-origin', 'title', 'body', 'language',
'content-warning', 'location', 'coord', 'app', 'rendered-hash', 'rendered-html', 'object', 'content-warning', 'location', 'coord', 'app', 'rendered-hash', 'rendered-html', 'object',
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'mention', 'global', 'quote-uri', 'quote-uri-id', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'mention', 'global',
'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network', 'author-updated', 'author-gsid', 'author-addr', 'author-uri-id', 'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network', 'author-updated', 'author-gsid', 'author-addr', 'author-uri-id',
'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'owner-network', 'owner-contact-type', 'owner-updated', 'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'owner-network', 'owner-contact-type', 'owner-updated',
'causer-id', 'causer-link', 'causer-name', 'causer-avatar', 'causer-contact-type', 'causer-network', 'causer-id', 'causer-link', 'causer-name', 'causer-avatar', 'causer-contact-type', 'causer-network',
@ -115,7 +115,7 @@ class Item
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
'author-id', 'author-link', 'author-name', 'author-avatar', 'owner-id', 'owner-link', 'contact-uid', 'author-id', 'author-link', 'author-name', 'author-avatar', 'owner-id', 'owner-link', 'contact-uid',
'signed_text', 'network', 'wall', 'contact-id', 'plink', 'origin', 'signed_text', 'network', 'wall', 'contact-id', 'plink', 'origin',
'thr-parent-id', 'parent-uri-id', 'postopts', 'pubmail', 'thr-parent-id', 'parent-uri-id', 'quote-uri', 'quote-uri-id', 'postopts', 'pubmail',
'event-created', 'event-edited', 'event-start', 'event-finish', 'event-created', 'event-edited', 'event-start', 'event-finish',
'event-summary', 'event-desc', 'event-location', 'event-type', 'event-summary', 'event-desc', 'event-location', 'event-type',
'event-nofinish', 'event-ignore', 'event-id']; 'event-nofinish', 'event-ignore', 'event-id'];
@ -123,7 +123,7 @@ class Item
// All fields in the item table // All fields in the item table
const ITEM_FIELDLIST = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', const ITEM_FIELDLIST = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent',
'guid', 'uri-id', 'parent-uri-id', 'thr-parent-id', 'conversation', 'vid', 'guid', 'uri-id', 'parent-uri-id', 'thr-parent-id', 'conversation', 'vid',
'contact-id', 'wall', 'gravity', 'extid', 'psid', 'quote-uri', 'quote-uri-id', 'contact-id', 'wall', 'gravity', 'extid', 'psid',
'created', 'edited', 'commented', 'received', 'changed', 'verb', 'created', 'edited', 'commented', 'received', 'changed', 'verb',
'postopts', 'plink', 'resource-id', 'event-id', 'inform', 'postopts', 'plink', 'resource-id', 'event-id', 'inform',
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'post-type', 'post-reason', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'post-type', 'post-reason',
@ -238,7 +238,7 @@ class Item
foreach ($notify_items as $notify_item) { foreach ($notify_items as $notify_item) {
$post = Post::selectFirst(['uri-id', 'uid'], ['id' => $notify_item]); $post = Post::selectFirst(['uri-id', 'uid'], ['id' => $notify_item]);
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::POST, (int)$post['uri-id'], (int)$post['uid']); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::POST, (int)$post['uri-id'], (int)$post['uid']);
} }
return $rows; return $rows;
@ -252,7 +252,7 @@ class Item
* @return void * @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function markForDeletion(array $condition, int $priority = PRIORITY_HIGH) public static function markForDeletion(array $condition, int $priority = Worker::PRIORITY_HIGH)
{ {
$items = Post::select(['id'], $condition); $items = Post::select(['id'], $condition);
while ($item = Post::fetch($items)) { while ($item = Post::fetch($items)) {
@ -283,7 +283,7 @@ class Item
} }
if ($item['uid'] == $uid) { if ($item['uid'] == $uid) {
self::markForDeletionById($item['id'], PRIORITY_HIGH); self::markForDeletionById($item['id'], Worker::PRIORITY_HIGH);
} elseif ($item['uid'] != 0) { } elseif ($item['uid'] != 0) {
Logger::warning('Wrong ownership. Not deleting item', ['id' => $item['id']]); Logger::warning('Wrong ownership. Not deleting item', ['id' => $item['id']]);
} }
@ -299,7 +299,7 @@ class Item
* @return boolean success * @return boolean success
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function markForDeletionById(int $item_id, int $priority = PRIORITY_HIGH): bool public static function markForDeletionById(int $item_id, int $priority = Worker::PRIORITY_HIGH): bool
{ {
Logger::info('Mark item for deletion by id', ['id' => $item_id, 'callstack' => System::callstack()]); Logger::info('Mark item for deletion by id', ['id' => $item_id, 'callstack' => System::callstack()]);
// locate item to be deleted // locate item to be deleted
@ -822,7 +822,7 @@ class Item
{ {
$orig_item = $item; $orig_item = $item;
$priority = PRIORITY_HIGH; $priority = Worker::PRIORITY_HIGH;
// If it is a posting where users should get notifications, then define it as wall posting // If it is a posting where users should get notifications, then define it as wall posting
if ($notify) { if ($notify) {
@ -832,7 +832,7 @@ class Item
$item['protocol'] = Conversation::PARCEL_DIRECT; $item['protocol'] = Conversation::PARCEL_DIRECT;
$item['direction'] = Conversation::PUSH; $item['direction'] = Conversation::PUSH;
if (is_int($notify) && in_array($notify, PRIORITIES)) { if (is_int($notify) && in_array($notify, Worker::PRIORITIES)) {
$priority = $notify; $priority = $notify;
} }
} else { } else {
@ -1125,6 +1125,13 @@ class Item
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']); $item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
$item['raw-body'] = self::setHashtags($item['raw-body']); $item['raw-body'] = self::setHashtags($item['raw-body']);
$quote_id = self::getQuoteUriId($item['body']);
if (!empty($quote_id) && Post::exists(['uri-id' => $quote_id, 'network' => Protocol::FEDERATED])) {
$item['quote-uri-id'] = $quote_id;
$item['raw-body'] = BBCode::removeSharedData($item['raw-body']);
}
if (!DBA::exists('contact', ['id' => $item['author-id'], 'network' => Protocol::DFRN])) { if (!DBA::exists('contact', ['id' => $item['author-id'], 'network' => Protocol::DFRN])) {
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']); Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']);
} }
@ -2945,17 +2952,44 @@ class Item
$body = $item['body'] ?? ''; $body = $item['body'] ?? '';
$shared = BBCode::fetchShareAttributes($body); $shared = BBCode::fetchShareAttributes($body);
if (!empty($shared['guid'])) { if (!empty($shared['guid'])) {
$shared_item = Post::selectFirst(['uri-id', 'plink', 'has-media'], ['guid' => $shared['guid']]); $shared_item = Post::selectFirst(['uri-id', 'guid', 'plink', 'has-media'], ['guid' => $shared['guid'], 'uid' => [$item['uid'], 0]]);
$shared_uri_id = $shared_item['uri-id'] ?? 0; }
$shared_links = [strtolower($shared_item['plink'] ?? '')];
$shared_attachments = Post\Media::splitAttachments($shared_uri_id, $shared['guid'], [], $shared_item['has-media'] ?? false); $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media'];
$shared_uri_id = 0;
$shared_links = [];
if (empty($shared_item['uri-id']) && !empty($item['quote-uri-id'])) {
$shared_item = Post::selectFirst($fields, ['uri-id' => $item['quote-uri-id']]);
$quote_uri_id = $item['quote-uri-id'] ?? 0;
$shared_links[] = strtolower($item['quote-uri']);
} elseif (empty($shared_item['uri-id']) && empty($item['quote-uri-id'])) {
$media = Post\Media::getByURIId($item['uri-id'], [Post\Media::ACTIVITY]);
if (!empty($media)) {
$shared_item = Post::selectFirst($fields, ['plink' => $media[0]['url'], 'uid' => [$item['uid'], 0]]);
if (empty($shared_item['uri-id'])) {
$shared_item = Post::selectFirst($fields, ['uri' => $media[0]['url'], 'uid' => [$item['uid'], 0]]);
$shared_links[] = strtolower($media[0]['url']);
}
$quote_uri_id = $shared_item['uri-id'] ?? 0;
}
}
if (!empty($quote_uri_id)) {
$item['body'] .= "\n" . DI::contentItem()->createSharedBlockByArray($shared_item);
}
if (!empty($shared_item['uri-id'])) {
$shared_uri_id = $shared_item['uri-id'];
$shared_links[] = strtolower($shared_item['plink']);
$shared_attachments = Post\Media::splitAttachments($shared_uri_id, $shared_item['guid'], [], $shared_item['has-media']);
$shared_links = array_merge($shared_links, array_column($shared_attachments['visual'], 'url')); $shared_links = array_merge($shared_links, array_column($shared_attachments['visual'], 'url'));
$shared_links = array_merge($shared_links, array_column($shared_attachments['link'], 'url')); $shared_links = array_merge($shared_links, array_column($shared_attachments['link'], 'url'));
$shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url')); $shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url'));
$item['body'] = self::replaceVisualAttachments($shared_attachments, $item['body']); $item['body'] = self::replaceVisualAttachments($shared_attachments, $item['body']);
} else {
$shared_uri_id = 0;
$shared_links = [];
} }
$attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? '', $shared_links, $item['has-media'] ?? false); $attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? '', $shared_links, $item['has-media'] ?? false);
@ -3277,7 +3311,7 @@ class Item
} }
DI::profiler()->stopRecording(); DI::profiler()->stopRecording();
if (isset($data['url']) && !in_array($data['url'], $ignore_links)) { if (isset($data['url']) && !in_array(strtolower($data['url']), $ignore_links)) {
if (!empty($data['description']) || !empty($data['image']) || !empty($data['preview'])) { if (!empty($data['description']) || !empty($data['image']) || !empty($data['preview'])) {
$parts = parse_url($data['url']); $parts = parse_url($data['url']);
if (!empty($parts['scheme']) && !empty($parts['host'])) { if (!empty($parts['scheme']) && !empty($parts['host'])) {
@ -3611,9 +3645,10 @@ class Item
* Improve the data in shared posts * Improve the data in shared posts
* *
* @param array $item * @param array $item
* @param bool $add_media
* @return string body * @return string body
*/ */
public static function improveSharedDataInBody(array $item): string public static function improveSharedDataInBody(array $item, bool $add_media = false): string
{ {
$shared = BBCode::fetchShareAttributes($item['body']); $shared = BBCode::fetchShareAttributes($item['body']);
if (empty($shared['guid']) && empty($shared['message_id'])) { if (empty($shared['guid']) && empty($shared['message_id'])) {
@ -3623,7 +3658,7 @@ class Item
$link = $shared['link'] ?: $shared['message_id']; $link = $shared['link'] ?: $shared['message_id'];
if (empty($shared_content)) { if (empty($shared_content)) {
$shared_content = DI::contentItem()->createSharedPostByUrl($link, $item['uid'] ?? 0); $shared_content = DI::contentItem()->createSharedPostByUrl($link, $item['uid'] ?? 0, $add_media);
} }
if (empty($shared_content)) { if (empty($shared_content)) {
@ -3635,4 +3670,19 @@ class Item
Logger::debug('New shared data', ['uri-id' => $item['uri-id'], 'link' => $link, 'guid' => $item['guid']]); Logger::debug('New shared data', ['uri-id' => $item['uri-id'], 'link' => $link, 'guid' => $item['guid']]);
return $item['body']; return $item['body'];
} }
/**
* Fetch the uri-id of a quote
*
* @param string $body
* @return integer
*/
private static function getQuoteUriId(string $body): int
{
$shared = BBCode::fetchShareAttributes($body);
if (empty($shared['message_id'])) {
return 0;
}
return ItemURI::getIdByURI($shared['message_id']);
}
} }

View file

@ -239,7 +239,7 @@ class Mail
} }
if ($post_id) { if ($post_id) {
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::MAIL, $post_id); Worker::add(Worker::PRIORITY_HIGH, "Notifier", Delivery::MAIL, $post_id);
return intval($post_id); return intval($post_id);
} else { } else {
return -3; return -3;

View file

@ -80,7 +80,7 @@ class Delayed
Logger::notice('Adding post for delayed publishing', ['uid' => $item['uid'], 'delayed' => $delayed, 'uri' => $uri]); Logger::notice('Adding post for delayed publishing', ['uid' => $item['uid'], 'delayed' => $delayed, 'uri' => $uri]);
$wid = Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'DelayedPublish', $item, $notify, $taglist, $attachments, $preparation_mode, $uri); $wid = Worker::add(['priority' => Worker::PRIORITY_HIGH, 'delayed' => $delayed], 'DelayedPublish', $item, $notify, $taglist, $attachments, $preparation_mode, $uri);
if (!$wid) { if (!$wid) {
return 0; return 0;
} }

View file

@ -23,10 +23,12 @@ namespace Friendica\Model\Post;
use Friendica\Content\Text\BBCode; use Friendica\Content\Text\BBCode;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\Photo; use Friendica\Model\Photo;
use Friendica\Model\Post; use Friendica\Model\Post;
@ -56,6 +58,7 @@ class Media
const HTML = 17; const HTML = 17;
const XML = 18; const XML = 18;
const PLAIN = 19; const PLAIN = 19;
const ACTIVITY = 20;
const DOCUMENT = 128; const DOCUMENT = 128;
/** /**
@ -215,6 +218,10 @@ class Media
$media = self::addType($media); $media = self::addType($media);
} }
if (in_array($media['type'], [self::TEXT, self::APPLICATION, self::HTML, self::XML, self::PLAIN])) {
$media = self::addActivity($media);
}
if ($media['type'] == self::HTML) { if ($media['type'] == self::HTML) {
$data = ParseUrl::getSiteinfoCached($media['url'], false); $data = ParseUrl::getSiteinfoCached($media['url'], false);
$media['preview'] = $data['images'][0]['src'] ?? null; $media['preview'] = $data['images'][0]['src'] ?? null;
@ -232,6 +239,65 @@ class Media
return $media; return $media;
} }
/**
* Adds the activity type if the media entry is linked to an activity
*
* @param array $media
* @return array
*/
private static function addActivity(array $media): array
{
$id = Item::fetchByLink($media['url']);
if (empty($id)) {
return $media;
}
$item = Post::selectFirst([], ['id' => $id, 'network' => Protocol::FEDERATED]);
if (empty($item['id'])) {
Logger::debug('Not a federated activity', ['id' => $id, 'uri-id' => $media['uri-id'], 'url' => $media['url']]);
return $media;
}
if (!empty($item['plink']) && Strings::compareLink($item['plink'], $media['url']) &&
parse_url($item['plink'], PHP_URL_HOST) != parse_url($item['uri'], PHP_URL_HOST)) {
Logger::debug('Not a link to an activity', ['uri-id' => $media['uri-id'], 'url' => $media['url'], 'plink' => $item['plink'], 'uri' => $item['uri']]);
return $media;
}
if (in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN])) {
$media['mimetype'] = 'application/activity+json';
} elseif ($item['network'] == Protocol::DIASPORA) {
$media['mimetype'] = 'application/xml';
} else {
$media['mimetype'] = '';
}
$contact = Contact::getById($item['author-id'], ['avatar', 'gsid']);
if (!empty($contact['gsid'])) {
$gserver = DBA::selectFirst('gserver', ['url', 'site_name'], ['id' => $contact['gsid']]);
}
$media['type'] = self::ACTIVITY;
$media['media-uri-id'] = $item['uri-id'];
$media['height'] = null;
$media['width'] = null;
$media['size'] = null;
$media['preview'] = null;
$media['preview-height'] = null;
$media['preview-width'] = null;
$media['description'] = $item['body'];
$media['name'] = $item['title'];
$media['author-url'] = $item['author-link'];
$media['author-name'] = $item['author-name'];
$media['author-image'] = $contact['avatar'] ?? $item['author-avatar'];
$media['publisher-url'] = $gserver['url'] ?? null;
$media['publisher-name'] = $gserver['site_name'] ?? null;
$media['publisher-image'] = null;
Logger::debug('Activity detected', ['uri-id' => $media['uri-id'], 'url' => $media['url'], 'plink' => $item['plink'], 'uri' => $item['uri']]);
return $media;
}
/** /**
* Fetch media data from local resources * Fetch media data from local resources
* @param array $media * @param array $media

View file

@ -153,11 +153,11 @@ class Profile
if ($owner['net-publish'] || $force) { if ($owner['net-publish'] || $force) {
// Update global directory in background // Update global directory in background
if (Search::getGlobalDirectory()) { if (Search::getGlobalDirectory()) {
Worker::add(PRIORITY_LOW, 'Directory', $owner['url']); Worker::add(Worker::PRIORITY_LOW, 'Directory', $owner['url']);
} }
} }
Worker::add(PRIORITY_LOW, 'ProfileUpdate', $uid); Worker::add(Worker::PRIORITY_LOW, 'ProfileUpdate', $uid);
} }
/** /**
@ -865,7 +865,7 @@ class Profile
$a->setContactId($arr['visitor']['id']); $a->setContactId($arr['visitor']['id']);
info(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHostname(), $visitor['name'])); DI::sysmsg()->addInfo(DI::l10n()->t('OpenWebAuth: %1$s welcomes %2$s', DI::baseUrl()->getHostname(), $visitor['name']));
Logger::info('OpenWebAuth: auth success from ' . $visitor['addr']); Logger::info('OpenWebAuth: auth success from ' . $visitor['addr']);
} }

View file

@ -37,7 +37,7 @@ class PushSubscriber
* @return void * @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function publishFeed(int $uid, int $default_priority = PRIORITY_HIGH) public static function publishFeed(int $uid, int $default_priority = Worker::PRIORITY_HIGH)
{ {
$condition = ['push' => 0, 'uid' => $uid]; $condition = ['push' => 0, 'uid' => $uid];
DBA::update('push_subscriber', ['push' => 1, 'next_try' => DBA::NULL_DATETIME], $condition); DBA::update('push_subscriber', ['push' => 1, 'next_try' => DBA::NULL_DATETIME], $condition);
@ -52,7 +52,7 @@ class PushSubscriber
* @return void * @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function requeue(int $default_priority = PRIORITY_HIGH) public static function requeue(int $default_priority = Worker::PRIORITY_HIGH)
{ {
// We'll push to each subscriber that has push > 0, // We'll push to each subscriber that has push > 0,
// i.e. there has been an update (set in notifier.php). // i.e. there has been an update (set in notifier.php).
@ -61,7 +61,7 @@ class PushSubscriber
while ($subscriber = DBA::fetch($subscribers)) { while ($subscriber = DBA::fetch($subscribers)) {
// We always handle retries with low priority // We always handle retries with low priority
if ($subscriber['push'] > 1) { if ($subscriber['push'] > 1) {
$priority = PRIORITY_LOW; $priority = Worker::PRIORITY_LOW;
} else { } else {
$priority = $default_priority; $priority = $default_priority;
} }

View file

@ -152,7 +152,7 @@ class Subscription
$subscriptions = DBA::select('subscription', [], ['uid' => $notification->uid, $type => true]); $subscriptions = DBA::select('subscription', [], ['uid' => $notification->uid, $type => true]);
while ($subscription = DBA::fetch($subscriptions)) { while ($subscription = DBA::fetch($subscriptions)) {
Logger::info('Push notification', ['id' => $subscription['id'], 'uid' => $subscription['uid'], 'type' => $type]); Logger::info('Push notification', ['id' => $subscription['id'], 'uid' => $subscription['uid'], 'type' => $type]);
Worker::add(PRIORITY_HIGH, 'PushSubscription', $subscription['id'], $notification->id); Worker::add(Worker::PRIORITY_HIGH, 'PushSubscription', $subscription['id'], $notification->id);
} }
DBA::close($subscriptions); DBA::close($subscriptions);
} }

View file

@ -994,7 +994,7 @@ class User
try { try {
$authurl = $openid->authUrl(); $authurl = $openid->authUrl();
} catch (Exception $e) { } catch (Exception $e) {
throw new Exception(DI::l10n()->t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . EOL . EOL . DI::l10n()->t('The error message was:') . $e->getMessage(), 0, $e); throw new Exception(DI::l10n()->t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '<br />' . DI::l10n()->t('The error message was:') . $e->getMessage(), 0, $e);
} }
System::externalRedirect($authurl); System::externalRedirect($authurl);
// NOTREACHED // NOTREACHED
@ -1317,7 +1317,7 @@ class User
if (DBA::isResult($profile) && $profile['net-publish'] && Search::getGlobalDirectory()) { if (DBA::isResult($profile) && $profile['net-publish'] && Search::getGlobalDirectory()) {
$url = DI::baseUrl() . '/profile/' . $user['nickname']; $url = DI::baseUrl() . '/profile/' . $user['nickname'];
Worker::add(PRIORITY_LOW, "Directory", $url); Worker::add(Worker::PRIORITY_LOW, "Directory", $url);
} }
$l10n = DI::l10n()->withLang($register['language']); $l10n = DI::l10n()->withLang($register['language']);
@ -1567,14 +1567,14 @@ class User
// The user and related data will be deleted in Friendica\Worker\ExpireAndRemoveUsers // The user and related data will be deleted in Friendica\Worker\ExpireAndRemoveUsers
DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utc('now + 7 day')], ['uid' => $uid]); DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utc('now + 7 day')], ['uid' => $uid]);
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::REMOVAL, $uid); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::REMOVAL, $uid);
// Send an update to the directory // Send an update to the directory
$self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]); $self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]);
Worker::add(PRIORITY_LOW, 'Directory', $self['url']); Worker::add(Worker::PRIORITY_LOW, 'Directory', $self['url']);
// Remove the user relevant data // Remove the user relevant data
Worker::add(PRIORITY_NEGLIGIBLE, 'RemoveUser', $uid); Worker::add(Worker::PRIORITY_NEGLIGIBLE, 'RemoveUser', $uid);
return true; return true;
} }

View file

@ -62,7 +62,7 @@ class Details extends BaseAdmin
$addon = Strings::sanitizeFilePathItem($this->parameters['addon']); $addon = Strings::sanitizeFilePathItem($this->parameters['addon']);
if (!is_file("addon/$addon/$addon.php")) { if (!is_file("addon/$addon/$addon.php")) {
notice(DI::l10n()->t('Addon not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Addon not found.'));
Addon::uninstall($addon); Addon::uninstall($addon);
DI::baseUrl()->redirect('admin/addons'); DI::baseUrl()->redirect('admin/addons');
} }
@ -73,10 +73,10 @@ class Details extends BaseAdmin
// Toggle addon status // Toggle addon status
if (Addon::isEnabled($addon)) { if (Addon::isEnabled($addon)) {
Addon::uninstall($addon); Addon::uninstall($addon);
info(DI::l10n()->t('Addon %s disabled.', $addon)); DI::sysmsg()->addInfo(DI::l10n()->t('Addon %s disabled.', $addon));
} else { } else {
Addon::install($addon); Addon::install($addon);
info(DI::l10n()->t('Addon %s enabled.', $addon)); DI::sysmsg()->addInfo(DI::l10n()->t('Addon %s enabled.', $addon));
} }
DI::baseUrl()->redirect('admin/addons/' . $addon); DI::baseUrl()->redirect('admin/addons/' . $addon);

View file

@ -39,18 +39,18 @@ class Index extends BaseAdmin
switch ($_GET['action']) { switch ($_GET['action']) {
case 'reload': case 'reload':
Addon::reload(); Addon::reload();
info(DI::l10n()->t('Addons reloaded')); DI::sysmsg()->addInfo(DI::l10n()->t('Addons reloaded'));
break; break;
case 'toggle' : case 'toggle' :
$addon = $_GET['addon'] ?? ''; $addon = $_GET['addon'] ?? '';
if (Addon::isEnabled($addon)) { if (Addon::isEnabled($addon)) {
Addon::uninstall($addon); Addon::uninstall($addon);
info(DI::l10n()->t('Addon %s disabled.', $addon)); DI::sysmsg()->addInfo(DI::l10n()->t('Addon %s disabled.', $addon));
} elseif (Addon::install($addon)) { } elseif (Addon::install($addon)) {
info(DI::l10n()->t('Addon %s enabled.', $addon)); DI::sysmsg()->addInfo(DI::l10n()->t('Addon %s enabled.', $addon));
} else { } else {
notice(DI::l10n()->t('Addon %s failed to install.', $addon)); DI::sysmsg()->addNotice(DI::l10n()->t('Addon %s failed to install.', $addon));
} }
break; break;

View file

@ -46,12 +46,12 @@ class Contact extends BaseAdmin
if (!empty($_POST['page_contactblock_block'])) { if (!empty($_POST['page_contactblock_block'])) {
$contact = Model\Contact::getByURL($contact_url, null, ['id', 'nurl']); $contact = Model\Contact::getByURL($contact_url, null, ['id', 'nurl']);
if (empty($contact)) { if (empty($contact)) {
notice(DI::l10n()->t('Could not find any contact entry for this URL (%s)', $contact_url)); DI::sysmsg()->addNotice(DI::l10n()->t('Could not find any contact entry for this URL (%s)', $contact_url));
DI::baseUrl()->redirect('admin/blocklist/contact'); DI::baseUrl()->redirect('admin/blocklist/contact');
} }
if (Network::isLocalLink($contact['nurl'])) { if (Network::isLocalLink($contact['nurl'])) {
notice(DI::l10n()->t('You can\'t block a local contact, please block the user instead')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t block a local contact, please block the user instead'));
DI::baseUrl()->redirect('admin/blocklist/contact'); DI::baseUrl()->redirect('admin/blocklist/contact');
} }
@ -59,18 +59,18 @@ class Contact extends BaseAdmin
if ($block_purge) { if ($block_purge) {
foreach (Model\Contact::selectToArray(['id'], ['nurl' => $contact['nurl']]) as $contact) { foreach (Model\Contact::selectToArray(['id'], ['nurl' => $contact['nurl']]) as $contact) {
Worker::add(PRIORITY_LOW, 'Contact\RemoveContent', $contact['id']); Worker::add(Worker::PRIORITY_LOW, 'Contact\RemoveContent', $contact['id']);
} }
} }
info(DI::l10n()->t('The contact has been blocked from the node')); DI::sysmsg()->addInfo(DI::l10n()->t('The contact has been blocked from the node'));
} }
if (!empty($_POST['page_contactblock_unblock'])) { if (!empty($_POST['page_contactblock_unblock'])) {
foreach ($contacts as $uid) { foreach ($contacts as $uid) {
Model\Contact::unblock($uid); Model\Contact::unblock($uid);
} }
info(DI::l10n()->tt('%s contact unblocked', '%s contacts unblocked', count($contacts))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s contact unblocked', '%s contacts unblocked', count($contacts)));
} }
DI::baseUrl()->redirect('admin/blocklist/contact'); DI::baseUrl()->redirect('admin/blocklist/contact');

View file

@ -82,7 +82,7 @@ class Add extends BaseAdmin
if (!empty($request['purge'])) { if (!empty($request['purge'])) {
$gservers = GServer::listByDomainPattern($pattern); $gservers = GServer::listByDomainPattern($pattern);
foreach (Contact::selectToArray(['id'], ['gsid' => array_column($gservers, 'id')]) as $contact) { foreach (Contact::selectToArray(['id'], ['gsid' => array_column($gservers, 'id')]) as $contact) {
Worker::add(PRIORITY_LOW, 'Contact\RemoveContent', $contact['id']); Worker::add(Worker::PRIORITY_LOW, 'Contact\RemoveContent', $contact['id']);
} }
$this->sysmsg->addInfo($this->l10n->tt('%s server scheduled to be purged.', '%s servers scheduled to be purged.', count($gservers))); $this->sysmsg->addInfo($this->l10n->tt('%s server scheduled to be purged.', '%s servers scheduled to be purged.', count($gservers)));

View file

@ -48,7 +48,7 @@ class DBSync extends BaseAdmin
DI::config()->set('system', 'build', intval($curr) + 1); DI::config()->set('system', 'build', intval($curr) + 1);
} }
info(DI::l10n()->t('Update has been marked successful')); DI::sysmsg()->addInfo(DI::l10n()->t('Update has been marked successful'));
} }
break; break;

View file

@ -21,6 +21,7 @@
namespace Friendica\Module\Admin; namespace Friendica\Module\Admin;
use Friendica\App;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Database\DBA; use Friendica\Database\DBA;
@ -202,7 +203,7 @@ class Federation extends BaseAdmin
'$page' => DI::l10n()->t('Federation Statistics'), '$page' => DI::l10n()->t('Federation Statistics'),
'$intro' => $intro, '$intro' => $intro,
'$counts' => $counts, '$counts' => $counts,
'$version' => FRIENDICA_VERSION, '$version' => App::VERSION,
'$legendtext' => DI::l10n()->tt('Currently this node is aware of %2$s node (%3$s active users last month, %4$s active users last six months, %5$s registered users in total) from the following platforms:', 'Currently this node is aware of %2$s nodes (%3$s active users last month, %4$s active users last six months, %5$s registered users in total) from the following platforms:', $total, number_format($total), number_format($month), number_format($halfyear), number_format($users)), '$legendtext' => DI::l10n()->tt('Currently this node is aware of %2$s node (%3$s active users last month, %4$s active users last six months, %5$s registered users in total) from the following platforms:', 'Currently this node is aware of %2$s nodes (%3$s active users last month, %4$s active users last six months, %5$s registered users in total) from the following platforms:', $total, number_format($total), number_format($month), number_format($halfyear), number_format($users)),
]); ]);
} }

View file

@ -50,7 +50,7 @@ class Delete extends BaseAdmin
Item::markForDeletion(['guid' => $guid]); Item::markForDeletion(['guid' => $guid]);
} }
info(DI::l10n()->t('Item marked for deletion.')); DI::sysmsg()->addInfo(DI::l10n()->t('Item marked for deletion.'));
DI::baseUrl()->redirect('admin/item/delete'); DI::baseUrl()->redirect('admin/item/delete');
} }

View file

@ -44,7 +44,7 @@ class Settings extends BaseAdmin
if (is_file($logfile) && if (is_file($logfile) &&
!is_writeable($logfile)) { !is_writeable($logfile)) {
notice(DI::l10n()->t('The logfile \'%s\' is not writable. No logging possible', $logfile)); DI::sysmsg()->addNotice(DI::l10n()->t('The logfile \'%s\' is not writable. No logging possible', $logfile));
return; return;
} }

View file

@ -22,7 +22,6 @@
namespace Friendica\Module\Admin; namespace Friendica\Module\Admin;
use Friendica\App; use Friendica\App;
use Friendica\Core\Relocate;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Search; use Friendica\Core\Search;
use Friendica\Core\System; use Friendica\Core\System;
@ -33,12 +32,11 @@ use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\BaseAdmin; use Friendica\Module\BaseAdmin;
use Friendica\Module\Conversation\Community;
use Friendica\Module\Register; use Friendica\Module\Register;
use Friendica\Protocol\Relay; use Friendica\Protocol\Relay;
use Friendica\Util\BasePath; use Friendica\Util\BasePath;
use Friendica\Util\EMailer\MailBuilder; use Friendica\Util\EMailer\MailBuilder;
use Friendica\Util\Strings;
use Friendica\Worker\Delivery;
require_once __DIR__ . '/../../../boot.php'; require_once __DIR__ . '/../../../boot.php';
@ -53,7 +51,7 @@ class Site extends BaseAdmin
$a = DI::app(); $a = DI::app();
if (!empty($_POST['republish_directory'])) { if (!empty($_POST['republish_directory'])) {
Worker::add(PRIORITY_LOW, 'Directory'); Worker::add(Worker::PRIORITY_LOW, 'Directory');
return; return;
} }
@ -150,7 +148,7 @@ class Site extends BaseAdmin
// Has the directory url changed? If yes, then resubmit the existing profiles there // Has the directory url changed? If yes, then resubmit the existing profiles there
if ($global_directory != DI::config()->get('system', 'directory') && ($global_directory != '')) { if ($global_directory != DI::config()->get('system', 'directory') && ($global_directory != '')) {
DI::config()->set('system', 'directory', $global_directory); DI::config()->set('system', 'directory', $global_directory);
Worker::add(PRIORITY_LOW, 'Directory'); Worker::add(Worker::PRIORITY_LOW, 'Directory');
} }
if (DI::baseUrl()->getUrlPath() != "") { if (DI::baseUrl()->getUrlPath() != "") {
@ -364,11 +362,11 @@ class Site extends BaseAdmin
/* Community page style */ /* Community page style */
$community_page_style_choices = [ $community_page_style_choices = [
CP_NO_INTERNAL_COMMUNITY => DI::l10n()->t('No community page for local users'), Community::DISABLED => DI::l10n()->t('No community page'),
CP_NO_COMMUNITY_PAGE => DI::l10n()->t('No community page'), Community::DISABLED_VISITOR => DI::l10n()->t('No community page for visitors'),
CP_USERS_ON_SERVER => DI::l10n()->t('Public postings from users of this site'), Community::LOCAL => DI::l10n()->t('Public postings from users of this site'),
CP_GLOBAL_COMMUNITY => DI::l10n()->t('Public postings from the federated network'), Community::GLOBAL => DI::l10n()->t('Public postings from the federated network'),
CP_USERS_AND_GLOBAL => DI::l10n()->t('Public postings from local users and the federated network') Community::LOCAL_AND_GLOBAL => DI::l10n()->t('Public postings from local users and the federated network')
]; ];
/* get user names to make the install a personal install of X */ /* get user names to make the install a personal install of X */

View file

@ -43,7 +43,7 @@ class Storage extends BaseAdmin
/** @var ICanConfigureStorage|false $newStorageConfig */ /** @var ICanConfigureStorage|false $newStorageConfig */
$newStorageConfig = DI::storageManager()->getConfigurationByName($storagebackend); $newStorageConfig = DI::storageManager()->getConfigurationByName($storagebackend);
} catch (InvalidClassStorageException $storageException) { } catch (InvalidClassStorageException $storageException) {
notice(DI::l10n()->t('Storage backend, %s is invalid.', $storagebackend)); DI::sysmsg()->addNotice(DI::l10n()->t('Storage backend, %s is invalid.', $storagebackend));
DI::baseUrl()->redirect('admin/storage'); DI::baseUrl()->redirect('admin/storage');
} }
@ -70,7 +70,7 @@ class Storage extends BaseAdmin
$storage_form_errors = $newStorageConfig->saveOptions($storage_opts_data); $storage_form_errors = $newStorageConfig->saveOptions($storage_opts_data);
if (count($storage_form_errors)) { if (count($storage_form_errors)) {
foreach ($storage_form_errors as $name => $err) { foreach ($storage_form_errors as $name => $err) {
notice(DI::l10n()->t('Storage backend %s error: %s', $storage_opts[$name][1], $err)); DI::sysmsg()->addNotice(DI::l10n()->t('Storage backend %s error: %s', $storage_opts[$name][1], $err));
} }
DI::baseUrl()->redirect('admin/storage'); DI::baseUrl()->redirect('admin/storage');
} }
@ -81,10 +81,10 @@ class Storage extends BaseAdmin
$newstorage = DI::storageManager()->getWritableStorageByName($storagebackend); $newstorage = DI::storageManager()->getWritableStorageByName($storagebackend);
if (!DI::storageManager()->setBackend($newstorage)) { if (!DI::storageManager()->setBackend($newstorage)) {
notice(DI::l10n()->t('Invalid storage backend setting value.')); DI::sysmsg()->addNotice(DI::l10n()->t('Invalid storage backend setting value.'));
} }
} catch (InvalidClassStorageException $storageException) { } catch (InvalidClassStorageException $storageException) {
notice(DI::l10n()->t('Invalid storage backend setting value.')); DI::sysmsg()->addNotice(DI::l10n()->t('Invalid storage backend setting value.'));
} }
} }

View file

@ -21,6 +21,7 @@
namespace Friendica\Module\Admin; namespace Friendica\Module\Admin;
use Friendica\App;
use Friendica\Core\Addon; use Friendica\Core\Addon;
use Friendica\Core\Config\ValueObject\Cache; use Friendica\Core\Config\ValueObject\Cache;
use Friendica\Core\Logger; use Friendica\Core\Logger;
@ -79,8 +80,8 @@ class Summary extends BaseAdmin
// the local version of Friendica. Check is opt-in, source may be stable or develop branch // the local version of Friendica. Check is opt-in, source may be stable or develop branch
if (DI::config()->get('system', 'check_new_version_url', 'none') != 'none') { if (DI::config()->get('system', 'check_new_version_url', 'none') != 'none') {
$gitversion = DI::config()->get('system', 'git_friendica_version'); $gitversion = DI::config()->get('system', 'git_friendica_version');
if (version_compare(FRIENDICA_VERSION, $gitversion) < 0) { if (version_compare(App::VERSION, $gitversion) < 0) {
$warningtext[] = DI::l10n()->t('There is a new version of Friendica available for download. Your current version is %1$s, upstream version is %2$s', FRIENDICA_VERSION, $gitversion); $warningtext[] = DI::l10n()->t('There is a new version of Friendica available for download. Your current version is %1$s, upstream version is %2$s', App::VERSION, $gitversion);
} }
} }
@ -236,9 +237,9 @@ class Summary extends BaseAdmin
'$users' => [DI::l10n()->t('Registered users'), $users], '$users' => [DI::l10n()->t('Registered users'), $users],
'$accounts' => $accounts, '$accounts' => $accounts,
'$pending' => [DI::l10n()->t('Pending registrations'), $pending], '$pending' => [DI::l10n()->t('Pending registrations'), $pending],
'$version' => [DI::l10n()->t('Version'), FRIENDICA_VERSION], '$version' => [DI::l10n()->t('Version'), App::VERSION],
'$platform' => FRIENDICA_PLATFORM, '$platform' => App::PLATFORM,
'$codename' => FRIENDICA_CODENAME, '$codename' => App::CODENAME,
'$build' => DI::config()->get('system', 'build'), '$build' => DI::config()->get('system', 'build'),
'$addons' => [DI::l10n()->t('Active addons'), Addon::getEnabledList()], '$addons' => [DI::l10n()->t('Active addons'), Addon::getEnabledList()],
'$serversettings' => $server_settings, '$serversettings' => $server_settings,

View file

@ -36,7 +36,7 @@ class Details extends BaseAdmin
$theme = Strings::sanitizeFilePathItem($this->parameters['theme']); $theme = Strings::sanitizeFilePathItem($this->parameters['theme']);
if (!is_dir("view/theme/$theme")) { if (!is_dir("view/theme/$theme")) {
notice(DI::l10n()->t("Item not found.")); DI::sysmsg()->addNotice(DI::l10n()->t("Item not found."));
return ''; return '';
} }
@ -54,11 +54,11 @@ class Details extends BaseAdmin
if ($isEnabled) { if ($isEnabled) {
Theme::uninstall($theme); Theme::uninstall($theme);
info(DI::l10n()->t('Theme %s disabled.', $theme)); DI::sysmsg()->addInfo(DI::l10n()->t('Theme %s disabled.', $theme));
} elseif (Theme::install($theme)) { } elseif (Theme::install($theme)) {
info(DI::l10n()->t('Theme %s successfully enabled.', $theme)); DI::sysmsg()->addInfo(DI::l10n()->t('Theme %s successfully enabled.', $theme));
} else { } else {
notice(DI::l10n()->t('Theme %s failed to install.', $theme)); DI::sysmsg()->addNotice(DI::l10n()->t('Theme %s failed to install.', $theme));
} }
DI::baseUrl()->redirect('admin/themes/' . $theme); DI::baseUrl()->redirect('admin/themes/' . $theme);

View file

@ -77,7 +77,7 @@ class Embed extends BaseAdmin
$theme = Strings::sanitizeFilePathItem($this->parameters['theme']); $theme = Strings::sanitizeFilePathItem($this->parameters['theme']);
if (!is_dir("view/theme/$theme")) { if (!is_dir("view/theme/$theme")) {
notice($this->t('Unknown theme.')); DI::sysmsg()->addNotice($this->t('Unknown theme.'));
return ''; return '';
} }

View file

@ -48,7 +48,7 @@ class Index extends BaseAdmin
} }
Theme::setAllowedList($allowed_themes); Theme::setAllowedList($allowed_themes);
info(DI::l10n()->t('Themes reloaded')); DI::sysmsg()->addInfo(DI::l10n()->t('Themes reloaded'));
break; break;
case 'toggle' : case 'toggle' :
@ -56,17 +56,17 @@ class Index extends BaseAdmin
if ($theme) { if ($theme) {
$theme = Strings::sanitizeFilePathItem($theme); $theme = Strings::sanitizeFilePathItem($theme);
if (!is_dir("view/theme/$theme")) { if (!is_dir("view/theme/$theme")) {
notice(DI::l10n()->t('Item not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Item not found.'));
return ''; return '';
} }
if (in_array($theme, Theme::getAllowedList())) { if (in_array($theme, Theme::getAllowedList())) {
Theme::uninstall($theme); Theme::uninstall($theme);
info(DI::l10n()->t('Theme %s disabled.', $theme)); DI::sysmsg()->addInfo(DI::l10n()->t('Theme %s disabled.', $theme));
} elseif (Theme::install($theme)) { } elseif (Theme::install($theme)) {
info(DI::l10n()->t('Theme %s successfully enabled.', $theme)); DI::sysmsg()->addInfo(DI::l10n()->t('Theme %s successfully enabled.', $theme));
} else { } else {
notice(DI::l10n()->t('Theme %s failed to install.', $theme)); DI::sysmsg()->addNotice(DI::l10n()->t('Theme %s failed to install.', $theme));
} }
} }

View file

@ -42,7 +42,7 @@ class Active extends BaseUsers
foreach ($users as $uid) { foreach ($users as $uid) {
User::block($uid); User::block($uid);
} }
info(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users)));
} }
if (!empty($_POST['page_users_delete'])) { if (!empty($_POST['page_users_delete'])) {
@ -50,11 +50,11 @@ class Active extends BaseUsers
if (local_user() != $uid) { if (local_user() != $uid) {
User::remove($uid); User::remove($uid);
} else { } else {
notice(DI::l10n()->t('You can\'t remove yourself')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t remove yourself'));
} }
} }
info(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users)));
} }
DI::baseUrl()->redirect(DI::args()->getQueryString()); DI::baseUrl()->redirect(DI::args()->getQueryString());
@ -70,7 +70,7 @@ class Active extends BaseUsers
if ($uid) { if ($uid) {
$user = User::getById($uid, ['username', 'blocked']); $user = User::getById($uid, ['username', 'blocked']);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t('User not found')); DI::sysmsg()->addNotice(DI::l10n()->t('User not found'));
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
return ''; // NOTREACHED return ''; // NOTREACHED
} }
@ -83,9 +83,9 @@ class Active extends BaseUsers
// delete user // delete user
User::remove($uid); User::remove($uid);
notice(DI::l10n()->t('User "%s" deleted', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" deleted', $user['username']));
} else { } else {
notice(DI::l10n()->t('You can\'t remove yourself')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t remove yourself'));
} }
DI::baseUrl()->redirect('admin/users/active'); DI::baseUrl()->redirect('admin/users/active');
@ -93,7 +93,7 @@ class Active extends BaseUsers
case 'block': case 'block':
self::checkFormSecurityTokenRedirectOnError('admin/users/active', 'admin_users_active', 't'); self::checkFormSecurityTokenRedirectOnError('admin/users/active', 'admin_users_active', 't');
User::block($uid); User::block($uid);
notice(DI::l10n()->t('User "%s" blocked', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" blocked', $user['username']));
DI::baseUrl()->redirect('admin/users/active'); DI::baseUrl()->redirect('admin/users/active');
break; break;
} }

View file

@ -43,7 +43,7 @@ class Blocked extends BaseUsers
foreach ($users as $uid) { foreach ($users as $uid) {
User::block($uid, false); User::block($uid, false);
} }
info(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users)));
} }
if (!empty($_POST['page_users_delete'])) { if (!empty($_POST['page_users_delete'])) {
@ -51,11 +51,11 @@ class Blocked extends BaseUsers
if (local_user() != $uid) { if (local_user() != $uid) {
User::remove($uid); User::remove($uid);
} else { } else {
notice(DI::l10n()->t('You can\'t remove yourself')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t remove yourself'));
} }
} }
info(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users)));
} }
DI::baseUrl()->redirect('admin/users/blocked'); DI::baseUrl()->redirect('admin/users/blocked');
@ -71,7 +71,7 @@ class Blocked extends BaseUsers
if ($uid) { if ($uid) {
$user = User::getById($uid, ['username', 'blocked']); $user = User::getById($uid, ['username', 'blocked']);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t('User not found')); DI::sysmsg()->addNotice(DI::l10n()->t('User not found'));
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
return ''; // NOTREACHED return ''; // NOTREACHED
} }
@ -84,16 +84,16 @@ class Blocked extends BaseUsers
// delete user // delete user
User::remove($uid); User::remove($uid);
notice(DI::l10n()->t('User "%s" deleted', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" deleted', $user['username']));
} else { } else {
notice(DI::l10n()->t('You can\'t remove yourself')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t remove yourself'));
} }
DI::baseUrl()->redirect('admin/users/blocked'); DI::baseUrl()->redirect('admin/users/blocked');
break; break;
case 'unblock': case 'unblock':
self::checkFormSecurityTokenRedirectOnError('/admin/users/blocked', 'admin_users_blocked', 't'); self::checkFormSecurityTokenRedirectOnError('/admin/users/blocked', 'admin_users_blocked', 't');
User::block($uid, false); User::block($uid, false);
notice(DI::l10n()->t('User "%s" unblocked', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" unblocked', $user['username']));
DI::baseUrl()->redirect('admin/users/blocked'); DI::baseUrl()->redirect('admin/users/blocked');
break; break;
} }

View file

@ -44,7 +44,7 @@ class Create extends BaseUsers
User::createMinimal($nu_name, $nu_email, $nu_nickname, $nu_language); User::createMinimal($nu_name, $nu_email, $nu_nickname, $nu_language);
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
} catch (\Exception $ex) { } catch (\Exception $ex) {
notice($ex->getMessage()); DI::sysmsg()->addNotice($ex->getMessage());
} }
} }

View file

@ -42,14 +42,14 @@ class Index extends BaseUsers
foreach ($users as $uid) { foreach ($users as $uid) {
User::block($uid); User::block($uid);
} }
info(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user blocked', '%s users blocked', count($users)));
} }
if (!empty($_POST['page_users_unblock'])) { if (!empty($_POST['page_users_unblock'])) {
foreach ($users as $uid) { foreach ($users as $uid) {
User::block($uid, false); User::block($uid, false);
} }
info(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user unblocked', '%s users unblocked', count($users)));
} }
if (!empty($_POST['page_users_delete'])) { if (!empty($_POST['page_users_delete'])) {
@ -57,11 +57,11 @@ class Index extends BaseUsers
if (local_user() != $uid) { if (local_user() != $uid) {
User::remove($uid); User::remove($uid);
} else { } else {
notice(DI::l10n()->t('You can\'t remove yourself')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t remove yourself'));
} }
} }
info(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user deleted', '%s users deleted', count($users)));
} }
DI::baseUrl()->redirect(DI::args()->getQueryString()); DI::baseUrl()->redirect(DI::args()->getQueryString());
@ -77,7 +77,7 @@ class Index extends BaseUsers
if ($uid) { if ($uid) {
$user = User::getById($uid, ['username', 'blocked']); $user = User::getById($uid, ['username', 'blocked']);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t('User not found')); DI::sysmsg()->addNotice(DI::l10n()->t('User not found'));
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
return ''; // NOTREACHED return ''; // NOTREACHED
} }
@ -90,9 +90,9 @@ class Index extends BaseUsers
// delete user // delete user
User::remove($uid); User::remove($uid);
notice(DI::l10n()->t('User "%s" deleted', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" deleted', $user['username']));
} else { } else {
notice(DI::l10n()->t('You can\'t remove yourself')); DI::sysmsg()->addNotice(DI::l10n()->t('You can\'t remove yourself'));
} }
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
@ -100,13 +100,13 @@ class Index extends BaseUsers
case 'block': case 'block':
self::checkFormSecurityTokenRedirectOnError('admin/users', 'admin_users', 't'); self::checkFormSecurityTokenRedirectOnError('admin/users', 'admin_users', 't');
User::block($uid); User::block($uid);
notice(DI::l10n()->t('User "%s" blocked', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" blocked', $user['username']));
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
break; break;
case 'unblock': case 'unblock':
self::checkFormSecurityTokenRedirectOnError('admin/users', 'admin_users', 't'); self::checkFormSecurityTokenRedirectOnError('admin/users', 'admin_users', 't');
User::block($uid, false); User::block($uid, false);
notice(DI::l10n()->t('User "%s" unblocked', $user['username'])); DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" unblocked', $user['username']));
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
break; break;
} }

View file

@ -45,14 +45,14 @@ class Pending extends BaseUsers
foreach ($pending as $hash) { foreach ($pending as $hash) {
User::allow($hash); User::allow($hash);
} }
info(DI::l10n()->tt('%s user approved', '%s users approved', count($pending))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s user approved', '%s users approved', count($pending)));
} }
if (!empty($_POST['page_users_deny'])) { if (!empty($_POST['page_users_deny'])) {
foreach ($pending as $hash) { foreach ($pending as $hash) {
User::deny($hash); User::deny($hash);
} }
info(DI::l10n()->tt('%s registration revoked', '%s registrations revoked', count($pending))); DI::sysmsg()->addInfo(DI::l10n()->tt('%s registration revoked', '%s registrations revoked', count($pending)));
} }
DI::baseUrl()->redirect('admin/users/pending'); DI::baseUrl()->redirect('admin/users/pending');
@ -68,7 +68,7 @@ class Pending extends BaseUsers
if ($uid) { if ($uid) {
$user = User::getById($uid, ['username', 'blocked']); $user = User::getById($uid, ['username', 'blocked']);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t('User not found')); DI::sysmsg()->addNotice(DI::l10n()->t('User not found'));
DI::baseUrl()->redirect('admin/users'); DI::baseUrl()->redirect('admin/users');
return ''; // NOTREACHED return ''; // NOTREACHED
} }
@ -78,13 +78,13 @@ class Pending extends BaseUsers
case 'allow': case 'allow':
self::checkFormSecurityTokenRedirectOnError('/admin/users/pending', 'admin_users_pending', 't'); self::checkFormSecurityTokenRedirectOnError('/admin/users/pending', 'admin_users_pending', 't');
User::allow(Register::getPendingForUser($uid)['hash'] ?? ''); User::allow(Register::getPendingForUser($uid)['hash'] ?? '');
notice(DI::l10n()->t('Account approved.')); DI::sysmsg()->addNotice(DI::l10n()->t('Account approved.'));
DI::baseUrl()->redirect('admin/users/pending'); DI::baseUrl()->redirect('admin/users/pending');
break; break;
case 'deny': case 'deny':
self::checkFormSecurityTokenRedirectOnError('/admin/users/pending', 'admin_users_pending', 't'); self::checkFormSecurityTokenRedirectOnError('/admin/users/pending', 'admin_users_pending', 't');
User::deny(Register::getPendingForUser($uid)['hash'] ?? ''); User::deny(Register::getPendingForUser($uid)['hash'] ?? '');
notice(DI::l10n()->t('Registration revoked')); DI::sysmsg()->addNotice(DI::l10n()->t('Registration revoked'));
DI::baseUrl()->redirect('admin/users/pending'); DI::baseUrl()->redirect('admin/users/pending');
break; break;
} }

View file

@ -104,7 +104,7 @@ class Create extends BaseApi
$item = ['network' => Protocol::DFRN, 'protocol' => Conversation::PARCEL_DIRECT, 'direction' => Conversation::PUSH]; $item = ['network' => Protocol::DFRN, 'protocol' => Conversation::PARCEL_DIRECT, 'direction' => Conversation::PUSH];
$item = Event::getItemArrayForId($event_id, $item); $item = Event::getItemArrayForId($event_id, $item);
if (Item::insert($item)) { if (Item::insert($item)) {
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, (int)$item['uri-id'], $uid); Worker::add(Worker::PRIORITY_HIGH, "Notifier", Delivery::POST, (int)$item['uri-id'], $uid);
} }
} }

View file

@ -53,9 +53,8 @@ class Config extends BaseApi
'sslserver' => null, 'sslserver' => null,
'ssl' => DI::config()->get('system', 'ssl_policy') == App\BaseURL::SSL_POLICY_FULL ? 'always' : '0', 'ssl' => DI::config()->get('system', 'ssl_policy') == App\BaseURL::SSL_POLICY_FULL ? 'always' : '0',
'friendica' => [ 'friendica' => [
'FRIENDICA_PLATFORM' => FRIENDICA_PLATFORM, 'FRIENDICA_PLATFORM' => App::PLATFORM,
'FRIENDICA_VERSION' => FRIENDICA_VERSION, 'FRIENDICA_VERSION' => App::VERSION,
'DFRN_PROTOCOL_VERSION' => DFRN_PROTOCOL_VERSION,
'DB_UPDATE_VERSION' => DB_UPDATE_VERSION, 'DB_UPDATE_VERSION' => DB_UPDATE_VERSION,
] ]
], ],

View file

@ -25,6 +25,7 @@ use Friendica\App\Router;
use Friendica\Content\Text\Markdown; use Friendica\Content\Text\Markdown;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
@ -204,7 +205,7 @@ class Statuses extends BaseApi
if (!empty($request['scheduled_at'])) { if (!empty($request['scheduled_at'])) {
$item['guid'] = Item::guid($item, true); $item['guid'] = Item::guid($item, true);
$item['uri'] = Item::newURI($item['guid']); $item['uri'] = Item::newURI($item['guid']);
$id = Post\Delayed::add($item['uri'], $item, PRIORITY_HIGH, Post\Delayed::PREPARED, $request['scheduled_at']); $id = Post\Delayed::add($item['uri'], $item, Worker::PRIORITY_HIGH, Post\Delayed::PREPARED, $request['scheduled_at']);
if (empty($id)) { if (empty($id)) {
DI::mstdnError()->InternalError(); DI::mstdnError()->InternalError();
} }

View file

@ -28,6 +28,7 @@ use Friendica\Content\Nav;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Util\Profiler; use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -51,7 +52,7 @@ class Apps extends BaseModule
$apps = Nav::getAppMenu(); $apps = Nav::getAppMenu();
if (count($apps) == 0) { if (count($apps) == 0) {
notice($this->t('No installed applications.')); DI::sysmsg()->addNotice($this->t('No installed applications.'));
} }
$tpl = Renderer::getMarkupTemplate('apps.tpl'); $tpl = Renderer::getMarkupTemplate('apps.tpl');

View file

@ -54,7 +54,7 @@ abstract class BaseAdmin extends BaseModule
{ {
if (!local_user()) { if (!local_user()) {
if ($interactive) { if ($interactive) {
notice(DI::l10n()->t('Please login to continue.')); DI::sysmsg()->addNotice(DI::l10n()->t('Please login to continue.'));
Session::set('return_path', DI::args()->getQueryString()); Session::set('return_path', DI::args()->getQueryString());
DI::baseUrl()->redirect('login'); DI::baseUrl()->redirect('login');
} else { } else {

View file

@ -116,7 +116,7 @@ class BaseSearch extends BaseModule
protected static function printResult(ResultList $results, Pager $pager, string $header = ''): string protected static function printResult(ResultList $results, Pager $pager, string $header = ''): string
{ {
if ($results->getTotal() == 0) { if ($results->getTotal() == 0) {
notice(DI::l10n()->t('No matches')); DI::sysmsg()->addNotice(DI::l10n()->t('No matches'));
return ''; return '';
} }

View file

@ -85,7 +85,7 @@ class Contact extends BaseModule
} }
} }
if ($count_actions > 0) { if ($count_actions > 0) {
info(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions)); DI::sysmsg()->addInfo(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions));
} }
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
@ -126,9 +126,9 @@ class Contact extends BaseModule
} }
// pull feed and consume it, which should subscribe to the hub. // pull feed and consume it, which should subscribe to the hub.
Worker::add(PRIORITY_HIGH, 'OnePoll', $contact_id, 'force'); Worker::add(Worker::PRIORITY_HIGH, 'OnePoll', $contact_id, 'force');
} else { } else {
Worker::add(PRIORITY_HIGH, 'UpdateContact', $contact_id); Worker::add(Worker::PRIORITY_HIGH, 'UpdateContact', $contact_id);
} }
} }

View file

@ -30,6 +30,7 @@ use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session; use Friendica\Core\Session;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Module\Contact; use Friendica\Module\Contact;
use Friendica\Module\Response; use Friendica\Module\Response;
@ -96,7 +97,7 @@ class Advanced extends BaseModule
} }
if (!$r) { if (!$r) {
notice($this->t('Contact update failed.')); DI::sysmsg()->addNotice($this->t('Contact update failed.'));
} }
} }

View file

@ -35,6 +35,7 @@ use Friendica\Core\L10n;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Group; use Friendica\Model\Group;
use Friendica\Module; use Friendica\Module;
@ -124,7 +125,7 @@ class Profile extends BaseModule
} }
if (!Contact::update($fields, ['id' => $cdata['user'], 'uid' => local_user()])) { if (!Contact::update($fields, ['id' => $cdata['user'], 'uid' => local_user()])) {
notice($this->t('Failed to update contact record.')); DI::sysmsg()->addNotice($this->t('Failed to update contact record.'));
} }
} }
@ -182,7 +183,7 @@ class Profile extends BaseModule
} }
// @TODO: add $this->localRelationship->save($localRelationship); // @TODO: add $this->localRelationship->save($localRelationship);
info($message); DI::sysmsg()->addInfo($message);
} }
if ($cmd === 'ignore') { if ($cmd === 'ignore') {
@ -198,7 +199,7 @@ class Profile extends BaseModule
} }
// @TODO: add $this->localRelationship->save($localRelationship); // @TODO: add $this->localRelationship->save($localRelationship);
info($message); DI::sysmsg()->addInfo($message);
} }
$this->baseUrl->redirect('contact/' . $contact['id']); $this->baseUrl->redirect('contact/' . $contact['id']);

View file

@ -28,6 +28,7 @@ use Friendica\Core\L10n;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Module\Contact; use Friendica\Module\Contact;
use Friendica\Module\Response; use Friendica\Module\Response;
@ -87,7 +88,7 @@ class Revoke extends BaseModule
Model\Contact::revokeFollow($this->contact); Model\Contact::revokeFollow($this->contact);
notice($this->t('Follow was successfully revoked.')); DI::sysmsg()->addNotice($this->t('Follow was successfully revoked.'));
$this->baseUrl->redirect('contact/' . $this->parameters['id']); $this->baseUrl->redirect('contact/' . $this->parameters['id']);
} }

View file

@ -40,6 +40,21 @@ use Friendica\Network\HTTPException;
class Community extends BaseModule class Community extends BaseModule
{ {
/**
* @name CP
*
* Type of the community page
* @{
*/
const DISABLED = -2;
const DISABLED_VISITOR = -1;
const LOCAL = 0;
const GLOBAL = 1;
const LOCAL_AND_GLOBAL = 2;
/**
* @}
*/
protected static $page_style; protected static $page_style;
protected static $content; protected static $content;
protected static $accountTypeString; protected static $accountTypeString;
@ -69,7 +84,7 @@ class Community extends BaseModule
if (empty($_GET['mode']) || ($_GET['mode'] != 'raw')) { if (empty($_GET['mode']) || ($_GET['mode'] != 'raw')) {
$tabs = []; $tabs = [];
if ((Session::isAuthenticated() || in_array(self::$page_style, [CP_USERS_AND_GLOBAL, CP_USERS_ON_SERVER])) && empty(DI::config()->get('system', 'singleuser'))) { if ((Session::isAuthenticated() || in_array(self::$page_style, [self::LOCAL_AND_GLOBAL, self::LOCAL])) && empty(DI::config()->get('system', 'singleuser'))) {
$tabs[] = [ $tabs[] = [
'label' => DI::l10n()->t('Local Community'), 'label' => DI::l10n()->t('Local Community'),
'url' => 'community/local', 'url' => 'community/local',
@ -80,7 +95,7 @@ class Community extends BaseModule
]; ];
} }
if (Session::isAuthenticated() || in_array(self::$page_style, [CP_USERS_AND_GLOBAL, CP_GLOBAL_COMMUNITY])) { if (Session::isAuthenticated() || in_array(self::$page_style, [self::LOCAL_AND_GLOBAL, self::GLOBAL])) {
$tabs[] = [ $tabs[] = [
'label' => DI::l10n()->t('Global Community'), 'label' => DI::l10n()->t('Global Community'),
'url' => 'community/global', 'url' => 'community/global',
@ -140,7 +155,7 @@ class Community extends BaseModule
$items = self::getItems(); $items = self::getItems();
if (!DBA::isResult($items)) { if (!DBA::isResult($items)) {
notice(DI::l10n()->t('No results.')); DI::sysmsg()->addNotice(DI::l10n()->t('No results.'));
return $o; return $o;
} }
@ -177,7 +192,7 @@ class Community extends BaseModule
self::$page_style = DI::config()->get('system', 'community_page_style'); self::$page_style = DI::config()->get('system', 'community_page_style');
if (self::$page_style == CP_NO_INTERNAL_COMMUNITY) { if (self::$page_style == self::DISABLED) {
throw new HTTPException\ForbiddenException(DI::l10n()->t('Access denied.')); throw new HTTPException\ForbiddenException(DI::l10n()->t('Access denied.'));
} }
@ -191,7 +206,7 @@ class Community extends BaseModule
self::$content = 'global'; self::$content = 'global';
} else { } else {
// When only the global community is allowed, we use this as default // When only the global community is allowed, we use this as default
self::$content = self::$page_style == CP_GLOBAL_COMMUNITY ? 'global' : 'local'; self::$content = self::$page_style == self::GLOBAL ? 'global' : 'local';
} }
} }
@ -201,14 +216,14 @@ class Community extends BaseModule
// Check if we are allowed to display the content to visitors // Check if we are allowed to display the content to visitors
if (!Session::isAuthenticated()) { if (!Session::isAuthenticated()) {
$available = self::$page_style == CP_USERS_AND_GLOBAL; $available = self::$page_style == self::LOCAL_AND_GLOBAL;
if (!$available) { if (!$available) {
$available = (self::$page_style == CP_USERS_ON_SERVER) && (self::$content == 'local'); $available = (self::$page_style == self::LOCAL) && (self::$content == 'local');
} }
if (!$available) { if (!$available) {
$available = (self::$page_style == CP_GLOBAL_COMMUNITY) && (self::$content == 'global'); $available = (self::$page_style == self::GLOBAL) && (self::$content == 'global');
} }
if (!$available) { if (!$available) {

View file

@ -170,7 +170,7 @@ class Network extends BaseModule
if (self::$groupId) { if (self::$groupId) {
$group = DBA::selectFirst('group', ['name'], ['id' => self::$groupId, 'uid' => local_user()]); $group = DBA::selectFirst('group', ['name'], ['id' => self::$groupId, 'uid' => local_user()]);
if (!DBA::isResult($group)) { if (!DBA::isResult($group)) {
notice(DI::l10n()->t('No such group')); DI::sysmsg()->addNotice(DI::l10n()->t('No such group'));
} }
$o = Renderer::replaceMacros(Renderer::getMarkupTemplate('section_title.tpl'), [ $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('section_title.tpl'), [
@ -184,7 +184,7 @@ class Network extends BaseModule
'id' => DI::args()->get(0), 'id' => DI::args()->get(0),
]) . $o; ]) . $o;
} else { } else {
notice(DI::l10n()->t('Invalid contact.')); DI::sysmsg()->addNotice(DI::l10n()->t('Invalid contact.'));
} }
} elseif (!DI::config()->get('theme', 'hide_eventlist')) { } elseif (!DI::config()->get('theme', 'hide_eventlist')) {
$o .= Profile::getBirthdays(); $o .= Profile::getBirthdays();

View file

@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\BaseModule; use Friendica\BaseModule;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests;
@ -48,7 +49,7 @@ class Feed extends BaseModule
$this->httpClient = $httpClient; $this->httpClient = $httpClient;
if (!local_user()) { if (!local_user()) {
notice($this->t('You must be logged in to use this module')); DI::sysmsg()->addNotice($this->t('You must be logged in to use this module'));
$baseUrl->redirect(); $baseUrl->redirect();
} }
} }

View file

@ -108,7 +108,7 @@ class Delegation extends BaseModule
$ret = []; $ret = [];
Hook::callAll('home_init', $ret); Hook::callAll('home_init', $ret);
notice($this->t('You are now logged in as %s', $user['username'])); DI::sysmsg()->addNotice($this->t('You are now logged in as %s', $user['username']));
DI::baseUrl()->redirect('network'); DI::baseUrl()->redirect('network');
} }

View file

@ -72,7 +72,7 @@ class Directory extends BaseModule
$profiles = Profile::searchProfiles($pager->getStart(), $pager->getItemsPerPage(), $search); $profiles = Profile::searchProfiles($pager->getStart(), $pager->getItemsPerPage(), $search);
if ($profiles['total'] === 0) { if ($profiles['total'] === 0) {
notice(DI::l10n()->t('No entries (some entries may be hidden).')); DI::sysmsg()->addNotice(DI::l10n()->t('No entries (some entries may be hidden).'));
} else { } else {
foreach ($profiles['entries'] as $entry) { foreach ($profiles['entries'] as $entry) {
$contact = Model\Contact::getByURLForUser($entry['url'], local_user()); $contact = Model\Contact::getByURLForUser($entry['url'], local_user());

View file

@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
@ -43,7 +44,7 @@ class SaveTag extends BaseModule
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
if (!local_user()) { if (!local_user()) {
notice($this->t('You must be logged in to use this module')); DI::sysmsg()->addNotice($this->t('You must be logged in to use this module'));
$baseUrl->redirect(); $baseUrl->redirect();
} }
} }

View file

@ -35,7 +35,7 @@ class FollowConfirm extends BaseModule
parent::post($request); parent::post($request);
$uid = local_user(); $uid = local_user();
if (!$uid) { if (!$uid) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }

View file

@ -28,6 +28,7 @@ use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\DI;
use Friendica\Model\Contact as ContactModel; use Friendica\Model\Contact as ContactModel;
use Friendica\Network\HTTPException\ForbiddenException; use Friendica\Network\HTTPException\ForbiddenException;
use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotFoundException;
@ -78,7 +79,7 @@ class FriendSuggest extends BaseModule
// We do query the "uid" as well to ensure that it is our contact // We do query the "uid" as well to ensure that it is our contact
$contact = $this->dba->selectFirst('contact', ['name', 'url', 'request', 'avatar'], ['id' => $suggest_contact_id, 'uid' => local_user()]); $contact = $this->dba->selectFirst('contact', ['name', 'url', 'request', 'avatar'], ['id' => $suggest_contact_id, 'uid' => local_user()]);
if (empty($contact)) { if (empty($contact)) {
notice($this->t('Suggested contact not found.')); DI::sysmsg()->addNotice($this->t('Suggested contact not found.'));
return; return;
} }
@ -94,9 +95,9 @@ class FriendSuggest extends BaseModule
$note $note
)); ));
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::SUGGESTION, $suggest->id); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::SUGGESTION, $suggest->id);
info($this->t('Friend suggestion sent.')); DI::sysmsg()->addInfo($this->t('Friend suggestion sent.'));
} }
protected function content(array $request = []): string protected function content(array $request = []): string
@ -105,7 +106,7 @@ class FriendSuggest extends BaseModule
$contact = $this->dba->selectFirst('contact', [], ['id' => $cid, 'uid' => local_user()]); $contact = $this->dba->selectFirst('contact', [], ['id' => $cid, 'uid' => local_user()]);
if (empty($contact)) { if (empty($contact)) {
notice($this->t('Contact not found.')); DI::sysmsg()->addNotice($this->t('Contact not found.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
} }

View file

@ -21,6 +21,7 @@
namespace Friendica\Module; namespace Friendica\Module;
use Friendica\App;
use Friendica\BaseModule; use Friendica\BaseModule;
use Friendica\Core\Addon; use Friendica\Core\Addon;
use Friendica\Core\Hook; use Friendica\Core\Hook;
@ -96,7 +97,7 @@ class Friendica extends BaseModule
return Renderer::replaceMacros($tpl, [ return Renderer::replaceMacros($tpl, [
'about' => DI::l10n()->t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.', 'about' => DI::l10n()->t('This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.',
'<strong>' . FRIENDICA_VERSION . '</strong>', '<strong>' . App::VERSION . '</strong>',
DI::baseUrl()->get(), DI::baseUrl()->get(),
'<strong>' . $config->get('system', 'build') . '/' . DB_UPDATE_VERSION . '</strong>', '<strong>' . $config->get('system', 'build') . '/' . DB_UPDATE_VERSION . '</strong>',
'<strong>' . $config->get('system', 'post_update_version') . '/' . PostUpdate::VERSION . '</strong>'), '<strong>' . $config->get('system', 'post_update_version') . '/' . PostUpdate::VERSION . '</strong>'),
@ -169,7 +170,7 @@ class Friendica extends BaseModule
} }
$data = [ $data = [
'version' => FRIENDICA_VERSION, 'version' => App::VERSION,
'url' => DI::baseUrl()->get(), 'url' => DI::baseUrl()->get(),
'addons' => $visible_addons, 'addons' => $visible_addons,
'locked_features' => $locked_features, 'locked_features' => $locked_features,
@ -178,7 +179,7 @@ class Friendica extends BaseModule
'register_policy' => $register_policy, 'register_policy' => $register_policy,
'admin' => $admin, 'admin' => $admin,
'site_name' => $config->get('config', 'sitename'), 'site_name' => $config->get('config', 'sitename'),
'platform' => strtolower(FRIENDICA_PLATFORM), 'platform' => strtolower(App::PLATFORM),
'info' => $config->get('config', 'info'), 'info' => $config->get('config', 'info'),
'no_scrape_url' => DI::baseUrl()->get() . '/noscrape', 'no_scrape_url' => DI::baseUrl()->get() . '/noscrape',
]; ];

View file

@ -39,7 +39,7 @@ class Group extends BaseModule
} }
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect(); DI::baseUrl()->redirect();
} }
@ -55,7 +55,7 @@ class Group extends BaseModule
DI::baseUrl()->redirect('group/' . $r); DI::baseUrl()->redirect('group/' . $r);
} }
} else { } else {
notice(DI::l10n()->t('Could not create group.')); DI::sysmsg()->addNotice(DI::l10n()->t('Could not create group.'));
} }
DI::baseUrl()->redirect('group'); DI::baseUrl()->redirect('group');
} }
@ -66,13 +66,13 @@ class Group extends BaseModule
$group = DBA::selectFirst('group', ['id', 'name'], ['id' => DI::args()->getArgv()[1], 'uid' => local_user()]); $group = DBA::selectFirst('group', ['id', 'name'], ['id' => DI::args()->getArgv()[1], 'uid' => local_user()]);
if (!DBA::isResult($group)) { if (!DBA::isResult($group)) {
notice(DI::l10n()->t('Group not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Group not found.'));
DI::baseUrl()->redirect('contact'); DI::baseUrl()->redirect('contact');
} }
$groupname = trim($_POST['groupname']); $groupname = trim($_POST['groupname']);
if (strlen($groupname) && ($groupname != $group['name'])) { if (strlen($groupname) && ($groupname != $group['name'])) {
if (!Model\Group::update($group['id'], $groupname)) { if (!Model\Group::update($group['id'], $groupname)) {
notice(DI::l10n()->t('Group name was not changed.')); DI::sysmsg()->addNotice(DI::l10n()->t('Group name was not changed.'));
} }
} }
} }
@ -132,10 +132,10 @@ class Group extends BaseModule
throw new \Exception(DI::l10n()->t('Bad request.'), 400); throw new \Exception(DI::l10n()->t('Bad request.'), 400);
} }
info($message); DI::sysmsg()->addInfo($message);
System::jsonExit(['status' => 'OK', 'message' => $message]); System::jsonExit(['status' => 'OK', 'message' => $message]);
} catch (\Exception $e) { } catch (\Exception $e) {
notice($e->getMessage()); DI::sysmsg()->addNotice($e->getMessage());
System::jsonError($e->getCode(), ['status' => 'error', 'message' => $e->getMessage()]); System::jsonError($e->getCode(), ['status' => 'error', 'message' => $e->getMessage()]);
} }
} }
@ -212,12 +212,12 @@ class Group extends BaseModule
// @TODO: Replace with parameter from router // @TODO: Replace with parameter from router
if (intval(DI::args()->getArgv()[2])) { if (intval(DI::args()->getArgv()[2])) {
if (!Model\Group::exists(DI::args()->getArgv()[2], local_user())) { if (!Model\Group::exists(DI::args()->getArgv()[2], local_user())) {
notice(DI::l10n()->t('Group not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Group not found.'));
DI::baseUrl()->redirect('contact'); DI::baseUrl()->redirect('contact');
} }
if (!Model\Group::remove(DI::args()->getArgv()[2])) { if (!Model\Group::remove(DI::args()->getArgv()[2])) {
notice(DI::l10n()->t('Unable to remove group.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to remove group.'));
} }
} }
DI::baseUrl()->redirect('group'); DI::baseUrl()->redirect('group');
@ -236,7 +236,7 @@ class Group extends BaseModule
if ((DI::args()->getArgc() > 1) && intval(DI::args()->getArgv()[1])) { if ((DI::args()->getArgc() > 1) && intval(DI::args()->getArgv()[1])) {
$group = DBA::selectFirst('group', ['id', 'name'], ['id' => DI::args()->getArgv()[1], 'uid' => local_user(), 'deleted' => false]); $group = DBA::selectFirst('group', ['id', 'name'], ['id' => DI::args()->getArgv()[1], 'uid' => local_user(), 'deleted' => false]);
if (!DBA::isResult($group)) { if (!DBA::isResult($group)) {
notice(DI::l10n()->t('Group not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Group not found.'));
DI::baseUrl()->redirect('contact'); DI::baseUrl()->redirect('contact');
} }

View file

@ -337,7 +337,7 @@ class Install extends BaseModule
if (count($this->installer->getChecks()) == 0) { if (count($this->installer->getChecks()) == 0) {
$txt = '<p style="font-size: 130%;">'; $txt = '<p style="font-size: 130%;">';
$txt .= $this->t('Your Friendica site database has been installed.') . EOL; $txt .= $this->t('Your Friendica site database has been installed.') . '<br />';
$db_return_text .= $txt; $db_return_text .= $txt;
} }

View file

@ -79,7 +79,7 @@ class Invite extends BaseModule
$recipient = trim($recipient); $recipient = trim($recipient);
if (!filter_var($recipient, FILTER_VALIDATE_EMAIL)) { if (!filter_var($recipient, FILTER_VALIDATE_EMAIL)) {
notice(DI::l10n()->t('%s : Not a valid email address.', $recipient)); DI::sysmsg()->addNotice(DI::l10n()->t('%s : Not a valid email address.', $recipient));
continue; continue;
} }
@ -114,15 +114,15 @@ class Invite extends BaseModule
$current_invites++; $current_invites++;
DI::pConfig()->set(local_user(), 'system', 'sent_invites', $current_invites); DI::pConfig()->set(local_user(), 'system', 'sent_invites', $current_invites);
if ($current_invites > $max_invites) { if ($current_invites > $max_invites) {
notice(DI::l10n()->t('Invitation limit exceeded. Please contact your site administrator.')); DI::sysmsg()->addNotice(DI::l10n()->t('Invitation limit exceeded. Please contact your site administrator.'));
return; return;
} }
} else { } else {
notice(DI::l10n()->t('%s : Message delivery failed.', $recipient)); DI::sysmsg()->addNotice(DI::l10n()->t('%s : Message delivery failed.', $recipient));
} }
} }
info(DI::l10n()->tt('%d message sent.', '%d messages sent.', $total)); DI::sysmsg()->addInfo(DI::l10n()->tt('%d message sent.', '%d messages sent.', $total));
} }
protected function content(array $request = []): string protected function content(array $request = []): string

View file

@ -22,10 +22,14 @@
namespace Friendica\Module\Item; namespace Friendica\Module\Item;
use DateTime; use DateTime;
use Friendica\App;
use Friendica\BaseModule; use Friendica\BaseModule;
use Friendica\Content\Feature; use Friendica\Content\Feature;
use Friendica\Core\ACL; use Friendica\Core\ACL;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Theme; use Friendica\Core\Theme;
use Friendica\Database\DBA; use Friendica\Database\DBA;
@ -33,13 +37,44 @@ use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\Response;
use Friendica\Module\Security\Login; use Friendica\Module\Security\Login;
use Friendica\Navigation\SystemMessages;
use Friendica\Network\HTTPException\NotImplementedException; use Friendica\Network\HTTPException\NotImplementedException;
use Friendica\Util\ACLFormatter;
use Friendica\Util\Crypto; use Friendica\Util\Crypto;
use Friendica\Util\Profiler;
use Friendica\Util\Temporal; use Friendica\Util\Temporal;
use Psr\Log\LoggerInterface;
class Compose extends BaseModule class Compose extends BaseModule
{ {
/** @var SystemMessages */
private $systemMessages;
/** @var ACLFormatter */
private $ACLFormatter;
/** @var App\Page */
private $page;
/** @var IManagePersonalConfigValues */
private $pConfig;
/** @var IManageConfigValues */
private $config;
public function __construct(IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\Page $page, ACLFormatter $ACLFormatter, SystemMessages $systemMessages, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
{
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
$this->systemMessages = $systemMessages;
$this->ACLFormatter = $ACLFormatter;
$this->page = $page;
$this->pConfig = $pConfig;
$this->config = $config;
}
protected function post(array $request = []) protected function post(array $request = [])
{ {
if (!empty($_REQUEST['body'])) { if (!empty($_REQUEST['body'])) {
@ -47,23 +82,22 @@ class Compose extends BaseModule
require_once 'mod/item.php'; require_once 'mod/item.php';
item_post(DI::app()); item_post(DI::app());
} else { } else {
notice(DI::l10n()->t('Please enter a post body.')); $this->systemMessages->addNotice($this->l10n->t('Please enter a post body.'));
} }
} }
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
if (!local_user()) { if (!local_user()) {
return Login::form('compose', false); return Login::form('compose');
} }
$a = DI::app(); $a = DI::app();
if ($a->getCurrentTheme() !== 'frio') { if ($a->getCurrentTheme() !== 'frio') {
throw new NotImplementedException(DI::l10n()->t('This feature is only available with the frio theme.')); throw new NotImplementedException($this->l10n->t('This feature is only available with the frio theme.'));
} }
/// @TODO Retrieve parameter from router
$posttype = $this->parameters['type'] ?? Item::PT_ARTICLE; $posttype = $this->parameters['type'] ?? Item::PT_ARTICLE;
if (!in_array($posttype, [Item::PT_ARTICLE, Item::PT_PERSONAL_NOTE])) { if (!in_array($posttype, [Item::PT_ARTICLE, Item::PT_PERSONAL_NOTE])) {
switch ($posttype) { switch ($posttype) {
@ -78,16 +112,14 @@ class Compose extends BaseModule
$user = User::getById(local_user(), ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'default-location']); $user = User::getById(local_user(), ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'default-location']);
$aclFormatter = DI::aclFormatter(); $contact_allow_list = $this->ACLFormatter->expand($user['allow_cid']);
$group_allow_list = $this->ACLFormatter->expand($user['allow_gid']);
$contact_allow_list = $aclFormatter->expand($user['allow_cid']); $contact_deny_list = $this->ACLFormatter->expand($user['deny_cid']);
$group_allow_list = $aclFormatter->expand($user['allow_gid']); $group_deny_list = $this->ACLFormatter->expand($user['deny_gid']);
$contact_deny_list = $aclFormatter->expand($user['deny_cid']);
$group_deny_list = $aclFormatter->expand($user['deny_gid']);
switch ($posttype) { switch ($posttype) {
case Item::PT_PERSONAL_NOTE: case Item::PT_PERSONAL_NOTE:
$compose_title = DI::l10n()->t('Compose new personal note'); $compose_title = $this->l10n->t('Compose new personal note');
$type = 'note'; $type = 'note';
$doesFederate = false; $doesFederate = false;
$contact_allow_list = [$a->getContactId()]; $contact_allow_list = [$a->getContactId()];
@ -96,7 +128,7 @@ class Compose extends BaseModule
$group_deny_list = []; $group_deny_list = [];
break; break;
default: default:
$compose_title = DI::l10n()->t('Compose new post'); $compose_title = $this->l10n->t('Compose new post');
$type = 'post'; $type = 'post';
$doesFederate = true; $doesFederate = true;
@ -129,13 +161,13 @@ class Compose extends BaseModule
Hook::callAll('jot_tool', $jotplugins); Hook::callAll('jot_tool', $jotplugins);
// Output // Output
DI::page()->registerFooterScript(Theme::getPathForFile('js/ajaxupload.js')); $this->page->registerFooterScript(Theme::getPathForFile('js/ajaxupload.js'));
DI::page()->registerFooterScript(Theme::getPathForFile('js/linkPreview.js')); $this->page->registerFooterScript(Theme::getPathForFile('js/linkPreview.js'));
DI::page()->registerFooterScript(Theme::getPathForFile('js/compose.js')); $this->page->registerFooterScript(Theme::getPathForFile('js/compose.js'));
$contact = Contact::getById($a->getContactId()); $contact = Contact::getById($a->getContactId());
if (DI::config()->get(local_user(), 'system', 'set_creation_date')) { if ($this->pConfig->get(local_user(), 'system', 'set_creation_date')) {
$created_at = Temporal::getDateTimeField( $created_at = Temporal::getDateTimeField(
new \DateTime(DBA::NULL_DATETIME), new \DateTime(DBA::NULL_DATETIME),
new \DateTime('now'), new \DateTime('now'),
@ -149,39 +181,45 @@ class Compose extends BaseModule
$tpl = Renderer::getMarkupTemplate('item/compose.tpl'); $tpl = Renderer::getMarkupTemplate('item/compose.tpl');
return Renderer::replaceMacros($tpl, [ return Renderer::replaceMacros($tpl, [
'$compose_title'=> $compose_title, '$l10n' => [
'$visibility_title'=> DI::l10n()->t('Visibility'), 'compose_title' => $compose_title,
'default' => '',
'visibility_title' => $this->l10n->t('Visibility'),
'mytitle' => $this->l10n->t('This is you'),
'submit' => $this->l10n->t('Submit'),
'edbold' => $this->l10n->t('Bold'),
'editalic' => $this->l10n->t('Italic'),
'eduline' => $this->l10n->t('Underline'),
'edquote' => $this->l10n->t('Quote'),
'edcode' => $this->l10n->t('Code'),
'edimg' => $this->l10n->t('Image'),
'edurl' => $this->l10n->t('Link'),
'edattach' => $this->l10n->t('Link or Media'),
'prompttext' => $this->l10n->t('Please enter a image/video/audio/webpage URL:'),
'preview' => $this->l10n->t('Preview'),
'location_set' => $this->l10n->t('Set your location'),
'location_clear' => $this->l10n->t('Clear the location'),
'location_unavailable' => $this->l10n->t('Location services are unavailable on your device'),
'location_disabled' => $this->l10n->t('Location services are disabled. Please check the website\'s permissions on your device'),
'wait' => $this->l10n->t('Please wait'),
'placeholdertitle' => $this->l10n->t('Set title'),
'placeholdercategory' => Feature::isEnabled(local_user(),'categories') ? $this->l10n->t('Categories (comma-separated list)') : '',
'always_open_compose' => $this->pConfig->get(local_user(), 'frio', 'always_open_compose',
$this->config->get('frio', 'always_open_compose', false)) ? '' :
$this->l10n->t('You can make this page always open when you use the New Post button in the <a href="/settings/display">Theme Customization settings</a>.'),
],
'$id' => 0, '$id' => 0,
'$posttype' => $posttype, '$posttype' => $posttype,
'$type' => $type, '$type' => $type,
'$wall' => $wall, '$wall' => $wall,
'$default' => '', '$mylink' => $this->baseUrl->remove($contact['url']),
'$mylink' => DI::baseUrl()->remove($contact['url']), '$myphoto' => $this->baseUrl->remove($contact['thumb']),
'$mytitle' => DI::l10n()->t('This is you'),
'$myphoto' => DI::baseUrl()->remove($contact['thumb']),
'$submit' => DI::l10n()->t('Submit'),
'$edbold' => DI::l10n()->t('Bold'),
'$editalic' => DI::l10n()->t('Italic'),
'$eduline' => DI::l10n()->t('Underline'),
'$edquote' => DI::l10n()->t('Quote'),
'$edcode' => DI::l10n()->t('Code'),
'$edimg' => DI::l10n()->t('Image'),
'$edurl' => DI::l10n()->t('Link'),
'$edattach' => DI::l10n()->t('Link or Media'),
'$prompttext' => DI::l10n()->t('Please enter a image/video/audio/webpage URL:'),
'$preview' => DI::l10n()->t('Preview'),
'$location_set' => DI::l10n()->t('Set your location'),
'$location_clear' => DI::l10n()->t('Clear the location'),
'$location_unavailable' => DI::l10n()->t('Location services are unavailable on your device'),
'$location_disabled' => DI::l10n()->t('Location services are disabled. Please check the website\'s permissions on your device'),
'$wait' => DI::l10n()->t('Please wait'),
'$placeholdertitle' => DI::l10n()->t('Set title'),
'$placeholdercategory' => (Feature::isEnabled(local_user(),'categories') ? DI::l10n()->t('Categories (comma-separated list)') : ''),
'$scheduled_at' => Temporal::getDateTimeField( '$scheduled_at' => Temporal::getDateTimeField(
new DateTime(), new DateTime(),
new DateTime('now + 6 months'), new DateTime('now + 6 months'),
null, null,
DI::l10n()->t('Scheduled at'), $this->l10n->t('Scheduled at'),
'scheduled_at' 'scheduled_at'
), ),
'$created_at' => $created_at, '$created_at' => $created_at,
@ -197,7 +235,7 @@ class Compose extends BaseModule
'$jotplugins' => $jotplugins, '$jotplugins' => $jotplugins,
'$rand_num' => Crypto::randomDigits(12), '$rand_num' => Crypto::randomDigits(12),
'$acl_selector' => ACL::getFullSelectorHTML(DI::page(), $a->getLoggedInUserId(), $doesFederate, [ '$acl_selector' => ACL::getFullSelectorHTML($this->page, $a->getLoggedInUserId(), $doesFederate, [
'allow_cid' => $contact_allow_list, 'allow_cid' => $contact_allow_list,
'allow_gid' => $group_allow_list, 'allow_gid' => $group_allow_list,
'deny_cid' => $contact_deny_list, 'deny_cid' => $contact_deny_list,

View file

@ -53,7 +53,7 @@ class NodeInfo110 extends BaseModule
'version' => '1.0', 'version' => '1.0',
'software' => [ 'software' => [
'name' => 'friendica', 'name' => 'friendica',
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
], ],
'protocols' => [ 'protocols' => [
'inbound' => [ 'inbound' => [

View file

@ -53,7 +53,7 @@ class NodeInfo120 extends BaseModule
'version' => '2.0', 'version' => '2.0',
'software' => [ 'software' => [
'name' => 'friendica', 'name' => 'friendica',
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
], ],
'protocols' => ['dfrn', 'activitypub'], 'protocols' => ['dfrn', 'activitypub'],
'services' => Nodeinfo::getServices(), 'services' => Nodeinfo::getServices(),

View file

@ -55,7 +55,7 @@ class NodeInfo210 extends BaseModule
'baseUrl' => $this->baseUrl->get(), 'baseUrl' => $this->baseUrl->get(),
'name' => $this->config->get('config', 'sitename'), 'name' => $this->config->get('config', 'sitename'),
'software' => 'friendica', 'software' => 'friendica',
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
], ],
'organization' => Nodeinfo::getOrganization($this->config), 'organization' => Nodeinfo::getOrganization($this->config),
'protocols' => ['dfrn', 'activitypub'], 'protocols' => ['dfrn', 'activitypub'],

View file

@ -30,6 +30,7 @@ use Friendica\Content\Text\BBCode;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\BaseNotifications; use Friendica\Module\BaseNotifications;
use Friendica\Module\Response; use Friendica\Module\Response;
@ -211,7 +212,7 @@ class Introductions extends BaseNotifications
} }
if (count($notifications['notifications']) == 0) { if (count($notifications['notifications']) == 0) {
notice($this->t('No introductions.')); DI::sysmsg()->addNotice($this->t('No introductions.'));
$notificationNoContent = $this->t('No more %s notifications.', $notifications['ident']); $notificationNoContent = $this->t('No more %s notifications.', $notifications['ident']);
} }

View file

@ -27,6 +27,7 @@ use Friendica\Contact\Introduction\Repository\Introduction;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Module\Security\Login; use Friendica\Module\Security\Login;
@ -131,7 +132,7 @@ class Notification extends BaseModule
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
if (!local_user()) { if (!local_user()) {
notice($this->l10n->t('You must be logged in to show this page.')); DI::sysmsg()->addNotice($this->l10n->t('You must be logged in to show this page.'));
return Login::form(); return Login::form();
} }

View file

@ -338,7 +338,7 @@ class Photo extends BaseModule
} }
if ($update) { if ($update) {
Logger::info('Invalid file, contact update initiated', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]); Logger::info('Invalid file, contact update initiated', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]);
Worker::add(PRIORITY_LOW, 'UpdateContact', $id); Worker::add(Worker::PRIORITY_LOW, 'UpdateContact', $id);
} else { } else {
Logger::info('Invalid file', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]); Logger::info('Invalid file', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]);
} }

View file

@ -106,7 +106,7 @@ class Profile extends BaseProfile
$o = self::getTabsHTML($a, 'profile', $is_owner, $profile['nickname'], $profile['hide-friends']); $o = self::getTabsHTML($a, 'profile', $is_owner, $profile['nickname'], $profile['hide-friends']);
if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact_id) { if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact_id) {
notice(DI::l10n()->t('Access to this profile has been restricted.')); DI::sysmsg()->addNotice(DI::l10n()->t('Access to this profile has been restricted.'));
return ''; return '';
} }

View file

@ -107,7 +107,7 @@ class Status extends BaseProfile
$last_updated_key = "profile:" . $profile['uid'] . ":" . local_user() . ":" . $remote_contact; $last_updated_key = "profile:" . $profile['uid'] . ":" . local_user() . ":" . $remote_contact;
if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact) { if (!empty($profile['hidewall']) && !$is_owner && !$remote_contact) {
notice(DI::l10n()->t('Access to this profile has been restricted.')); DI::sysmsg()->addNotice(DI::l10n()->t('Access to this profile has been restricted.'));
return ''; return '';
} }

View file

@ -74,20 +74,20 @@ class Register extends BaseModule
$block = DI::config()->get('system', 'block_extended_register'); $block = DI::config()->get('system', 'block_extended_register');
if (local_user() && $block) { if (local_user() && $block) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return ''; return '';
} }
if (local_user()) { if (local_user()) {
$user = DBA::selectFirst('user', ['parent-uid'], ['uid' => local_user()]); $user = DBA::selectFirst('user', ['parent-uid'], ['uid' => local_user()]);
if (!empty($user['parent-uid'])) { if (!empty($user['parent-uid'])) {
notice(DI::l10n()->t('Only parent users can create additional accounts.')); DI::sysmsg()->addNotice(DI::l10n()->t('Only parent users can create additional accounts.'));
return ''; return '';
} }
} }
if (!local_user() && (intval(DI::config()->get('config', 'register_policy')) === self::CLOSED)) { if (!local_user() && (intval(DI::config()->get('config', 'register_policy')) === self::CLOSED)) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return ''; return '';
} }
@ -96,7 +96,7 @@ class Register extends BaseModule
$count = DBA::count('user', ['`register_date` > UTC_TIMESTAMP - INTERVAL 1 day']); $count = DBA::count('user', ['`register_date` > UTC_TIMESTAMP - INTERVAL 1 day']);
if ($count >= $max_dailies) { if ($count >= $max_dailies) {
Logger::notice('max daily registrations exceeded.'); Logger::notice('max daily registrations exceeded.');
notice(DI::l10n()->t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.')); DI::sysmsg()->addNotice(DI::l10n()->t('This site has exceeded the number of allowed daily account registrations. Please try again tomorrow.'));
return ''; return '';
} }
} }
@ -203,19 +203,19 @@ class Register extends BaseModule
$additional_account = false; $additional_account = false;
if (!local_user() && !empty($arr['post']['parent_password'])) { if (!local_user() && !empty($arr['post']['parent_password'])) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} elseif (local_user() && !empty($arr['post']['parent_password'])) { } elseif (local_user() && !empty($arr['post']['parent_password'])) {
try { try {
Model\User::getIdFromPasswordAuthentication(local_user(), $arr['post']['parent_password']); Model\User::getIdFromPasswordAuthentication(local_user(), $arr['post']['parent_password']);
} catch (\Exception $ex) { } catch (\Exception $ex) {
notice(DI::l10n()->t("Password doesn't match.")); DI::sysmsg()->addNotice(DI::l10n()->t("Password doesn't match."));
$regdata = ['nickname' => $arr['post']['nickname'], 'username' => $arr['post']['username']]; $regdata = ['nickname' => $arr['post']['nickname'], 'username' => $arr['post']['username']];
DI::baseUrl()->redirect('register?' . http_build_query($regdata)); DI::baseUrl()->redirect('register?' . http_build_query($regdata));
} }
$additional_account = true; $additional_account = true;
} elseif (local_user()) { } elseif (local_user()) {
notice(DI::l10n()->t('Please enter your password.')); DI::sysmsg()->addNotice(DI::l10n()->t('Please enter your password.'));
$regdata = ['nickname' => $arr['post']['nickname'], 'username' => $arr['post']['username']]; $regdata = ['nickname' => $arr['post']['nickname'], 'username' => $arr['post']['username']];
DI::baseUrl()->redirect('register?' . http_build_query($regdata)); DI::baseUrl()->redirect('register?' . http_build_query($regdata));
} }
@ -242,7 +242,7 @@ class Register extends BaseModule
case self::CLOSED: case self::CLOSED:
default: default:
if (empty($_SESSION['authenticated']) && empty($_SESSION['administrator'])) { if (empty($_SESSION['authenticated']) && empty($_SESSION['administrator'])) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return; return;
} }
$blocked = 1; $blocked = 1;
@ -257,14 +257,14 @@ class Register extends BaseModule
// Is there text in the tar pit? // Is there text in the tar pit?
if (!empty($arr['email'])) { if (!empty($arr['email'])) {
Logger::info('Tar pit', $arr); Logger::info('Tar pit', $arr);
notice(DI::l10n()->t('You have entered too much information.')); DI::sysmsg()->addNotice(DI::l10n()->t('You have entered too much information.'));
DI::baseUrl()->redirect('register/'); DI::baseUrl()->redirect('register/');
} }
if ($additional_account) { if ($additional_account) {
$user = DBA::selectFirst('user', ['email'], ['uid' => local_user()]); $user = DBA::selectFirst('user', ['email'], ['uid' => local_user()]);
if (!DBA::isResult($user)) { if (!DBA::isResult($user)) {
notice(DI::l10n()->t('User not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('User not found.'));
DI::baseUrl()->redirect('register'); DI::baseUrl()->redirect('register');
} }
@ -280,7 +280,7 @@ class Register extends BaseModule
if ($arr['email'] != $arr['repeat']) { if ($arr['email'] != $arr['repeat']) {
Logger::info('Mail mismatch', $arr); Logger::info('Mail mismatch', $arr);
notice(DI::l10n()->t('Please enter the identical mail address in the second field.')); DI::sysmsg()->addNotice(DI::l10n()->t('Please enter the identical mail address in the second field.'));
$regdata = ['email' => $arr['email'], 'nickname' => $arr['nickname'], 'username' => $arr['username']]; $regdata = ['email' => $arr['email'], 'nickname' => $arr['nickname'], 'username' => $arr['username']];
DI::baseUrl()->redirect('register?' . http_build_query($regdata)); DI::baseUrl()->redirect('register?' . http_build_query($regdata));
} }
@ -292,7 +292,7 @@ class Register extends BaseModule
try { try {
$result = Model\User::create($arr); $result = Model\User::create($arr);
} catch (\Exception $e) { } catch (\Exception $e) {
notice($e->getMessage()); DI::sysmsg()->addNotice($e->getMessage());
return; return;
} }
@ -302,12 +302,12 @@ class Register extends BaseModule
if ($netpublish && intval(DI::config()->get('config', 'register_policy')) !== self::APPROVE) { if ($netpublish && intval(DI::config()->get('config', 'register_policy')) !== self::APPROVE) {
$url = $base_url . '/profile/' . $user['nickname']; $url = $base_url . '/profile/' . $user['nickname'];
Worker::add(PRIORITY_LOW, 'Directory', $url); Worker::add(Worker::PRIORITY_LOW, 'Directory', $url);
} }
if ($additional_account) { if ($additional_account) {
DBA::update('user', ['parent-uid' => local_user()], ['uid' => $user['uid']]); DBA::update('user', ['parent-uid' => local_user()], ['uid' => $user['uid']]);
info(DI::l10n()->t('The additional account was created.')); DI::sysmsg()->addInfo(DI::l10n()->t('The additional account was created.'));
DI::baseUrl()->redirect('delegation'); DI::baseUrl()->redirect('delegation');
} }
@ -332,28 +332,28 @@ class Register extends BaseModule
); );
if ($res) { if ($res) {
info(DI::l10n()->t('Registration successful. Please check your email for further instructions.')); DI::sysmsg()->addInfo(DI::l10n()->t('Registration successful. Please check your email for further instructions.'));
DI::baseUrl()->redirect(); DI::baseUrl()->redirect();
} else { } else {
notice( DI::sysmsg()->addNotice(
DI::l10n()->t('Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login.', DI::l10n()->t('Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login.',
$user['email'], $user['email'],
$result['password']) $result['password'])
); );
} }
} else { } else {
info(DI::l10n()->t('Registration successful.')); DI::sysmsg()->addInfo(DI::l10n()->t('Registration successful.'));
DI::baseUrl()->redirect(); DI::baseUrl()->redirect();
} }
} elseif (intval(DI::config()->get('config', 'register_policy')) === self::APPROVE) { } elseif (intval(DI::config()->get('config', 'register_policy')) === self::APPROVE) {
if (!strlen(DI::config()->get('config', 'admin_email'))) { if (!strlen(DI::config()->get('config', 'admin_email'))) {
notice(DI::l10n()->t('Your registration can not be processed.')); DI::sysmsg()->addNotice(DI::l10n()->t('Your registration can not be processed.'));
DI::baseUrl()->redirect(); DI::baseUrl()->redirect();
} }
// Check if the note to the admin is actually filled out // Check if the note to the admin is actually filled out
if (empty($_POST['permonlybox'])) { if (empty($_POST['permonlybox'])) {
notice(DI::l10n()->t('You have to leave a request note for the admin.') DI::sysmsg()->addNotice(DI::l10n()->t('You have to leave a request note for the admin.')
. DI::l10n()->t('Your registration can not be processed.')); . DI::l10n()->t('Your registration can not be processed.'));
DI::baseUrl()->redirect('register/'); DI::baseUrl()->redirect('register/');
@ -399,7 +399,7 @@ class Register extends BaseModule
$result['password'] $result['password']
); );
info(DI::l10n()->t('Your registration is pending approval by the site owner.')); DI::sysmsg()->addInfo(DI::l10n()->t('Your registration is pending approval by the site owner.'));
DI::baseUrl()->redirect(); DI::baseUrl()->redirect();
} }

View file

@ -31,6 +31,7 @@ use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Search; use Friendica\Core\Search;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Model\User; use Friendica\Model\User;
@ -68,25 +69,25 @@ class RemoteFollow extends BaseModule
} }
if (empty($this->owner)) { if (empty($this->owner)) {
notice($this->t('Profile unavailable.')); DI::sysmsg()->addNotice($this->t('Profile unavailable.'));
return; return;
} }
$url = Probe::cleanURI($_POST['dfrn_url']); $url = Probe::cleanURI($_POST['dfrn_url']);
if (!strlen($url)) { if (!strlen($url)) {
notice($this->t("Invalid locator")); DI::sysmsg()->addNotice($this->t("Invalid locator"));
return; return;
} }
// Detect the network, make sure the provided URL is valid // Detect the network, make sure the provided URL is valid
$data = Contact::getByURL($url); $data = Contact::getByURL($url);
if (!$data) { if (!$data) {
notice($this->t("The provided profile link doesn't seem to be valid")); DI::sysmsg()->addNotice($this->t("The provided profile link doesn't seem to be valid"));
return; return;
} }
if (empty($data['subscribe'])) { if (empty($data['subscribe'])) {
notice($this->t("Remote subscription can't be done for your network. Please subscribe directly on your system.")); DI::sysmsg()->addNotice($this->t("Remote subscription can't be done for your network. Please subscribe directly on your system."));
return; return;
} }

View file

@ -34,7 +34,7 @@ class Directory extends BaseSearch
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.')); DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form(); return Login::form();
} }

View file

@ -149,7 +149,7 @@ class Index extends BaseSearch
// Tags don't look like an URL and the fulltext search does only work with natural words // Tags don't look like an URL and the fulltext search does only work with natural words
if (parse_url($search, PHP_URL_SCHEME) && parse_url($search, PHP_URL_HOST)) { if (parse_url($search, PHP_URL_SCHEME) && parse_url($search, PHP_URL_HOST)) {
Logger::info('Skipping tag and fulltext search since the search looks like a URL.', ['q' => $search]); Logger::info('Skipping tag and fulltext search since the search looks like a URL.', ['q' => $search]);
notice(DI::l10n()->t('No results.')); DI::sysmsg()->addNotice(DI::l10n()->t('No results.'));
return $o; return $o;
} }
@ -191,7 +191,7 @@ class Index extends BaseSearch
if (empty($items)) { if (empty($items)) {
if (empty($last_uriid)) { if (empty($last_uriid)) {
notice(DI::l10n()->t('No results.')); DI::sysmsg()->addNotice(DI::l10n()->t('No results.'));
} }
return $o; return $o;
} }

View file

@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Search; use Friendica\Core\Search;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\DI;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Util\Profiler; use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -55,16 +56,16 @@ class Saved extends BaseModule
$fields = ['uid' => local_user(), 'term' => $search]; $fields = ['uid' => local_user(), 'term' => $search];
if (!$this->dba->exists('search', $fields)) { if (!$this->dba->exists('search', $fields)) {
if (!$this->dba->insert('search', $fields)) { if (!$this->dba->insert('search', $fields)) {
notice($this->t('Search term was not saved.')); DI::sysmsg()->addNotice($this->t('Search term was not saved.'));
} }
} else { } else {
notice($this->t('Search term already saved.')); DI::sysmsg()->addNotice($this->t('Search term already saved.'));
} }
break; break;
case 'remove': case 'remove':
if (!$this->dba->delete('search', ['uid' => local_user(), 'term' => $search])) { if (!$this->dba->delete('search', ['uid' => local_user(), 'term' => $search])) {
notice($this->t('Search term was not removed.')); DI::sysmsg()->addNotice($this->t('Search term was not removed.'));
} }
break; break;
} }

View file

@ -28,6 +28,7 @@ use Friendica\Core\Hook;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Capability\IHandleSessions;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Model\User\Cookie; use Friendica\Model\User\Cookie;
use Friendica\Module\Response; use Friendica\Module\Response;
@ -80,7 +81,7 @@ class Logout extends BaseModule
if ($visitor_home) { if ($visitor_home) {
System::externalRedirect($visitor_home); System::externalRedirect($visitor_home);
} else { } else {
info($this->t('Logged out.')); DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
} }
} }

View file

@ -87,9 +87,9 @@ class OpenID extends BaseModule
$session->set('openid_server', $open_id_obj->discover($open_id_obj->identity)); $session->set('openid_server', $open_id_obj->discover($open_id_obj->identity));
if (intval(DI::config()->get('config', 'register_policy')) === \Friendica\Module\Register::CLOSED) { if (intval(DI::config()->get('config', 'register_policy')) === \Friendica\Module\Register::CLOSED) {
notice($l10n->t('Account not found. Please login to your existing account to add the OpenID to it.')); DI::sysmsg()->addNotice($l10n->t('Account not found. Please login to your existing account to add the OpenID to it.'));
} else { } else {
notice($l10n->t('Account not found. Please register a new account or login to your existing account to add the OpenID to it.')); DI::sysmsg()->addNotice($l10n->t('Account not found. Please register a new account or login to your existing account to add the OpenID to it.'));
} }
DI::baseUrl()->redirect('login'); DI::baseUrl()->redirect('login');

View file

@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Capability\IHandleSessions;
use Friendica\DI;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Security\Authentication; use Friendica\Security\Authentication;
@ -70,13 +71,13 @@ class Recovery extends BaseModule
if (RecoveryCode::existsForUser(local_user(), $recovery_code)) { if (RecoveryCode::existsForUser(local_user(), $recovery_code)) {
RecoveryCode::markUsedForUser(local_user(), $recovery_code); RecoveryCode::markUsedForUser(local_user(), $recovery_code);
$this->session->set('2fa', true); $this->session->set('2fa', true);
info($this->t('Remaining recovery codes: %d', RecoveryCode::countValidForUser(local_user()))); DI::sysmsg()->addInfo($this->t('Remaining recovery codes: %d', RecoveryCode::countValidForUser(local_user())));
$this->auth->setForUser($this->app, User::getById($this->app->getLoggedInUserId()), true, true); $this->auth->setForUser($this->app, User::getById($this->app->getLoggedInUserId()), true, true);
$this->baseUrl->redirect($this->session->pop('return_path', '')); $this->baseUrl->redirect($this->session->pop('return_path', ''));
} else { } else {
notice($this->t('Invalid code, please retry.')); DI::sysmsg()->addNotice($this->t('Invalid code, please retry.'));
} }
} }
} }

View file

@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Capability\IHandleSessions;
use Friendica\DI;
use Friendica\Model\User\Cookie; use Friendica\Model\User\Cookie;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotFoundException;
@ -75,7 +76,7 @@ class SignOut extends BaseModule
$this->cookie->reset(['2fa_cookie_hash' => $trusted]); $this->cookie->reset(['2fa_cookie_hash' => $trusted]);
$this->session->clear(); $this->session->clear();
info($this->t('Logged out.')); DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
break; break;
case 'sign_out': case 'sign_out':
@ -83,7 +84,7 @@ class SignOut extends BaseModule
$this->cookie->clear(); $this->cookie->clear();
$this->session->clear(); $this->session->clear();
info($this->t('Logged out.')); DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
break; break;
default: default:
@ -105,14 +106,14 @@ class SignOut extends BaseModule
$this->cookie->reset(['2fa_cookie_hash' => $trusted]); $this->cookie->reset(['2fa_cookie_hash' => $trusted]);
$this->session->clear(); $this->session->clear();
info($this->t('Logged out.')); DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
} }
} catch (TwoFactor\Exception\TrustedBrowserNotFoundException $exception) { } catch (TwoFactor\Exception\TrustedBrowserNotFoundException $exception) {
$this->cookie->clear(); $this->cookie->clear();
$this->session->clear(); $this->session->clear();
info($this->t('Logged out.')); DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
} }

View file

@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Capability\IHandleSessions;
use Friendica\DI;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Model\User\Cookie; use Friendica\Model\User\Cookie;
use Friendica\Module\Response; use Friendica\Module\Response;
@ -92,7 +93,7 @@ class Trust extends BaseModule
// The string is sent to the browser to be sent back with each request // The string is sent to the browser to be sent back with each request
if (!$this->cookie->set('2fa_cookie_hash', $trustedBrowser->cookie_hash)) { if (!$this->cookie->set('2fa_cookie_hash', $trustedBrowser->cookie_hash)) {
notice($this->t('Couldn\'t save browser to Cookie.')); DI::sysmsg()->addNotice($this->t('Couldn\'t save browser to Cookie.'));
}; };
} catch (TrustedBrowserPersistenceException $exception) { } catch (TrustedBrowserPersistenceException $exception) {
$this->logger->warning('Unexpected error when saving the trusted browser.', ['trustedBrowser' => $trustedBrowser, 'exception' => $exception]); $this->logger->warning('Unexpected error when saving the trusted browser.', ['trustedBrowser' => $trustedBrowser, 'exception' => $exception]);

View file

@ -75,10 +75,10 @@ class Account extends BaseSettings
throw new Exception(DI::l10n()->t('Password update failed. Please try again.')); throw new Exception(DI::l10n()->t('Password update failed. Please try again.'));
} }
info(DI::l10n()->t('Password changed.')); DI::sysmsg()->addInfo(DI::l10n()->t('Password changed.'));
} catch (Exception $e) { } catch (Exception $e) {
notice($e->getMessage()); DI::sysmsg()->addNotice($e->getMessage());
notice(DI::l10n()->t('Password unchanged.')); DI::sysmsg()->addNotice(DI::l10n()->t('Password unchanged.'));
} }
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
@ -123,7 +123,7 @@ class Account extends BaseSettings
} }
if (strlen($err)) { if (strlen($err)) {
notice($err); DI::sysmsg()->addNotice($err);
return; return;
} }
@ -146,7 +146,7 @@ class Account extends BaseSettings
} }
if (!User::update($fields, local_user())) { if (!User::update($fields, local_user())) {
notice(DI::l10n()->t('Settings were not updated.')); DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.'));
} }
// clear session language // clear session language
@ -198,7 +198,7 @@ class Account extends BaseSettings
]; ];
if (!User::update($fields, local_user()) || !Profile::update($profile_fields, local_user())) { if (!User::update($fields, local_user()) || !Profile::update($profile_fields, local_user())) {
notice(DI::l10n()->t('Settings were not updated.')); DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.'));
} }
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
@ -218,7 +218,7 @@ class Account extends BaseSettings
DI::pConfig()->set(local_user(), 'expire', 'network_only', $expire_network_only); DI::pConfig()->set(local_user(), 'expire', 'network_only', $expire_network_only);
if (!User::update(['expire' => $expire], local_user())) { if (!User::update(['expire' => $expire], local_user())) {
notice(DI::l10n()->t('Settings were not updated.')); DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.'));
} }
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
@ -302,7 +302,7 @@ class Account extends BaseSettings
]; ];
if (!User::update($fields, local_user())) { if (!User::update($fields, local_user())) {
notice(DI::l10n()->t('Settings were not updated.')); DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.'));
} }
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
@ -351,7 +351,7 @@ class Account extends BaseSettings
]); ]);
if (!User::update($fields, local_user()) || !empty($profile_fields) && !Profile::update($profile_fields, local_user())) { if (!User::update($fields, local_user()) || !empty($profile_fields) && !Profile::update($profile_fields, local_user())) {
notice(DI::l10n()->t('Settings were not updated.')); DI::sysmsg()->addNotice(DI::l10n()->t('Settings were not updated.'));
} }
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
@ -363,7 +363,7 @@ class Account extends BaseSettings
// was there an error // was there an error
if ($_FILES['importcontact-filename']['error'] > 0) { if ($_FILES['importcontact-filename']['error'] > 0) {
Logger::notice('Contact CSV file upload error', ['error' => $_FILES['importcontact-filename']['error']]); Logger::notice('Contact CSV file upload error', ['error' => $_FILES['importcontact-filename']['error']]);
notice(DI::l10n()->t('Contact CSV file upload error')); DI::sysmsg()->addNotice(DI::l10n()->t('Contact CSV file upload error'));
} else { } else {
$csvArray = array_map('str_getcsv', file($_FILES['importcontact-filename']['tmp_name'])); $csvArray = array_map('str_getcsv', file($_FILES['importcontact-filename']['tmp_name']));
Logger::notice('Import started', ['lines' => count($csvArray)]); Logger::notice('Import started', ['lines' => count($csvArray)]);
@ -375,14 +375,14 @@ class Account extends BaseSettings
// "http" or "@" to be present in the string. // "http" or "@" to be present in the string.
// All other fields from the row will be ignored // All other fields from the row will be ignored
if ((strpos($csvRow[0], '@') !== false) || Network::isValidHttpUrl($csvRow[0])) { if ((strpos($csvRow[0], '@') !== false) || Network::isValidHttpUrl($csvRow[0])) {
Worker::add(PRIORITY_MEDIUM, 'AddContact', local_user(), $csvRow[0]); Worker::add(Worker::PRIORITY_MEDIUM, 'AddContact', local_user(), $csvRow[0]);
} else { } else {
Logger::notice('Invalid account', ['url' => $csvRow[0]]); Logger::notice('Invalid account', ['url' => $csvRow[0]]);
} }
} }
Logger::notice('Import done'); Logger::notice('Import done');
info(DI::l10n()->t('Importing Contacts done')); DI::sysmsg()->addInfo(DI::l10n()->t('Importing Contacts done'));
// delete temp file // delete temp file
unlink($_FILES['importcontact-filename']['tmp_name']); unlink($_FILES['importcontact-filename']['tmp_name']);
} }
@ -394,8 +394,8 @@ class Account extends BaseSettings
} }
if (!empty($request['relocate-submit'])) { if (!empty($request['relocate-submit'])) {
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, local_user()); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, local_user());
info(DI::l10n()->t("Relocate message has been send to your contacts")); DI::sysmsg()->addInfo(DI::l10n()->t("Relocate message has been send to your contacts"));
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
} }
@ -412,7 +412,7 @@ class Account extends BaseSettings
$profile = DBA::selectFirst('profile', [], ['uid' => local_user()]); $profile = DBA::selectFirst('profile', [], ['uid' => local_user()]);
if (!DBA::isResult($profile)) { if (!DBA::isResult($profile)) {
notice(DI::l10n()->t('Unable to find your profile. Please contact your admin.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to find your profile. Please contact your admin.'));
return ''; return '';
} }

View file

@ -50,13 +50,13 @@ class Delegation extends BaseSettings
if ($parent_uid != 0) { if ($parent_uid != 0) {
try { try {
User::getIdFromPasswordAuthentication($parent_uid, $parent_password); User::getIdFromPasswordAuthentication($parent_uid, $parent_password);
info(DI::l10n()->t('Delegation successfully granted.')); DI::sysmsg()->addInfo(DI::l10n()->t('Delegation successfully granted.'));
} catch (\Exception $ex) { } catch (\Exception $ex) {
notice(DI::l10n()->t('Parent user not found, unavailable or password doesn\'t match.')); DI::sysmsg()->addNotice(DI::l10n()->t('Parent user not found, unavailable or password doesn\'t match.'));
return; return;
} }
} else { } else {
info(DI::l10n()->t('Delegation successfully revoked.')); DI::sysmsg()->addInfo(DI::l10n()->t('Delegation successfully revoked.'));
} }
DBA::update('user', ['parent-uid' => $parent_uid], ['uid' => local_user()]); DBA::update('user', ['parent-uid' => $parent_uid], ['uid' => local_user()]);
@ -78,7 +78,7 @@ class Delegation extends BaseSettings
if ($action === 'add' && $user_id) { if ($action === 'add' && $user_id) {
if (Session::get('submanage')) { if (Session::get('submanage')) {
notice(DI::l10n()->t('Delegated administrators can view but not change delegation permissions.')); DI::sysmsg()->addNotice(DI::l10n()->t('Delegated administrators can view but not change delegation permissions.'));
DI::baseUrl()->redirect('settings/delegation'); DI::baseUrl()->redirect('settings/delegation');
} }
@ -92,7 +92,7 @@ class Delegation extends BaseSettings
DBA::insert('manage', ['uid' => $user_id, 'mid' => local_user()]); DBA::insert('manage', ['uid' => $user_id, 'mid' => local_user()]);
} }
} else { } else {
notice(DI::l10n()->t('Delegate user not found.')); DI::sysmsg()->addNotice(DI::l10n()->t('Delegate user not found.'));
} }
DI::baseUrl()->redirect('settings/delegation'); DI::baseUrl()->redirect('settings/delegation');
@ -100,7 +100,7 @@ class Delegation extends BaseSettings
if ($action === 'remove' && $user_id) { if ($action === 'remove' && $user_id) {
if (Session::get('submanage')) { if (Session::get('submanage')) {
notice(DI::l10n()->t('Delegated administrators can view but not change delegation permissions.')); DI::sysmsg()->addNotice(DI::l10n()->t('Delegated administrators can view but not change delegation permissions.'));
DI::baseUrl()->redirect('settings/delegation'); DI::baseUrl()->redirect('settings/delegation');
} }

View file

@ -104,7 +104,7 @@ class Display extends BaseSettings
DBA::update('user', ['theme' => $theme], ['uid' => local_user()]); DBA::update('user', ['theme' => $theme], ['uid' => local_user()]);
} }
} else { } else {
notice(DI::l10n()->t('The theme you chose isn\'t available.')); DI::sysmsg()->addNotice(DI::l10n()->t('The theme you chose isn\'t available.'));
} }
Hook::callAll('display_settings_post', $_POST); Hook::callAll('display_settings_post', $_POST);

View file

@ -80,7 +80,7 @@ class Index extends BaseSettings
$name = trim($_POST['name'] ?? ''); $name = trim($_POST['name'] ?? '');
if (!strlen($name)) { if (!strlen($name)) {
notice(DI::l10n()->t('Profile Name is required.')); DI::sysmsg()->addNotice(DI::l10n()->t('Profile Name is required.'));
return; return;
} }
@ -128,7 +128,7 @@ class Index extends BaseSettings
); );
if (!$result) { if (!$result) {
notice(DI::l10n()->t('Profile couldn\'t be updated.')); DI::sysmsg()->addNotice(DI::l10n()->t('Profile couldn\'t be updated.'));
return; return;
} }
@ -138,7 +138,7 @@ class Index extends BaseSettings
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('You must be logged in to use this module')); DI::sysmsg()->addNotice(DI::l10n()->t('You must be logged in to use this module'));
return Login::form(); return Login::form();
} }

View file

@ -105,7 +105,7 @@ class Crop extends BaseSettings
Photo::USER_AVATAR Photo::USER_AVATAR
); );
if ($r === false) { if ($r === false) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '300')); DI::sysmsg()->addNotice(DI::l10n()->t('Image size reduction [%s] failed.', '300'));
} else { } else {
Photo::update(['profile' => true], array_merge($condition, ['scale' => 4])); Photo::update(['profile' => true], array_merge($condition, ['scale' => 4]));
} }
@ -123,7 +123,7 @@ class Crop extends BaseSettings
Photo::USER_AVATAR Photo::USER_AVATAR
); );
if ($r === false) { if ($r === false) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '80')); DI::sysmsg()->addNotice(DI::l10n()->t('Image size reduction [%s] failed.', '80'));
} else { } else {
Photo::update(['profile' => true], array_merge($condition, ['scale' => 5])); Photo::update(['profile' => true], array_merge($condition, ['scale' => 5]));
} }
@ -141,19 +141,19 @@ class Crop extends BaseSettings
Photo::USER_AVATAR Photo::USER_AVATAR
); );
if ($r === false) { if ($r === false) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '48')); DI::sysmsg()->addNotice(DI::l10n()->t('Image size reduction [%s] failed.', '48'));
} else { } else {
Photo::update(['profile' => true], array_merge($condition, ['scale' => 6])); Photo::update(['profile' => true], array_merge($condition, ['scale' => 6]));
} }
Contact::updateSelfFromUserID(local_user(), true); Contact::updateSelfFromUserID(local_user(), true);
info(DI::l10n()->t('Shift-reload the page or clear browser cache if the new photo does not display immediately.')); DI::sysmsg()->addInfo(DI::l10n()->t('Shift-reload the page or clear browser cache if the new photo does not display immediately.'));
// Update global directory in background // Update global directory in background
Profile::publishUpdate(local_user()); Profile::publishUpdate(local_user());
} else { } else {
notice(DI::l10n()->t('Unable to process image')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to process image'));
} }
} }
@ -194,7 +194,7 @@ class Crop extends BaseSettings
// Update global directory in background // Update global directory in background
Profile::publishUpdate(local_user()); Profile::publishUpdate(local_user());
info(DI::l10n()->t('Profile picture successfully updated.')); DI::sysmsg()->addInfo(DI::l10n()->t('Profile picture successfully updated.'));
DI::baseUrl()->redirect('profile/' . DI::app()->getLoggedInUserNickname()); DI::baseUrl()->redirect('profile/' . DI::app()->getLoggedInUserNickname());
} }

View file

@ -43,7 +43,7 @@ class Index extends BaseSettings
self::checkFormSecurityTokenRedirectOnError('/settings/profile/photo', 'settings_profile_photo'); self::checkFormSecurityTokenRedirectOnError('/settings/profile/photo', 'settings_profile_photo');
if (empty($_FILES['userfile'])) { if (empty($_FILES['userfile'])) {
notice(DI::l10n()->t('Missing uploaded image.')); DI::sysmsg()->addNotice(DI::l10n()->t('Missing uploaded image.'));
return; return;
} }
@ -57,7 +57,7 @@ class Index extends BaseSettings
$maximagesize = DI::config()->get('system', 'maximagesize', 0); $maximagesize = DI::config()->get('system', 'maximagesize', 0);
if ($maximagesize && $filesize > $maximagesize) { if ($maximagesize && $filesize > $maximagesize) {
notice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize))); DI::sysmsg()->addNotice(DI::l10n()->t('Image exceeds size limit of %s', Strings::formatBytes($maximagesize)));
@unlink($src); @unlink($src);
return; return;
} }
@ -66,7 +66,7 @@ class Index extends BaseSettings
$Image = new Image($imagedata, $filetype); $Image = new Image($imagedata, $filetype);
if (!$Image->isValid()) { if (!$Image->isValid()) {
notice(DI::l10n()->t('Unable to process image.')); DI::sysmsg()->addNotice(DI::l10n()->t('Unable to process image.'));
@unlink($src); @unlink($src);
return; return;
} }
@ -93,13 +93,13 @@ class Index extends BaseSettings
$filename = ''; $filename = '';
if (!Photo::store($Image, local_user(), 0, $resource_id, $filename, DI::l10n()->t(Photo::PROFILE_PHOTOS), 0, Photo::USER_AVATAR)) { if (!Photo::store($Image, local_user(), 0, $resource_id, $filename, DI::l10n()->t(Photo::PROFILE_PHOTOS), 0, Photo::USER_AVATAR)) {
notice(DI::l10n()->t('Image upload failed.')); DI::sysmsg()->addNotice(DI::l10n()->t('Image upload failed.'));
} }
if ($width > 640 || $height > 640) { if ($width > 640 || $height > 640) {
$Image->scaleDown(640); $Image->scaleDown(640);
if (!Photo::store($Image, local_user(), 0, $resource_id, $filename, DI::l10n()->t(Photo::PROFILE_PHOTOS), 1, Photo::USER_AVATAR)) { if (!Photo::store($Image, local_user(), 0, $resource_id, $filename, DI::l10n()->t(Photo::PROFILE_PHOTOS), 1, Photo::USER_AVATAR)) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '640')); DI::sysmsg()->addNotice(DI::l10n()->t('Image size reduction [%s] failed.', '640'));
} }
} }

View file

@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Security\TwoFactor\Model\AppSpecificPassword; use Friendica\Security\TwoFactor\Model\AppSpecificPassword;
use Friendica\Module\BaseSettings; use Friendica\Module\BaseSettings;
@ -61,7 +62,7 @@ class AppSpecific extends BaseSettings
} }
if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { if (!self::checkFormSecurityToken('settings_2fa_password', 't')) {
notice($this->t('Please enter your password to access this page.')); DI::sysmsg()->addNotice($this->t('Please enter your password to access this page.'));
$this->baseUrl->redirect('settings/2fa'); $this->baseUrl->redirect('settings/2fa');
} }
} }
@ -79,20 +80,20 @@ class AppSpecific extends BaseSettings
case 'generate': case 'generate':
$description = $_POST['description'] ?? ''; $description = $_POST['description'] ?? '';
if (empty($description)) { if (empty($description)) {
notice($this->t('App-specific password generation failed: The description is empty.')); DI::sysmsg()->addNotice($this->t('App-specific password generation failed: The description is empty.'));
$this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));
} elseif (AppSpecificPassword::checkDuplicateForUser(local_user(), $description)) { } elseif (AppSpecificPassword::checkDuplicateForUser(local_user(), $description)) {
notice($this->t('App-specific password generation failed: This description already exists.')); DI::sysmsg()->addNotice($this->t('App-specific password generation failed: This description already exists.'));
$this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));
} else { } else {
$this->appSpecificPassword = AppSpecificPassword::generateForUser(local_user(), $_POST['description'] ?? ''); $this->appSpecificPassword = AppSpecificPassword::generateForUser(local_user(), $_POST['description'] ?? '');
info($this->t('New app-specific password generated.')); DI::sysmsg()->addInfo($this->t('New app-specific password generated.'));
} }
break; break;
case 'revoke_all' : case 'revoke_all' :
AppSpecificPassword::deleteAllForUser(local_user()); AppSpecificPassword::deleteAllForUser(local_user());
info($this->t('App-specific passwords successfully revoked.')); DI::sysmsg()->addInfo($this->t('App-specific passwords successfully revoked.'));
$this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));
break; break;
} }
@ -102,7 +103,7 @@ class AppSpecific extends BaseSettings
self::checkFormSecurityTokenRedirectOnError('settings/2fa/app_specific', 'settings_2fa_app_specific'); self::checkFormSecurityTokenRedirectOnError('settings/2fa/app_specific', 'settings_2fa_app_specific');
if (AppSpecificPassword::deleteForUser(local_user(), $_POST['revoke_id'])) { if (AppSpecificPassword::deleteForUser(local_user(), $_POST['revoke_id'])) {
info($this->t('App-specific password successfully revoked.')); DI::sysmsg()->addInfo($this->t('App-specific password successfully revoked.'));
} }
$this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password'));

View file

@ -66,7 +66,7 @@ class Index extends BaseSettings
DI::pConfig()->delete(local_user(), '2fa', 'verified'); DI::pConfig()->delete(local_user(), '2fa', 'verified');
Session::remove('2fa'); Session::remove('2fa');
info(DI::l10n()->t('Two-factor authentication successfully disabled.')); DI::sysmsg()->addInfo(DI::l10n()->t('Two-factor authentication successfully disabled.'));
DI::baseUrl()->redirect('settings/2fa'); DI::baseUrl()->redirect('settings/2fa');
} }
break; break;
@ -98,7 +98,7 @@ class Index extends BaseSettings
} catch (FoundException $exception) { } catch (FoundException $exception) {
// Nothing to do here // Nothing to do here
} catch (\Exception $e) { } catch (\Exception $e) {
notice(DI::l10n()->t($e->getMessage())); DI::sysmsg()->addNotice(DI::l10n()->t($e->getMessage()));
} }
} }

View file

@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Security\TwoFactor\Model\RecoveryCode; use Friendica\Security\TwoFactor\Model\RecoveryCode;
use Friendica\Module\BaseSettings; use Friendica\Module\BaseSettings;
@ -59,7 +60,7 @@ class Recovery extends BaseSettings
} }
if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { if (!self::checkFormSecurityToken('settings_2fa_password', 't')) {
notice($this->t('Please enter your password to access this page.')); DI::sysmsg()->addNotice($this->t('Please enter your password to access this page.'));
$this->baseUrl->redirect('settings/2fa'); $this->baseUrl->redirect('settings/2fa');
} }
} }
@ -75,7 +76,7 @@ class Recovery extends BaseSettings
if ($_POST['action'] == 'regenerate') { if ($_POST['action'] == 'regenerate') {
RecoveryCode::regenerateForUser(local_user()); RecoveryCode::regenerateForUser(local_user());
info($this->t('New recovery codes successfully generated.')); DI::sysmsg()->addInfo($this->t('New recovery codes successfully generated.'));
$this->baseUrl->redirect('settings/2fa/recovery?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/recovery?t=' . self::getFormSecurityToken('settings_2fa_password'));
} }
} }

View file

@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\DI;
use Friendica\Module\BaseSettings; use Friendica\Module\BaseSettings;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Security\TwoFactor; use Friendica\Security\TwoFactor;
@ -62,7 +63,7 @@ class Trusted extends BaseSettings
} }
if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { if (!self::checkFormSecurityToken('settings_2fa_password', 't')) {
notice($this->t('Please enter your password to access this page.')); DI::sysmsg()->addNotice($this->t('Please enter your password to access this page.'));
$this->baseUrl->redirect('settings/2fa'); $this->baseUrl->redirect('settings/2fa');
} }
} }
@ -79,7 +80,7 @@ class Trusted extends BaseSettings
switch ($_POST['action']) { switch ($_POST['action']) {
case 'remove_all': case 'remove_all':
$this->trustedBrowserRepo->removeAllForUser(local_user()); $this->trustedBrowserRepo->removeAllForUser(local_user());
info($this->t('Trusted browsers successfully removed.')); DI::sysmsg()->addInfo($this->t('Trusted browsers successfully removed.'));
$this->baseUrl->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password'));
break; break;
} }
@ -89,7 +90,7 @@ class Trusted extends BaseSettings
self::checkFormSecurityTokenRedirectOnError('settings/2fa/trusted', 'settings_2fa_trusted'); self::checkFormSecurityTokenRedirectOnError('settings/2fa/trusted', 'settings_2fa_trusted');
if ($this->trustedBrowserRepo->removeForUser(local_user(), $_POST['remove_id'])) { if ($this->trustedBrowserRepo->removeForUser(local_user(), $_POST['remove_id'])) {
info($this->t('Trusted browser successfully removed.')); DI::sysmsg()->addInfo($this->t('Trusted browser successfully removed.'));
} }
$this->baseUrl->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password')); $this->baseUrl->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password'));

View file

@ -30,6 +30,7 @@ use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session; use Friendica\Core\Session;
use Friendica\DI;
use Friendica\Module\BaseSettings; use Friendica\Module\BaseSettings;
use Friendica\Module\Response; use Friendica\Module\Response;
use Friendica\Module\Security\Login; use Friendica\Module\Security\Login;
@ -65,7 +66,7 @@ class Verify extends BaseSettings
} }
if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { if (!self::checkFormSecurityToken('settings_2fa_password', 't')) {
notice($this->t('Please enter your password to access this page.')); DI::sysmsg()->addNotice($this->t('Please enter your password to access this page.'));
$this->baseUrl->redirect('settings/2fa'); $this->baseUrl->redirect('settings/2fa');
} }
} }
@ -87,11 +88,11 @@ class Verify extends BaseSettings
$this->pConfig->set(local_user(), '2fa', 'verified', true); $this->pConfig->set(local_user(), '2fa', 'verified', true);
Session::set('2fa', true); Session::set('2fa', true);
info($this->t('Two-factor authentication successfully activated.')); DI::sysmsg()->addInfo($this->t('Two-factor authentication successfully activated.'));
$this->baseUrl->redirect('settings/2fa'); $this->baseUrl->redirect('settings/2fa');
} else { } else {
notice($this->t('Invalid code, please retry.')); DI::sysmsg()->addNotice($this->t('Invalid code, please retry.'));
} }
} }
} }

View file

@ -21,11 +21,11 @@
namespace Friendica\Module\Settings; namespace Friendica\Module\Settings;
use Friendica\App;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\Post; use Friendica\Model\Post;
@ -253,7 +253,7 @@ class UserExport extends BaseSettings
); );
$output = [ $output = [
'version' => FRIENDICA_VERSION, 'version' => App::VERSION,
'schema' => DB_UPDATE_VERSION, 'schema' => DB_UPDATE_VERSION,
'baseurl' => DI::baseUrl(), 'baseurl' => DI::baseUrl(),
'user' => $user, 'user' => $user,

View file

@ -69,8 +69,8 @@ class Statistics extends BaseModule
$statistics = array_merge([ $statistics = array_merge([
'name' => $this->config->get('config', 'sitename'), 'name' => $this->config->get('config', 'sitename'),
'network' => FRIENDICA_PLATFORM, 'network' => App::PLATFORM,
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
'registrations_open' => $registration_open, 'registrations_open' => $registration_open,
'total_users' => $this->config->get('nodeinfo', 'total_users'), 'total_users' => $this->config->get('nodeinfo', 'total_users'),
'active_users_halfyear' => $this->config->get('nodeinfo', 'active_users_halfyear'), 'active_users_halfyear' => $this->config->get('nodeinfo', 'active_users_halfyear'),

View file

@ -86,9 +86,9 @@ class HttpClient extends BaseFactory
$logger->notice('Curl redirect.', ['url' => $request->getUri(), 'to' => $uri, 'method' => $request->getMethod()]); $logger->notice('Curl redirect.', ['url' => $request->getUri(), 'to' => $uri, 'method' => $request->getMethod()]);
}; };
$userAgent = FRIENDICA_PLATFORM . " '" . $userAgent = App::PLATFORM . " '" .
FRIENDICA_CODENAME . "' " . App::CODENAME . "' " .
FRIENDICA_VERSION . '-' . App::VERSION . '-' .
DB_UPDATE_VERSION . '; ' . DB_UPDATE_VERSION . '; ' .
$this->baseUrl->get(); $this->baseUrl->get();

View file

@ -21,11 +21,11 @@
namespace Friendica\Object\Api\Mastodon; namespace Friendica\Object\Api\Mastodon;
use Friendica\App;
use Friendica\App\BaseURL; use Friendica\App\BaseURL;
use Friendica\BaseDataTransferObject; use Friendica\BaseDataTransferObject;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\Register; use Friendica\Module\Register;
@ -87,7 +87,7 @@ class Instance extends BaseDataTransferObject
$this->title = $config->get('config', 'sitename'); $this->title = $config->get('config', 'sitename');
$this->short_description = $this->description = $config->get('config', 'info'); $this->short_description = $this->description = $config->get('config', 'info');
$this->email = $config->get('config', 'admin_email'); $this->email = $config->get('config', 'admin_email');
$this->version = '2.8.0 (compatible; Friendica ' . FRIENDICA_VERSION . ')'; $this->version = '2.8.0 (compatible; Friendica ' . App::VERSION . ')';
$this->urls = null; // Not supported $this->urls = null; // Not supported
$this->stats = new Stats($config, $database); $this->stats = new Stats($config, $database);
$this->thumbnail = $baseUrl->get() . ($config->get('system', 'shortcut_icon') ?? 'images/friendica-32.png'); $this->thumbnail = $baseUrl->get() . ($config->get('system', 'shortcut_icon') ?? 'images/friendica-32.png');

View file

@ -41,8 +41,8 @@ class ItemCCEMail extends Email
$disclaimer = '<hr />' . $l10n->t('This message was sent to you by %s, a member of the Friendica social network.', $user['username']) $disclaimer = '<hr />' . $l10n->t('This message was sent to you by %s, a member of the Friendica social network.', $user['username'])
. '<br />'; . '<br />';
$disclaimer .= $l10n->t('You may visit them online at %s', $baseUrl . '/profile/' . $a->getLoggedInUserNickname()) . EOL; $disclaimer .= $l10n->t('You may visit them online at %s', $baseUrl . '/profile/' . $a->getLoggedInUserNickname()) . '<br />';
$disclaimer .= $l10n->t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL; $disclaimer .= $l10n->t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . '<br />';
if (!$item['title'] == '') { if (!$item['title'] == '') {
$subject = $item['title']; $subject = $item['title'];
} else { } else {

View file

@ -170,7 +170,7 @@ class Processor
} }
/** /**
* Stire attachment data * Store attachment data
* *
* @param array $activity * @param array $activity
* @param array $item * @param array $item
@ -187,7 +187,7 @@ class Processor
} }
/** /**
* Store attachment data * Store question data
* *
* @param array $activity * @param array $activity
* @param array $item * @param array $item
@ -552,7 +552,7 @@ class Processor
Logger::notice('Fetching is done by worker.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]); Logger::notice('Fetching is done by worker.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
Fetch::add($activity['reply-to-id']); Fetch::add($activity['reply-to-id']);
$activity['recursion-depth'] = 0; $activity['recursion-depth'] = 0;
$wid = Worker::add(PRIORITY_HIGH, 'FetchMissingActivity', $activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO); $wid = Worker::add(Worker::PRIORITY_HIGH, 'FetchMissingActivity', $activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
Fetch::setWorkerId($activity['reply-to-id'], $wid); Fetch::setWorkerId($activity['reply-to-id'], $wid);
} else { } else {
Logger::debug('Activity will already be fetched via a worker.', ['url' => $activity['reply-to-id']]); Logger::debug('Activity will already be fetched via a worker.', ['url' => $activity['reply-to-id']]);
@ -1665,9 +1665,9 @@ class Processor
} }
if (DI::config()->get('system', 'bulk_delivery')) { if (DI::config()->get('system', 'bulk_delivery')) {
Post\Delivery::add($post['uri-id'], $uid, $inbox, $post['created'], Delivery::POST, [$cid]); Post\Delivery::add($post['uri-id'], $uid, $inbox, $post['created'], Delivery::POST, [$cid]);
Worker::add(PRIORITY_HIGH, 'APDelivery', '', 0, $inbox, 0); Worker::add(Worker::PRIORITY_HIGH, 'APDelivery', '', 0, $inbox, 0);
} else { } else {
Worker::add(PRIORITY_HIGH, 'APDelivery', Delivery::POST, $post['id'], $inbox, $uid, [$cid], $post['uri-id']); Worker::add(Worker::PRIORITY_HIGH, 'APDelivery', Delivery::POST, $post['id'], $inbox, $uid, [$cid], $post['uri-id']);
} }
} }
} }

View file

@ -652,7 +652,7 @@ class Receiver
// We delay by 5 seconds to allow to accumulate all receivers // We delay by 5 seconds to allow to accumulate all receivers
$delayed = date(DateTimeFormat::MYSQL, time() + 5); $delayed = date(DateTimeFormat::MYSQL, time() + 5);
Logger::debug('Initiate processing', ['id' => $object_data['entry-id'], 'uri' => $object_data['object_id']]); Logger::debug('Initiate processing', ['id' => $object_data['entry-id'], 'uri' => $object_data['object_id']]);
$wid = Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'ProcessQueue', $object_data['entry-id']); $wid = Worker::add(['priority' => Worker::PRIORITY_HIGH, 'delayed' => $delayed], 'ProcessQueue', $object_data['entry-id']);
Queue::setWorkerId($object_data['entry-id'], $wid); Queue::setWorkerId($object_data['entry-id'], $wid);
} else { } else {
Logger::debug('Other queue entries need to be processed first.', ['id' => $object_data['entry-id']]); Logger::debug('Other queue entries need to be processed first.', ['id' => $object_data['entry-id']]);

View file

@ -21,6 +21,7 @@
namespace Friendica\Protocol\ActivityPub; namespace Friendica\Protocol\ActivityPub;
use Friendica\App;
use Friendica\Content\Feature; use Friendica\Content\Feature;
use Friendica\Content\Text\BBCode; use Friendica\Content\Text\BBCode;
use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\Enum\Duration;
@ -40,6 +41,7 @@ use Friendica\Model\User;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\Relay; use Friendica\Protocol\Relay;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\HTTPSignature; use Friendica\Util\HTTPSignature;
@ -415,7 +417,7 @@ class Transmitter
{ {
return [ return [
'type' => 'Service', 'type' => 'Service',
'name' => FRIENDICA_PLATFORM . " '" . FRIENDICA_CODENAME . "' " . FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'name' => App::PLATFORM . " '" . App::CODENAME . "' " . App::VERSION . '-' . DB_UPDATE_VERSION,
'url' => DI::baseUrl()->get() 'url' => DI::baseUrl()->get()
]; ];
} }
@ -1621,6 +1623,8 @@ class Transmitter
$permission_block = self::createPermissionBlockForItem($item, false); $permission_block = self::createPermissionBlockForItem($item, false);
$real_quote = false;
$body = $item['body']; $body = $item['body'];
if ($type == 'Note') { if ($type == 'Note') {
@ -1662,10 +1666,17 @@ class Transmitter
$body = BBCode::setMentionsToNicknames($body); $body = BBCode::setMentionsToNicknames($body);
$shared = BBCode::fetchShareAttributes($body); if (!empty($item['quote-uri']) && Post::exists(['uri-id' => $item['quote-uri-id'], 'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN]])) {
if (!empty($shared['link']) && !empty($shared['guid']) && !empty($shared['comment'])) { $real_quote = true;
$body = self::replaceSharedData($body); if (Diaspora::isReshare($body, false)) {
$data['quoteUrl'] = $shared['link']; $body = BBCode::replaceSharedData($body);
} elseif (strpos($body, $item['quote-uri']) === false) {
$body .= "\n" . $item['quote-uri'];
}
$data['quoteUrl'] = $item['quote-uri'];
} elseif (!empty($item['quote-uri']) && !Diaspora::isReshare($body, false)) {
$body .= "\n" . DI::contentItem()->createSharedPostByUriId($item['quote-uri-id'], $item['uid'], true);
$item['body'] = Item::improveSharedDataInBody($item, true);
} }
$data['content'] = BBCode::convertForUriId($item['uri-id'], $body, BBCode::ACTIVITYPUB); $data['content'] = BBCode::convertForUriId($item['uri-id'], $body, BBCode::ACTIVITYPUB);
@ -1678,9 +1689,11 @@ class Transmitter
if (!empty($language)) { if (!empty($language)) {
$richbody = BBCode::setMentionsToNicknames($item['body'] ?? ''); $richbody = BBCode::setMentionsToNicknames($item['body'] ?? '');
if ($real_quote) {
$shared = BBCode::fetchShareAttributes($richbody); $shared = BBCode::fetchShareAttributes($richbody);
if (!empty($shared['link']) && !empty($shared['guid']) && !empty($shared['comment'])) { if (!empty($shared['link']) && !empty($shared['guid']) && !empty($shared['comment'])) {
$richbody = self::replaceSharedData($richbody); $richbody = BBCode::replaceSharedData($richbody);
}
} }
$richbody = BBCode::removeAttachment($richbody); $richbody = BBCode::removeAttachment($richbody);
@ -1710,22 +1723,6 @@ class Transmitter
return $data; return $data;
} }
/**
* Replace the share block with a link
*
* @param string $body
* @return string
*/
private static function replaceSharedData(string $body): string
{
return BBCode::convertShare(
$body,
function (array $attributes) {
return '♲ ' . $attributes['link'];
}
);
}
/** /**
* Fetches the language from the post, the user or the system. * Fetches the language from the post, the user or the system.
* *

View file

@ -25,6 +25,7 @@ use DOMDocument;
use DOMElement; use DOMElement;
use DOMNode; use DOMNode;
use DOMXPath; use DOMXPath;
use Friendica\App;
use Friendica\Content\Text\BBCode; use Friendica\Content\Text\BBCode;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
@ -369,8 +370,8 @@ class DFRN
XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']); XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']);
XML::addElement($doc, $root, 'title', $owner['name']); XML::addElement($doc, $root, 'title', $owner['name']);
$attributes = ['uri' => 'https://friendi.ca', 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION]; $attributes = ['uri' => 'https://friendi.ca', 'version' => App::VERSION . '-' . DB_UPDATE_VERSION];
XML::addElement($doc, $root, 'generator', FRIENDICA_PLATFORM, $attributes); XML::addElement($doc, $root, 'generator', App::PLATFORM, $attributes);
$attributes = ['rel' => 'license', 'href' => 'http://creativecommons.org/licenses/by/3.0/']; $attributes = ['rel' => 'license', 'href' => 'http://creativecommons.org/licenses/by/3.0/'];
XML::addElement($doc, $root, 'link', '', $attributes); XML::addElement($doc, $root, 'link', '', $attributes);

View file

@ -2020,7 +2020,7 @@ class Diaspora
} }
Logger::info('Deliver participation', ['item' => $comment['id'], 'contact' => $author_contact['cid']]); Logger::info('Deliver participation', ['item' => $comment['id'], 'contact' => $author_contact['cid']]);
if (Worker::add(PRIORITY_HIGH, 'Delivery', Delivery::POST, $comment['uri-id'], $author_contact['cid'], $datarray['uid'])) { if (Worker::add(Worker::PRIORITY_HIGH, 'Delivery', Delivery::POST, $comment['uri-id'], $author_contact['cid'], $datarray['uid'])) {
Post\DeliveryData::incrementQueueCount($comment['uri-id'], 1); Post\DeliveryData::incrementQueueCount($comment['uri-id'], 1);
} }
} }

View file

@ -24,12 +24,14 @@ namespace Friendica\Protocol;
use DOMDocument; use DOMDocument;
use DOMElement; use DOMElement;
use DOMXPath; use DOMXPath;
use Friendica\App;
use Friendica\Content\PageInfo; use Friendica\Content\PageInfo;
use Friendica\Content\Text\BBCode; use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML; use Friendica\Content\Text\HTML;
use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\Enum\Duration;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
@ -631,7 +633,7 @@ class Feed
unset($item['parent-uri']); unset($item['parent-uri']);
// Set the delivery priority for "remote self" to "medium" // Set the delivery priority for "remote self" to "medium"
$notify = PRIORITY_MEDIUM; $notify = Worker::PRIORITY_MEDIUM;
} }
$condition = ['uid' => $item['uid'], 'uri' => $item['uri']]; $condition = ['uid' => $item['uid'], 'uri' => $item['uri']];
@ -1035,8 +1037,8 @@ class Feed
break; break;
} }
$attributes = ['uri' => 'https://friendi.ca', 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION]; $attributes = ['uri' => 'https://friendi.ca', 'version' => App::VERSION . '-' . DB_UPDATE_VERSION];
XML::addElement($doc, $root, 'generator', FRIENDICA_PLATFORM, $attributes); XML::addElement($doc, $root, 'generator', App::PLATFORM, $attributes);
XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']); XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']);
XML::addElement($doc, $root, 'title', $title); XML::addElement($doc, $root, 'title', $title);
XML::addElement($doc, $root, 'subtitle', sprintf("Updates from %s on %s", $owner['name'], DI::config()->get('config', 'sitename'))); XML::addElement($doc, $root, 'subtitle', sprintf("Updates from %s on %s", $owner['name'], DI::config()->get('config', 'sitename')));

View file

@ -24,6 +24,7 @@ namespace Friendica\Protocol;
use DOMDocument; use DOMDocument;
use DOMElement; use DOMElement;
use DOMXPath; use DOMXPath;
use Friendica\App;
use Friendica\Content\Text\BBCode; use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML; use Friendica\Content\Text\HTML;
use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Cache\Enum\Duration;
@ -1061,9 +1062,9 @@ class OStatus
$attributes = [ $attributes = [
'uri' => 'https://friendi.ca', 'uri' => 'https://friendi.ca',
'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
]; ];
XML::addElement($doc, $root, 'generator', FRIENDICA_PLATFORM, $attributes); XML::addElement($doc, $root, 'generator', App::PLATFORM, $attributes);
XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']); XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']);
XML::addElement($doc, $root, 'title', $title); XML::addElement($doc, $root, 'title', $title);
XML::addElement($doc, $root, 'subtitle', sprintf("Updates from %s on %s", $owner['name'], DI::config()->get('config', 'sitename'))); XML::addElement($doc, $root, 'subtitle', sprintf("Updates from %s on %s", $owner['name'], DI::config()->get('config', 'sitename')));

View file

@ -223,7 +223,7 @@ class Authentication
// if it's an email address or doesn't resolve to a URL, fail. // if it's an email address or doesn't resolve to a URL, fail.
if ($noid || strpos($openid_url, '@') || !Network::isUrlValid($openid_url)) { if ($noid || strpos($openid_url, '@') || !Network::isUrlValid($openid_url)) {
notice($this->l10n->t('Login failed.')); DI::sysmsg()->addNotice($this->l10n->t('Login failed.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
} }
@ -237,7 +237,7 @@ class Authentication
$openid->optional = ['namePerson/friendly', 'contact/email', 'namePerson', 'namePerson/first', 'media/image/aspect11', 'media/image/default']; $openid->optional = ['namePerson/friendly', 'contact/email', 'namePerson', 'namePerson/first', 'media/image/aspect11', 'media/image/default'];
System::externalRedirect($openid->authUrl()); System::externalRedirect($openid->authUrl());
} catch (Exception $e) { } catch (Exception $e) {
notice($this->l10n->t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '<br /><br >' . $this->l10n->t('The error message was:') . ' ' . $e->getMessage()); DI::sysmsg()->addNotice($this->l10n->t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '<br /><br >' . $this->l10n->t('The error message was:') . ' ' . $e->getMessage());
} }
} }
@ -268,7 +268,7 @@ class Authentication
); );
} catch (Exception $e) { } catch (Exception $e) {
$this->logger->warning('authenticate: failed login attempt', ['action' => 'login', 'username' => $username, 'ip' => $this->remoteAddress]); $this->logger->warning('authenticate: failed login attempt', ['action' => 'login', 'username' => $username, 'ip' => $this->remoteAddress]);
notice($this->l10n->t('Login failed. Please check your credentials.')); DI::sysmsg()->addNotice($this->l10n->t('Login failed. Please check your credentials.'));
$this->baseUrl->redirect(); $this->baseUrl->redirect();
} }
@ -379,8 +379,8 @@ class Authentication
if ($interactive) { if ($interactive) {
if ($user_record['login_date'] <= DBA::NULL_DATETIME) { if ($user_record['login_date'] <= DBA::NULL_DATETIME) {
info($this->l10n->t('Welcome %s', $user_record['username'])); DI::sysmsg()->addInfo($this->l10n->t('Welcome %s', $user_record['username']));
info($this->l10n->t('Please upload a profile photo.')); DI::sysmsg()->addInfo($this->l10n->t('Please upload a profile photo.'));
$this->baseUrl->redirect('settings/profile/photo/new'); $this->baseUrl->redirect('settings/profile/photo/new');
} }
} }

View file

@ -22,6 +22,7 @@
namespace Friendica\Util\EMailer; namespace Friendica\Util\EMailer;
use Exception; use Exception;
use Friendica\App;
use Friendica\App\BaseURL; use Friendica\App\BaseURL;
use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n; use Friendica\Core\L10n;
@ -79,8 +80,8 @@ abstract class MailBuilder
$this->headers = [ $this->headers = [
'Precedence' => ['list'], 'Precedence' => ['list'],
'X-Friendica-Host' => [$hostname], 'X-Friendica-Host' => [$hostname],
'X-Friendica-Platform' => [FRIENDICA_PLATFORM], 'X-Friendica-Platform' => [App::PLATFORM],
'X-Friendica-Version' => [FRIENDICA_VERSION], 'X-Friendica-Version' => [App::VERSION],
'List-ID' => ['<notification.' . $hostname . '>'], 'List-ID' => ['<notification.' . $hostname . '>'],
'List-Archive' => ['<' . $baseUrl->get() . '/notifications/system>'], 'List-Archive' => ['<' . $baseUrl->get() . '/notifications/system>'],
]; ];
@ -257,7 +258,7 @@ abstract class MailBuilder
$tpl = Renderer::getMarkupTemplate('email/html.tpl'); $tpl = Renderer::getMarkupTemplate('email/html.tpl');
$msgHtml = Renderer::replaceMacros($tpl, [ $msgHtml = Renderer::replaceMacros($tpl, [
'$title' => $this->l10n->t('Friendica Notification'), '$title' => $this->l10n->t('Friendica Notification'),
'$product' => FRIENDICA_PLATFORM, '$product' => App::PLATFORM,
'$htmlversion' => $msgHtml, '$htmlversion' => $msgHtml,
'$sitename' => $this->config->get('config', 'sitename'), '$sitename' => $this->config->get('config', 'sitename'),
'$banner' => $this->config->get('system', 'email_banner', '$banner' => $this->config->get('system', 'email_banner',

View file

@ -22,6 +22,7 @@
namespace Friendica\Util\Writer; namespace Friendica\Util\Writer;
use Exception; use Exception;
use Friendica\App;
use Friendica\Database\Definition\DbaDefinition; use Friendica\Database\Definition\DbaDefinition;
/** /**
@ -41,7 +42,7 @@ class DbaDefinitionSqlWriter
public static function create(DbaDefinition $definition): string public static function create(DbaDefinition $definition): string
{ {
$sqlString = "-- ------------------------------------------\n"; $sqlString = "-- ------------------------------------------\n";
$sqlString .= "-- " . FRIENDICA_PLATFORM . " " . FRIENDICA_VERSION . " (" . FRIENDICA_CODENAME . ")\n"; $sqlString .= "-- " . App::PLATFORM . " " . App::VERSION . " (" . App::CODENAME . ")\n";
$sqlString .= "-- DB_UPDATE_VERSION " . DB_UPDATE_VERSION . "\n"; $sqlString .= "-- DB_UPDATE_VERSION " . DB_UPDATE_VERSION . "\n";
$sqlString .= "-- ------------------------------------------\n\n\n"; $sqlString .= "-- ------------------------------------------\n\n\n";

View file

@ -34,7 +34,7 @@ class CheckDeletedContacts
{ {
$contacts = DBA::select('contact', ['id'], ['deleted' => true]); $contacts = DBA::select('contact', ['id'], ['deleted' => true]);
while ($contact = DBA::fetch($contacts)) { while ($contact = DBA::fetch($contacts)) {
Worker::add(PRIORITY_MEDIUM, 'Contact\Remove', $contact['id']); Worker::add(Worker::PRIORITY_MEDIUM, 'Contact\Remove', $contact['id']);
} }
DBA::close($contacts); DBA::close($contacts);
} }

View file

@ -62,25 +62,25 @@ class Cron
} }
// Fork the cron jobs in separate parts to avoid problems when one of them is crashing // Fork the cron jobs in separate parts to avoid problems when one of them is crashing
Hook::fork(PRIORITY_MEDIUM, 'cron'); Hook::fork(Worker::PRIORITY_MEDIUM, 'cron');
// Poll contacts // Poll contacts
Worker::add(PRIORITY_MEDIUM, 'PollContacts'); Worker::add(Worker::PRIORITY_MEDIUM, 'PollContacts');
// Update contact information // Update contact information
Worker::add(PRIORITY_LOW, 'UpdateContacts'); Worker::add(Worker::PRIORITY_LOW, 'UpdateContacts');
// Update server information // Update server information
Worker::add(PRIORITY_LOW, 'UpdateGServers'); Worker::add(Worker::PRIORITY_LOW, 'UpdateGServers');
// run the process to update server directories in the background // run the process to update server directories in the background
Worker::add(PRIORITY_LOW, 'UpdateServerDirectories'); Worker::add(Worker::PRIORITY_LOW, 'UpdateServerDirectories');
// Expire and remove user entries // Expire and remove user entries
Worker::add(PRIORITY_MEDIUM, 'ExpireAndRemoveUsers'); Worker::add(Worker::PRIORITY_MEDIUM, 'ExpireAndRemoveUsers');
// Call possible post update functions // Call possible post update functions
Worker::add(PRIORITY_LOW, 'PostUpdate'); Worker::add(Worker::PRIORITY_LOW, 'PostUpdate');
// Hourly cron calls // Hourly cron calls
if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) { if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) {
@ -97,11 +97,11 @@ class Cron
// Search for new contacts in the directory // Search for new contacts in the directory
if (DI::config()->get('system', 'synchronize_directory')) { if (DI::config()->get('system', 'synchronize_directory')) {
Worker::add(PRIORITY_LOW, 'PullDirectory'); Worker::add(Worker::PRIORITY_LOW, 'PullDirectory');
} }
// Clear cache entries // Clear cache entries
Worker::add(PRIORITY_LOW, 'ClearCache'); Worker::add(Worker::PRIORITY_LOW, 'ClearCache');
DI::config()->set('system', 'last_cron_hourly', time()); DI::config()->set('system', 'last_cron_hourly', time());
} }
@ -109,27 +109,27 @@ class Cron
// Daily maintenance cron calls // Daily maintenance cron calls
if (Worker::isInMaintenanceWindow(true)) { if (Worker::isInMaintenanceWindow(true)) {
Worker::add(PRIORITY_LOW, 'UpdateContactBirthdays'); Worker::add(Worker::PRIORITY_LOW, 'UpdateContactBirthdays');
Worker::add(PRIORITY_LOW, 'UpdatePhotoAlbums'); Worker::add(Worker::PRIORITY_LOW, 'UpdatePhotoAlbums');
Worker::add(PRIORITY_LOW, 'ExpirePosts'); Worker::add(Worker::PRIORITY_LOW, 'ExpirePosts');
Worker::add(PRIORITY_LOW, 'ExpireActivities'); Worker::add(Worker::PRIORITY_LOW, 'ExpireActivities');
Worker::add(PRIORITY_LOW, 'RemoveUnusedTags'); Worker::add(Worker::PRIORITY_LOW, 'RemoveUnusedTags');
Worker::add(PRIORITY_LOW, 'RemoveUnusedContacts'); Worker::add(Worker::PRIORITY_LOW, 'RemoveUnusedContacts');
Worker::add(PRIORITY_LOW, 'RemoveUnusedAvatars'); Worker::add(Worker::PRIORITY_LOW, 'RemoveUnusedAvatars');
// check upstream version? // check upstream version?
Worker::add(PRIORITY_LOW, 'CheckVersion'); Worker::add(Worker::PRIORITY_LOW, 'CheckVersion');
Worker::add(PRIORITY_LOW, 'CheckDeletedContacts'); Worker::add(Worker::PRIORITY_LOW, 'CheckDeletedContacts');
if (DI::config()->get('system', 'optimize_tables')) { if (DI::config()->get('system', 'optimize_tables')) {
Worker::add(PRIORITY_LOW, 'OptimizeTables'); Worker::add(Worker::PRIORITY_LOW, 'OptimizeTables');
} }
// Resubscribe to relay servers // Resubscribe to relay servers

View file

@ -64,7 +64,7 @@ class Directory
private static function updateAll() { private static function updateAll() {
$users = DBA::select('owner-view', ['url'], ['net-publish' => true, 'account_expired' => false, 'verified' => true]); $users = DBA::select('owner-view', ['url'], ['net-publish' => true, 'account_expired' => false, 'verified' => true]);
while ($user = DBA::fetch($users)) { while ($user = DBA::fetch($users)) {
Worker::add(PRIORITY_LOW, 'Directory', $user['url']); Worker::add(Worker::PRIORITY_LOW, 'Directory', $user['url']);
} }
DBA::close($users); DBA::close($users);
} }

View file

@ -53,10 +53,10 @@ class ExpirePosts
} }
// Set the expiry for origin posta // Set the expiry for origin posta
Worker::add(PRIORITY_LOW, 'Expire'); Worker::add(Worker::PRIORITY_LOW, 'Expire');
// update nodeinfo data after everything is cleaned up // update nodeinfo data after everything is cleaned up
Worker::add(PRIORITY_LOW, 'NodeInfo'); Worker::add(Worker::PRIORITY_LOW, 'NodeInfo');
} }
/** /**

View file

@ -37,7 +37,7 @@ class MoveStorage
$moved = DI::storageManager()->move($current); $moved = DI::storageManager()->move($current);
if ($moved) { if ($moved) {
Worker::add(PRIORITY_LOW, 'MoveStorage'); Worker::add(Worker::PRIORITY_LOW, 'MoveStorage');
} }
} }
} }

View file

@ -86,7 +86,7 @@ class Notifier
foreach ($inboxes as $inbox => $receivers) { foreach ($inboxes as $inbox => $receivers) {
$ap_contacts = array_merge($ap_contacts, $receivers); $ap_contacts = array_merge($ap_contacts, $receivers);
Logger::info('Delivery via ActivityPub', ['cmd' => $cmd, 'target' => $target_id, 'inbox' => $inbox]); Logger::info('Delivery via ActivityPub', ['cmd' => $cmd, 'target' => $target_id, 'inbox' => $inbox]);
Worker::add(['priority' => PRIORITY_HIGH, 'created' => $a->getQueueValue('created'), 'dont_fork' => true], Worker::add(['priority' => Worker::PRIORITY_HIGH, 'created' => $a->getQueueValue('created'), 'dont_fork' => true],
'APDelivery', $cmd, $target_id, $inbox, $uid, $receivers, $post_uriid); 'APDelivery', $cmd, $target_id, $inbox, $uid, $receivers, $post_uriid);
} }
} elseif ($cmd == Delivery::SUGGESTION) { } elseif ($cmd == Delivery::SUGGESTION) {
@ -568,7 +568,7 @@ class Notifier
// Situation is that sometimes Friendica servers receive Friendica posts over the Diaspora protocol first. // Situation is that sometimes Friendica servers receive Friendica posts over the Diaspora protocol first.
// The conversion in Markdown reduces the formatting, so these posts should arrive after the Friendica posts. // The conversion in Markdown reduces the formatting, so these posts should arrive after the Friendica posts.
// This is only important for high and medium priority tasks and not for Low priority jobs like deletions. // This is only important for high and medium priority tasks and not for Low priority jobs like deletions.
if (($contact['network'] == Protocol::DIASPORA) && in_array($a->getQueueValue('priority'), [PRIORITY_HIGH, PRIORITY_MEDIUM])) { if (($contact['network'] == Protocol::DIASPORA) && in_array($a->getQueueValue('priority'), [Worker::PRIORITY_HIGH, Worker::PRIORITY_MEDIUM])) {
$deliver_options = ['priority' => $a->getQueueValue('priority'), 'dont_fork' => true]; $deliver_options = ['priority' => $a->getQueueValue('priority'), 'dont_fork' => true];
} else { } else {
$deliver_options = ['priority' => $a->getQueueValue('priority'), 'created' => $a->getQueueValue('created'), 'dont_fork' => true]; $deliver_options = ['priority' => $a->getQueueValue('priority'), 'created' => $a->getQueueValue('created'), 'dont_fork' => true];
@ -698,7 +698,7 @@ class Notifier
$inboxes = ActivityPub\Transmitter::fetchTargetInboxesforUser($self_user_id); $inboxes = ActivityPub\Transmitter::fetchTargetInboxesforUser($self_user_id);
foreach ($inboxes as $inbox => $receivers) { foreach ($inboxes as $inbox => $receivers) {
Logger::info('Account removal via ActivityPub', ['uid' => $self_user_id, 'inbox' => $inbox]); Logger::info('Account removal via ActivityPub', ['uid' => $self_user_id, 'inbox' => $inbox]);
Worker::add(['priority' => PRIORITY_NEGLIGIBLE, 'created' => $created, 'dont_fork' => true], Worker::add(['priority' => Worker::PRIORITY_NEGLIGIBLE, 'created' => $created, 'dont_fork' => true],
'APDelivery', Delivery::REMOVAL, 0, $inbox, $self_user_id, $receivers); 'APDelivery', Delivery::REMOVAL, 0, $inbox, $self_user_id, $receivers);
Worker::coolDown(); Worker::coolDown();
} }
@ -817,7 +817,7 @@ class Notifier
if (DI::config()->get('system', 'bulk_delivery')) { if (DI::config()->get('system', 'bulk_delivery')) {
$delivery_queue_count++; $delivery_queue_count++;
Post\Delivery::add($target_item['uri-id'], $uid, $inbox, $target_item['created'], $cmd, $receivers); Post\Delivery::add($target_item['uri-id'], $uid, $inbox, $target_item['created'], $cmd, $receivers);
Worker::add(PRIORITY_HIGH, 'APDelivery', '', 0, $inbox, 0); Worker::add(Worker::PRIORITY_HIGH, 'APDelivery', '', 0, $inbox, 0);
} else { } else {
if (Worker::add(['priority' => $priority, 'created' => $created, 'dont_fork' => true], if (Worker::add(['priority' => $priority, 'created' => $created, 'dont_fork' => true],
'APDelivery', $cmd, $target_item['id'], $inbox, $uid, $receivers, $target_item['uri-id'])) { 'APDelivery', $cmd, $target_item['id'], $inbox, $uid, $receivers, $target_item['uri-id'])) {
@ -834,7 +834,7 @@ class Notifier
if (DI::config()->get('system', 'bulk_delivery')) { if (DI::config()->get('system', 'bulk_delivery')) {
$delivery_queue_count++; $delivery_queue_count++;
Post\Delivery::add($target_item['uri-id'], $uid, $inbox, $target_item['created'], $cmd, []); Post\Delivery::add($target_item['uri-id'], $uid, $inbox, $target_item['created'], $cmd, []);
Worker::add(PRIORITY_MEDIUM, 'APDelivery', '', 0, $inbox, 0); Worker::add(Worker::PRIORITY_MEDIUM, 'APDelivery', '', 0, $inbox, 0);
} else { } else {
if (Worker::add(['priority' => $priority, 'dont_fork' => true], 'APDelivery', $cmd, $target_item['id'], $inbox, $uid, [], $target_item['uri-id'])) { if (Worker::add(['priority' => $priority, 'dont_fork' => true], 'APDelivery', $cmd, $target_item['id'], $inbox, $uid, [], $target_item['uri-id'])) {
$delivery_queue_count++; $delivery_queue_count++;

View file

@ -71,11 +71,11 @@ class PollContacts
} }
if ((($contact['network'] == Protocol::FEED) && ($contact['priority'] <= 3)) || ($contact['network'] == Protocol::MAIL)) { if ((($contact['network'] == Protocol::FEED) && ($contact['priority'] <= 3)) || ($contact['network'] == Protocol::MAIL)) {
$priority = PRIORITY_MEDIUM; $priority = Worker::PRIORITY_MEDIUM;
} elseif ($contact['archive']) { } elseif ($contact['archive']) {
$priority = PRIORITY_NEGLIGIBLE; $priority = Worker::PRIORITY_NEGLIGIBLE;
} else { } else {
$priority = PRIORITY_LOW; $priority = Worker::PRIORITY_LOW;
} }
Logger::notice("Polling " . $contact["network"] . " " . $contact["id"] . " " . $contact['priority'] . " " . $contact["nick"] . " " . $contact["name"]); Logger::notice("Polling " . $contact["network"] . " " . $contact["id"] . " " . $contact['priority'] . " " . $contact["nick"] . " " . $contact["name"]);

View file

@ -21,6 +21,7 @@
namespace Friendica\Worker; namespace Friendica\Worker;
use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\Post; use Friendica\Model\Post;
@ -48,7 +49,7 @@ class RemoveUser {
do { do {
$items = Post::select(['id'], $condition, ['limit' => 100]); $items = Post::select(['id'], $condition, ['limit' => 100]);
while ($item = Post::fetch($items)) { while ($item = Post::fetch($items)) {
Item::markForDeletionById($item['id'], PRIORITY_NEGLIGIBLE); Item::markForDeletionById($item['id'], Worker::PRIORITY_NEGLIGIBLE);
} }
DBA::close($items); DBA::close($items);
} while (Post::exists($condition)); } while (Post::exists($condition));

View file

@ -59,7 +59,7 @@ class UpdateContacts
$contacts = DBA::select('contact', ['id'], $condition, ['order' => ['next-update'], 'limit' => $limit]); $contacts = DBA::select('contact', ['id'], $condition, ['order' => ['next-update'], 'limit' => $limit]);
$count = 0; $count = 0;
while ($contact = DBA::fetch($contacts)) { while ($contact = DBA::fetch($contacts)) {
if (Worker::add(['priority' => PRIORITY_LOW, 'dont_fork' => true], "UpdateContact", $contact['id'])) { if (Worker::add(['priority' => Worker::PRIORITY_LOW, 'dont_fork' => true], "UpdateContact", $contact['id'])) {
++$count; ++$count;
} }
Worker::coolDown(); Worker::coolDown();

View file

@ -63,12 +63,12 @@ class UpdateGServers
// There are duplicated "url" but not "nurl". So we check both addresses instead of just overwriting them, // There are duplicated "url" but not "nurl". So we check both addresses instead of just overwriting them,
// since that would mean loosing data. // since that would mean loosing data.
if (!empty($gserver['url'])) { if (!empty($gserver['url'])) {
if (Worker::add(PRIORITY_LOW, 'UpdateGServer', $gserver['url'])) { if (Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'])) {
$count++; $count++;
} }
} }
if (!empty($gserver['nurl']) && ($gserver['nurl'] != Strings::normaliseLink($gserver['url']))) { if (!empty($gserver['nurl']) && ($gserver['nurl'] != Strings::normaliseLink($gserver['url']))) {
if (Worker::add(PRIORITY_LOW, 'UpdateGServer', $gserver['nurl'])) { if (Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['nurl'])) {
$count++; $count++;
} }
} }

View file

@ -55,7 +55,7 @@
use Friendica\Database\DBA; use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) { if (!defined('DB_UPDATE_VERSION')) {
define('DB_UPDATE_VERSION', 1484); define('DB_UPDATE_VERSION', 1486);
} }
return [ return [
@ -1218,6 +1218,7 @@ return [
"content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"body" => ["type" => "mediumtext", "comment" => "item body content"], "body" => ["type" => "mediumtext", "comment" => "item body content"],
"raw-body" => ["type" => "mediumtext", "comment" => "Body without embedded media links"], "raw-body" => ["type" => "mediumtext", "comment" => "Body without embedded media links"],
"quote-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the quoted uri"],
"location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "text location where this item originated"], "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "text location where this item originated"],
"coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "longitude/latitude pair representing location where this item originated"], "coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "longitude/latitude pair representing location where this item originated"],
"language" => ["type" => "text", "comment" => "Language information about this post"], "language" => ["type" => "text", "comment" => "Language information about this post"],
@ -1236,6 +1237,7 @@ return [
"plink" => ["plink(191)"], "plink" => ["plink(191)"],
"resource-id" => ["resource-id"], "resource-id" => ["resource-id"],
"title-content-warning-body" => ["FULLTEXT", "title", "content-warning", "body"], "title-content-warning-body" => ["FULLTEXT", "title", "content-warning", "body"],
"quote-uri-id" => ["quote-uri-id"],
] ]
], ],
"post-delivery" => [ "post-delivery" => [
@ -1319,6 +1321,7 @@ return [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"uri-id" => ["type" => "int unsigned", "not null" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"], "uri-id" => ["type" => "int unsigned", "not null" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
"url" => ["type" => "varbinary(1024)", "not null" => "1", "comment" => "Media URL"], "url" => ["type" => "varbinary(1024)", "not null" => "1", "comment" => "Media URL"],
"media-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the activities uri-id"],
"type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Media type"], "type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Media type"],
"mimetype" => ["type" => "varchar(60)", "comment" => ""], "mimetype" => ["type" => "varchar(60)", "comment" => ""],
"height" => ["type" => "smallint unsigned", "comment" => "Height of the media"], "height" => ["type" => "smallint unsigned", "comment" => "Height of the media"],
@ -1340,6 +1343,7 @@ return [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
"uri-id-url" => ["UNIQUE", "uri-id", "url(512)"], "uri-id-url" => ["UNIQUE", "uri-id", "url(512)"],
"uri-id-id" => ["uri-id", "id"], "uri-id-id" => ["uri-id", "id"],
"media-uri-id" => ["media-uri-id"],
] ]
], ],
"post-question" => [ "post-question" => [

View file

@ -72,6 +72,8 @@
"thr-parent-id" => ["post-user", "thr-parent-id"], "thr-parent-id" => ["post-user", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"], "conversation" => ["conversation-item-uri", "uri"],
"conversation-id" => ["post-thread-user", "conversation-id"], "conversation-id" => ["post-thread-user", "conversation-id"],
"quote-uri" => ["quote-item-uri", "uri"],
"quote-uri-id" => ["post-content", "quote-uri-id"],
"guid" => ["item-uri", "guid"], "guid" => ["item-uri", "guid"],
"wall" => ["post-user", "wall"], "wall" => ["post-user", "wall"],
"gravity" => ["post-user", "gravity"], "gravity" => ["post-user", "gravity"],
@ -229,6 +231,7 @@
LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id` LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-user`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-user`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-user`.`uri-id` AND `post-user`.`origin` LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-user`.`uri-id` AND `post-user`.`origin`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-user`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-user`.`psid` LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-user`.`psid`
@ -249,6 +252,8 @@
"thr-parent-id" => ["post-user", "thr-parent-id"], "thr-parent-id" => ["post-user", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"], "conversation" => ["conversation-item-uri", "uri"],
"conversation-id" => ["post-thread-user", "conversation-id"], "conversation-id" => ["post-thread-user", "conversation-id"],
"quote-uri" => ["quote-item-uri", "uri"],
"quote-uri-id" => ["post-content", "quote-uri-id"],
"guid" => ["item-uri", "guid"], "guid" => ["item-uri", "guid"],
"wall" => ["post-thread-user", "wall"], "wall" => ["post-thread-user", "wall"],
"gravity" => ["post-user", "gravity"], "gravity" => ["post-user", "gravity"],
@ -404,6 +409,7 @@
LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id` LEFT JOIN `event` ON `event`.`id` = `post-user`.`event-id`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread-user`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread-user`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-thread-user`.`uri-id` AND `post-thread-user`.`origin` LEFT JOIN `post-delivery-data` ON `post-delivery-data`.`uri-id` = `post-thread-user`.`uri-id` AND `post-thread-user`.`origin`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread-user`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-thread-user`.`psid` LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-thread-user`.`psid`
@ -420,6 +426,8 @@
"thr-parent-id" => ["post", "thr-parent-id"], "thr-parent-id" => ["post", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"], "conversation" => ["conversation-item-uri", "uri"],
"conversation-id" => ["post-thread", "conversation-id"], "conversation-id" => ["post-thread", "conversation-id"],
"quote-uri" => ["quote-item-uri", "uri"],
"quote-uri-id" => ["post-content", "quote-uri-id"],
"guid" => ["item-uri", "guid"], "guid" => ["item-uri", "guid"],
"gravity" => ["post", "gravity"], "gravity" => ["post", "gravity"],
"extid" => ["external-item-uri", "uri"], "extid" => ["external-item-uri", "uri"],
@ -544,6 +552,7 @@
LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid` LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post`.`uri-id`
LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id` LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id`
LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`" LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`"
@ -558,6 +567,8 @@
"thr-parent-id" => ["post", "thr-parent-id"], "thr-parent-id" => ["post", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"], "conversation" => ["conversation-item-uri", "uri"],
"conversation-id" => ["post-thread", "conversation-id"], "conversation-id" => ["post-thread", "conversation-id"],
"quote-uri" => ["quote-item-uri", "uri"],
"quote-uri-id" => ["post-content", "quote-uri-id"],
"guid" => ["item-uri", "guid"], "guid" => ["item-uri", "guid"],
"gravity" => ["post", "gravity"], "gravity" => ["post", "gravity"],
"extid" => ["external-item-uri", "uri"], "extid" => ["external-item-uri", "uri"],
@ -682,6 +693,7 @@
LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid` LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread`.`uri-id` LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `post-thread`.`uri-id`
LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread`.`uri-id` LEFT JOIN `post-content` ON `post-content`.`uri-id` = `post-thread`.`uri-id`
LEFT JOIN `item-uri` AS `quote-item-uri` ON `quote-item-uri`.`id` = `post-content`.`quote-uri-id`
LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread`.`uri-id` LEFT JOIN `post-question` ON `post-question`.`uri-id` = `post-thread`.`uri-id`
LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id` LEFT JOIN `post` AS `parent-post` ON `parent-post`.`uri-id` = `post`.`parent-uri-id`
LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`" LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`"

View file

@ -284,7 +284,7 @@ return [
// expire-notify-priority (integer) // expire-notify-priority (integer)
// Priority for the expirary notification // Priority for the expirary notification
'expire-notify-priority' => PRIORITY_LOW, 'expire-notify-priority' => Friendica\Core\Worker::PRIORITY_LOW,
// fetch_by_worker (Boolean) // fetch_by_worker (Boolean)
// Fetch missing posts via a background process // Fetch missing posts via a background process

View file

@ -48,7 +48,6 @@ class DatabaseCacheTest extends CacheTest
protected function getInstance() protected function getInstance()
{ {
$logger = new NullLogger();
$profiler = Mockery::mock(Profiler::class); $profiler = Mockery::mock(Profiler::class);
$profiler->shouldReceive('startRecording'); $profiler->shouldReceive('startRecording');
$profiler->shouldReceive('stopRecording'); $profiler->shouldReceive('stopRecording');
@ -62,7 +61,7 @@ class DatabaseCacheTest extends CacheTest
$dbaDefinition = (new DbaDefinition($configCache->get('system', 'basepath')))->load(); $dbaDefinition = (new DbaDefinition($configCache->get('system', 'basepath')))->load();
$viewDefinition = (new ViewDefinition($configCache->get('system', 'basepath')))->load(); $viewDefinition = (new ViewDefinition($configCache->get('system', 'basepath')))->load();
$dba = new StaticDatabase($configCache, $profiler, $dbaDefinition, $viewDefinition, $logger); $dba = new StaticDatabase($configCache, $profiler, $dbaDefinition, $viewDefinition);
$this->cache = new Cache\Type\DatabaseCache('database', $dba); $this->cache = new Cache\Type\DatabaseCache('database', $dba);
return $this->cache; return $this->cache;

View file

@ -47,7 +47,6 @@ class DatabaseStorageTest extends StorageTest
protected function getInstance() protected function getInstance()
{ {
$logger = new NullLogger();
$profiler = \Mockery::mock(Profiler::class); $profiler = \Mockery::mock(Profiler::class);
$profiler->shouldReceive('startRecording'); $profiler->shouldReceive('startRecording');
$profiler->shouldReceive('stopRecording'); $profiler->shouldReceive('stopRecording');
@ -61,7 +60,7 @@ class DatabaseStorageTest extends StorageTest
$dbaDefinition = (new DbaDefinition($configCache->get('system', 'basepath')))->load(); $dbaDefinition = (new DbaDefinition($configCache->get('system', 'basepath')))->load();
$viewDefinition = (new ViewDefinition($configCache->get('system', 'basepath')))->load(); $viewDefinition = (new ViewDefinition($configCache->get('system', 'basepath')))->load();
$dba = new StaticDatabase($configCache, $profiler, $dbaDefinition, $viewDefinition, $logger); $dba = new StaticDatabase($configCache, $profiler, $dbaDefinition, $viewDefinition);
return new Database($dba); return new Database($dba);
} }

View file

@ -87,7 +87,7 @@ class StorageManagerTest extends DatabaseTest
$dbaDefinition = (new DbaDefinition($configCache->get('system', 'basepath')))->load(); $dbaDefinition = (new DbaDefinition($configCache->get('system', 'basepath')))->load();
$viewDefinition = (new ViewDefinition($configCache->get('system', 'basepath')))->load(); $viewDefinition = (new ViewDefinition($configCache->get('system', 'basepath')))->load();
$this->dba = new StaticDatabase($configCache, $profiler, $dbaDefinition, $viewDefinition, $this->logger); $this->dba = new StaticDatabase($configCache, $profiler, $dbaDefinition, $viewDefinition);
$configModel = new Repository\Config($this->dba, new Mode(Mode::DBCONFIGAVAILABLE)); $configModel = new Repository\Config($this->dba, new Mode(Mode::DBCONFIGAVAILABLE));
$this->config = new PreloadConfig($configCache, $configModel); $this->config = new PreloadConfig($configCache, $configModel);

View file

@ -21,12 +21,12 @@
namespace Friendica\Test\src\Module; namespace Friendica\Test\src\Module;
use Friendica\App;
use Friendica\Capabilities\ICanCreateResponses; use Friendica\Capabilities\ICanCreateResponses;
use Friendica\DI; use Friendica\DI;
use Friendica\Module\NodeInfo110; use Friendica\Module\NodeInfo110;
use Friendica\Module\NodeInfo120; use Friendica\Module\NodeInfo120;
use Friendica\Module\NodeInfo210; use Friendica\Module\NodeInfo210;
use Friendica\Module\Response;
use Friendica\Test\FixtureTest; use Friendica\Test\FixtureTest;
class NodeInfoTest extends FixtureTest class NodeInfoTest extends FixtureTest
@ -44,7 +44,7 @@ class NodeInfoTest extends FixtureTest
self::assertEquals('1.0', $json->version); self::assertEquals('1.0', $json->version);
self::assertEquals('friendica', $json->software->name); self::assertEquals('friendica', $json->software->name);
self::assertEquals(FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, $json->software->version); self::assertEquals(App::VERSION . '-' . DB_UPDATE_VERSION, $json->software->version);
self::assertIsArray($json->protocols->inbound); self::assertIsArray($json->protocols->inbound);
self::assertIsArray($json->protocols->outbound); self::assertIsArray($json->protocols->outbound);
@ -65,7 +65,7 @@ class NodeInfoTest extends FixtureTest
self::assertEquals('2.0', $json->version); self::assertEquals('2.0', $json->version);
self::assertEquals('friendica', $json->software->name); self::assertEquals('friendica', $json->software->name);
self::assertEquals(FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, $json->software->version); self::assertEquals(App::VERSION . '-' . DB_UPDATE_VERSION, $json->software->version);
self::assertIsArray($json->protocols); self::assertIsArray($json->protocols);
self::assertIsArray($json->services->inbound); self::assertIsArray($json->services->inbound);
@ -85,7 +85,7 @@ class NodeInfoTest extends FixtureTest
self::assertEquals('1.0', $json->version); self::assertEquals('1.0', $json->version);
self::assertEquals('friendica', $json->server->software); self::assertEquals('friendica', $json->server->software);
self::assertEquals(FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, $json->server->version); self::assertEquals(App::VERSION . '-' . DB_UPDATE_VERSION, $json->server->version);
self::assertIsArray($json->protocols); self::assertIsArray($json->protocols);
self::assertIsArray($json->services->inbound); self::assertIsArray($json->services->inbound);

View file

@ -131,7 +131,7 @@ function update_1309()
continue; continue;
} }
$deliver_options = ['priority' => PRIORITY_MEDIUM, 'dont_fork' => true]; $deliver_options = ['priority' => Worker::PRIORITY_MEDIUM, 'dont_fork' => true];
Worker::add($deliver_options, 'Delivery', Delivery::POST, $item['id'], $entry['cid']); Worker::add($deliver_options, 'Delivery', Delivery::POST, $item['id'], $entry['cid']);
Logger::info('Added delivery worker', ['item' => $item['id'], 'contact' => $entry['cid']]); Logger::info('Added delivery worker', ['item' => $item['id'], 'contact' => $entry['cid']]);
DBA::delete('queue', ['id' => $entry['id']]); DBA::delete('queue', ['id' => $entry['id']]);
@ -152,7 +152,7 @@ function update_1318()
DBA::update('profile', ['marital' => 'In a relation'], ['marital' => 'Unavailable']); DBA::update('profile', ['marital' => 'In a relation'], ['marital' => 'Unavailable']);
DBA::update('profile', ['marital' => 'Single'], ['marital' => 'Available']); DBA::update('profile', ['marital' => 'Single'], ['marital' => 'Available']);
Worker::add(PRIORITY_LOW, 'ProfileUpdate'); Worker::add(Worker::PRIORITY_LOW, 'ProfileUpdate');
return Update::SUCCESS; return Update::SUCCESS;
} }

View file

@ -6,9 +6,9 @@
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2022.09-rc\n" "Project-Id-Version: 2022.12-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-09-25 07:08+0000\n" "POT-Creation-Date: 2022-10-17 09:33+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"
@ -19,7 +19,7 @@ msgstr ""
#: mod/cal.php:46 mod/cal.php:50 mod/follow.php:39 mod/redir.php:36 #: mod/cal.php:46 mod/cal.php:50 mod/follow.php:39 mod/redir.php:36
#: mod/redir.php:177 src/Module/Conversation/Community.php:183 #: mod/redir.php:177 src/Module/Conversation/Community.php:196
#: src/Module/Debug/ItemBody.php:38 src/Module/Diaspora/Receive.php:57 #: src/Module/Debug/ItemBody.php:38 src/Module/Diaspora/Receive.php:57
#: src/Module/Item/Follow.php:42 src/Module/Item/Ignore.php:41 #: src/Module/Item/Follow.php:42 src/Module/Item/Ignore.php:41
#: src/Module/Item/Pin.php:42 src/Module/Item/Pin.php:57 #: src/Module/Item/Pin.php:42 src/Module/Item/Pin.php:57
@ -43,8 +43,8 @@ msgstr ""
msgid "Access to this profile has been restricted." msgid "Access to this profile has been restricted."
msgstr "" msgstr ""
#: mod/cal.php:243 mod/events.php:374 src/Content/Nav.php:196 #: mod/cal.php:243 mod/events.php:374 src/Content/Nav.php:197
#: src/Content/Nav.php:260 src/Module/BaseProfile.php:84 #: src/Content/Nav.php:261 src/Module/BaseProfile.php:84
#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:240 #: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:240
#: view/theme/frio/theme.php:244 #: view/theme/frio/theme.php:244
msgid "Events" msgid "Events"
@ -105,7 +105,7 @@ msgid "calendar"
msgstr "" msgstr ""
#: mod/display.php:143 mod/photos.php:802 #: mod/display.php:143 mod/photos.php:802
#: src/Module/Conversation/Community.php:177 src/Module/Directory.php:49 #: src/Module/Conversation/Community.php:190 src/Module/Directory.php:49
#: src/Module/Search/Index.php:65 #: src/Module/Search/Index.php:65
msgid "Public access denied." msgid "Public access denied."
msgstr "" msgstr ""
@ -119,7 +119,7 @@ msgid "The feed for this item is unavailable."
msgstr "" msgstr ""
#: mod/editpost.php:38 mod/events.php:217 mod/follow.php:56 mod/follow.php:130 #: mod/editpost.php:38 mod/events.php:217 mod/follow.php:56 mod/follow.php:130
#: mod/item.php:181 mod/item.php:186 mod/item.php:870 mod/message.php:69 #: mod/item.php:182 mod/item.php:187 mod/item.php:866 mod/message.php:69
#: mod/message.php:111 mod/notes.php:44 mod/ostatus_subscribe.php:33 #: mod/message.php:111 mod/notes.php:44 mod/ostatus_subscribe.php:33
#: mod/photos.php:160 mod/photos.php:891 mod/repair_ostatus.php:31 #: mod/photos.php:160 mod/photos.php:891 mod/repair_ostatus.php:31
#: mod/settings.php:40 mod/settings.php:50 mod/settings.php:156 #: mod/settings.php:40 mod/settings.php:50 mod/settings.php:156
@ -212,7 +212,7 @@ msgid "audio link"
msgstr "" msgstr ""
#: mod/editpost.php:103 src/Content/Conversation.php:352 #: mod/editpost.php:103 src/Content/Conversation.php:352
#: src/Module/Item/Compose.php:173 #: src/Module/Item/Compose.php:200
msgid "Set your location" msgid "Set your location"
msgstr "" msgstr ""
@ -230,7 +230,7 @@ msgstr ""
#: mod/editpost.php:107 mod/message.php:200 mod/message.php:358 #: mod/editpost.php:107 mod/message.php:200 mod/message.php:358
#: mod/photos.php:1489 mod/wallmessage.php:142 src/Content/Conversation.php:368 #: mod/photos.php:1489 mod/wallmessage.php:142 src/Content/Conversation.php:368
#: src/Content/Conversation.php:713 src/Module/Item/Compose.php:177 #: src/Content/Conversation.php:714 src/Module/Item/Compose.php:204
#: src/Object/Post.php:538 #: src/Object/Post.php:538
msgid "Please wait" msgid "Please wait"
msgstr "" msgstr ""
@ -248,12 +248,12 @@ msgid "Public post"
msgstr "" msgstr ""
#: mod/editpost.php:120 src/Content/Conversation.php:357 #: mod/editpost.php:120 src/Content/Conversation.php:357
#: src/Module/Item/Compose.php:178 #: src/Module/Item/Compose.php:205
msgid "Set title" msgid "Set title"
msgstr "" msgstr ""
#: mod/editpost.php:122 src/Content/Conversation.php:359 #: mod/editpost.php:122 src/Content/Conversation.php:359
#: src/Module/Item/Compose.php:179 #: src/Module/Item/Compose.php:206
msgid "Categories (comma-separated list)" msgid "Categories (comma-separated list)"
msgstr "" msgstr ""
@ -263,11 +263,11 @@ msgstr ""
#: mod/editpost.php:128 mod/events.php:513 mod/photos.php:1337 #: mod/editpost.php:128 mod/events.php:513 mod/photos.php:1337
#: mod/photos.php:1393 mod/photos.php:1467 src/Content/Conversation.php:383 #: mod/photos.php:1393 mod/photos.php:1467 src/Content/Conversation.php:383
#: src/Module/Item/Compose.php:172 src/Object/Post.php:1003 #: src/Module/Item/Compose.php:199 src/Object/Post.php:1003
msgid "Preview" msgid "Preview"
msgstr "" msgstr ""
#: mod/editpost.php:130 mod/fbrowser.php:118 mod/fbrowser.php:145 #: mod/editpost.php:130 mod/fbrowser.php:119 mod/fbrowser.php:146
#: mod/follow.php:144 mod/photos.php:1004 mod/photos.php:1105 mod/tagrm.php:35 #: mod/follow.php:144 mod/photos.php:1004 mod/photos.php:1105 mod/tagrm.php:35
#: mod/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:386 #: mod/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:386
#: src/Module/Contact/Revoke.php:108 src/Module/RemoteFollow.php:127 #: src/Module/Contact/Revoke.php:108 src/Module/RemoteFollow.php:127
@ -276,37 +276,37 @@ msgid "Cancel"
msgstr "" msgstr ""
#: mod/editpost.php:134 src/Content/Conversation.php:343 #: mod/editpost.php:134 src/Content/Conversation.php:343
#: src/Module/Item/Compose.php:163 src/Object/Post.php:994 #: src/Module/Item/Compose.php:190 src/Object/Post.php:994
msgid "Bold" msgid "Bold"
msgstr "" msgstr ""
#: mod/editpost.php:135 src/Content/Conversation.php:344 #: mod/editpost.php:135 src/Content/Conversation.php:344
#: src/Module/Item/Compose.php:164 src/Object/Post.php:995 #: src/Module/Item/Compose.php:191 src/Object/Post.php:995
msgid "Italic" msgid "Italic"
msgstr "" msgstr ""
#: mod/editpost.php:136 src/Content/Conversation.php:345 #: mod/editpost.php:136 src/Content/Conversation.php:345
#: src/Module/Item/Compose.php:165 src/Object/Post.php:996 #: src/Module/Item/Compose.php:192 src/Object/Post.php:996
msgid "Underline" msgid "Underline"
msgstr "" msgstr ""
#: mod/editpost.php:137 src/Content/Conversation.php:346 #: mod/editpost.php:137 src/Content/Conversation.php:346
#: src/Module/Item/Compose.php:166 src/Object/Post.php:997 #: src/Module/Item/Compose.php:193 src/Object/Post.php:997
msgid "Quote" msgid "Quote"
msgstr "" msgstr ""
#: mod/editpost.php:138 src/Content/Conversation.php:347 #: mod/editpost.php:138 src/Content/Conversation.php:347
#: src/Module/Item/Compose.php:167 src/Object/Post.php:998 #: src/Module/Item/Compose.php:194 src/Object/Post.php:998
msgid "Code" msgid "Code"
msgstr "" msgstr ""
#: mod/editpost.php:139 src/Content/Conversation.php:349 #: mod/editpost.php:139 src/Content/Conversation.php:349
#: src/Module/Item/Compose.php:169 src/Object/Post.php:1000 #: src/Module/Item/Compose.php:196 src/Object/Post.php:1000
msgid "Link" msgid "Link"
msgstr "" msgstr ""
#: mod/editpost.php:140 src/Content/Conversation.php:350 #: mod/editpost.php:140 src/Content/Conversation.php:350
#: src/Module/Item/Compose.php:170 src/Object/Post.php:1001 #: src/Module/Item/Compose.php:197 src/Object/Post.php:1001
msgid "Link or Media" msgid "Link or Media"
msgstr "" msgstr ""
@ -415,9 +415,9 @@ msgstr ""
#: src/Module/Delegation.php:148 src/Module/FriendSuggest.php:144 #: src/Module/Delegation.php:148 src/Module/FriendSuggest.php:144
#: src/Module/Install.php:252 src/Module/Install.php:294 #: src/Module/Install.php:252 src/Module/Install.php:294
#: src/Module/Install.php:331 src/Module/Invite.php:178 #: src/Module/Install.php:331 src/Module/Invite.php:178
#: src/Module/Item/Compose.php:162 src/Module/Profile/Profile.php:247 #: src/Module/Item/Compose.php:189 src/Module/Profile/Profile.php:247
#: src/Module/Settings/Profile/Index.php:222 src/Object/Post.php:992 #: src/Module/Settings/Profile/Index.php:222 src/Object/Post.php:992
#: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160 #: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:171
#: view/theme/quattro/config.php:71 view/theme/vier/config.php:119 #: view/theme/quattro/config.php:71 view/theme/vier/config.php:119
msgid "Submit" msgid "Submit"
msgstr "" msgstr ""
@ -426,7 +426,7 @@ msgstr ""
msgid "Basic" msgid "Basic"
msgstr "" msgstr ""
#: mod/events.php:517 src/Module/Admin/Site.php:441 src/Module/Contact.php:475 #: mod/events.php:517 src/Module/Admin/Site.php:439 src/Module/Contact.php:477
#: src/Module/Profile/Profile.php:249 #: src/Module/Profile/Profile.php:249
msgid "Advanced" msgid "Advanced"
msgstr "" msgstr ""
@ -435,17 +435,17 @@ msgstr ""
msgid "Failed to remove event" msgid "Failed to remove event"
msgstr "" msgstr ""
#: mod/fbrowser.php:61 src/Content/Nav.php:194 src/Module/BaseProfile.php:64 #: mod/fbrowser.php:61 src/Content/Nav.php:195 src/Module/BaseProfile.php:64
#: view/theme/frio/theme.php:238 #: view/theme/frio/theme.php:238
msgid "Photos" msgid "Photos"
msgstr "" msgstr ""
#: mod/fbrowser.php:120 mod/fbrowser.php:147 #: mod/fbrowser.php:121 mod/fbrowser.php:148
#: src/Module/Settings/Profile/Photo/Index.php:129 #: src/Module/Settings/Profile/Photo/Index.php:129
msgid "Upload" msgid "Upload"
msgstr "" msgstr ""
#: mod/fbrowser.php:142 #: mod/fbrowser.php:143
msgid "Files" msgid "Files"
msgstr "" msgstr ""
@ -469,8 +469,8 @@ msgstr ""
msgid "OStatus support is disabled. Contact can't be added." msgid "OStatus support is disabled. Contact can't be added."
msgstr "" msgstr ""
#: mod/follow.php:138 src/Content/Item.php:397 src/Content/Widget.php:80 #: mod/follow.php:138 src/Content/Item.php:400 src/Content/Widget.php:80
#: src/Model/Contact.php:1146 src/Model/Contact.php:1157 #: src/Model/Contact.php:1169 src/Model/Contact.php:1180
#: view/theme/vier/theme.php:181 #: view/theme/vier/theme.php:181
msgid "Connect/Follow" msgid "Connect/Follow"
msgstr "" msgstr ""
@ -507,7 +507,7 @@ msgid "Add a personal note:"
msgstr "" msgstr ""
#: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59 #: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59
#: src/Module/Contact.php:445 #: src/Module/Contact.php:447
msgid "Status Messages and Posts" msgid "Status Messages and Posts"
msgstr "" msgstr ""
@ -515,27 +515,27 @@ msgstr ""
msgid "The contact could not be added." msgid "The contact could not be added."
msgstr "" msgstr ""
#: mod/item.php:131 mod/item.php:135 #: mod/item.php:132 mod/item.php:136
msgid "Unable to locate original post." msgid "Unable to locate original post."
msgstr "" msgstr ""
#: mod/item.php:337 mod/item.php:342 #: mod/item.php:338 mod/item.php:343
msgid "Empty post discarded." msgid "Empty post discarded."
msgstr "" msgstr ""
#: mod/item.php:682 #: mod/item.php:678
msgid "Post updated." msgid "Post updated."
msgstr "" msgstr ""
#: mod/item.php:692 mod/item.php:697 #: mod/item.php:688 mod/item.php:693
msgid "Item wasn't stored." msgid "Item wasn't stored."
msgstr "" msgstr ""
#: mod/item.php:708 #: mod/item.php:704
msgid "Item couldn't be fetched." msgid "Item couldn't be fetched."
msgstr "" msgstr ""
#: mod/item.php:848 src/Module/Admin/Themes/Details.php:39 #: mod/item.php:844 src/Module/Admin/Themes/Details.php:39
#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:42 #: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:42
#: src/Module/Debug/ItemBody.php:57 #: src/Module/Debug/ItemBody.php:57
msgid "Item not found." msgid "Item not found."
@ -691,7 +691,7 @@ msgstr ""
msgid "Profile Match" msgid "Profile Match"
msgstr "" msgstr ""
#: mod/message.php:46 mod/message.php:126 src/Content/Nav.php:288 #: mod/message.php:46 mod/message.php:126 src/Content/Nav.php:289
msgid "New Message" msgid "New Message"
msgstr "" msgstr ""
@ -717,7 +717,7 @@ msgstr ""
msgid "Discard" msgid "Discard"
msgstr "" msgstr ""
#: mod/message.php:133 src/Content/Nav.php:285 view/theme/frio/theme.php:245 #: mod/message.php:133 src/Content/Nav.php:286 view/theme/frio/theme.php:245
msgid "Messages" msgid "Messages"
msgstr "" msgstr ""
@ -1070,7 +1070,7 @@ msgid "Rotate CCW (left)"
msgstr "" msgstr ""
#: mod/photos.php:1333 mod/photos.php:1389 mod/photos.php:1463 #: mod/photos.php:1333 mod/photos.php:1389 mod/photos.php:1463
#: src/Module/Contact.php:545 src/Module/Item/Compose.php:160 #: src/Module/Contact.php:547 src/Module/Item/Compose.php:188
#: src/Object/Post.php:989 #: src/Object/Post.php:989
msgid "This is you" msgid "This is you"
msgstr "" msgstr ""
@ -1080,11 +1080,11 @@ msgstr ""
msgid "Comment" msgid "Comment"
msgstr "" msgstr ""
#: mod/photos.php:1424 src/Content/Conversation.php:629 src/Object/Post.php:256 #: mod/photos.php:1424 src/Content/Conversation.php:630 src/Object/Post.php:256
msgid "Select" msgid "Select"
msgstr "" msgstr ""
#: mod/photos.php:1425 mod/settings.php:350 src/Content/Conversation.php:630 #: mod/photos.php:1425 mod/settings.php:350 src/Content/Conversation.php:631
#: src/Module/Admin/Users/Active.php:139 src/Module/Admin/Users/Blocked.php:140 #: src/Module/Admin/Users/Active.php:139 src/Module/Admin/Users/Blocked.php:140
#: src/Module/Admin/Users/Index.php:153 #: src/Module/Admin/Users/Index.php:153
msgid "Delete" msgid "Delete"
@ -1191,7 +1191,7 @@ msgstr ""
msgid "Name" msgid "Name"
msgstr "" msgstr ""
#: mod/settings.php:177 src/Content/Nav.php:214 #: mod/settings.php:177 src/Content/Nav.php:215
msgid "Home Page" msgid "Home Page"
msgstr "" msgstr ""
@ -1206,7 +1206,7 @@ msgstr ""
#: mod/settings.php:205 mod/settings.php:237 mod/settings.php:268 #: mod/settings.php:205 mod/settings.php:237 mod/settings.php:268
#: mod/settings.php:352 src/Module/Admin/Addons/Index.php:69 #: mod/settings.php:352 src/Module/Admin/Addons/Index.php:69
#: src/Module/Admin/Features.php:87 src/Module/Admin/Logs/Settings.php:81 #: src/Module/Admin/Features.php:87 src/Module/Admin/Logs/Settings.php:81
#: src/Module/Admin/Site.php:436 src/Module/Admin/Themes/Index.php:113 #: src/Module/Admin/Site.php:434 src/Module/Admin/Themes/Index.php:113
#: src/Module/Admin/Tos.php:83 src/Module/Settings/Account.php:563 #: src/Module/Admin/Tos.php:83 src/Module/Settings/Account.php:563
#: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:201 #: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:201
msgid "Save Settings" msgid "Save Settings"
@ -1389,7 +1389,7 @@ msgstr ""
msgid "Action after import:" msgid "Action after import:"
msgstr "" msgstr ""
#: mod/settings.php:350 src/Content/Nav.php:282 #: mod/settings.php:350 src/Content/Nav.php:283
msgid "Mark as seen" msgid "Mark as seen"
msgstr "" msgstr ""
@ -1411,15 +1411,15 @@ msgstr ""
msgid "Friend Suggestions" msgid "Friend Suggestions"
msgstr "" msgstr ""
#: mod/tagger.php:78 src/Content/Item.php:297 src/Model/Item.php:2846 #: mod/tagger.php:78 src/Content/Item.php:300 src/Model/Item.php:2855
msgid "photo" msgid "photo"
msgstr "" msgstr ""
#: mod/tagger.php:78 src/Content/Item.php:291 src/Content/Item.php:301 #: mod/tagger.php:78 src/Content/Item.php:294 src/Content/Item.php:304
msgid "status" msgid "status"
msgstr "" msgstr ""
#: mod/tagger.php:111 src/Content/Item.php:311 #: mod/tagger.php:111 src/Content/Item.php:314
#, php-format #, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s" msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "" msgstr ""
@ -1595,16 +1595,16 @@ msgid "All contacts"
msgstr "" msgstr ""
#: src/BaseModule.php:424 src/Content/Widget.php:235 src/Core/ACL.php:194 #: src/BaseModule.php:424 src/Content/Widget.php:235 src/Core/ACL.php:194
#: src/Module/Contact.php:368 src/Module/PermissionTooltip.php:122 #: src/Module/Contact.php:370 src/Module/PermissionTooltip.php:122
#: src/Module/PermissionTooltip.php:144 #: src/Module/PermissionTooltip.php:144
msgid "Followers" msgid "Followers"
msgstr "" msgstr ""
#: src/BaseModule.php:429 src/Content/Widget.php:236 src/Module/Contact.php:369 #: src/BaseModule.php:429 src/Content/Widget.php:236 src/Module/Contact.php:371
msgid "Following" msgid "Following"
msgstr "" msgstr ""
#: src/BaseModule.php:434 src/Content/Widget.php:237 src/Module/Contact.php:370 #: src/BaseModule.php:434 src/Content/Widget.php:237 src/Module/Contact.php:372
msgid "Mutual friends" msgid "Mutual friends"
msgstr "" msgstr ""
@ -1947,7 +1947,7 @@ msgid "%s attends maybe."
msgstr "" msgstr ""
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260 #: src/Content/Conversation.php:222 src/Content/Conversation.php:260
#: src/Content/Conversation.php:873 #: src/Content/Conversation.php:874
#, php-format #, php-format
msgid "%s reshared this." msgid "%s reshared this."
msgstr "" msgstr ""
@ -2020,7 +2020,7 @@ msgstr ""
msgid "Visible to <strong>everybody</strong>" msgid "Visible to <strong>everybody</strong>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:171 #: src/Content/Conversation.php:308 src/Module/Item/Compose.php:198
#: src/Object/Post.php:1002 #: src/Object/Post.php:1002
msgid "Please enter a image/video/audio/webpage URL:" msgid "Please enter a image/video/audio/webpage URL:"
msgstr "" msgstr ""
@ -2041,7 +2041,7 @@ msgstr ""
msgid "Delete item(s)?" msgid "Delete item(s)?"
msgstr "" msgstr ""
#: src/Content/Conversation.php:324 src/Module/Item/Compose.php:143 #: src/Content/Conversation.php:324 src/Module/Item/Compose.php:175
msgid "Created at" msgid "Created at"
msgstr "" msgstr ""
@ -2053,7 +2053,7 @@ msgstr ""
msgid "Share" msgid "Share"
msgstr "" msgstr ""
#: src/Content/Conversation.php:348 src/Module/Item/Compose.php:168 #: src/Content/Conversation.php:348 src/Module/Item/Compose.php:195
#: src/Object/Post.php:999 #: src/Object/Post.php:999
msgid "Image" msgid "Image"
msgstr "" msgstr ""
@ -2062,117 +2062,117 @@ msgstr ""
msgid "Video" msgid "Video"
msgstr "" msgstr ""
#: src/Content/Conversation.php:364 src/Module/Item/Compose.php:184 #: src/Content/Conversation.php:364 src/Module/Item/Compose.php:222
msgid "Scheduled at" msgid "Scheduled at"
msgstr "" msgstr ""
#: src/Content/Conversation.php:657 src/Object/Post.php:244 #: src/Content/Conversation.php:658 src/Object/Post.php:244
msgid "Pinned item" msgid "Pinned item"
msgstr "" msgstr ""
#: src/Content/Conversation.php:673 src/Object/Post.php:486 #: src/Content/Conversation.php:674 src/Object/Post.php:486
#: src/Object/Post.php:487 #: src/Object/Post.php:487
#, php-format #, php-format
msgid "View %s's profile @ %s" msgid "View %s's profile @ %s"
msgstr "" msgstr ""
#: src/Content/Conversation.php:686 src/Object/Post.php:474 #: src/Content/Conversation.php:687 src/Object/Post.php:474
msgid "Categories:" msgid "Categories:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:687 src/Object/Post.php:475 #: src/Content/Conversation.php:688 src/Object/Post.php:475
msgid "Filed under:" msgid "Filed under:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:695 src/Object/Post.php:500 #: src/Content/Conversation.php:696 src/Object/Post.php:500
#, php-format #, php-format
msgid "%s from %s" msgid "%s from %s"
msgstr "" msgstr ""
#: src/Content/Conversation.php:711 #: src/Content/Conversation.php:712
msgid "View in context" msgid "View in context"
msgstr "" msgstr ""
#: src/Content/Conversation.php:776 #: src/Content/Conversation.php:777
msgid "remove" msgid "remove"
msgstr "" msgstr ""
#: src/Content/Conversation.php:780 #: src/Content/Conversation.php:781
msgid "Delete Selected Items" msgid "Delete Selected Items"
msgstr "" msgstr ""
#: src/Content/Conversation.php:845 src/Content/Conversation.php:848 #: src/Content/Conversation.php:846 src/Content/Conversation.php:849
#: src/Content/Conversation.php:851 src/Content/Conversation.php:854 #: src/Content/Conversation.php:852 src/Content/Conversation.php:855
#, php-format #, php-format
msgid "You had been addressed (%s)." msgid "You had been addressed (%s)."
msgstr "" msgstr ""
#: src/Content/Conversation.php:857 #: src/Content/Conversation.php:858
#, php-format #, php-format
msgid "You are following %s." msgid "You are following %s."
msgstr "" msgstr ""
#: src/Content/Conversation.php:860 #: src/Content/Conversation.php:861
msgid "You subscribed to one or more tags in this post." msgid "You subscribed to one or more tags in this post."
msgstr "" msgstr ""
#: src/Content/Conversation.php:875 #: src/Content/Conversation.php:876
msgid "Reshared" msgid "Reshared"
msgstr "" msgstr ""
#: src/Content/Conversation.php:875 #: src/Content/Conversation.php:876
#, php-format #, php-format
msgid "Reshared by %s <%s>" msgid "Reshared by %s <%s>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:878 #: src/Content/Conversation.php:879
#, php-format #, php-format
msgid "%s is participating in this thread." msgid "%s is participating in this thread."
msgstr "" msgstr ""
#: src/Content/Conversation.php:881 #: src/Content/Conversation.php:882
msgid "Stored for general reasons" msgid "Stored for general reasons"
msgstr "" msgstr ""
#: src/Content/Conversation.php:884 #: src/Content/Conversation.php:885
msgid "Global post" msgid "Global post"
msgstr "" msgstr ""
#: src/Content/Conversation.php:887 #: src/Content/Conversation.php:888
msgid "Sent via an relay server" msgid "Sent via an relay server"
msgstr "" msgstr ""
#: src/Content/Conversation.php:887 #: src/Content/Conversation.php:888
#, php-format #, php-format
msgid "Sent via the relay server %s <%s>" msgid "Sent via the relay server %s <%s>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:890 #: src/Content/Conversation.php:891
msgid "Fetched" msgid "Fetched"
msgstr "" msgstr ""
#: src/Content/Conversation.php:890 #: src/Content/Conversation.php:891
#, php-format #, php-format
msgid "Fetched because of %s <%s>" msgid "Fetched because of %s <%s>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:893 #: src/Content/Conversation.php:894
msgid "Stored because of a child post to complete this thread." msgid "Stored because of a child post to complete this thread."
msgstr "" msgstr ""
#: src/Content/Conversation.php:896 #: src/Content/Conversation.php:897
msgid "Local delivery" msgid "Local delivery"
msgstr "" msgstr ""
#: src/Content/Conversation.php:899 #: src/Content/Conversation.php:900
msgid "Stored because of your activity (like, comment, star, ...)" msgid "Stored because of your activity (like, comment, star, ...)"
msgstr "" msgstr ""
#: src/Content/Conversation.php:902 #: src/Content/Conversation.php:903
msgid "Distributed" msgid "Distributed"
msgstr "" msgstr ""
#: src/Content/Conversation.php:905 #: src/Content/Conversation.php:906
msgid "Pushed to us" msgid "Pushed to us"
msgstr "" msgstr ""
@ -2274,7 +2274,7 @@ msgstr ""
msgid "Display membership date in profile" msgid "Display membership date in profile"
msgstr "" msgstr ""
#: src/Content/ForumManager.php:151 src/Content/Nav.php:241 #: src/Content/ForumManager.php:151 src/Content/Nav.php:242
#: src/Content/Text/HTML.php:903 src/Content/Widget.php:524 #: src/Content/Text/HTML.php:903 src/Content/Widget.php:524
msgid "Forums" msgid "Forums"
msgstr "" msgstr ""
@ -2292,50 +2292,50 @@ msgstr ""
msgid "show more" msgid "show more"
msgstr "" msgstr ""
#: src/Content/Item.php:288 src/Model/Item.php:2844 #: src/Content/Item.php:291 src/Model/Item.php:2853
msgid "event" msgid "event"
msgstr "" msgstr ""
#: src/Content/Item.php:380 view/theme/frio/theme.php:266 #: src/Content/Item.php:383 view/theme/frio/theme.php:266
msgid "Follow Thread" msgid "Follow Thread"
msgstr "" msgstr ""
#: src/Content/Item.php:381 src/Model/Contact.php:1151 #: src/Content/Item.php:384 src/Model/Contact.php:1174
msgid "View Status" msgid "View Status"
msgstr "" msgstr ""
#: src/Content/Item.php:382 src/Content/Item.php:400 src/Model/Contact.php:1089 #: src/Content/Item.php:385 src/Content/Item.php:403 src/Model/Contact.php:1112
#: src/Model/Contact.php:1143 src/Model/Contact.php:1152 #: src/Model/Contact.php:1166 src/Model/Contact.php:1175
#: src/Module/Directory.php:158 src/Module/Settings/Profile/Index.php:225 #: src/Module/Directory.php:158 src/Module/Settings/Profile/Index.php:225
msgid "View Profile" msgid "View Profile"
msgstr "" msgstr ""
#: src/Content/Item.php:383 src/Model/Contact.php:1153 #: src/Content/Item.php:386 src/Model/Contact.php:1176
msgid "View Photos" msgid "View Photos"
msgstr "" msgstr ""
#: src/Content/Item.php:384 src/Model/Contact.php:1144 #: src/Content/Item.php:387 src/Model/Contact.php:1167
#: src/Model/Contact.php:1154 #: src/Model/Contact.php:1177
msgid "Network Posts" msgid "Network Posts"
msgstr "" msgstr ""
#: src/Content/Item.php:385 src/Model/Contact.php:1145 #: src/Content/Item.php:388 src/Model/Contact.php:1168
#: src/Model/Contact.php:1155 #: src/Model/Contact.php:1178
msgid "View Contact" msgid "View Contact"
msgstr "" msgstr ""
#: src/Content/Item.php:386 src/Model/Contact.php:1156 #: src/Content/Item.php:389 src/Model/Contact.php:1179
msgid "Send PM" msgid "Send PM"
msgstr "" msgstr ""
#: src/Content/Item.php:387 src/Module/Admin/Blocklist/Contact.php:100 #: src/Content/Item.php:390 src/Module/Admin/Blocklist/Contact.php:100
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154 #: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:399 src/Module/Contact/Profile.php:348 #: src/Module/Contact.php:401 src/Module/Contact/Profile.php:348
#: src/Module/Contact/Profile.php:449 #: src/Module/Contact/Profile.php:449
msgid "Block" msgid "Block"
msgstr "" msgstr ""
#: src/Content/Item.php:388 src/Module/Contact.php:400 #: src/Content/Item.php:391 src/Module/Contact.php:402
#: src/Module/Contact/Profile.php:349 src/Module/Contact/Profile.php:457 #: src/Module/Contact/Profile.php:349 src/Module/Contact/Profile.php:457
#: src/Module/Notifications/Introductions.php:132 #: src/Module/Notifications/Introductions.php:132
#: src/Module/Notifications/Introductions.php:204 #: src/Module/Notifications/Introductions.php:204
@ -2343,105 +2343,105 @@ msgstr ""
msgid "Ignore" msgid "Ignore"
msgstr "" msgstr ""
#: src/Content/Item.php:392 src/Object/Post.php:455 #: src/Content/Item.php:395 src/Object/Post.php:455
msgid "Languages" msgid "Languages"
msgstr "" msgstr ""
#: src/Content/Nav.php:90 #: src/Content/Nav.php:91
msgid "Nothing new here" msgid "Nothing new here"
msgstr "" msgstr ""
#: src/Content/Nav.php:94 src/Module/Special/HTTPException.php:50 #: src/Content/Nav.php:95 src/Module/Special/HTTPException.php:50
msgid "Go back" msgid "Go back"
msgstr "" msgstr ""
#: src/Content/Nav.php:95 #: src/Content/Nav.php:96
msgid "Clear notifications" msgid "Clear notifications"
msgstr "" msgstr ""
#: src/Content/Nav.php:96 src/Content/Text/HTML.php:890 #: src/Content/Nav.php:97 src/Content/Text/HTML.php:890
msgid "@name, !forum, #tags, content" msgid "@name, !forum, #tags, content"
msgstr "" msgstr ""
#: src/Content/Nav.php:185 src/Module/Security/Login.php:158 #: src/Content/Nav.php:186 src/Module/Security/Login.php:158
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
#: src/Content/Nav.php:185 #: src/Content/Nav.php:186
msgid "End this session" msgid "End this session"
msgstr "" msgstr ""
#: src/Content/Nav.php:187 src/Module/Bookmarklet.php:44 #: src/Content/Nav.php:188 src/Module/Bookmarklet.php:44
#: src/Module/Security/Login.php:159 #: src/Module/Security/Login.php:159
msgid "Login" msgid "Login"
msgstr "" msgstr ""
#: src/Content/Nav.php:187 #: src/Content/Nav.php:188
msgid "Sign in" msgid "Sign in"
msgstr "" msgstr ""
#: src/Content/Nav.php:192 src/Module/BaseProfile.php:56 #: src/Content/Nav.php:193 src/Module/BaseProfile.php:56
#: src/Module/Contact.php:434 src/Module/Contact/Profile.php:380 #: src/Module/Contact.php:436 src/Module/Contact/Profile.php:380
#: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:236 #: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:236
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: src/Content/Nav.php:192 src/Content/Nav.php:275 #: src/Content/Nav.php:193 src/Content/Nav.php:276
#: view/theme/frio/theme.php:236 #: view/theme/frio/theme.php:236
msgid "Your posts and conversations" msgid "Your posts and conversations"
msgstr "" msgstr ""
#: src/Content/Nav.php:193 src/Module/BaseProfile.php:48 #: src/Content/Nav.php:194 src/Module/BaseProfile.php:48
#: src/Module/BaseSettings.php:55 src/Module/Contact.php:458 #: src/Module/BaseSettings.php:55 src/Module/Contact.php:460
#: src/Module/Contact/Profile.php:382 src/Module/Profile/Profile.php:241 #: src/Module/Contact/Profile.php:382 src/Module/Profile/Profile.php:241
#: src/Module/Welcome.php:57 view/theme/frio/theme.php:237 #: src/Module/Welcome.php:57 view/theme/frio/theme.php:237
msgid "Profile" msgid "Profile"
msgstr "" msgstr ""
#: src/Content/Nav.php:193 view/theme/frio/theme.php:237 #: src/Content/Nav.php:194 view/theme/frio/theme.php:237
msgid "Your profile page" msgid "Your profile page"
msgstr "" msgstr ""
#: src/Content/Nav.php:194 view/theme/frio/theme.php:238 #: src/Content/Nav.php:195 view/theme/frio/theme.php:238
msgid "Your photos" msgid "Your photos"
msgstr "" msgstr ""
#: src/Content/Nav.php:195 src/Module/BaseProfile.php:72 #: src/Content/Nav.php:196 src/Module/BaseProfile.php:72
#: src/Module/BaseProfile.php:75 src/Module/Contact.php:450 #: src/Module/BaseProfile.php:75 src/Module/Contact.php:452
#: view/theme/frio/theme.php:239 #: view/theme/frio/theme.php:239
msgid "Media" msgid "Media"
msgstr "" msgstr ""
#: src/Content/Nav.php:195 view/theme/frio/theme.php:239 #: src/Content/Nav.php:196 view/theme/frio/theme.php:239
msgid "Your postings with media" msgid "Your postings with media"
msgstr "" msgstr ""
#: src/Content/Nav.php:196 view/theme/frio/theme.php:240 #: src/Content/Nav.php:197 view/theme/frio/theme.php:240
msgid "Your events" msgid "Your events"
msgstr "" msgstr ""
#: src/Content/Nav.php:197 #: src/Content/Nav.php:198
msgid "Personal notes" msgid "Personal notes"
msgstr "" msgstr ""
#: src/Content/Nav.php:197 #: src/Content/Nav.php:198
msgid "Your personal notes" msgid "Your personal notes"
msgstr "" msgstr ""
#: src/Content/Nav.php:214 src/Content/Nav.php:275 #: src/Content/Nav.php:215 src/Content/Nav.php:276
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: src/Content/Nav.php:218 src/Module/Register.php:168 #: src/Content/Nav.php:219 src/Module/Register.php:168
#: src/Module/Security/Login.php:124 #: src/Module/Security/Login.php:124
msgid "Register" msgid "Register"
msgstr "" msgstr ""
#: src/Content/Nav.php:218 #: src/Content/Nav.php:219
msgid "Create an account" msgid "Create an account"
msgstr "" msgstr ""
#: src/Content/Nav.php:224 src/Module/Help.php:67 #: src/Content/Nav.php:225 src/Module/Help.php:67
#: src/Module/Settings/TwoFactor/AppSpecific.php:127 #: src/Module/Settings/TwoFactor/AppSpecific.php:127
#: src/Module/Settings/TwoFactor/Index.php:119 #: src/Module/Settings/TwoFactor/Index.php:119
#: src/Module/Settings/TwoFactor/Recovery.php:105 #: src/Module/Settings/TwoFactor/Recovery.php:105
@ -2449,158 +2449,158 @@ msgstr ""
msgid "Help" msgid "Help"
msgstr "" msgstr ""
#: src/Content/Nav.php:224 #: src/Content/Nav.php:225
msgid "Help and documentation" msgid "Help and documentation"
msgstr "" msgstr ""
#: src/Content/Nav.php:228 #: src/Content/Nav.php:229
msgid "Apps" msgid "Apps"
msgstr "" msgstr ""
#: src/Content/Nav.php:228 #: src/Content/Nav.php:229
msgid "Addon applications, utilities, games" msgid "Addon applications, utilities, games"
msgstr "" msgstr ""
#: src/Content/Nav.php:232 src/Content/Text/HTML.php:888 #: src/Content/Nav.php:233 src/Content/Text/HTML.php:888
#: src/Module/Admin/Logs/View.php:87 src/Module/Search/Index.php:112 #: src/Module/Admin/Logs/View.php:87 src/Module/Search/Index.php:112
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: src/Content/Nav.php:232 #: src/Content/Nav.php:233
msgid "Search site content" msgid "Search site content"
msgstr "" msgstr ""
#: src/Content/Nav.php:235 src/Content/Text/HTML.php:897 #: src/Content/Nav.php:236 src/Content/Text/HTML.php:897
msgid "Full Text" msgid "Full Text"
msgstr "" msgstr ""
#: src/Content/Nav.php:236 src/Content/Text/HTML.php:898 #: src/Content/Nav.php:237 src/Content/Text/HTML.php:898
#: src/Content/Widget/TagCloud.php:68 #: src/Content/Widget/TagCloud.php:68
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
#: src/Content/Nav.php:237 src/Content/Nav.php:296 #: src/Content/Nav.php:238 src/Content/Nav.php:297
#: src/Content/Text/HTML.php:899 src/Module/BaseProfile.php:125 #: src/Content/Text/HTML.php:899 src/Module/BaseProfile.php:125
#: src/Module/BaseProfile.php:128 src/Module/Contact.php:371 #: src/Module/BaseProfile.php:128 src/Module/Contact.php:373
#: src/Module/Contact.php:465 view/theme/frio/theme.php:247 #: src/Module/Contact.php:467 view/theme/frio/theme.php:247
msgid "Contacts" msgid "Contacts"
msgstr "" msgstr ""
#: src/Content/Nav.php:256 #: src/Content/Nav.php:257
msgid "Community" msgid "Community"
msgstr "" msgstr ""
#: src/Content/Nav.php:256 #: src/Content/Nav.php:257
msgid "Conversations on this and other servers" msgid "Conversations on this and other servers"
msgstr "" msgstr ""
#: src/Content/Nav.php:260 src/Module/BaseProfile.php:87 #: src/Content/Nav.php:261 src/Module/BaseProfile.php:87
#: src/Module/BaseProfile.php:98 view/theme/frio/theme.php:244 #: src/Module/BaseProfile.php:98 view/theme/frio/theme.php:244
msgid "Events and Calendar" msgid "Events and Calendar"
msgstr "" msgstr ""
#: src/Content/Nav.php:263 #: src/Content/Nav.php:264
msgid "Directory" msgid "Directory"
msgstr "" msgstr ""
#: src/Content/Nav.php:263 #: src/Content/Nav.php:264
msgid "People directory" msgid "People directory"
msgstr "" msgstr ""
#: src/Content/Nav.php:265 src/Module/BaseAdmin.php:88 #: src/Content/Nav.php:266 src/Module/BaseAdmin.php:88
msgid "Information" msgid "Information"
msgstr "" msgstr ""
#: src/Content/Nav.php:265 #: src/Content/Nav.php:266
msgid "Information about this friendica instance" msgid "Information about this friendica instance"
msgstr "" msgstr ""
#: src/Content/Nav.php:268 src/Module/Admin/Tos.php:76 #: src/Content/Nav.php:269 src/Module/Admin/Tos.php:76
#: src/Module/BaseAdmin.php:99 src/Module/Register.php:176 #: src/Module/BaseAdmin.php:99 src/Module/Register.php:176
#: src/Module/Tos.php:87 #: src/Module/Tos.php:87
msgid "Terms of Service" msgid "Terms of Service"
msgstr "" msgstr ""
#: src/Content/Nav.php:268 #: src/Content/Nav.php:269
msgid "Terms of Service of this Friendica instance" msgid "Terms of Service of this Friendica instance"
msgstr "" msgstr ""
#: src/Content/Nav.php:273 view/theme/frio/theme.php:243 #: src/Content/Nav.php:274 view/theme/frio/theme.php:243
msgid "Network" msgid "Network"
msgstr "" msgstr ""
#: src/Content/Nav.php:273 view/theme/frio/theme.php:243 #: src/Content/Nav.php:274 view/theme/frio/theme.php:243
msgid "Conversations from your friends" msgid "Conversations from your friends"
msgstr "" msgstr ""
#: src/Content/Nav.php:279 #: src/Content/Nav.php:280
msgid "Introductions" msgid "Introductions"
msgstr "" msgstr ""
#: src/Content/Nav.php:279 #: src/Content/Nav.php:280
msgid "Friend Requests" msgid "Friend Requests"
msgstr "" msgstr ""
#: src/Content/Nav.php:280 src/Module/BaseNotifications.php:148 #: src/Content/Nav.php:281 src/Module/BaseNotifications.php:148
#: src/Module/Notifications/Introductions.php:73 #: src/Module/Notifications/Introductions.php:73
msgid "Notifications" msgid "Notifications"
msgstr "" msgstr ""
#: src/Content/Nav.php:281 #: src/Content/Nav.php:282
msgid "See all notifications" msgid "See all notifications"
msgstr "" msgstr ""
#: src/Content/Nav.php:282 #: src/Content/Nav.php:283
msgid "Mark all system notifications as seen" msgid "Mark all system notifications as seen"
msgstr "" msgstr ""
#: src/Content/Nav.php:285 view/theme/frio/theme.php:245 #: src/Content/Nav.php:286 view/theme/frio/theme.php:245
msgid "Private mail" msgid "Private mail"
msgstr "" msgstr ""
#: src/Content/Nav.php:286 #: src/Content/Nav.php:287
msgid "Inbox" msgid "Inbox"
msgstr "" msgstr ""
#: src/Content/Nav.php:287 #: src/Content/Nav.php:288
msgid "Outbox" msgid "Outbox"
msgstr "" msgstr ""
#: src/Content/Nav.php:291 #: src/Content/Nav.php:292
msgid "Accounts" msgid "Accounts"
msgstr "" msgstr ""
#: src/Content/Nav.php:291 #: src/Content/Nav.php:292
msgid "Manage other pages" msgid "Manage other pages"
msgstr "" msgstr ""
#: src/Content/Nav.php:294 src/Module/Admin/Addons/Details.php:114 #: src/Content/Nav.php:295 src/Module/Admin/Addons/Details.php:114
#: src/Module/Admin/Themes/Details.php:93 src/Module/BaseSettings.php:122 #: src/Module/Admin/Themes/Details.php:93 src/Module/BaseSettings.php:122
#: src/Module/Welcome.php:52 view/theme/frio/theme.php:246 #: src/Module/Welcome.php:52 view/theme/frio/theme.php:246
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: src/Content/Nav.php:294 view/theme/frio/theme.php:246 #: src/Content/Nav.php:295 view/theme/frio/theme.php:246
msgid "Account settings" msgid "Account settings"
msgstr "" msgstr ""
#: src/Content/Nav.php:296 view/theme/frio/theme.php:247 #: src/Content/Nav.php:297 view/theme/frio/theme.php:247
msgid "Manage/edit friends and contacts" msgid "Manage/edit friends and contacts"
msgstr "" msgstr ""
#: src/Content/Nav.php:301 src/Module/BaseAdmin.php:129 #: src/Content/Nav.php:302 src/Module/BaseAdmin.php:129
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: src/Content/Nav.php:301 #: src/Content/Nav.php:302
msgid "Site setup and configuration" msgid "Site setup and configuration"
msgstr "" msgstr ""
#: src/Content/Nav.php:304 #: src/Content/Nav.php:305
msgid "Navigation" msgid "Navigation"
msgstr "" msgstr ""
#: src/Content/Nav.php:304 #: src/Content/Nav.php:305
msgid "Site map" msgid "Site map"
msgstr "" msgstr ""
@ -2628,39 +2628,39 @@ msgstr ""
msgid "last" msgid "last"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:998 src/Content/Text/BBCode.php:1833 #: src/Content/Text/BBCode.php:1002 src/Content/Text/BBCode.php:1883
#: src/Content/Text/BBCode.php:1834 #: src/Content/Text/BBCode.php:1884
msgid "Image/photo" msgid "Image/photo"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1188 #: src/Content/Text/BBCode.php:1238
#, php-format #, php-format
msgid "" msgid ""
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s" "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3420 #: src/Content/Text/BBCode.php:1263 src/Model/Item.php:3456
#: src/Model/Item.php:3426 src/Model/Item.php:3427 #: src/Model/Item.php:3462 src/Model/Item.php:3463
msgid "Link to source" msgid "Link to source"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1751 src/Content/Text/HTML.php:940 #: src/Content/Text/BBCode.php:1801 src/Content/Text/HTML.php:940
msgid "Click to open/close" msgid "Click to open/close"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1782 #: src/Content/Text/BBCode.php:1832
msgid "$1 wrote:" msgid "$1 wrote:"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:1838 src/Content/Text/BBCode.php:1839 #: src/Content/Text/BBCode.php:1888 src/Content/Text/BBCode.php:1889
msgid "Encrypted content" msgid "Encrypted content"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:2057 #: src/Content/Text/BBCode.php:2109
msgid "Invalid source protocol" msgid "Invalid source protocol"
msgstr "" msgstr ""
#: src/Content/Text/BBCode.php:2072 #: src/Content/Text/BBCode.php:2124
msgid "Invalid link protocol" msgid "Invalid link protocol"
msgstr "" msgstr ""
@ -2712,7 +2712,7 @@ msgstr ""
msgid "Examples: Robert Morgenstein, Fishing" msgid "Examples: Robert Morgenstein, Fishing"
msgstr "" msgstr ""
#: src/Content/Widget.php:82 src/Module/Contact.php:392 #: src/Content/Widget.php:82 src/Module/Contact.php:394
#: src/Module/Directory.php:97 view/theme/vier/theme.php:183 #: src/Module/Directory.php:97 view/theme/vier/theme.php:183
msgid "Find" msgid "Find"
msgstr "" msgstr ""
@ -2739,7 +2739,7 @@ msgid "Local Directory"
msgstr "" msgstr ""
#: src/Content/Widget.php:211 src/Model/Group.php:587 #: src/Content/Widget.php:211 src/Model/Group.php:587
#: src/Module/Contact.php:355 src/Module/Welcome.php:76 #: src/Module/Contact.php:357 src/Module/Welcome.php:76
msgid "Groups" msgid "Groups"
msgstr "" msgstr ""
@ -2751,7 +2751,7 @@ msgstr ""
msgid "Relationships" msgid "Relationships"
msgstr "" msgstr ""
#: src/Content/Widget.php:244 src/Module/Contact.php:307 #: src/Content/Widget.php:244 src/Module/Contact.php:309
#: src/Module/Group.php:293 #: src/Module/Group.php:293
msgid "All Contacts" msgid "All Contacts"
msgstr "" msgstr ""
@ -2795,7 +2795,7 @@ msgstr ""
msgid "Organisations" msgid "Organisations"
msgstr "" msgstr ""
#: src/Content/Widget.php:523 src/Model/Contact.php:1582 #: src/Content/Widget.php:523 src/Model/Contact.php:1605
msgid "News" msgid "News"
msgstr "" msgstr ""
@ -3421,36 +3421,36 @@ msgstr ""
msgid "Enter a valid existing folder" msgid "Enter a valid existing folder"
msgstr "" msgstr ""
#: src/Core/Update.php:67 #: src/Core/Update.php:69
#, php-format #, php-format
msgid "" msgid ""
"Updates from version %s are not supported. Please update at least to version " "Updates from version %s are not supported. Please update at least to version "
"2021.01 and wait until the postupdate finished version 1383." "2021.01 and wait until the postupdate finished version 1383."
msgstr "" msgstr ""
#: src/Core/Update.php:78 #: src/Core/Update.php:80
#, php-format #, php-format
msgid "" msgid ""
"Updates from postupdate version %s are not supported. Please update at least " "Updates from postupdate version %s are not supported. Please update at least "
"to version 2021.01 and wait until the postupdate finished version 1383." "to version 2021.01 and wait until the postupdate finished version 1383."
msgstr "" msgstr ""
#: src/Core/Update.php:153 #: src/Core/Update.php:155
#, php-format #, php-format
msgid "%s: executing pre update %d" msgid "%s: executing pre update %d"
msgstr "" msgstr ""
#: src/Core/Update.php:191 #: src/Core/Update.php:193
#, php-format #, php-format
msgid "%s: executing post update %d" msgid "%s: executing post update %d"
msgstr "" msgstr ""
#: src/Core/Update.php:261 #: src/Core/Update.php:263
#, php-format #, php-format
msgid "Update %s failed. See error logs." msgid "Update %s failed. See error logs."
msgstr "" msgstr ""
#: src/Core/Update.php:315 #: src/Core/Update.php:317
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3462,16 +3462,16 @@ msgid ""
"might be invalid." "might be invalid."
msgstr "" msgstr ""
#: src/Core/Update.php:321 #: src/Core/Update.php:323
#, php-format #, php-format
msgid "The error message is\\n[pre]%s[/pre]" msgid "The error message is\\n[pre]%s[/pre]"
msgstr "" msgstr ""
#: src/Core/Update.php:325 src/Core/Update.php:367 #: src/Core/Update.php:327 src/Core/Update.php:369
msgid "[Friendica Notify] Database update" msgid "[Friendica Notify] Database update"
msgstr "" msgstr ""
#: src/Core/Update.php:361 #: src/Core/Update.php:363
#, php-format #, php-format
msgid "" msgid ""
"\n" "\n"
@ -3588,81 +3588,81 @@ msgstr ""
msgid "Legacy module file not found: %s" msgid "Legacy module file not found: %s"
msgstr "" msgstr ""
#: src/Model/Contact.php:1147 src/Model/Contact.php:1158 #: src/Model/Contact.php:1170 src/Model/Contact.php:1181
msgid "UnFollow" msgid "UnFollow"
msgstr "" msgstr ""
#: src/Model/Contact.php:1164 src/Module/Admin/Users/Pending.php:107 #: src/Model/Contact.php:1187 src/Module/Admin/Users/Pending.php:107
#: src/Module/Notifications/Introductions.php:130 #: src/Module/Notifications/Introductions.php:130
#: src/Module/Notifications/Introductions.php:202 #: src/Module/Notifications/Introductions.php:202
msgid "Approve" msgid "Approve"
msgstr "" msgstr ""
#: src/Model/Contact.php:1578 #: src/Model/Contact.php:1601
msgid "Organisation" msgid "Organisation"
msgstr "" msgstr ""
#: src/Model/Contact.php:1586 #: src/Model/Contact.php:1609
msgid "Forum" msgid "Forum"
msgstr "" msgstr ""
#: src/Model/Contact.php:2774 #: src/Model/Contact.php:2795
msgid "Disallowed profile URL." msgid "Disallowed profile URL."
msgstr "" msgstr ""
#: src/Model/Contact.php:2779 src/Module/Friendica.php:81 #: src/Model/Contact.php:2800 src/Module/Friendica.php:81
msgid "Blocked domain" msgid "Blocked domain"
msgstr "" msgstr ""
#: src/Model/Contact.php:2784 #: src/Model/Contact.php:2805
msgid "Connect URL missing." msgid "Connect URL missing."
msgstr "" msgstr ""
#: src/Model/Contact.php:2793 #: src/Model/Contact.php:2814
msgid "" msgid ""
"The contact could not be added. Please check the relevant network " "The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page." "credentials in your Settings -> Social Networks page."
msgstr "" msgstr ""
#: src/Model/Contact.php:2835 #: src/Model/Contact.php:2856
msgid "The profile address specified does not provide adequate information." msgid "The profile address specified does not provide adequate information."
msgstr "" msgstr ""
#: src/Model/Contact.php:2837 #: src/Model/Contact.php:2858
msgid "No compatible communication protocols or feeds were discovered." msgid "No compatible communication protocols or feeds were discovered."
msgstr "" msgstr ""
#: src/Model/Contact.php:2840 #: src/Model/Contact.php:2861
msgid "An author or name was not found." msgid "An author or name was not found."
msgstr "" msgstr ""
#: src/Model/Contact.php:2843 #: src/Model/Contact.php:2864
msgid "No browser URL could be matched to this address." msgid "No browser URL could be matched to this address."
msgstr "" msgstr ""
#: src/Model/Contact.php:2846 #: src/Model/Contact.php:2867
msgid "" msgid ""
"Unable to match @-style Identity Address with a known protocol or email " "Unable to match @-style Identity Address with a known protocol or email "
"contact." "contact."
msgstr "" msgstr ""
#: src/Model/Contact.php:2847 #: src/Model/Contact.php:2868
msgid "Use mailto: in front of address to force email check." msgid "Use mailto: in front of address to force email check."
msgstr "" msgstr ""
#: src/Model/Contact.php:2853 #: src/Model/Contact.php:2874
msgid "" msgid ""
"The profile address specified belongs to a network which has been disabled " "The profile address specified belongs to a network which has been disabled "
"on this site." "on this site."
msgstr "" msgstr ""
#: src/Model/Contact.php:2858 #: src/Model/Contact.php:2879
msgid "" msgid ""
"Limited profile. This person will be unable to receive direct/personal " "Limited profile. This person will be unable to receive direct/personal "
"notifications from you." "notifications from you."
msgstr "" msgstr ""
#: src/Model/Contact.php:2917 #: src/Model/Contact.php:2938
msgid "Unable to retrieve contact information." msgid "Unable to retrieve contact information."
msgstr "" msgstr ""
@ -3782,66 +3782,66 @@ msgstr ""
msgid "Edit groups" msgid "Edit groups"
msgstr "" msgstr ""
#: src/Model/Item.php:1956 #: src/Model/Item.php:1965
#, php-format #, php-format
msgid "Detected languages in this post:\\n%s" msgid "Detected languages in this post:\\n%s"
msgstr "" msgstr ""
#: src/Model/Item.php:2848 #: src/Model/Item.php:2857
msgid "activity" msgid "activity"
msgstr "" msgstr ""
#: src/Model/Item.php:2850 #: src/Model/Item.php:2859
msgid "comment" msgid "comment"
msgstr "" msgstr ""
#: src/Model/Item.php:2853 #: src/Model/Item.php:2862
msgid "post" msgid "post"
msgstr "" msgstr ""
#: src/Model/Item.php:2969 #: src/Model/Item.php:3005
#, php-format #, php-format
msgid "Content warning: %s" msgid "Content warning: %s"
msgstr "" msgstr ""
#: src/Model/Item.php:3332 #: src/Model/Item.php:3368
msgid "bytes" msgid "bytes"
msgstr "" msgstr ""
#: src/Model/Item.php:3363 #: src/Model/Item.php:3399
#, php-format #, php-format
msgid "%2$s (%3$d%%, %1$d vote)" msgid "%2$s (%3$d%%, %1$d vote)"
msgid_plural "%2$s (%3$d%%, %1$d votes)" msgid_plural "%2$s (%3$d%%, %1$d votes)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3365 #: src/Model/Item.php:3401
#, php-format #, php-format
msgid "%2$s (%1$d vote)" msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)" msgid_plural "%2$s (%1$d votes)"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3370 #: src/Model/Item.php:3406
#, php-format #, php-format
msgid "%d voter. Poll end: %s" msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s" msgid_plural "%d voters. Poll end: %s"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3372 #: src/Model/Item.php:3408
#, php-format #, php-format
msgid "%d voter." msgid "%d voter."
msgid_plural "%d voters." msgid_plural "%d voters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Model/Item.php:3374 #: src/Model/Item.php:3410
#, php-format #, php-format
msgid "Poll end: %s" msgid "Poll end: %s"
msgstr "" msgstr ""
#: src/Model/Item.php:3408 src/Model/Item.php:3409 #: src/Model/Item.php:3444 src/Model/Item.php:3445
msgid "View on separate page" msgid "View on separate page"
msgstr "" msgstr ""
@ -4292,9 +4292,9 @@ msgstr ""
#: src/Module/Admin/Blocklist/Server/Add.php:121 #: src/Module/Admin/Blocklist/Server/Add.php:121
#: src/Module/Admin/Blocklist/Server/Import.php:117 #: src/Module/Admin/Blocklist/Server/Import.php:117
#: src/Module/Admin/Blocklist/Server/Index.php:93 #: src/Module/Admin/Blocklist/Server/Index.php:93
#: src/Module/Admin/Federation.php:200 src/Module/Admin/Item/Delete.php:64 #: src/Module/Admin/Federation.php:201 src/Module/Admin/Item/Delete.php:64
#: src/Module/Admin/Logs/Settings.php:79 src/Module/Admin/Logs/View.php:84 #: src/Module/Admin/Logs/Settings.php:79 src/Module/Admin/Logs/View.php:84
#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:433 #: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:431
#: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:233 #: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:233
#: src/Module/Admin/Themes/Details.php:90 src/Module/Admin/Themes/Index.php:111 #: src/Module/Admin/Themes/Details.php:90 src/Module/Admin/Themes/Index.php:111
#: src/Module/Admin/Tos.php:75 src/Module/Admin/Users/Active.php:136 #: src/Module/Admin/Tos.php:75 src/Module/Admin/Users/Active.php:136
@ -4357,8 +4357,8 @@ msgstr ""
msgid "List of active accounts" msgid "List of active accounts"
msgstr "" msgstr ""
#: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:315 #: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:317
#: src/Module/Contact.php:375 #: src/Module/Contact.php:377
msgid "Pending" msgid "Pending"
msgstr "" msgstr ""
@ -4366,8 +4366,8 @@ msgstr ""
msgid "List of pending registrations" msgid "List of pending registrations"
msgstr "" msgstr ""
#: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:323 #: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:325
#: src/Module/Contact.php:376 #: src/Module/Contact.php:378
msgid "Blocked" msgid "Blocked"
msgstr "" msgstr ""
@ -4460,7 +4460,7 @@ msgstr ""
#: src/Module/Admin/Blocklist/Contact.php:101 #: src/Module/Admin/Blocklist/Contact.php:101
#: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156 #: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156
#: src/Module/Contact.php:399 src/Module/Contact/Profile.php:348 #: src/Module/Contact.php:401 src/Module/Contact/Profile.php:348
#: src/Module/Contact/Profile.php:449 #: src/Module/Contact/Profile.php:449
msgid "Unblock" msgid "Unblock"
msgstr "" msgstr ""
@ -4821,75 +4821,75 @@ msgstr ""
msgid "Manage Additional Features" msgid "Manage Additional Features"
msgstr "" msgstr ""
#: src/Module/Admin/Federation.php:68 #: src/Module/Admin/Federation.php:69
msgid "Other" msgid "Other"
msgstr "" msgstr ""
#: src/Module/Admin/Federation.php:140 src/Module/Admin/Federation.php:389 #: src/Module/Admin/Federation.php:141 src/Module/Admin/Federation.php:390
msgid "unknown" msgid "unknown"
msgstr "" msgstr ""
#: src/Module/Admin/Federation.php:173 #: src/Module/Admin/Federation.php:174
#, php-format #, php-format
msgid "%2$s total system" msgid "%2$s total system"
msgid_plural "%2$s total systems" msgid_plural "%2$s total systems"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:174 #: src/Module/Admin/Federation.php:175
#, php-format #, php-format
msgid "%2$s active user last month" msgid "%2$s active user last month"
msgid_plural "%2$s active users last month" msgid_plural "%2$s active users last month"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:175 #: src/Module/Admin/Federation.php:176
#, php-format #, php-format
msgid "%2$s active user last six months" msgid "%2$s active user last six months"
msgid_plural "%2$s active users last six months" msgid_plural "%2$s active users last six months"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:176 #: src/Module/Admin/Federation.php:177
#, php-format #, php-format
msgid "%2$s registered user" msgid "%2$s registered user"
msgid_plural "%2$s registered users" msgid_plural "%2$s registered users"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:177 #: src/Module/Admin/Federation.php:178
#, php-format #, php-format
msgid "%2$s locally created post or comment" msgid "%2$s locally created post or comment"
msgid_plural "%2$s locally created posts and comments" msgid_plural "%2$s locally created posts and comments"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:180 #: src/Module/Admin/Federation.php:181
#, php-format #, php-format
msgid "%2$s post per user" msgid "%2$s post per user"
msgid_plural "%2$s posts per user" msgid_plural "%2$s posts per user"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:185 #: src/Module/Admin/Federation.php:186
#, php-format #, php-format
msgid "%2$s user per system" msgid "%2$s user per system"
msgid_plural "%2$s users per system" msgid_plural "%2$s users per system"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Admin/Federation.php:195 #: src/Module/Admin/Federation.php:196
msgid "" msgid ""
"This page offers you some numbers to the known part of the federated social " "This page offers you some numbers to the known part of the federated social "
"network your Friendica node is part of. These numbers are not complete but " "network your Friendica node is part of. These numbers are not complete but "
"only reflect the part of the network your node is aware of." "only reflect the part of the network your node is aware of."
msgstr "" msgstr ""
#: src/Module/Admin/Federation.php:201 src/Module/BaseAdmin.php:90 #: src/Module/Admin/Federation.php:202 src/Module/BaseAdmin.php:90
msgid "Federation Statistics" msgid "Federation Statistics"
msgstr "" msgstr ""
#: src/Module/Admin/Federation.php:205 #: src/Module/Admin/Federation.php:206
#, php-format #, php-format
msgid "" msgid ""
"Currently this node is aware of %2$s node (%3$s active users last month, " "Currently this node is aware of %2$s node (%3$s active users last month, "
@ -5153,470 +5153,470 @@ msgstr ""
msgid "Priority" msgid "Priority"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:338 src/Module/Settings/Display.php:138 #: src/Module/Admin/Site.php:336 src/Module/Settings/Display.php:138
msgid "No special theme for mobile devices" msgid "No special theme for mobile devices"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:355 src/Module/Settings/Display.php:148 #: src/Module/Admin/Site.php:353 src/Module/Settings/Display.php:148
#, php-format #, php-format
msgid "%s - (Experimental)" msgid "%s - (Experimental)"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:367 #: src/Module/Admin/Site.php:365
msgid "No community page for local users"
msgstr ""
#: src/Module/Admin/Site.php:368
msgid "No community page" msgid "No community page"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:369 #: src/Module/Admin/Site.php:366
msgid "No community page for visitors"
msgstr ""
#: src/Module/Admin/Site.php:367
msgid "Public postings from users of this site" msgid "Public postings from users of this site"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:370 #: src/Module/Admin/Site.php:368
msgid "Public postings from the federated network" msgid "Public postings from the federated network"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:371 #: src/Module/Admin/Site.php:369
msgid "Public postings from local users and the federated network" msgid "Public postings from local users and the federated network"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:377 #: src/Module/Admin/Site.php:375
msgid "Multi user instance" msgid "Multi user instance"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:404 #: src/Module/Admin/Site.php:402
msgid "Closed" msgid "Closed"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:405 #: src/Module/Admin/Site.php:403
msgid "Requires approval" msgid "Requires approval"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:406 #: src/Module/Admin/Site.php:404
msgid "Open" msgid "Open"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:410 src/Module/Install.php:222 #: src/Module/Admin/Site.php:408 src/Module/Install.php:222
msgid "No SSL policy, links will track page SSL state" msgid "No SSL policy, links will track page SSL state"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:411 src/Module/Install.php:223 #: src/Module/Admin/Site.php:409 src/Module/Install.php:223
msgid "Force all links to use SSL" msgid "Force all links to use SSL"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:412 src/Module/Install.php:224 #: src/Module/Admin/Site.php:410 src/Module/Install.php:224
msgid "Self-signed certificate, use SSL for local links only (discouraged)" msgid "Self-signed certificate, use SSL for local links only (discouraged)"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:416 #: src/Module/Admin/Site.php:414
msgid "Don't check" msgid "Don't check"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:417 #: src/Module/Admin/Site.php:415
msgid "check the stable version" msgid "check the stable version"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:418 #: src/Module/Admin/Site.php:416
msgid "check the development version" msgid "check the development version"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:422 #: src/Module/Admin/Site.php:420
msgid "none" msgid "none"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:423 #: src/Module/Admin/Site.php:421
msgid "Local contacts" msgid "Local contacts"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:424 #: src/Module/Admin/Site.php:422
msgid "Interactors" msgid "Interactors"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:434 src/Module/BaseAdmin.php:93 #: src/Module/Admin/Site.php:432 src/Module/BaseAdmin.php:93
msgid "Site" msgid "Site"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:435 #: src/Module/Admin/Site.php:433
msgid "General Information" msgid "General Information"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:437 #: src/Module/Admin/Site.php:435
msgid "Republish users to directory" msgid "Republish users to directory"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:438 src/Module/Register.php:152 #: src/Module/Admin/Site.php:436 src/Module/Register.php:152
msgid "Registration" msgid "Registration"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:439 #: src/Module/Admin/Site.php:437
msgid "File upload" msgid "File upload"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:440 #: src/Module/Admin/Site.php:438
msgid "Policies" msgid "Policies"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:442 #: src/Module/Admin/Site.php:440
msgid "Auto Discovered Contact Directory" msgid "Auto Discovered Contact Directory"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:443 #: src/Module/Admin/Site.php:441
msgid "Performance" msgid "Performance"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:444 #: src/Module/Admin/Site.php:442
msgid "Worker" msgid "Worker"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:445 #: src/Module/Admin/Site.php:443
msgid "Message Relay" msgid "Message Relay"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:446 #: src/Module/Admin/Site.php:444
msgid "" msgid ""
"Use the command \"console relay\" in the command line to add or remove " "Use the command \"console relay\" in the command line to add or remove "
"relays." "relays."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:447 #: src/Module/Admin/Site.php:445
msgid "The system is not subscribed to any relays at the moment." msgid "The system is not subscribed to any relays at the moment."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:448 #: src/Module/Admin/Site.php:446
msgid "The system is currently subscribed to the following relays:" msgid "The system is currently subscribed to the following relays:"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:450 #: src/Module/Admin/Site.php:448
msgid "Relocate Node" msgid "Relocate Node"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:451 #: src/Module/Admin/Site.php:449
msgid "" msgid ""
"Relocating your node enables you to change the DNS domain of this node and " "Relocating your node enables you to change the DNS domain of this node and "
"keep all the existing users and posts. This process takes a while and can " "keep all the existing users and posts. This process takes a while and can "
"only be started from the relocate console command like this:" "only be started from the relocate console command like this:"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:452 #: src/Module/Admin/Site.php:450
msgid "(Friendica directory)# bin/console relocate https://newdomain.com" msgid "(Friendica directory)# bin/console relocate https://newdomain.com"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:456 #: src/Module/Admin/Site.php:454
msgid "Site name" msgid "Site name"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:457 #: src/Module/Admin/Site.php:455
msgid "Sender Email" msgid "Sender Email"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:457 #: src/Module/Admin/Site.php:455
msgid "" msgid ""
"The email address your server shall use to send notification emails from." "The email address your server shall use to send notification emails from."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:458 #: src/Module/Admin/Site.php:456
msgid "Name of the system actor" msgid "Name of the system actor"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:458 #: src/Module/Admin/Site.php:456
msgid "" msgid ""
"Name of the internal system account that is used to perform ActivityPub " "Name of the internal system account that is used to perform ActivityPub "
"requests. This must be an unused username. If set, this can't be changed " "requests. This must be an unused username. If set, this can't be changed "
"again." "again."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:459 #: src/Module/Admin/Site.php:457
msgid "Banner/Logo" msgid "Banner/Logo"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:460 #: src/Module/Admin/Site.php:458
msgid "Email Banner/Logo" msgid "Email Banner/Logo"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:461 #: src/Module/Admin/Site.php:459
msgid "Shortcut icon" msgid "Shortcut icon"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:461 #: src/Module/Admin/Site.php:459
msgid "Link to an icon that will be used for browsers." msgid "Link to an icon that will be used for browsers."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:462 #: src/Module/Admin/Site.php:460
msgid "Touch icon" msgid "Touch icon"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:462 #: src/Module/Admin/Site.php:460
msgid "Link to an icon that will be used for tablets and mobiles." msgid "Link to an icon that will be used for tablets and mobiles."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:463 #: src/Module/Admin/Site.php:461
msgid "Additional Info" msgid "Additional Info"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:463 #: src/Module/Admin/Site.php:461
#, php-format #, php-format
msgid "" msgid ""
"For public servers: you can add additional information here that will be " "For public servers: you can add additional information here that will be "
"listed at %s/servers." "listed at %s/servers."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:464 #: src/Module/Admin/Site.php:462
msgid "System language" msgid "System language"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:465 #: src/Module/Admin/Site.php:463
msgid "System theme" msgid "System theme"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:465 #: src/Module/Admin/Site.php:463
#, php-format #, php-format
msgid "" msgid ""
"Default system theme - may be over-ridden by user profiles - <a href=\"%s\" " "Default system theme - may be over-ridden by user profiles - <a href=\"%s\" "
"id=\"cnftheme\">Change default theme settings</a>" "id=\"cnftheme\">Change default theme settings</a>"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:466 #: src/Module/Admin/Site.php:464
msgid "Mobile system theme" msgid "Mobile system theme"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:466 #: src/Module/Admin/Site.php:464
msgid "Theme for mobile devices" msgid "Theme for mobile devices"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:467 src/Module/Install.php:232 #: src/Module/Admin/Site.php:465 src/Module/Install.php:232
msgid "SSL link policy" msgid "SSL link policy"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:467 src/Module/Install.php:234 #: src/Module/Admin/Site.php:465 src/Module/Install.php:234
msgid "Determines whether generated links should be forced to use SSL" msgid "Determines whether generated links should be forced to use SSL"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:468 #: src/Module/Admin/Site.php:466
msgid "Force SSL" msgid "Force SSL"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:468 #: src/Module/Admin/Site.php:466
msgid "" msgid ""
"Force all Non-SSL requests to SSL - Attention: on some systems it could lead " "Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
"to endless loops." "to endless loops."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:469 #: src/Module/Admin/Site.php:467
msgid "Show help entry from navigation menu" msgid "Show help entry from navigation menu"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:469 #: src/Module/Admin/Site.php:467
msgid "" msgid ""
"Displays the menu entry for the Help pages from the navigation menu. It is " "Displays the menu entry for the Help pages from the navigation menu. It is "
"always accessible by calling /help directly." "always accessible by calling /help directly."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:470 #: src/Module/Admin/Site.php:468
msgid "Single user instance" msgid "Single user instance"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:470 #: src/Module/Admin/Site.php:468
msgid "Make this instance multi-user or single-user for the named user" msgid "Make this instance multi-user or single-user for the named user"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:472 #: src/Module/Admin/Site.php:470
msgid "Maximum image size" msgid "Maximum image size"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:472 #: src/Module/Admin/Site.php:470
msgid "" msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no " "Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits." "limits."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:473 #: src/Module/Admin/Site.php:471
msgid "Maximum image length" msgid "Maximum image length"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:473 #: src/Module/Admin/Site.php:471
msgid "" msgid ""
"Maximum length in pixels of the longest side of uploaded images. Default is " "Maximum length in pixels of the longest side of uploaded images. Default is "
"-1, which means no limits." "-1, which means no limits."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:474 #: src/Module/Admin/Site.php:472
msgid "JPEG image quality" msgid "JPEG image quality"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:474 #: src/Module/Admin/Site.php:472
msgid "" msgid ""
"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is " "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
"100, which is full quality." "100, which is full quality."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:476 #: src/Module/Admin/Site.php:474
msgid "Register policy" msgid "Register policy"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:477 #: src/Module/Admin/Site.php:475
msgid "Maximum Daily Registrations" msgid "Maximum Daily Registrations"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:477 #: src/Module/Admin/Site.php:475
msgid "" msgid ""
"If registration is permitted above, this sets the maximum number of new user " "If registration is permitted above, this sets the maximum number of new user "
"registrations to accept per day. If register is set to closed, this setting " "registrations to accept per day. If register is set to closed, this setting "
"has no effect." "has no effect."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:478 #: src/Module/Admin/Site.php:476
msgid "Register text" msgid "Register text"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:478 #: src/Module/Admin/Site.php:476
msgid "" msgid ""
"Will be displayed prominently on the registration page. You can use BBCode " "Will be displayed prominently on the registration page. You can use BBCode "
"here." "here."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:479 #: src/Module/Admin/Site.php:477
msgid "Forbidden Nicknames" msgid "Forbidden Nicknames"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:479 #: src/Module/Admin/Site.php:477
msgid "" msgid ""
"Comma separated list of nicknames that are forbidden from registration. " "Comma separated list of nicknames that are forbidden from registration. "
"Preset is a list of role names according RFC 2142." "Preset is a list of role names according RFC 2142."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:480 #: src/Module/Admin/Site.php:478
msgid "Accounts abandoned after x days" msgid "Accounts abandoned after x days"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:480 #: src/Module/Admin/Site.php:478
msgid "" msgid ""
"Will not waste system resources polling external sites for abandonded " "Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit." "accounts. Enter 0 for no time limit."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:481 #: src/Module/Admin/Site.php:479
msgid "Allowed friend domains" msgid "Allowed friend domains"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:481 #: src/Module/Admin/Site.php:479
msgid "" msgid ""
"Comma separated list of domains which are allowed to establish friendships " "Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains" "with this site. Wildcards are accepted. Empty to allow any domains"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:482 #: src/Module/Admin/Site.php:480
msgid "Allowed email domains" msgid "Allowed email domains"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:482 #: src/Module/Admin/Site.php:480
msgid "" msgid ""
"Comma separated list of domains which are allowed in email addresses for " "Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any " "registrations to this site. Wildcards are accepted. Empty to allow any "
"domains" "domains"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:483 #: src/Module/Admin/Site.php:481
msgid "No OEmbed rich content" msgid "No OEmbed rich content"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:483 #: src/Module/Admin/Site.php:481
msgid "" msgid ""
"Don't show the rich content (e.g. embedded PDF), except from the domains " "Don't show the rich content (e.g. embedded PDF), except from the domains "
"listed below." "listed below."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:484 #: src/Module/Admin/Site.php:482
msgid "Trusted third-party domains" msgid "Trusted third-party domains"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:484 #: src/Module/Admin/Site.php:482
msgid "" msgid ""
"Comma separated list of domains from which content is allowed to be embedded " "Comma separated list of domains from which content is allowed to be embedded "
"in posts like with OEmbed. All sub-domains of the listed domains are allowed " "in posts like with OEmbed. All sub-domains of the listed domains are allowed "
"as well." "as well."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:485 #: src/Module/Admin/Site.php:483
msgid "Block public" msgid "Block public"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:485 #: src/Module/Admin/Site.php:483
msgid "" msgid ""
"Check to block public access to all otherwise public personal pages on this " "Check to block public access to all otherwise public personal pages on this "
"site unless you are currently logged in." "site unless you are currently logged in."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:486 #: src/Module/Admin/Site.php:484
msgid "Force publish" msgid "Force publish"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:486 #: src/Module/Admin/Site.php:484
msgid "" msgid ""
"Check to force all profiles on this site to be listed in the site directory." "Check to force all profiles on this site to be listed in the site directory."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:486 #: src/Module/Admin/Site.php:484
msgid "Enabling this may violate privacy laws like the GDPR" msgid "Enabling this may violate privacy laws like the GDPR"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:487 #: src/Module/Admin/Site.php:485
msgid "Global directory URL" msgid "Global directory URL"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:487 #: src/Module/Admin/Site.php:485
msgid "" msgid ""
"URL to the global directory. If this is not set, the global directory is " "URL to the global directory. If this is not set, the global directory is "
"completely unavailable to the application." "completely unavailable to the application."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:488 #: src/Module/Admin/Site.php:486
msgid "Private posts by default for new users" msgid "Private posts by default for new users"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:488 #: src/Module/Admin/Site.php:486
msgid "" msgid ""
"Set default post permissions for all new members to the default privacy " "Set default post permissions for all new members to the default privacy "
"group rather than public." "group rather than public."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:489 #: src/Module/Admin/Site.php:487
msgid "Don't include post content in email notifications" msgid "Don't include post content in email notifications"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:489 #: src/Module/Admin/Site.php:487
msgid "" msgid ""
"Don't include the content of a post/comment/private message/etc. in the " "Don't include the content of a post/comment/private message/etc. in the "
"email notifications that are sent out from this site, as a privacy measure." "email notifications that are sent out from this site, as a privacy measure."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:490 #: src/Module/Admin/Site.php:488
msgid "Disallow public access to addons listed in the apps menu." msgid "Disallow public access to addons listed in the apps menu."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:490 #: src/Module/Admin/Site.php:488
msgid "" msgid ""
"Checking this box will restrict addons listed in the apps menu to members " "Checking this box will restrict addons listed in the apps menu to members "
"only." "only."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:491 #: src/Module/Admin/Site.php:489
msgid "Don't embed private images in posts" msgid "Don't embed private images in posts"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:491 #: src/Module/Admin/Site.php:489
msgid "" msgid ""
"Don't replace locally-hosted private photos in posts with an embedded copy " "Don't replace locally-hosted private photos in posts with an embedded copy "
"of the image. This means that contacts who receive posts containing private " "of the image. This means that contacts who receive posts containing private "
"photos will have to authenticate and load each image, which may take a while." "photos will have to authenticate and load each image, which may take a while."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:492 #: src/Module/Admin/Site.php:490
msgid "Explicit Content" msgid "Explicit Content"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:492 #: src/Module/Admin/Site.php:490
msgid "" msgid ""
"Set this to announce that your node is used mostly for explicit content that " "Set this to announce that your node is used mostly for explicit content that "
"might not be suited for minors. This information will be published in the " "might not be suited for minors. This information will be published in the "
@ -5625,257 +5625,257 @@ msgid ""
"will be shown at the user registration page." "will be shown at the user registration page."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:493 #: src/Module/Admin/Site.php:491
msgid "Proxify external content" msgid "Proxify external content"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:493 #: src/Module/Admin/Site.php:491
msgid "" msgid ""
"Route external content via the proxy functionality. This is used for example " "Route external content via the proxy functionality. This is used for example "
"for some OEmbed accesses and in some other rare cases." "for some OEmbed accesses and in some other rare cases."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:494 #: src/Module/Admin/Site.php:492
msgid "Cache contact avatars" msgid "Cache contact avatars"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:494 #: src/Module/Admin/Site.php:492
msgid "" msgid ""
"Locally store the avatar pictures of the contacts. This uses a lot of " "Locally store the avatar pictures of the contacts. This uses a lot of "
"storage space but it increases the performance." "storage space but it increases the performance."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:495 #: src/Module/Admin/Site.php:493
msgid "Allow Users to set remote_self" msgid "Allow Users to set remote_self"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:495 #: src/Module/Admin/Site.php:493
msgid "" msgid ""
"With checking this, every user is allowed to mark every contact as a " "With checking this, every user is allowed to mark every contact as a "
"remote_self in the repair contact dialog. Setting this flag on a contact " "remote_self in the repair contact dialog. Setting this flag on a contact "
"causes mirroring every posting of that contact in the users stream." "causes mirroring every posting of that contact in the users stream."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:496 #: src/Module/Admin/Site.php:494
msgid "Enable multiple registrations" msgid "Enable multiple registrations"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:496 #: src/Module/Admin/Site.php:494
msgid "Enable users to register additional accounts for use as pages." msgid "Enable users to register additional accounts for use as pages."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:497 #: src/Module/Admin/Site.php:495
msgid "Enable OpenID" msgid "Enable OpenID"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:497 #: src/Module/Admin/Site.php:495
msgid "Enable OpenID support for registration and logins." msgid "Enable OpenID support for registration and logins."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:498 #: src/Module/Admin/Site.php:496
msgid "Enable Fullname check" msgid "Enable Fullname check"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:498 #: src/Module/Admin/Site.php:496
msgid "" msgid ""
"Enable check to only allow users to register with a space between the first " "Enable check to only allow users to register with a space between the first "
"name and the last name in their full name." "name and the last name in their full name."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:499 #: src/Module/Admin/Site.php:497
msgid "Community pages for visitors" msgid "Community pages for visitors"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:499 #: src/Module/Admin/Site.php:497
msgid "" msgid ""
"Which community pages should be available for visitors. Local users always " "Which community pages should be available for visitors. Local users always "
"see both pages." "see both pages."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:500 #: src/Module/Admin/Site.php:498
msgid "Posts per user on community page" msgid "Posts per user on community page"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:500 #: src/Module/Admin/Site.php:498
msgid "" msgid ""
"The maximum number of posts per user on the community page. (Not valid for " "The maximum number of posts per user on the community page. (Not valid for "
"\"Global Community\")" "\"Global Community\")"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:502 #: src/Module/Admin/Site.php:500
msgid "Enable Mail support" msgid "Enable Mail support"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:502 #: src/Module/Admin/Site.php:500
msgid "" msgid ""
"Enable built-in mail support to poll IMAP folders and to reply via mail." "Enable built-in mail support to poll IMAP folders and to reply via mail."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:503 #: src/Module/Admin/Site.php:501
msgid "" msgid ""
"Mail support can't be enabled because the PHP IMAP module is not installed." "Mail support can't be enabled because the PHP IMAP module is not installed."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:504 #: src/Module/Admin/Site.php:502
msgid "Enable OStatus support" msgid "Enable OStatus support"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:504 #: src/Module/Admin/Site.php:502
msgid "" msgid ""
"Enable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All " "Enable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
"communications in OStatus are public." "communications in OStatus are public."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:506 #: src/Module/Admin/Site.php:504
msgid "" msgid ""
"Diaspora support can't be enabled because Friendica was installed into a sub " "Diaspora support can't be enabled because Friendica was installed into a sub "
"directory." "directory."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:507 #: src/Module/Admin/Site.php:505
msgid "Enable Diaspora support" msgid "Enable Diaspora support"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:507 #: src/Module/Admin/Site.php:505
msgid "" msgid ""
"Enable built-in Diaspora network compatibility for communicating with " "Enable built-in Diaspora network compatibility for communicating with "
"diaspora servers." "diaspora servers."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:508 #: src/Module/Admin/Site.php:506
msgid "Verify SSL" msgid "Verify SSL"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:508 #: src/Module/Admin/Site.php:506
msgid "" msgid ""
"If you wish, you can turn on strict certificate checking. This will mean you " "If you wish, you can turn on strict certificate checking. This will mean you "
"cannot connect (at all) to self-signed SSL sites." "cannot connect (at all) to self-signed SSL sites."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:509 #: src/Module/Admin/Site.php:507
msgid "Proxy user" msgid "Proxy user"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:509 #: src/Module/Admin/Site.php:507
msgid "User name for the proxy server." msgid "User name for the proxy server."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:510 #: src/Module/Admin/Site.php:508
msgid "Proxy URL" msgid "Proxy URL"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:510 #: src/Module/Admin/Site.php:508
msgid "" msgid ""
"If you want to use a proxy server that Friendica should use to connect to " "If you want to use a proxy server that Friendica should use to connect to "
"the network, put the URL of the proxy here." "the network, put the URL of the proxy here."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:511 #: src/Module/Admin/Site.php:509
msgid "Network timeout" msgid "Network timeout"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:511 #: src/Module/Admin/Site.php:509
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:512 #: src/Module/Admin/Site.php:510
msgid "Maximum Load Average" msgid "Maximum Load Average"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:512 #: src/Module/Admin/Site.php:510
#, php-format #, php-format
msgid "" msgid ""
"Maximum system load before delivery and poll processes are deferred - " "Maximum system load before delivery and poll processes are deferred - "
"default %d." "default %d."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:513 #: src/Module/Admin/Site.php:511
msgid "Minimal Memory" msgid "Minimal Memory"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:513 #: src/Module/Admin/Site.php:511
msgid "" msgid ""
"Minimal free memory in MB for the worker. Needs access to /proc/meminfo - " "Minimal free memory in MB for the worker. Needs access to /proc/meminfo - "
"default 0 (deactivated)." "default 0 (deactivated)."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:514 #: src/Module/Admin/Site.php:512
msgid "Periodically optimize tables" msgid "Periodically optimize tables"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:514 #: src/Module/Admin/Site.php:512
msgid "Periodically optimize tables like the cache and the workerqueue" msgid "Periodically optimize tables like the cache and the workerqueue"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:516 #: src/Module/Admin/Site.php:514
msgid "Discover followers/followings from contacts" msgid "Discover followers/followings from contacts"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:516 #: src/Module/Admin/Site.php:514
msgid "" msgid ""
"If enabled, contacts are checked for their followers and following contacts." "If enabled, contacts are checked for their followers and following contacts."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:517 #: src/Module/Admin/Site.php:515
msgid "None - deactivated" msgid "None - deactivated"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:518 #: src/Module/Admin/Site.php:516
msgid "" msgid ""
"Local contacts - contacts of our local contacts are discovered for their " "Local contacts - contacts of our local contacts are discovered for their "
"followers/followings." "followers/followings."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:519 #: src/Module/Admin/Site.php:517
msgid "" msgid ""
"Interactors - contacts of our local contacts and contacts who interacted on " "Interactors - contacts of our local contacts and contacts who interacted on "
"locally visible postings are discovered for their followers/followings." "locally visible postings are discovered for their followers/followings."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:521 #: src/Module/Admin/Site.php:519
msgid "Synchronize the contacts with the directory server" msgid "Synchronize the contacts with the directory server"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:521 #: src/Module/Admin/Site.php:519
msgid "" msgid ""
"if enabled, the system will check periodically for new contacts on the " "if enabled, the system will check periodically for new contacts on the "
"defined directory server." "defined directory server."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:523 #: src/Module/Admin/Site.php:521
msgid "Days between requery" msgid "Days between requery"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:523 #: src/Module/Admin/Site.php:521
msgid "Number of days after which a server is requeried for his contacts." msgid "Number of days after which a server is requeried for his contacts."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:524 #: src/Module/Admin/Site.php:522
msgid "Discover contacts from other servers" msgid "Discover contacts from other servers"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:524 #: src/Module/Admin/Site.php:522
msgid "" msgid ""
"Periodically query other servers for contacts. The system queries Friendica, " "Periodically query other servers for contacts. The system queries Friendica, "
"Mastodon and Hubzilla servers." "Mastodon and Hubzilla servers."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:525 #: src/Module/Admin/Site.php:523
msgid "Search the local directory" msgid "Search the local directory"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:525 #: src/Module/Admin/Site.php:523
msgid "" msgid ""
"Search the local directory instead of the global directory. When searching " "Search the local directory instead of the global directory. When searching "
"locally, every search will be executed on the global directory in the " "locally, every search will be executed on the global directory in the "
"background. This improves the search results when the search is repeated." "background. This improves the search results when the search is repeated."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:527 #: src/Module/Admin/Site.php:525
msgid "Publish server information" msgid "Publish server information"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:527 #: src/Module/Admin/Site.php:525
msgid "" msgid ""
"If enabled, general server and usage data will be published. The data " "If enabled, general server and usage data will be published. The data "
"contains the name and version of the server, number of users with public " "contains the name and version of the server, number of users with public "
@ -5883,50 +5883,50 @@ msgid ""
"href=\"http://the-federation.info/\">the-federation.info</a> for details." "href=\"http://the-federation.info/\">the-federation.info</a> for details."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:529 #: src/Module/Admin/Site.php:527
msgid "Check upstream version" msgid "Check upstream version"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:529 #: src/Module/Admin/Site.php:527
msgid "" msgid ""
"Enables checking for new Friendica versions at github. If there is a new " "Enables checking for new Friendica versions at github. If there is a new "
"version, you will be informed in the admin panel overview." "version, you will be informed in the admin panel overview."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:530 #: src/Module/Admin/Site.php:528
msgid "Suppress Tags" msgid "Suppress Tags"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:530 #: src/Module/Admin/Site.php:528
msgid "Suppress showing a list of hashtags at the end of the posting." msgid "Suppress showing a list of hashtags at the end of the posting."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:531 #: src/Module/Admin/Site.php:529
msgid "Clean database" msgid "Clean database"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:531 #: src/Module/Admin/Site.php:529
msgid "" msgid ""
"Remove old remote items, orphaned database records and old content from some " "Remove old remote items, orphaned database records and old content from some "
"other helper tables." "other helper tables."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:532 #: src/Module/Admin/Site.php:530
msgid "Lifespan of remote items" msgid "Lifespan of remote items"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:532 #: src/Module/Admin/Site.php:530
msgid "" msgid ""
"When the database cleanup is enabled, this defines the days after which " "When the database cleanup is enabled, this defines the days after which "
"remote items will be deleted. Own items, and marked or filed items are " "remote items will be deleted. Own items, and marked or filed items are "
"always kept. 0 disables this behaviour." "always kept. 0 disables this behaviour."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:533 #: src/Module/Admin/Site.php:531
msgid "Lifespan of unclaimed items" msgid "Lifespan of unclaimed items"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:533 #: src/Module/Admin/Site.php:531
msgid "" msgid ""
"When the database cleanup is enabled, this defines the days after which " "When the database cleanup is enabled, this defines the days after which "
"unclaimed remote items (mostly content from the relay) will be deleted. " "unclaimed remote items (mostly content from the relay) will be deleted. "
@ -5934,144 +5934,144 @@ msgid ""
"items if set to 0." "items if set to 0."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:534 #: src/Module/Admin/Site.php:532
msgid "Lifespan of raw conversation data" msgid "Lifespan of raw conversation data"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:534 #: src/Module/Admin/Site.php:532
msgid "" msgid ""
"The conversation data is used for ActivityPub and OStatus, as well as for " "The conversation data is used for ActivityPub and OStatus, as well as for "
"debug purposes. It should be safe to remove it after 14 days, default is 90 " "debug purposes. It should be safe to remove it after 14 days, default is 90 "
"days." "days."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:535 #: src/Module/Admin/Site.php:533
msgid "Maximum numbers of comments per post" msgid "Maximum numbers of comments per post"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:535 #: src/Module/Admin/Site.php:533
msgid "How much comments should be shown for each post? Default value is 100." msgid "How much comments should be shown for each post? Default value is 100."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:536 #: src/Module/Admin/Site.php:534
msgid "Maximum numbers of comments per post on the display page" msgid "Maximum numbers of comments per post on the display page"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:536 #: src/Module/Admin/Site.php:534
msgid "" msgid ""
"How many comments should be shown on the single view for each post? Default " "How many comments should be shown on the single view for each post? Default "
"value is 1000." "value is 1000."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:537 #: src/Module/Admin/Site.php:535
msgid "Temp path" msgid "Temp path"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:537 #: src/Module/Admin/Site.php:535
msgid "" msgid ""
"If you have a restricted system where the webserver can't access the system " "If you have a restricted system where the webserver can't access the system "
"temp path, enter another path here." "temp path, enter another path here."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:538 #: src/Module/Admin/Site.php:536
msgid "Only search in tags" msgid "Only search in tags"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:538 #: src/Module/Admin/Site.php:536
msgid "On large systems the text search can slow down the system extremely." msgid "On large systems the text search can slow down the system extremely."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:539 #: src/Module/Admin/Site.php:537
msgid "Generate counts per contact group when calculating network count" msgid "Generate counts per contact group when calculating network count"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:539 #: src/Module/Admin/Site.php:537
msgid "" msgid ""
"On systems with users that heavily use contact groups the query can be very " "On systems with users that heavily use contact groups the query can be very "
"expensive." "expensive."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:541 #: src/Module/Admin/Site.php:539
msgid "Maximum number of parallel workers" msgid "Maximum number of parallel workers"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:541 #: src/Module/Admin/Site.php:539
#, php-format #, php-format
msgid "" msgid ""
"On shared hosters set this to %d. On larger systems, values of %d are great. " "On shared hosters set this to %d. On larger systems, values of %d are great. "
"Default value is %d." "Default value is %d."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:542 #: src/Module/Admin/Site.php:540
msgid "Enable fastlane" msgid "Enable fastlane"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:542 #: src/Module/Admin/Site.php:540
msgid "" msgid ""
"When enabed, the fastlane mechanism starts an additional worker if processes " "When enabed, the fastlane mechanism starts an additional worker if processes "
"with higher priority are blocked by processes of lower priority." "with higher priority are blocked by processes of lower priority."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:544 #: src/Module/Admin/Site.php:542
msgid "Direct relay transfer" msgid "Direct relay transfer"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:544 #: src/Module/Admin/Site.php:542
msgid "" msgid ""
"Enables the direct transfer to other servers without using the relay servers" "Enables the direct transfer to other servers without using the relay servers"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:545 #: src/Module/Admin/Site.php:543
msgid "Relay scope" msgid "Relay scope"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:545 #: src/Module/Admin/Site.php:543
msgid "" msgid ""
"Can be \"all\" or \"tags\". \"all\" means that every public post should be " "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. \"tags\" means that only posts with selected tags should be "
"received." "received."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:545 src/Module/Contact/Profile.php:273 #: src/Module/Admin/Site.php:543 src/Module/Contact/Profile.php:273
#: src/Module/Settings/TwoFactor/Index.php:126 #: src/Module/Settings/TwoFactor/Index.php:126
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:545 #: src/Module/Admin/Site.php:543
msgid "all" msgid "all"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:545 #: src/Module/Admin/Site.php:543
msgid "tags" msgid "tags"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:546 #: src/Module/Admin/Site.php:544
msgid "Server tags" msgid "Server tags"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:546 #: src/Module/Admin/Site.php:544
msgid "Comma separated list of tags for the \"tags\" subscription." msgid "Comma separated list of tags for the \"tags\" subscription."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:547 #: src/Module/Admin/Site.php:545
msgid "Deny Server tags" msgid "Deny Server tags"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:547 #: src/Module/Admin/Site.php:545
msgid "Comma separated list of tags that are rejected." msgid "Comma separated list of tags that are rejected."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:548 #: src/Module/Admin/Site.php:546
msgid "Allow user tags" msgid "Allow user tags"
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:548 #: src/Module/Admin/Site.php:546
msgid "" msgid ""
"If enabled, the tags from the saved searches will used for the \"tags\" " "If enabled, the tags from the saved searches will used for the \"tags\" "
"subscription in addition to the \"relay_server_tags\"." "subscription in addition to the \"relay_server_tags\"."
msgstr "" msgstr ""
#: src/Module/Admin/Site.php:551 #: src/Module/Admin/Site.php:549
msgid "Start Relocation" msgid "Start Relocation"
msgstr "" msgstr ""
@ -6733,7 +6733,7 @@ msgid_plural ""
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:461 #: src/Module/BaseProfile.php:51 src/Module/Contact.php:463
msgid "Profile Details" msgid "Profile Details"
msgstr "" msgstr ""
@ -6807,110 +6807,110 @@ msgid_plural "%d contacts edited."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Module/Contact.php:310 #: src/Module/Contact.php:312
msgid "Show all contacts" msgid "Show all contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:318 #: src/Module/Contact.php:320
msgid "Only show pending contacts" msgid "Only show pending contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:326 #: src/Module/Contact.php:328
msgid "Only show blocked contacts" msgid "Only show blocked contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:331 src/Module/Contact.php:378 #: src/Module/Contact.php:333 src/Module/Contact.php:380
#: src/Object/Post.php:339 #: src/Object/Post.php:339
msgid "Ignored" msgid "Ignored"
msgstr "" msgstr ""
#: src/Module/Contact.php:334 #: src/Module/Contact.php:336
msgid "Only show ignored contacts" msgid "Only show ignored contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:339 src/Module/Contact.php:379 #: src/Module/Contact.php:341 src/Module/Contact.php:381
msgid "Archived" msgid "Archived"
msgstr "" msgstr ""
#: src/Module/Contact.php:342 #: src/Module/Contact.php:344
msgid "Only show archived contacts" msgid "Only show archived contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:347 src/Module/Contact.php:377 #: src/Module/Contact.php:349 src/Module/Contact.php:379
msgid "Hidden" msgid "Hidden"
msgstr "" msgstr ""
#: src/Module/Contact.php:350 #: src/Module/Contact.php:352
msgid "Only show hidden contacts" msgid "Only show hidden contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:358 #: src/Module/Contact.php:360
msgid "Organize your contact groups" msgid "Organize your contact groups"
msgstr "" msgstr ""
#: src/Module/Contact.php:390 #: src/Module/Contact.php:392
msgid "Search your contacts" msgid "Search your contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:391 src/Module/Search/Index.php:207 #: src/Module/Contact.php:393 src/Module/Search/Index.php:207
#, php-format #, php-format
msgid "Results for: %s" msgid "Results for: %s"
msgstr "" msgstr ""
#: src/Module/Contact.php:398 #: src/Module/Contact.php:400
msgid "Update" msgid "Update"
msgstr "" msgstr ""
#: src/Module/Contact.php:400 src/Module/Contact/Profile.php:349 #: src/Module/Contact.php:402 src/Module/Contact/Profile.php:349
#: src/Module/Contact/Profile.php:457 #: src/Module/Contact/Profile.php:457
msgid "Unignore" msgid "Unignore"
msgstr "" msgstr ""
#: src/Module/Contact.php:402 #: src/Module/Contact.php:404
msgid "Batch Actions" msgid "Batch Actions"
msgstr "" msgstr ""
#: src/Module/Contact.php:437 #: src/Module/Contact.php:439
msgid "Conversations started by this contact" msgid "Conversations started by this contact"
msgstr "" msgstr ""
#: src/Module/Contact.php:442 #: src/Module/Contact.php:444
msgid "Posts and Comments" msgid "Posts and Comments"
msgstr "" msgstr ""
#: src/Module/Contact.php:453 #: src/Module/Contact.php:455
msgid "Posts containing media objects" msgid "Posts containing media objects"
msgstr "" msgstr ""
#: src/Module/Contact.php:468 #: src/Module/Contact.php:470
msgid "View all known contacts" msgid "View all known contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:478 #: src/Module/Contact.php:480
msgid "Advanced Contact Settings" msgid "Advanced Contact Settings"
msgstr "" msgstr ""
#: src/Module/Contact.php:512 #: src/Module/Contact.php:514
msgid "Mutual Friendship" msgid "Mutual Friendship"
msgstr "" msgstr ""
#: src/Module/Contact.php:516 #: src/Module/Contact.php:518
msgid "is a fan of yours" msgid "is a fan of yours"
msgstr "" msgstr ""
#: src/Module/Contact.php:520 #: src/Module/Contact.php:522
msgid "you are a fan of" msgid "you are a fan of"
msgstr "" msgstr ""
#: src/Module/Contact.php:538 #: src/Module/Contact.php:540
msgid "Pending outgoing contact request" msgid "Pending outgoing contact request"
msgstr "" msgstr ""
#: src/Module/Contact.php:540 #: src/Module/Contact.php:542
msgid "Pending incoming contact request" msgid "Pending incoming contact request"
msgstr "" msgstr ""
#: src/Module/Contact.php:553 src/Module/Contact/Profile.php:334 #: src/Module/Contact.php:555 src/Module/Contact/Profile.php:334
#, php-format #, php-format
msgid "Visit %s's profile [%s]" msgid "Visit %s's profile [%s]"
msgstr "" msgstr ""
@ -7256,50 +7256,50 @@ msgstr ""
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:61 #: src/Module/Conversation/Community.php:76
msgid "" msgid ""
"This community stream shows all public posts received by this node. They may " "This community stream shows all public posts received by this node. They may "
"not reflect the opinions of this nodes users." "not reflect the opinions of this nodes users."
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:76 #: src/Module/Conversation/Community.php:89
msgid "Local Community" msgid "Local Community"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:79 #: src/Module/Conversation/Community.php:92
msgid "Posts from local users on this server" msgid "Posts from local users on this server"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:87 #: src/Module/Conversation/Community.php:100
msgid "Global Community" msgid "Global Community"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:90 #: src/Module/Conversation/Community.php:103
msgid "Posts from users of the whole federated network" msgid "Posts from users of the whole federated network"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:123 #: src/Module/Conversation/Community.php:136
msgid "Own Contacts" msgid "Own Contacts"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:127 #: src/Module/Conversation/Community.php:140
msgid "Include" msgid "Include"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:128 #: src/Module/Conversation/Community.php:141
msgid "Hide" msgid "Hide"
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:145 src/Module/Search/Index.php:152 #: src/Module/Conversation/Community.php:158 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194 #: src/Module/Search/Index.php:194
msgid "No results." msgid "No results."
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:201 #: src/Module/Conversation/Community.php:214
msgid "Community option not available." msgid "Community option not available."
msgstr "" msgstr ""
#: src/Module/Conversation/Community.php:217 #: src/Module/Conversation/Community.php:230
msgid "Not available." msgid "Not available."
msgstr "" msgstr ""
@ -8094,40 +8094,46 @@ msgid ""
"important, please visit http://friendi.ca" "important, please visit http://friendi.ca"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:50 #: src/Module/Item/Compose.php:85
msgid "Please enter a post body." msgid "Please enter a post body."
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:63 #: src/Module/Item/Compose.php:98
msgid "This feature is only available with the frio theme." msgid "This feature is only available with the frio theme."
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:90 #: src/Module/Item/Compose.php:122
msgid "Compose new personal note" msgid "Compose new personal note"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:99 #: src/Module/Item/Compose.php:131
msgid "Compose new post" msgid "Compose new post"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:153 #: src/Module/Item/Compose.php:187
msgid "Visibility" msgid "Visibility"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:174 #: src/Module/Item/Compose.php:201
msgid "Clear the location" msgid "Clear the location"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:175 #: src/Module/Item/Compose.php:202
msgid "Location services are unavailable on your device" msgid "Location services are unavailable on your device"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:176 #: src/Module/Item/Compose.php:203
msgid "" msgid ""
"Location services are disabled. Please check the website's permissions on " "Location services are disabled. Please check the website's permissions on "
"your device" "your device"
msgstr "" msgstr ""
#: src/Module/Item/Compose.php:209
msgid ""
"You can make this page always open when you use the New Post button in the "
"<a href=\"/settings/display\">Theme Customization settings</a>."
msgstr ""
#: src/Module/Item/Follow.php:52 #: src/Module/Item/Follow.php:52
msgid "Unable to follow this item." msgid "Unable to follow this item."
msgstr "" msgstr ""
@ -8404,19 +8410,19 @@ msgstr ""
#: src/Module/Profile/Profile.php:326 src/Module/Profile/Profile.php:329 #: src/Module/Profile/Profile.php:326 src/Module/Profile/Profile.php:329
#: src/Module/Profile/Status.php:66 src/Module/Profile/Status.php:69 #: src/Module/Profile/Status.php:66 src/Module/Profile/Status.php:69
#: src/Protocol/Feed.php:1025 src/Protocol/OStatus.php:1046 #: src/Protocol/Feed.php:1026 src/Protocol/OStatus.php:1046
#, php-format #, php-format
msgid "%s's timeline" msgid "%s's timeline"
msgstr "" msgstr ""
#: src/Module/Profile/Profile.php:327 src/Module/Profile/Status.php:67 #: src/Module/Profile/Profile.php:327 src/Module/Profile/Status.php:67
#: src/Protocol/Feed.php:1029 src/Protocol/OStatus.php:1051 #: src/Protocol/Feed.php:1030 src/Protocol/OStatus.php:1051
#, php-format #, php-format
msgid "%s's posts" msgid "%s's posts"
msgstr "" msgstr ""
#: src/Module/Profile/Profile.php:328 src/Module/Profile/Status.php:68 #: src/Module/Profile/Profile.php:328 src/Module/Profile/Status.php:68
#: src/Protocol/Feed.php:1032 src/Protocol/OStatus.php:1055 #: src/Protocol/Feed.php:1033 src/Protocol/OStatus.php:1055
#, php-format #, php-format
msgid "%s's comments" msgid "%s's comments"
msgstr "" msgstr ""
@ -9456,7 +9462,7 @@ msgid "Content Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Display.php:205 view/theme/duepuntozero/config.php:70 #: src/Module/Settings/Display.php:205 view/theme/duepuntozero/config.php:70
#: view/theme/frio/config.php:161 view/theme/quattro/config.php:72 #: view/theme/frio/config.php:172 view/theme/quattro/config.php:72
#: view/theme/vier/config.php:120 #: view/theme/vier/config.php:120
msgid "Theme settings" msgid "Theme settings"
msgstr "" msgstr ""
@ -11119,113 +11125,124 @@ msgstr ""
msgid "Variations" msgid "Variations"
msgstr "" msgstr ""
#: view/theme/frio/config.php:142 #: view/theme/frio/config.php:153
msgid "Light (Accented)" msgid "Light (Accented)"
msgstr "" msgstr ""
#: view/theme/frio/config.php:143 #: view/theme/frio/config.php:154
msgid "Dark (Accented)" msgid "Dark (Accented)"
msgstr "" msgstr ""
#: view/theme/frio/config.php:144 #: view/theme/frio/config.php:155
msgid "Black (Accented)" msgid "Black (Accented)"
msgstr "" msgstr ""
#: view/theme/frio/config.php:156 #: view/theme/frio/config.php:167
msgid "Note" msgid "Note"
msgstr "" msgstr ""
#: view/theme/frio/config.php:156 #: view/theme/frio/config.php:167
msgid "Check image permissions if all users are allowed to see the image" msgid "Check image permissions if all users are allowed to see the image"
msgstr "" msgstr ""
#: view/theme/frio/config.php:162 #: view/theme/frio/config.php:173
msgid "Custom" msgid "Custom"
msgstr "" msgstr ""
#: view/theme/frio/config.php:163 #: view/theme/frio/config.php:174
msgid "Legacy" msgid "Legacy"
msgstr "" msgstr ""
#: view/theme/frio/config.php:164 #: view/theme/frio/config.php:175
msgid "Accented" msgid "Accented"
msgstr "" msgstr ""
#: view/theme/frio/config.php:165 #: view/theme/frio/config.php:176
msgid "Select color scheme" msgid "Select color scheme"
msgstr "" msgstr ""
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Select scheme accent" msgid "Select scheme accent"
msgstr "" msgstr ""
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Blue" msgid "Blue"
msgstr "" msgstr ""
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Red" msgid "Red"
msgstr "" msgstr ""
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Purple" msgid "Purple"
msgstr "" msgstr ""
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Green" msgid "Green"
msgstr "" msgstr ""
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Pink" msgid "Pink"
msgstr "" msgstr ""
#: view/theme/frio/config.php:167 #: view/theme/frio/config.php:178
msgid "Copy or paste schemestring" msgid "Copy or paste schemestring"
msgstr "" msgstr ""
#: view/theme/frio/config.php:167 #: view/theme/frio/config.php:178
msgid "" msgid ""
"You can copy this string to share your theme with others. Pasting here " "You can copy this string to share your theme with others. Pasting here "
"applies the schemestring" "applies the schemestring"
msgstr "" msgstr ""
#: view/theme/frio/config.php:168 #: view/theme/frio/config.php:179
msgid "Navigation bar background color" msgid "Navigation bar background color"
msgstr "" msgstr ""
#: view/theme/frio/config.php:169 #: view/theme/frio/config.php:180
msgid "Navigation bar icon color " msgid "Navigation bar icon color "
msgstr "" msgstr ""
#: view/theme/frio/config.php:170 #: view/theme/frio/config.php:181
msgid "Link color" msgid "Link color"
msgstr "" msgstr ""
#: view/theme/frio/config.php:171 #: view/theme/frio/config.php:182
msgid "Set the background color" msgid "Set the background color"
msgstr "" msgstr ""
#: view/theme/frio/config.php:172 #: view/theme/frio/config.php:183
msgid "Content background opacity" msgid "Content background opacity"
msgstr "" msgstr ""
#: view/theme/frio/config.php:173 #: view/theme/frio/config.php:184
msgid "Set the background image" msgid "Set the background image"
msgstr "" msgstr ""
#: view/theme/frio/config.php:174 #: view/theme/frio/config.php:185
msgid "Background image style" msgid "Background image style"
msgstr "" msgstr ""
#: view/theme/frio/config.php:179 #: view/theme/frio/config.php:188
msgid "Always open Compose page"
msgstr ""
#: view/theme/frio/config.php:188
msgid ""
"The New Post button always open the <a href=\"/compose\">Compose page</a> "
"instead of the modal form. When this is disabled, the Compose page can be "
"accessed with a middle click on the link or from the modal."
msgstr ""
#: view/theme/frio/config.php:192
msgid "Login page background image" msgid "Login page background image"
msgstr "" msgstr ""
#: view/theme/frio/config.php:183 #: view/theme/frio/config.php:196
msgid "Login page background color" msgid "Login page background color"
msgstr "" msgstr ""
#: view/theme/frio/config.php:183 #: view/theme/frio/config.php:196
msgid "Leave background image and color empty for theme defaults" msgid "Leave background image and color empty for theme defaults"
msgstr "" msgstr ""

View file

@ -49,7 +49,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: friendica\n" "Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-08 12:31-0400\n" "POT-Creation-Date: 2022-10-16 12:38-0400\n"
"PO-Revision-Date: 2011-05-05 10:19+0000\n" "PO-Revision-Date: 2011-05-05 10:19+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2016-2022\n" "Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2016-2022\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
@ -86,8 +86,8 @@ msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt."
#: mod/cal.php:243 mod/events.php:374 src/Content/Nav.php:196 #: mod/cal.php:243 mod/events.php:374 src/Content/Nav.php:196
#: src/Content/Nav.php:260 src/Module/BaseProfile.php:84 #: src/Content/Nav.php:260 src/Module/BaseProfile.php:84
#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:234 #: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:240
#: view/theme/frio/theme.php:238 #: view/theme/frio/theme.php:244
msgid "Events" msgid "Events"
msgstr "Veranstaltungen" msgstr "Veranstaltungen"
@ -108,17 +108,17 @@ msgid "today"
msgstr "Heute" msgstr "Heute"
#: mod/cal.php:250 mod/events.php:384 src/Model/Event.php:461 #: mod/cal.php:250 mod/events.php:384 src/Model/Event.php:461
#: src/Util/Temporal.php:334 #: src/Util/Temporal.php:338
msgid "month" msgid "month"
msgstr "Monat" msgstr "Monat"
#: mod/cal.php:251 mod/events.php:385 src/Model/Event.php:462 #: mod/cal.php:251 mod/events.php:385 src/Model/Event.php:462
#: src/Util/Temporal.php:335 #: src/Util/Temporal.php:339
msgid "week" msgid "week"
msgstr "Woche" msgstr "Woche"
#: mod/cal.php:252 mod/events.php:386 src/Model/Event.php:463 #: mod/cal.php:252 mod/events.php:386 src/Model/Event.php:463
#: src/Util/Temporal.php:336 #: src/Util/Temporal.php:340
msgid "day" msgid "day"
msgstr "Tag" msgstr "Tag"
@ -160,7 +160,7 @@ msgid "The feed for this item is unavailable."
msgstr "Der Feed für diesen Beitrag ist nicht verfügbar." msgstr "Der Feed für diesen Beitrag ist nicht verfügbar."
#: mod/editpost.php:38 mod/events.php:217 mod/follow.php:56 mod/follow.php:130 #: mod/editpost.php:38 mod/events.php:217 mod/follow.php:56 mod/follow.php:130
#: mod/item.php:181 mod/item.php:186 mod/item.php:870 mod/message.php:69 #: mod/item.php:181 mod/item.php:186 mod/item.php:865 mod/message.php:69
#: mod/message.php:111 mod/notes.php:44 mod/ostatus_subscribe.php:33 #: mod/message.php:111 mod/notes.php:44 mod/ostatus_subscribe.php:33
#: mod/photos.php:160 mod/photos.php:891 mod/repair_ostatus.php:31 #: mod/photos.php:160 mod/photos.php:891 mod/repair_ostatus.php:31
#: mod/settings.php:40 mod/settings.php:50 mod/settings.php:156 #: mod/settings.php:40 mod/settings.php:50 mod/settings.php:156
@ -179,8 +179,8 @@ msgstr "Der Feed für diesen Beitrag ist nicht verfügbar."
#: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56 #: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56
#: src/Module/Register.php:77 src/Module/Register.php:90 #: src/Module/Register.php:77 src/Module/Register.php:90
#: src/Module/Register.php:206 src/Module/Register.php:245 #: src/Module/Register.php:206 src/Module/Register.php:245
#: src/Module/Search/Directory.php:37 src/Module/Settings/Account.php:49 #: src/Module/Search/Directory.php:37 src/Module/Settings/Account.php:50
#: src/Module/Settings/Account.php:409 src/Module/Settings/Delegation.php:42 #: src/Module/Settings/Account.php:410 src/Module/Settings/Delegation.php:42
#: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:42 #: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:42
#: src/Module/Settings/Display.php:120 #: src/Module/Settings/Display.php:120
#: src/Module/Settings/Profile/Photo/Crop.php:166 #: src/Module/Settings/Profile/Photo/Crop.php:166
@ -206,7 +206,7 @@ msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: mod/editpost.php:92 mod/photos.php:1338 src/Content/Conversation.php:338 #: mod/editpost.php:92 mod/photos.php:1338 src/Content/Conversation.php:338
#: src/Module/Contact/Poke.php:176 src/Object/Post.php:993 #: src/Object/Post.php:993
msgid "Loading..." msgid "Loading..."
msgstr "lädt..." msgstr "lädt..."
@ -253,7 +253,7 @@ msgid "audio link"
msgstr "Audio-Link" msgstr "Audio-Link"
#: mod/editpost.php:103 src/Content/Conversation.php:352 #: mod/editpost.php:103 src/Content/Conversation.php:352
#: src/Module/Item/Compose.php:173 #: src/Module/Item/Compose.php:200
msgid "Set your location" msgid "Set your location"
msgstr "Deinen Standort festlegen" msgstr "Deinen Standort festlegen"
@ -271,8 +271,8 @@ msgstr "Ort löschen"
#: mod/editpost.php:107 mod/message.php:200 mod/message.php:358 #: mod/editpost.php:107 mod/message.php:200 mod/message.php:358
#: mod/photos.php:1489 mod/wallmessage.php:142 #: mod/photos.php:1489 mod/wallmessage.php:142
#: src/Content/Conversation.php:368 src/Content/Conversation.php:713 #: src/Content/Conversation.php:368 src/Content/Conversation.php:714
#: src/Module/Item/Compose.php:177 src/Object/Post.php:538 #: src/Module/Item/Compose.php:204 src/Object/Post.php:538
msgid "Please wait" msgid "Please wait"
msgstr "Bitte warten" msgstr "Bitte warten"
@ -289,12 +289,12 @@ msgid "Public post"
msgstr "Öffentlicher Beitrag" msgstr "Öffentlicher Beitrag"
#: mod/editpost.php:120 src/Content/Conversation.php:357 #: mod/editpost.php:120 src/Content/Conversation.php:357
#: src/Module/Item/Compose.php:178 #: src/Module/Item/Compose.php:205
msgid "Set title" msgid "Set title"
msgstr "Titel setzen" msgstr "Titel setzen"
#: mod/editpost.php:122 src/Content/Conversation.php:359 #: mod/editpost.php:122 src/Content/Conversation.php:359
#: src/Module/Item/Compose.php:179 #: src/Module/Item/Compose.php:206
msgid "Categories (comma-separated list)" msgid "Categories (comma-separated list)"
msgstr "Kategorien (kommasepariert)" msgstr "Kategorien (kommasepariert)"
@ -304,11 +304,11 @@ msgstr "Z.B.: bob@example.com, mary@example.com"
#: mod/editpost.php:128 mod/events.php:513 mod/photos.php:1337 #: mod/editpost.php:128 mod/events.php:513 mod/photos.php:1337
#: mod/photos.php:1393 mod/photos.php:1467 src/Content/Conversation.php:383 #: mod/photos.php:1393 mod/photos.php:1467 src/Content/Conversation.php:383
#: src/Module/Item/Compose.php:172 src/Object/Post.php:1003 #: src/Module/Item/Compose.php:199 src/Object/Post.php:1003
msgid "Preview" msgid "Preview"
msgstr "Vorschau" msgstr "Vorschau"
#: mod/editpost.php:130 mod/fbrowser.php:118 mod/fbrowser.php:145 #: mod/editpost.php:130 mod/fbrowser.php:119 mod/fbrowser.php:146
#: mod/follow.php:144 mod/photos.php:1004 mod/photos.php:1105 mod/tagrm.php:35 #: mod/follow.php:144 mod/photos.php:1004 mod/photos.php:1105 mod/tagrm.php:35
#: mod/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:386 #: mod/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:386
#: src/Module/Contact/Revoke.php:108 src/Module/RemoteFollow.php:127 #: src/Module/Contact/Revoke.php:108 src/Module/RemoteFollow.php:127
@ -317,37 +317,37 @@ msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: mod/editpost.php:134 src/Content/Conversation.php:343 #: mod/editpost.php:134 src/Content/Conversation.php:343
#: src/Module/Item/Compose.php:163 src/Object/Post.php:994 #: src/Module/Item/Compose.php:190 src/Object/Post.php:994
msgid "Bold" msgid "Bold"
msgstr "Fett" msgstr "Fett"
#: mod/editpost.php:135 src/Content/Conversation.php:344 #: mod/editpost.php:135 src/Content/Conversation.php:344
#: src/Module/Item/Compose.php:164 src/Object/Post.php:995 #: src/Module/Item/Compose.php:191 src/Object/Post.php:995
msgid "Italic" msgid "Italic"
msgstr "Kursiv" msgstr "Kursiv"
#: mod/editpost.php:136 src/Content/Conversation.php:345 #: mod/editpost.php:136 src/Content/Conversation.php:345
#: src/Module/Item/Compose.php:165 src/Object/Post.php:996 #: src/Module/Item/Compose.php:192 src/Object/Post.php:996
msgid "Underline" msgid "Underline"
msgstr "Unterstrichen" msgstr "Unterstrichen"
#: mod/editpost.php:137 src/Content/Conversation.php:346 #: mod/editpost.php:137 src/Content/Conversation.php:346
#: src/Module/Item/Compose.php:166 src/Object/Post.php:997 #: src/Module/Item/Compose.php:193 src/Object/Post.php:997
msgid "Quote" msgid "Quote"
msgstr "Zitat" msgstr "Zitat"
#: mod/editpost.php:138 src/Content/Conversation.php:347 #: mod/editpost.php:138 src/Content/Conversation.php:347
#: src/Module/Item/Compose.php:167 src/Object/Post.php:998 #: src/Module/Item/Compose.php:194 src/Object/Post.php:998
msgid "Code" msgid "Code"
msgstr "Code" msgstr "Code"
#: mod/editpost.php:139 src/Content/Conversation.php:349 #: mod/editpost.php:139 src/Content/Conversation.php:349
#: src/Module/Item/Compose.php:169 src/Object/Post.php:1000 #: src/Module/Item/Compose.php:196 src/Object/Post.php:1000
msgid "Link" msgid "Link"
msgstr "Link" msgstr "Link"
#: mod/editpost.php:140 src/Content/Conversation.php:350 #: mod/editpost.php:140 src/Content/Conversation.php:350
#: src/Module/Item/Compose.php:170 src/Object/Post.php:1001 #: src/Module/Item/Compose.php:197 src/Object/Post.php:1001
msgid "Link or Media" msgid "Link or Media"
msgstr "Link oder Mediendatei" msgstr "Link oder Mediendatei"
@ -449,16 +449,16 @@ msgstr "Veranstaltung teilen"
#: mod/photos.php:921 mod/photos.php:1025 mod/photos.php:1295 #: mod/photos.php:921 mod/photos.php:1025 mod/photos.php:1295
#: mod/photos.php:1336 mod/photos.php:1392 mod/photos.php:1466 #: mod/photos.php:1336 mod/photos.php:1392 mod/photos.php:1466
#: src/Module/Admin/Item/Source.php:60 src/Module/Contact/Advanced.php:132 #: src/Module/Admin/Item/Source.php:60 src/Module/Contact/Advanced.php:132
#: src/Module/Contact/Poke.php:177 src/Module/Contact/Profile.php:327 #: src/Module/Contact/Profile.php:327
#: src/Module/Debug/ActivityPubConversion.php:140 #: src/Module/Debug/ActivityPubConversion.php:140
#: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64 #: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64
#: src/Module/Debug/Probe.php:54 src/Module/Debug/WebFinger.php:51 #: src/Module/Debug/Probe.php:54 src/Module/Debug/WebFinger.php:51
#: src/Module/Delegation.php:148 src/Module/FriendSuggest.php:144 #: src/Module/Delegation.php:148 src/Module/FriendSuggest.php:144
#: src/Module/Install.php:252 src/Module/Install.php:294 #: src/Module/Install.php:252 src/Module/Install.php:294
#: src/Module/Install.php:331 src/Module/Invite.php:178 #: src/Module/Install.php:331 src/Module/Invite.php:178
#: src/Module/Item/Compose.php:162 src/Module/Profile/Profile.php:247 #: src/Module/Item/Compose.php:189 src/Module/Profile/Profile.php:247
#: src/Module/Settings/Profile/Index.php:222 src/Object/Post.php:992 #: src/Module/Settings/Profile/Index.php:222 src/Object/Post.php:992
#: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160 #: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:171
#: view/theme/quattro/config.php:71 view/theme/vier/config.php:119 #: view/theme/quattro/config.php:71 view/theme/vier/config.php:119
msgid "Submit" msgid "Submit"
msgstr "Senden" msgstr "Senden"
@ -467,7 +467,7 @@ msgstr "Senden"
msgid "Basic" msgid "Basic"
msgstr "Allgemein" msgstr "Allgemein"
#: mod/events.php:517 src/Module/Admin/Site.php:441 src/Module/Contact.php:474 #: mod/events.php:517 src/Module/Admin/Site.php:441 src/Module/Contact.php:477
#: src/Module/Profile/Profile.php:249 #: src/Module/Profile/Profile.php:249
msgid "Advanced" msgid "Advanced"
msgstr "Erweitert" msgstr "Erweitert"
@ -477,16 +477,16 @@ msgid "Failed to remove event"
msgstr "Entfernen der Veranstaltung fehlgeschlagen" msgstr "Entfernen der Veranstaltung fehlgeschlagen"
#: mod/fbrowser.php:61 src/Content/Nav.php:194 src/Module/BaseProfile.php:64 #: mod/fbrowser.php:61 src/Content/Nav.php:194 src/Module/BaseProfile.php:64
#: view/theme/frio/theme.php:232 #: view/theme/frio/theme.php:238
msgid "Photos" msgid "Photos"
msgstr "Bilder" msgstr "Bilder"
#: mod/fbrowser.php:120 mod/fbrowser.php:147 #: mod/fbrowser.php:121 mod/fbrowser.php:148
#: src/Module/Settings/Profile/Photo/Index.php:129 #: src/Module/Settings/Profile/Photo/Index.php:129
msgid "Upload" msgid "Upload"
msgstr "Hochladen" msgstr "Hochladen"
#: mod/fbrowser.php:142 #: mod/fbrowser.php:143
msgid "Files" msgid "Files"
msgstr "Dateien" msgstr "Dateien"
@ -510,8 +510,8 @@ msgstr "Diaspora-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zuge
msgid "OStatus support is disabled. Contact can't be added." msgid "OStatus support is disabled. Contact can't be added."
msgstr "OStatus-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden." msgstr "OStatus-Unterstützung ist nicht aktiviert. Der Kontakt kann nicht zugefügt werden."
#: mod/follow.php:138 src/Content/Item.php:459 src/Content/Widget.php:80 #: mod/follow.php:138 src/Content/Item.php:400 src/Content/Widget.php:80
#: src/Model/Contact.php:1114 src/Model/Contact.php:1126 #: src/Model/Contact.php:1169 src/Model/Contact.php:1180
#: view/theme/vier/theme.php:181 #: view/theme/vier/theme.php:181
msgid "Connect/Follow" msgid "Connect/Follow"
msgstr "Verbinden/Folgen" msgstr "Verbinden/Folgen"
@ -548,7 +548,7 @@ msgid "Add a personal note:"
msgstr "Eine persönliche Notiz beifügen:" msgstr "Eine persönliche Notiz beifügen:"
#: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59 #: mod/follow.php:163 mod/unfollow.php:109 src/Module/BaseProfile.php:59
#: src/Module/Contact.php:444 #: src/Module/Contact.php:447
msgid "Status Messages and Posts" msgid "Status Messages and Posts"
msgstr "Statusnachrichten und Beiträge" msgstr "Statusnachrichten und Beiträge"
@ -564,19 +564,19 @@ msgstr "Konnte den Originalbeitrag nicht finden."
msgid "Empty post discarded." msgid "Empty post discarded."
msgstr "Leerer Beitrag wurde verworfen." msgstr "Leerer Beitrag wurde verworfen."
#: mod/item.php:682 #: mod/item.php:677
msgid "Post updated." msgid "Post updated."
msgstr "Beitrag aktualisiert." msgstr "Beitrag aktualisiert."
#: mod/item.php:692 mod/item.php:697 #: mod/item.php:687 mod/item.php:692
msgid "Item wasn't stored." msgid "Item wasn't stored."
msgstr "Eintrag wurde nicht gespeichert" msgstr "Eintrag wurde nicht gespeichert"
#: mod/item.php:708 #: mod/item.php:703
msgid "Item couldn't be fetched." msgid "Item couldn't be fetched."
msgstr "Eintrag konnte nicht geholt werden." msgstr "Eintrag konnte nicht geholt werden."
#: mod/item.php:848 src/Module/Admin/Themes/Details.php:39 #: mod/item.php:843 src/Module/Admin/Themes/Details.php:39
#: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:42 #: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:42
#: src/Module/Debug/ItemBody.php:57 #: src/Module/Debug/ItemBody.php:57
msgid "Item not found." msgid "Item not found."
@ -754,7 +754,7 @@ msgstr "Konnte Nachrichten nicht abrufen."
msgid "Discard" msgid "Discard"
msgstr "Verwerfen" msgstr "Verwerfen"
#: mod/message.php:133 src/Content/Nav.php:285 view/theme/frio/theme.php:239 #: mod/message.php:133 src/Content/Nav.php:285 view/theme/frio/theme.php:245
msgid "Messages" msgid "Messages"
msgstr "Nachrichten" msgstr "Nachrichten"
@ -1108,7 +1108,7 @@ msgid "Rotate CCW (left)"
msgstr "Drehen EUS (links)" msgstr "Drehen EUS (links)"
#: mod/photos.php:1333 mod/photos.php:1389 mod/photos.php:1463 #: mod/photos.php:1333 mod/photos.php:1389 mod/photos.php:1463
#: src/Module/Contact.php:544 src/Module/Item/Compose.php:160 #: src/Module/Contact.php:547 src/Module/Item/Compose.php:188
#: src/Object/Post.php:989 #: src/Object/Post.php:989
msgid "This is you" msgid "This is you"
msgstr "Das bist du" msgstr "Das bist du"
@ -1118,12 +1118,12 @@ msgstr "Das bist du"
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: mod/photos.php:1424 src/Content/Conversation.php:629 #: mod/photos.php:1424 src/Content/Conversation.php:630
#: src/Object/Post.php:256 #: src/Object/Post.php:256
msgid "Select" msgid "Select"
msgstr "Auswählen" msgstr "Auswählen"
#: mod/photos.php:1425 mod/settings.php:350 src/Content/Conversation.php:630 #: mod/photos.php:1425 mod/settings.php:350 src/Content/Conversation.php:631
#: src/Module/Admin/Users/Active.php:139 #: src/Module/Admin/Users/Active.php:139
#: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153 #: src/Module/Admin/Users/Blocked.php:140 src/Module/Admin/Users/Index.php:153
msgid "Delete" msgid "Delete"
@ -1170,7 +1170,7 @@ msgstr "Ungültige Anfrage."
msgid "Contact not found." msgid "Contact not found."
msgstr "Kontakt nicht gefunden." msgstr "Kontakt nicht gefunden."
#: mod/removeme.php:65 src/Navigation/Notifications/Repository/Notify.php:483 #: mod/removeme.php:65 src/Navigation/Notifications/Repository/Notify.php:467
msgid "[Friendica System Notify]" msgid "[Friendica System Notify]"
msgstr "[Friendica-Systembenachrichtigung]" msgstr "[Friendica-Systembenachrichtigung]"
@ -1247,8 +1247,8 @@ msgstr "Autorisierung entziehen"
#: mod/settings.php:352 src/Module/Admin/Addons/Index.php:69 #: mod/settings.php:352 src/Module/Admin/Addons/Index.php:69
#: src/Module/Admin/Features.php:87 src/Module/Admin/Logs/Settings.php:81 #: src/Module/Admin/Features.php:87 src/Module/Admin/Logs/Settings.php:81
#: src/Module/Admin/Site.php:436 src/Module/Admin/Themes/Index.php:113 #: src/Module/Admin/Site.php:436 src/Module/Admin/Themes/Index.php:113
#: src/Module/Admin/Tos.php:83 src/Module/Settings/Account.php:562 #: src/Module/Admin/Tos.php:83 src/Module/Settings/Account.php:563
#: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:193 #: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:201
msgid "Save Settings" msgid "Save Settings"
msgstr "Einstellungen speichern" msgstr "Einstellungen speichern"
@ -1452,15 +1452,15 @@ msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde,
msgid "Friend Suggestions" msgid "Friend Suggestions"
msgstr "Kontaktvorschläge" msgstr "Kontaktvorschläge"
#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2769 #: mod/tagger.php:78 src/Content/Item.php:300 src/Model/Item.php:2855
msgid "photo" msgid "photo"
msgstr "Foto" msgstr "Foto"
#: mod/tagger.php:78 src/Content/Item.php:348 src/Content/Item.php:358 #: mod/tagger.php:78 src/Content/Item.php:294 src/Content/Item.php:304
msgid "status" msgid "status"
msgstr "Status" msgstr "Status"
#: mod/tagger.php:111 src/Content/Item.php:368 #: mod/tagger.php:111 src/Content/Item.php:314
#, php-format #, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s" msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt" msgstr "%1$s hat %2$ss %3$s mit %4$s getaggt"
@ -1598,17 +1598,17 @@ msgstr "Es wurde kein Konfigurationswert für das systemweite Theme gesetzt."
msgid "Apologies but the website is unavailable at the moment." msgid "Apologies but the website is unavailable at the moment."
msgstr "Entschuldigung, aber die Webseite ist derzeit nicht erreichbar." msgstr "Entschuldigung, aber die Webseite ist derzeit nicht erreichbar."
#: src/App/Page.php:276 #: src/App/Page.php:281
msgid "Delete this item?" msgid "Delete this item?"
msgstr "Diesen Beitrag löschen?" msgstr "Diesen Beitrag löschen?"
#: src/App/Page.php:277 #: src/App/Page.php:282
msgid "" msgid ""
"Block this author? They won't be able to follow you nor see your public " "Block this author? They won't be able to follow you nor see your public "
"posts, and you won't be able to see their posts and their notifications." "posts, and you won't be able to see their posts and their notifications."
msgstr "Soll dieser Autor geblockt werden? Sie werden nicht in der Lage sein, dir zu folgen oder deine öffentlichen Beiträge zu sehen. Außerdem wirst du nicht in der Lage sein ihre Beiträge und Benachrichtigungen zu lesen." msgstr "Soll dieser Autor geblockt werden? Sie werden nicht in der Lage sein, dir zu folgen oder deine öffentlichen Beiträge zu sehen. Außerdem wirst du nicht in der Lage sein ihre Beiträge und Benachrichtigungen zu lesen."
#: src/App/Page.php:347 #: src/App/Page.php:352
msgid "toggle mobile" msgid "toggle mobile"
msgstr "mobile Ansicht umschalten" msgstr "mobile Ansicht umschalten"
@ -1636,18 +1636,18 @@ msgid "All contacts"
msgstr "Alle Kontakte" msgstr "Alle Kontakte"
#: src/BaseModule.php:424 src/Content/Widget.php:235 src/Core/ACL.php:194 #: src/BaseModule.php:424 src/Content/Widget.php:235 src/Core/ACL.php:194
#: src/Module/Contact.php:367 src/Module/PermissionTooltip.php:122 #: src/Module/Contact.php:370 src/Module/PermissionTooltip.php:122
#: src/Module/PermissionTooltip.php:144 #: src/Module/PermissionTooltip.php:144
msgid "Followers" msgid "Followers"
msgstr "Folgende" msgstr "Folgende"
#: src/BaseModule.php:429 src/Content/Widget.php:236 #: src/BaseModule.php:429 src/Content/Widget.php:236
#: src/Module/Contact.php:368 #: src/Module/Contact.php:371
msgid "Following" msgid "Following"
msgstr "Gefolgte" msgstr "Gefolgte"
#: src/BaseModule.php:434 src/Content/Widget.php:237 #: src/BaseModule.php:434 src/Content/Widget.php:237
#: src/Module/Contact.php:369 #: src/Module/Contact.php:372
msgid "Mutual friends" msgid "Mutual friends"
msgstr "Beidseitige Freundschaft" msgstr "Beidseitige Freundschaft"
@ -1687,63 +1687,63 @@ msgstr "Für die URL (%s) konnte kein Kontakt gefunden werden"
msgid "The contact has been blocked from the node" msgid "The contact has been blocked from the node"
msgstr "Der Kontakt wurde von diesem Knoten geblockt" msgstr "Der Kontakt wurde von diesem Knoten geblockt"
#: src/Console/MergeContacts.php:74 #: src/Console/MergeContacts.php:75
#, php-format #, php-format
msgid "%d %s, %d duplicates." msgid "%d %s, %d duplicates."
msgstr "%d %s, Duplikat %d." msgstr "%d %s, Duplikat %d."
#: src/Console/MergeContacts.php:77 #: src/Console/MergeContacts.php:78
#, php-format #, php-format
msgid "uri-id is empty for contact %s." msgid "uri-id is empty for contact %s."
msgstr "URI-ID ist leer für den Kontakt %s." msgstr "URI-ID ist leer für den Kontakt %s."
#: src/Console/MergeContacts.php:90 #: src/Console/MergeContacts.php:91
#, php-format #, php-format
msgid "No valid first contact found for uri-id %d." msgid "No valid first contact found for uri-id %d."
msgstr "Kein gültiger erster Kontakt für die url-id %d gefunden." msgstr "Kein gültiger erster Kontakt für die url-id %d gefunden."
#: src/Console/MergeContacts.php:101 #: src/Console/MergeContacts.php:102
#, php-format #, php-format
msgid "Wrong duplicate found for uri-id %d in %d (url: %s != %s)." msgid "Wrong duplicate found for uri-id %d in %d (url: %s != %s)."
msgstr "Falsches Dublikat für die URI-ID %d in %d gefunden (URI: %s != %s)." msgstr "Falsches Dublikat für die URI-ID %d in %d gefunden (URI: %s != %s)."
#: src/Console/MergeContacts.php:105 #: src/Console/MergeContacts.php:106
#, php-format #, php-format
msgid "Wrong duplicate found for uri-id %d in %d (nurl: %s != %s)." msgid "Wrong duplicate found for uri-id %d in %d (nurl: %s != %s)."
msgstr "Falsches Dublikat für die URI-ID %d in %d (nurl: %s != %s)." msgstr "Falsches Dublikat für die URI-ID %d in %d (nurl: %s != %s)."
#: src/Console/MergeContacts.php:141 #: src/Console/MergeContacts.php:142
#, php-format #, php-format
msgid "Deletion of id %d failed" msgid "Deletion of id %d failed"
msgstr "Löschung der ID %d fehlgeschlagen" msgstr "Löschung der ID %d fehlgeschlagen"
#: src/Console/MergeContacts.php:143 #: src/Console/MergeContacts.php:144
#, php-format #, php-format
msgid "Deletion of id %d was successful" msgid "Deletion of id %d was successful"
msgstr "Löschug der ID %d war erfolgreich" msgstr "Löschug der ID %d war erfolgreich"
#: src/Console/MergeContacts.php:149 #: src/Console/MergeContacts.php:150
#, php-format #, php-format
msgid "Updating \"%s\" in \"%s\" from %d to %d" msgid "Updating \"%s\" in \"%s\" from %d to %d"
msgstr "Aktualisieren \"%s\" nach \"%s\" von %d nach %d" msgstr "Aktualisieren \"%s\" nach \"%s\" von %d nach %d"
#: src/Console/MergeContacts.php:151 #: src/Console/MergeContacts.php:152
msgid " - found" msgid " - found"
msgstr "- gefunden" msgstr "- gefunden"
#: src/Console/MergeContacts.php:158 #: src/Console/MergeContacts.php:159
msgid " - failed" msgid " - failed"
msgstr "- fehlgeschlagen" msgstr "- fehlgeschlagen"
#: src/Console/MergeContacts.php:160 #: src/Console/MergeContacts.php:161
msgid " - success" msgid " - success"
msgstr "- Erfolg" msgstr "- Erfolg"
#: src/Console/MergeContacts.php:164 #: src/Console/MergeContacts.php:165
msgid " - deleted" msgid " - deleted"
msgstr "- gelöscht" msgstr "- gelöscht"
#: src/Console/MergeContacts.php:167 #: src/Console/MergeContacts.php:168
msgid " - done" msgid " - done"
msgstr "- erledigt" msgstr "- erledigt"
@ -1806,12 +1806,12 @@ msgid "Enter new password: "
msgstr "Neues Passwort eingeben:" msgstr "Neues Passwort eingeben:"
#: src/Console/User.php:210 src/Module/Security/PasswordTooLong.php:65 #: src/Console/User.php:210 src/Module/Security/PasswordTooLong.php:65
#: src/Module/Settings/Account.php:74 #: src/Module/Settings/Account.php:75
msgid "Password update failed. Please try again." msgid "Password update failed. Please try again."
msgstr "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal." msgstr "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."
#: src/Console/User.php:213 src/Module/Security/PasswordTooLong.php:68 #: src/Console/User.php:213 src/Module/Security/PasswordTooLong.php:68
#: src/Module/Settings/Account.php:77 #: src/Module/Settings/Account.php:78
msgid "Password changed." msgid "Password changed."
msgstr "Passwort geändert." msgstr "Passwort geändert."
@ -1990,7 +1990,7 @@ msgid "%s attends maybe."
msgstr "%s nimmt eventuell teil." msgstr "%s nimmt eventuell teil."
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260 #: src/Content/Conversation.php:222 src/Content/Conversation.php:260
#: src/Content/Conversation.php:873 #: src/Content/Conversation.php:874
#, php-format #, php-format
msgid "%s reshared this." msgid "%s reshared this."
msgstr "%s hat dies geteilt" msgstr "%s hat dies geteilt"
@ -2063,7 +2063,7 @@ msgstr "<span %1$s>%2$d Personen</span> haben dies geteilt"
msgid "Visible to <strong>everybody</strong>" msgid "Visible to <strong>everybody</strong>"
msgstr "Für <strong>jedermann</strong> sichtbar" msgstr "Für <strong>jedermann</strong> sichtbar"
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:171 #: src/Content/Conversation.php:308 src/Module/Item/Compose.php:198
#: src/Object/Post.php:1002 #: src/Object/Post.php:1002
msgid "Please enter a image/video/audio/webpage URL:" msgid "Please enter a image/video/audio/webpage URL:"
msgstr "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:" msgstr "Bitte gib eine Bild/Video/Audio/Webseiten-URL ein:"
@ -2084,7 +2084,7 @@ msgstr "Wo hältst du dich jetzt gerade auf?"
msgid "Delete item(s)?" msgid "Delete item(s)?"
msgstr "Einträge löschen?" msgstr "Einträge löschen?"
#: src/Content/Conversation.php:324 src/Module/Item/Compose.php:143 #: src/Content/Conversation.php:324 src/Module/Item/Compose.php:175
msgid "Created at" msgid "Created at"
msgstr "Erstellt am" msgstr "Erstellt am"
@ -2096,7 +2096,7 @@ msgstr "Neuer Beitrag"
msgid "Share" msgid "Share"
msgstr "Teilen" msgstr "Teilen"
#: src/Content/Conversation.php:348 src/Module/Item/Compose.php:168 #: src/Content/Conversation.php:348 src/Module/Item/Compose.php:195
#: src/Object/Post.php:999 #: src/Object/Post.php:999
msgid "Image" msgid "Image"
msgstr "Bild" msgstr "Bild"
@ -2105,119 +2105,119 @@ msgstr "Bild"
msgid "Video" msgid "Video"
msgstr "Video" msgstr "Video"
#: src/Content/Conversation.php:364 src/Module/Item/Compose.php:184 #: src/Content/Conversation.php:364 src/Module/Item/Compose.php:222
msgid "Scheduled at" msgid "Scheduled at"
msgstr "Geplant für" msgstr "Geplant für"
#: src/Content/Conversation.php:657 src/Object/Post.php:244 #: src/Content/Conversation.php:658 src/Object/Post.php:244
msgid "Pinned item" msgid "Pinned item"
msgstr "Angehefteter Beitrag" msgstr "Angehefteter Beitrag"
#: src/Content/Conversation.php:673 src/Object/Post.php:486 #: src/Content/Conversation.php:674 src/Object/Post.php:486
#: src/Object/Post.php:487 #: src/Object/Post.php:487
#, php-format #, php-format
msgid "View %s's profile @ %s" msgid "View %s's profile @ %s"
msgstr "Das Profil von %s auf %s betrachten." msgstr "Das Profil von %s auf %s betrachten."
#: src/Content/Conversation.php:686 src/Object/Post.php:474 #: src/Content/Conversation.php:687 src/Object/Post.php:474
msgid "Categories:" msgid "Categories:"
msgstr "Kategorien:" msgstr "Kategorien:"
#: src/Content/Conversation.php:687 src/Object/Post.php:475 #: src/Content/Conversation.php:688 src/Object/Post.php:475
msgid "Filed under:" msgid "Filed under:"
msgstr "Abgelegt unter:" msgstr "Abgelegt unter:"
#: src/Content/Conversation.php:695 src/Object/Post.php:500 #: src/Content/Conversation.php:696 src/Object/Post.php:500
#, php-format #, php-format
msgid "%s from %s" msgid "%s from %s"
msgstr "%s von %s" msgstr "%s von %s"
#: src/Content/Conversation.php:711 #: src/Content/Conversation.php:712
msgid "View in context" msgid "View in context"
msgstr "Im Zusammenhang betrachten" msgstr "Im Zusammenhang betrachten"
#: src/Content/Conversation.php:776 #: src/Content/Conversation.php:777
msgid "remove" msgid "remove"
msgstr "löschen" msgstr "löschen"
#: src/Content/Conversation.php:780 #: src/Content/Conversation.php:781
msgid "Delete Selected Items" msgid "Delete Selected Items"
msgstr "Lösche die markierten Beiträge" msgstr "Lösche die markierten Beiträge"
#: src/Content/Conversation.php:845 src/Content/Conversation.php:848 #: src/Content/Conversation.php:846 src/Content/Conversation.php:849
#: src/Content/Conversation.php:851 src/Content/Conversation.php:854 #: src/Content/Conversation.php:852 src/Content/Conversation.php:855
#, php-format #, php-format
msgid "You had been addressed (%s)." msgid "You had been addressed (%s)."
msgstr "Du wurdest angeschrieben (%s)." msgstr "Du wurdest angeschrieben (%s)."
#: src/Content/Conversation.php:857 #: src/Content/Conversation.php:858
#, php-format #, php-format
msgid "You are following %s." msgid "You are following %s."
msgstr "Du folgst %s." msgstr "Du folgst %s."
#: src/Content/Conversation.php:860 #: src/Content/Conversation.php:861
msgid "You subscribed to one or more tags in this post." msgid "You subscribed to one or more tags in this post."
msgstr "Du folgst einem oder mehreren Hashtags dieses Beitrags." msgstr "Du folgst einem oder mehreren Hashtags dieses Beitrags."
#: src/Content/Conversation.php:875 #: src/Content/Conversation.php:876
msgid "Reshared" msgid "Reshared"
msgstr "Geteilt" msgstr "Geteilt"
#: src/Content/Conversation.php:875 #: src/Content/Conversation.php:876
#, php-format #, php-format
msgid "Reshared by %s <%s>" msgid "Reshared by %s <%s>"
msgstr "Geteilt von %s <%s>" msgstr "Geteilt von %s <%s>"
#: src/Content/Conversation.php:878 #: src/Content/Conversation.php:879
#, php-format #, php-format
msgid "%s is participating in this thread." msgid "%s is participating in this thread."
msgstr "%s ist an der Unterhaltung beteiligt." msgstr "%s ist an der Unterhaltung beteiligt."
#: src/Content/Conversation.php:881 #: src/Content/Conversation.php:882
msgid "Stored for general reasons" msgid "Stored for general reasons"
msgstr "" msgstr "Aus allgemeinen Gründen aufbewahrt"
#: src/Content/Conversation.php:884 #: src/Content/Conversation.php:885
msgid "Global post" msgid "Global post"
msgstr "Globaler Beitrag" msgstr "Globaler Beitrag"
#: src/Content/Conversation.php:887 #: src/Content/Conversation.php:888
msgid "Sent via an relay server" msgid "Sent via an relay server"
msgstr "Über einen Relay-Server gesendet" msgstr "Über einen Relay-Server gesendet"
#: src/Content/Conversation.php:887 #: src/Content/Conversation.php:888
#, php-format #, php-format
msgid "Sent via the relay server %s <%s>" msgid "Sent via the relay server %s <%s>"
msgstr "Über den Relay-Server %s <%s> gesendet" msgstr "Über den Relay-Server %s <%s> gesendet"
#: src/Content/Conversation.php:890 #: src/Content/Conversation.php:891
msgid "Fetched" msgid "Fetched"
msgstr "Abgerufen" msgstr "Abgerufen"
#: src/Content/Conversation.php:890 #: src/Content/Conversation.php:891
#, php-format #, php-format
msgid "Fetched because of %s <%s>" msgid "Fetched because of %s <%s>"
msgstr "Wegen %s <%s> abgerufen" msgstr "Wegen %s <%s> abgerufen"
#: src/Content/Conversation.php:893 #: src/Content/Conversation.php:894
msgid "Stored because of a child post to complete this thread." msgid "Stored because of a child post to complete this thread."
msgstr "" msgstr "Gespeichert wegen eines untergeordneten Beitrags zur Vervollständigung dieses Themas."
#: src/Content/Conversation.php:896 #: src/Content/Conversation.php:897
msgid "Local delivery" msgid "Local delivery"
msgstr "Lokale Zustellung" msgstr "Lokale Zustellung"
#: src/Content/Conversation.php:899 #: src/Content/Conversation.php:900
msgid "Stored because of your activity (like, comment, star, ...)" msgid "Stored because of your activity (like, comment, star, ...)"
msgstr "" msgstr "Gespeichert aufgrund Ihrer Aktivität (Like, Kommentar, Stern, ...)"
#: src/Content/Conversation.php:902 #: src/Content/Conversation.php:903
msgid "Distributed" msgid "Distributed"
msgstr "" msgstr "Verteilt"
#: src/Content/Conversation.php:905 #: src/Content/Conversation.php:906
msgid "Pushed to us" msgid "Pushed to us"
msgstr "" msgstr "Zu uns gepusht"
#: src/Content/Feature.php:96 #: src/Content/Feature.php:96
msgid "General Features" msgid "General Features"
@ -2335,56 +2335,51 @@ msgstr "weniger anzeigen"
msgid "show more" msgid "show more"
msgstr "mehr anzeigen" msgstr "mehr anzeigen"
#: src/Content/Item.php:306 #: src/Content/Item.php:291 src/Model/Item.php:2853
#, php-format
msgid "%1$s poked %2$s"
msgstr "%1$s stupste %2$s"
#: src/Content/Item.php:345 src/Model/Item.php:2767
msgid "event" msgid "event"
msgstr "Veranstaltung" msgstr "Veranstaltung"
#: src/Content/Item.php:438 view/theme/frio/theme.php:260 #: src/Content/Item.php:383 view/theme/frio/theme.php:266
msgid "Follow Thread" msgid "Follow Thread"
msgstr "Folge der Unterhaltung" msgstr "Folge der Unterhaltung"
#: src/Content/Item.php:439 src/Model/Contact.php:1119 #: src/Content/Item.php:384 src/Model/Contact.php:1174
msgid "View Status" msgid "View Status"
msgstr "Status anschauen" msgstr "Status anschauen"
#: src/Content/Item.php:440 src/Content/Item.php:462 #: src/Content/Item.php:385 src/Content/Item.php:403
#: src/Model/Contact.php:1053 src/Model/Contact.php:1111 #: src/Model/Contact.php:1112 src/Model/Contact.php:1166
#: src/Model/Contact.php:1120 src/Module/Directory.php:158 #: src/Model/Contact.php:1175 src/Module/Directory.php:158
#: src/Module/Settings/Profile/Index.php:225 #: src/Module/Settings/Profile/Index.php:225
msgid "View Profile" msgid "View Profile"
msgstr "Profil anschauen" msgstr "Profil anschauen"
#: src/Content/Item.php:441 src/Model/Contact.php:1121 #: src/Content/Item.php:386 src/Model/Contact.php:1176
msgid "View Photos" msgid "View Photos"
msgstr "Bilder anschauen" msgstr "Bilder anschauen"
#: src/Content/Item.php:442 src/Model/Contact.php:1112 #: src/Content/Item.php:387 src/Model/Contact.php:1167
#: src/Model/Contact.php:1122 #: src/Model/Contact.php:1177
msgid "Network Posts" msgid "Network Posts"
msgstr "Netzwerkbeiträge" msgstr "Netzwerkbeiträge"
#: src/Content/Item.php:443 src/Model/Contact.php:1113 #: src/Content/Item.php:388 src/Model/Contact.php:1168
#: src/Model/Contact.php:1123 #: src/Model/Contact.php:1178
msgid "View Contact" msgid "View Contact"
msgstr "Kontakt anzeigen" msgstr "Kontakt anzeigen"
#: src/Content/Item.php:444 src/Model/Contact.php:1124 #: src/Content/Item.php:389 src/Model/Contact.php:1179
msgid "Send PM" msgid "Send PM"
msgstr "Private Nachricht senden" msgstr "Private Nachricht senden"
#: src/Content/Item.php:445 src/Module/Admin/Blocklist/Contact.php:100 #: src/Content/Item.php:390 src/Module/Admin/Blocklist/Contact.php:100
#: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154 #: src/Module/Admin/Users/Active.php:140 src/Module/Admin/Users/Index.php:154
#: src/Module/Contact.php:398 src/Module/Contact/Profile.php:348 #: src/Module/Contact.php:401 src/Module/Contact/Profile.php:348
#: src/Module/Contact/Profile.php:449 #: src/Module/Contact/Profile.php:449
msgid "Block" msgid "Block"
msgstr "Sperren" msgstr "Sperren"
#: src/Content/Item.php:446 src/Module/Contact.php:399 #: src/Content/Item.php:391 src/Module/Contact.php:402
#: src/Module/Contact/Profile.php:349 src/Module/Contact/Profile.php:457 #: src/Module/Contact/Profile.php:349 src/Module/Contact/Profile.php:457
#: src/Module/Notifications/Introductions.php:132 #: src/Module/Notifications/Introductions.php:132
#: src/Module/Notifications/Introductions.php:204 #: src/Module/Notifications/Introductions.php:204
@ -2392,14 +2387,10 @@ msgstr "Sperren"
msgid "Ignore" msgid "Ignore"
msgstr "Ignorieren" msgstr "Ignorieren"
#: src/Content/Item.php:450 src/Object/Post.php:455 #: src/Content/Item.php:395 src/Object/Post.php:455
msgid "Languages" msgid "Languages"
msgstr "Sprachen" msgstr "Sprachen"
#: src/Content/Item.php:454 src/Model/Contact.php:1125
msgid "Poke"
msgstr "Anstupsen"
#: src/Content/Nav.php:90 #: src/Content/Nav.php:90
msgid "Nothing new here" msgid "Nothing new here"
msgstr "Keine Neuigkeiten" msgstr "Keine Neuigkeiten"
@ -2434,42 +2425,42 @@ msgid "Sign in"
msgstr "Anmelden" msgstr "Anmelden"
#: src/Content/Nav.php:192 src/Module/BaseProfile.php:56 #: src/Content/Nav.php:192 src/Module/BaseProfile.php:56
#: src/Module/Contact.php:433 src/Module/Contact/Profile.php:380 #: src/Module/Contact.php:436 src/Module/Contact/Profile.php:380
#: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:230 #: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:236
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: src/Content/Nav.php:192 src/Content/Nav.php:275 #: src/Content/Nav.php:192 src/Content/Nav.php:275
#: view/theme/frio/theme.php:230 #: view/theme/frio/theme.php:236
msgid "Your posts and conversations" msgid "Your posts and conversations"
msgstr "Deine Beiträge und Unterhaltungen" msgstr "Deine Beiträge und Unterhaltungen"
#: src/Content/Nav.php:193 src/Module/BaseProfile.php:48 #: src/Content/Nav.php:193 src/Module/BaseProfile.php:48
#: src/Module/BaseSettings.php:55 src/Module/Contact.php:457 #: src/Module/BaseSettings.php:55 src/Module/Contact.php:460
#: src/Module/Contact/Profile.php:382 src/Module/Profile/Profile.php:241 #: src/Module/Contact/Profile.php:382 src/Module/Profile/Profile.php:241
#: src/Module/Welcome.php:57 view/theme/frio/theme.php:231 #: src/Module/Welcome.php:57 view/theme/frio/theme.php:237
msgid "Profile" msgid "Profile"
msgstr "Profil" msgstr "Profil"
#: src/Content/Nav.php:193 view/theme/frio/theme.php:231 #: src/Content/Nav.php:193 view/theme/frio/theme.php:237
msgid "Your profile page" msgid "Your profile page"
msgstr "Deine Profilseite" msgstr "Deine Profilseite"
#: src/Content/Nav.php:194 view/theme/frio/theme.php:232 #: src/Content/Nav.php:194 view/theme/frio/theme.php:238
msgid "Your photos" msgid "Your photos"
msgstr "Deine Fotos" msgstr "Deine Fotos"
#: src/Content/Nav.php:195 src/Module/BaseProfile.php:72 #: src/Content/Nav.php:195 src/Module/BaseProfile.php:72
#: src/Module/BaseProfile.php:75 src/Module/Contact.php:449 #: src/Module/BaseProfile.php:75 src/Module/Contact.php:452
#: view/theme/frio/theme.php:233 #: view/theme/frio/theme.php:239
msgid "Media" msgid "Media"
msgstr "Medien" msgstr "Medien"
#: src/Content/Nav.php:195 view/theme/frio/theme.php:233 #: src/Content/Nav.php:195 view/theme/frio/theme.php:239
msgid "Your postings with media" msgid "Your postings with media"
msgstr "Deine Beiträge die Medien beinhalten" msgstr "Deine Beiträge die Medien beinhalten"
#: src/Content/Nav.php:196 view/theme/frio/theme.php:234 #: src/Content/Nav.php:196 view/theme/frio/theme.php:240
msgid "Your events" msgid "Your events"
msgstr "Deine Ereignisse" msgstr "Deine Ereignisse"
@ -2534,8 +2525,8 @@ msgstr "Tags"
#: src/Content/Nav.php:237 src/Content/Nav.php:296 #: src/Content/Nav.php:237 src/Content/Nav.php:296
#: src/Content/Text/HTML.php:899 src/Module/BaseProfile.php:125 #: src/Content/Text/HTML.php:899 src/Module/BaseProfile.php:125
#: src/Module/BaseProfile.php:128 src/Module/Contact.php:370 #: src/Module/BaseProfile.php:128 src/Module/Contact.php:373
#: src/Module/Contact.php:464 view/theme/frio/theme.php:241 #: src/Module/Contact.php:467 view/theme/frio/theme.php:247
msgid "Contacts" msgid "Contacts"
msgstr "Kontakte" msgstr "Kontakte"
@ -2548,7 +2539,7 @@ msgid "Conversations on this and other servers"
msgstr "Unterhaltungen auf diesem und anderen Servern" msgstr "Unterhaltungen auf diesem und anderen Servern"
#: src/Content/Nav.php:260 src/Module/BaseProfile.php:87 #: src/Content/Nav.php:260 src/Module/BaseProfile.php:87
#: src/Module/BaseProfile.php:98 view/theme/frio/theme.php:238 #: src/Module/BaseProfile.php:98 view/theme/frio/theme.php:244
msgid "Events and Calendar" msgid "Events and Calendar"
msgstr "Ereignisse und Kalender" msgstr "Ereignisse und Kalender"
@ -2578,11 +2569,11 @@ msgstr "Nutzungsbedingungen"
msgid "Terms of Service of this Friendica instance" msgid "Terms of Service of this Friendica instance"
msgstr "Die Nutzungsbedingungen dieser Friendica-Instanz" msgstr "Die Nutzungsbedingungen dieser Friendica-Instanz"
#: src/Content/Nav.php:273 view/theme/frio/theme.php:237 #: src/Content/Nav.php:273 view/theme/frio/theme.php:243
msgid "Network" msgid "Network"
msgstr "Netzwerk" msgstr "Netzwerk"
#: src/Content/Nav.php:273 view/theme/frio/theme.php:237 #: src/Content/Nav.php:273 view/theme/frio/theme.php:243
msgid "Conversations from your friends" msgid "Conversations from your friends"
msgstr "Unterhaltungen Deiner Kontakte" msgstr "Unterhaltungen Deiner Kontakte"
@ -2607,7 +2598,7 @@ msgstr "Alle Benachrichtigungen anzeigen"
msgid "Mark all system notifications as seen" msgid "Mark all system notifications as seen"
msgstr "Markiere alle Systembenachrichtigungen als gelesen" msgstr "Markiere alle Systembenachrichtigungen als gelesen"
#: src/Content/Nav.php:285 view/theme/frio/theme.php:239 #: src/Content/Nav.php:285 view/theme/frio/theme.php:245
msgid "Private mail" msgid "Private mail"
msgstr "Private E-Mail" msgstr "Private E-Mail"
@ -2629,15 +2620,15 @@ msgstr "Andere Seiten verwalten"
#: src/Content/Nav.php:294 src/Module/Admin/Addons/Details.php:114 #: src/Content/Nav.php:294 src/Module/Admin/Addons/Details.php:114
#: src/Module/Admin/Themes/Details.php:93 src/Module/BaseSettings.php:122 #: src/Module/Admin/Themes/Details.php:93 src/Module/BaseSettings.php:122
#: src/Module/Welcome.php:52 view/theme/frio/theme.php:240 #: src/Module/Welcome.php:52 view/theme/frio/theme.php:246
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: src/Content/Nav.php:294 view/theme/frio/theme.php:240 #: src/Content/Nav.php:294 view/theme/frio/theme.php:246
msgid "Account settings" msgid "Account settings"
msgstr "Kontoeinstellungen" msgstr "Kontoeinstellungen"
#: src/Content/Nav.php:296 view/theme/frio/theme.php:241 #: src/Content/Nav.php:296 view/theme/frio/theme.php:247
msgid "Manage/edit friends and contacts" msgid "Manage/edit friends and contacts"
msgstr "Freunde und Kontakte verwalten/bearbeiten" msgstr "Freunde und Kontakte verwalten/bearbeiten"
@ -2681,38 +2672,38 @@ msgstr "nächste"
msgid "last" msgid "last"
msgstr "letzte" msgstr "letzte"
#: src/Content/Text/BBCode.php:998 src/Content/Text/BBCode.php:1833 #: src/Content/Text/BBCode.php:1002 src/Content/Text/BBCode.php:1883
#: src/Content/Text/BBCode.php:1834 #: src/Content/Text/BBCode.php:1884
msgid "Image/photo" msgid "Image/photo"
msgstr "Bild/Foto" msgstr "Bild/Foto"
#: src/Content/Text/BBCode.php:1188 #: src/Content/Text/BBCode.php:1238
#, php-format #, php-format
msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s" msgid "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a>%3$s" msgstr "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a>%3$s"
#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3343 #: src/Content/Text/BBCode.php:1263 src/Model/Item.php:3429
#: src/Model/Item.php:3349 src/Model/Item.php:3350 #: src/Model/Item.php:3435 src/Model/Item.php:3436
msgid "Link to source" msgid "Link to source"
msgstr "Link zum Originalbeitrag" msgstr "Link zum Originalbeitrag"
#: src/Content/Text/BBCode.php:1751 src/Content/Text/HTML.php:940 #: src/Content/Text/BBCode.php:1801 src/Content/Text/HTML.php:940
msgid "Click to open/close" msgid "Click to open/close"
msgstr "Zum Öffnen/Schließen klicken" msgstr "Zum Öffnen/Schließen klicken"
#: src/Content/Text/BBCode.php:1782 #: src/Content/Text/BBCode.php:1832
msgid "$1 wrote:" msgid "$1 wrote:"
msgstr "$1 hat geschrieben:" msgstr "$1 hat geschrieben:"
#: src/Content/Text/BBCode.php:1838 src/Content/Text/BBCode.php:1839 #: src/Content/Text/BBCode.php:1888 src/Content/Text/BBCode.php:1889
msgid "Encrypted content" msgid "Encrypted content"
msgstr "Verschlüsselter Inhalt" msgstr "Verschlüsselter Inhalt"
#: src/Content/Text/BBCode.php:2057 #: src/Content/Text/BBCode.php:2109
msgid "Invalid source protocol" msgid "Invalid source protocol"
msgstr "Ungültiges Quell-Protokoll" msgstr "Ungültiges Quell-Protokoll"
#: src/Content/Text/BBCode.php:2072 #: src/Content/Text/BBCode.php:2124
msgid "Invalid link protocol" msgid "Invalid link protocol"
msgstr "Ungültiges Link-Protokoll" msgstr "Ungültiges Link-Protokoll"
@ -2764,7 +2755,7 @@ msgstr "Name oder Interessen eingeben"
msgid "Examples: Robert Morgenstein, Fishing" msgid "Examples: Robert Morgenstein, Fishing"
msgstr "Beispiel: Robert Morgenstein, Angeln" msgstr "Beispiel: Robert Morgenstein, Angeln"
#: src/Content/Widget.php:82 src/Module/Contact.php:391 #: src/Content/Widget.php:82 src/Module/Contact.php:394
#: src/Module/Directory.php:97 view/theme/vier/theme.php:183 #: src/Module/Directory.php:97 view/theme/vier/theme.php:183
msgid "Find" msgid "Find"
msgstr "Finde" msgstr "Finde"
@ -2791,7 +2782,7 @@ msgid "Local Directory"
msgstr "Lokales Verzeichnis" msgstr "Lokales Verzeichnis"
#: src/Content/Widget.php:211 src/Model/Group.php:587 #: src/Content/Widget.php:211 src/Model/Group.php:587
#: src/Module/Contact.php:354 src/Module/Welcome.php:76 #: src/Module/Contact.php:357 src/Module/Welcome.php:76
msgid "Groups" msgid "Groups"
msgstr "Gruppen" msgstr "Gruppen"
@ -2803,7 +2794,7 @@ msgstr "Jeder"
msgid "Relationships" msgid "Relationships"
msgstr "Beziehungen" msgstr "Beziehungen"
#: src/Content/Widget.php:244 src/Module/Contact.php:306 #: src/Content/Widget.php:244 src/Module/Contact.php:309
#: src/Module/Group.php:293 #: src/Module/Group.php:293
msgid "All Contacts" msgid "All Contacts"
msgstr "Alle Kontakte" msgstr "Alle Kontakte"
@ -2847,11 +2838,11 @@ msgstr "Personen"
msgid "Organisations" msgid "Organisations"
msgstr "Organisationen" msgstr "Organisationen"
#: src/Content/Widget.php:523 src/Model/Contact.php:1547 #: src/Content/Widget.php:523 src/Model/Contact.php:1605
msgid "News" msgid "News"
msgstr "Nachrichten" msgstr "Nachrichten"
#: src/Content/Widget.php:527 src/Module/Settings/Account.php:455 #: src/Content/Widget.php:527 src/Module/Settings/Account.php:456
msgid "Account Types" msgid "Account Types"
msgstr "Kontenarten" msgstr "Kontenarten"
@ -3291,32 +3282,37 @@ msgid "Could not connect to database."
msgstr "Verbindung zur Datenbank gescheitert." msgstr "Verbindung zur Datenbank gescheitert."
#: src/Core/L10n.php:403 src/Model/Event.php:428 #: src/Core/L10n.php:403 src/Model/Event.php:428
#: src/Module/Settings/Display.php:182 #: src/Module/Settings/Display.php:184
msgid "Monday" msgid "Monday"
msgstr "Montag" msgstr "Montag"
#: src/Core/L10n.php:403 src/Model/Event.php:429 #: src/Core/L10n.php:403 src/Model/Event.php:429
#: src/Module/Settings/Display.php:185
msgid "Tuesday" msgid "Tuesday"
msgstr "Dienstag" msgstr "Dienstag"
#: src/Core/L10n.php:403 src/Model/Event.php:430 #: src/Core/L10n.php:403 src/Model/Event.php:430
#: src/Module/Settings/Display.php:186
msgid "Wednesday" msgid "Wednesday"
msgstr "Mittwoch" msgstr "Mittwoch"
#: src/Core/L10n.php:403 src/Model/Event.php:431 #: src/Core/L10n.php:403 src/Model/Event.php:431
#: src/Module/Settings/Display.php:187
msgid "Thursday" msgid "Thursday"
msgstr "Donnerstag" msgstr "Donnerstag"
#: src/Core/L10n.php:403 src/Model/Event.php:432 #: src/Core/L10n.php:403 src/Model/Event.php:432
#: src/Module/Settings/Display.php:188
msgid "Friday" msgid "Friday"
msgstr "Freitag" msgstr "Freitag"
#: src/Core/L10n.php:403 src/Model/Event.php:433 #: src/Core/L10n.php:403 src/Model/Event.php:433
#: src/Module/Settings/Display.php:189
msgid "Saturday" msgid "Saturday"
msgstr "Samstag" msgstr "Samstag"
#: src/Core/L10n.php:403 src/Model/Event.php:427 #: src/Core/L10n.php:403 src/Model/Event.php:427
#: src/Module/Settings/Display.php:182 #: src/Module/Settings/Display.php:183
msgid "Sunday" msgid "Sunday"
msgstr "Sonntag" msgstr "Sonntag"
@ -3440,57 +3436,9 @@ msgstr "Nov"
msgid "Dec" msgid "Dec"
msgstr "Dez" msgstr "Dez"
#: src/Core/L10n.php:445
msgid "poke"
msgstr "anstupsen"
#: src/Core/L10n.php:445
msgid "poked"
msgstr "stupste"
#: src/Core/L10n.php:446
msgid "ping"
msgstr "anpingen"
#: src/Core/L10n.php:446
msgid "pinged"
msgstr "pingte"
#: src/Core/L10n.php:447
msgid "prod"
msgstr "knuffen"
#: src/Core/L10n.php:447
msgid "prodded"
msgstr "knuffte"
#: src/Core/L10n.php:448
msgid "slap"
msgstr "ohrfeigen"
#: src/Core/L10n.php:448
msgid "slapped"
msgstr "ohrfeigte"
#: src/Core/L10n.php:449
msgid "finger"
msgstr "befummeln"
#: src/Core/L10n.php:449
msgid "fingered"
msgstr "befummelte"
#: src/Core/L10n.php:450
msgid "rebuff"
msgstr "eine Abfuhr erteilen"
#: src/Core/L10n.php:450
msgid "rebuffed"
msgstr "abfuhrerteilte"
#: src/Core/Renderer.php:89 src/Core/Renderer.php:118 #: src/Core/Renderer.php:89 src/Core/Renderer.php:118
#: src/Core/Renderer.php:145 src/Core/Renderer.php:179 #: src/Core/Renderer.php:145 src/Core/Renderer.php:179
#: src/Render/FriendicaSmartyEngine.php:57 #: src/Render/FriendicaSmartyEngine.php:60
msgid "" msgid ""
"Friendica can't display this page at the moment, please contact the " "Friendica can't display this page at the moment, please contact the "
"administrator." "administrator."
@ -3683,81 +3631,81 @@ msgstr "Interner Serverfehler"
msgid "Legacy module file not found: %s" msgid "Legacy module file not found: %s"
msgstr "Legacy-Moduldatei nicht gefunden: %s" msgstr "Legacy-Moduldatei nicht gefunden: %s"
#: src/Model/Contact.php:1115 src/Model/Contact.php:1127 #: src/Model/Contact.php:1170 src/Model/Contact.php:1181
msgid "UnFollow" msgid "UnFollow"
msgstr "Entfolgen" msgstr "Entfolgen"
#: src/Model/Contact.php:1133 src/Module/Admin/Users/Pending.php:107 #: src/Model/Contact.php:1187 src/Module/Admin/Users/Pending.php:107
#: src/Module/Notifications/Introductions.php:130 #: src/Module/Notifications/Introductions.php:130
#: src/Module/Notifications/Introductions.php:202 #: src/Module/Notifications/Introductions.php:202
msgid "Approve" msgid "Approve"
msgstr "Genehmigen" msgstr "Genehmigen"
#: src/Model/Contact.php:1543 #: src/Model/Contact.php:1601
msgid "Organisation" msgid "Organisation"
msgstr "Organisation" msgstr "Organisation"
#: src/Model/Contact.php:1551 #: src/Model/Contact.php:1609
msgid "Forum" msgid "Forum"
msgstr "Forum" msgstr "Forum"
#: src/Model/Contact.php:2640 #: src/Model/Contact.php:2795
msgid "Disallowed profile URL." msgid "Disallowed profile URL."
msgstr "Nicht erlaubte Profil-URL." msgstr "Nicht erlaubte Profil-URL."
#: src/Model/Contact.php:2645 src/Module/Friendica.php:81 #: src/Model/Contact.php:2800 src/Module/Friendica.php:81
msgid "Blocked domain" msgid "Blocked domain"
msgstr "Blockierte Domain" msgstr "Blockierte Domain"
#: src/Model/Contact.php:2650 #: src/Model/Contact.php:2805
msgid "Connect URL missing." msgid "Connect URL missing."
msgstr "Connect-URL fehlt" msgstr "Connect-URL fehlt"
#: src/Model/Contact.php:2659 #: src/Model/Contact.php:2814
msgid "" msgid ""
"The contact could not be added. Please check the relevant network " "The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page." "credentials in your Settings -> Social Networks page."
msgstr "Der Kontakt konnte nicht hinzugefügt werden. Bitte überprüfe die Einstellungen unter Einstellungen -> Soziale Netzwerke" msgstr "Der Kontakt konnte nicht hinzugefügt werden. Bitte überprüfe die Einstellungen unter Einstellungen -> Soziale Netzwerke"
#: src/Model/Contact.php:2701 #: src/Model/Contact.php:2856
msgid "The profile address specified does not provide adequate information." msgid "The profile address specified does not provide adequate information."
msgstr "Die angegebene Profiladresse liefert unzureichende Informationen." msgstr "Die angegebene Profiladresse liefert unzureichende Informationen."
#: src/Model/Contact.php:2703 #: src/Model/Contact.php:2858
msgid "No compatible communication protocols or feeds were discovered." msgid "No compatible communication protocols or feeds were discovered."
msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden." msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."
#: src/Model/Contact.php:2706 #: src/Model/Contact.php:2861
msgid "An author or name was not found." msgid "An author or name was not found."
msgstr "Es wurde kein Autor oder Name gefunden." msgstr "Es wurde kein Autor oder Name gefunden."
#: src/Model/Contact.php:2709 #: src/Model/Contact.php:2864
msgid "No browser URL could be matched to this address." msgid "No browser URL could be matched to this address."
msgstr "Zu dieser Adresse konnte keine passende Browser-URL gefunden werden." msgstr "Zu dieser Adresse konnte keine passende Browser-URL gefunden werden."
#: src/Model/Contact.php:2712 #: src/Model/Contact.php:2867
msgid "" msgid ""
"Unable to match @-style Identity Address with a known protocol or email " "Unable to match @-style Identity Address with a known protocol or email "
"contact." "contact."
msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen." msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."
#: src/Model/Contact.php:2713 #: src/Model/Contact.php:2868
msgid "Use mailto: in front of address to force email check." msgid "Use mailto: in front of address to force email check."
msgstr "Verwende mailto: vor der E-Mail-Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen." msgstr "Verwende mailto: vor der E-Mail-Adresse, um eine Überprüfung der E-Mail-Adresse zu erzwingen."
#: src/Model/Contact.php:2719 #: src/Model/Contact.php:2874
msgid "" msgid ""
"The profile address specified belongs to a network which has been disabled " "The profile address specified belongs to a network which has been disabled "
"on this site." "on this site."
msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde." msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."
#: src/Model/Contact.php:2724 #: src/Model/Contact.php:2879
msgid "" msgid ""
"Limited profile. This person will be unable to receive direct/personal " "Limited profile. This person will be unable to receive direct/personal "
"notifications from you." "notifications from you."
msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können." msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können."
#: src/Model/Contact.php:2783 #: src/Model/Contact.php:2938
msgid "Unable to retrieve contact information." msgid "Unable to retrieve contact information."
msgstr "Konnte die Kontaktinformationen nicht empfangen." msgstr "Konnte die Kontaktinformationen nicht empfangen."
@ -3877,66 +3825,66 @@ msgstr "Gruppenname:"
msgid "Edit groups" msgid "Edit groups"
msgstr "Gruppen bearbeiten" msgstr "Gruppen bearbeiten"
#: src/Model/Item.php:1865 #: src/Model/Item.php:1965
#, php-format #, php-format
msgid "Detected languages in this post:\\n%s" msgid "Detected languages in this post:\\n%s"
msgstr "Erkannte Sprachen in diesem Beitrag:\\n%s" msgstr "Erkannte Sprachen in diesem Beitrag:\\n%s"
#: src/Model/Item.php:2771 #: src/Model/Item.php:2857
msgid "activity" msgid "activity"
msgstr "Aktivität" msgstr "Aktivität"
#: src/Model/Item.php:2773 #: src/Model/Item.php:2859
msgid "comment" msgid "comment"
msgstr "Kommentar" msgstr "Kommentar"
#: src/Model/Item.php:2776 #: src/Model/Item.php:2862
msgid "post" msgid "post"
msgstr "Beitrag" msgstr "Beitrag"
#: src/Model/Item.php:2892 #: src/Model/Item.php:2978
#, php-format #, php-format
msgid "Content warning: %s" msgid "Content warning: %s"
msgstr "Inhaltswarnung: %s" msgstr "Inhaltswarnung: %s"
#: src/Model/Item.php:3255 #: src/Model/Item.php:3341
msgid "bytes" msgid "bytes"
msgstr "Byte" msgstr "Byte"
#: src/Model/Item.php:3286 #: src/Model/Item.php:3372
#, php-format #, php-format
msgid "%2$s (%3$d%%, %1$d vote)" msgid "%2$s (%3$d%%, %1$d vote)"
msgid_plural "%2$s (%3$d%%, %1$d votes)" msgid_plural "%2$s (%3$d%%, %1$d votes)"
msgstr[0] "%2$s (%3$d%%, %1$d Stimme)" msgstr[0] "%2$s (%3$d%%, %1$d Stimme)"
msgstr[1] "%2$s (%3$d%%, %1$d Stimmen)" msgstr[1] "%2$s (%3$d%%, %1$d Stimmen)"
#: src/Model/Item.php:3288 #: src/Model/Item.php:3374
#, php-format #, php-format
msgid "%2$s (%1$d vote)" msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)" msgid_plural "%2$s (%1$d votes)"
msgstr[0] "%2$s (%1$d Stimme)" msgstr[0] "%2$s (%1$d Stimme)"
msgstr[1] "%2$s (%1$d Stimmen)" msgstr[1] "%2$s (%1$d Stimmen)"
#: src/Model/Item.php:3293 #: src/Model/Item.php:3379
#, php-format #, php-format
msgid "%d voter. Poll end: %s" msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s" msgid_plural "%d voters. Poll end: %s"
msgstr[0] "%d Stimme, Abstimmung endet: %s" msgstr[0] "%d Stimme, Abstimmung endet: %s"
msgstr[1] "%d Stimmen, Abstimmung endet: %s" msgstr[1] "%d Stimmen, Abstimmung endet: %s"
#: src/Model/Item.php:3295 #: src/Model/Item.php:3381
#, php-format #, php-format
msgid "%d voter." msgid "%d voter."
msgid_plural "%d voters." msgid_plural "%d voters."
msgstr[0] "%d Stimme." msgstr[0] "%d Stimme."
msgstr[1] "%d Stimmen." msgstr[1] "%d Stimmen."
#: src/Model/Item.php:3297 #: src/Model/Item.php:3383
#, php-format #, php-format
msgid "Poll end: %s" msgid "Poll end: %s"
msgstr "Abstimmung endet: %s" msgstr "Abstimmung endet: %s"
#: src/Model/Item.php:3331 src/Model/Item.php:3332 #: src/Model/Item.php:3417 src/Model/Item.php:3418
msgid "View on separate page" msgid "View on separate page"
msgstr "Auf separater Seite ansehen" msgstr "Auf separater Seite ansehen"
@ -4329,12 +4277,12 @@ msgid ""
"\t\t\tThank you and welcome to %2$s." "\t\t\tThank you and welcome to %2$s."
msgstr "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3$s\n\tBenutzernamename:\t%1$s\n\tPasswort:\t%5$s\n\nDu kannst dein Passwort unter \"Einstellungen\" ändern, sobald du dich\nangemeldet hast.\n\nBitte nimm dir ein paar Minuten, um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst du ja auch einige Informationen über dich in deinem\nProfil veröffentlichen, damit andere Leute dich einfacher finden können.\nBearbeite hierfür einfach dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen dir, deinen kompletten Namen anzugeben und ein zu dir\npassendes Profilbild zu wählen, damit dich alte Bekannte wiederfinden.\nAußerdem ist es nützlich, wenn du auf deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die deine Interessen teilen.\n\nWir respektieren deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nSolltest du dein Nutzerkonto löschen wollen, kannst du dies unter %3$s/removeme jederzeit tun.\n\nDanke für deine Aufmerksamkeit und willkommen auf %2$s." msgstr "\nDie Anmelde-Details sind die folgenden:\n\tAdresse der Seite:\t%3$s\n\tBenutzernamename:\t%1$s\n\tPasswort:\t%5$s\n\nDu kannst dein Passwort unter \"Einstellungen\" ändern, sobald du dich\nangemeldet hast.\n\nBitte nimm dir ein paar Minuten, um die anderen Einstellungen auf dieser\nSeite zu kontrollieren.\n\nEventuell magst du ja auch einige Informationen über dich in deinem\nProfil veröffentlichen, damit andere Leute dich einfacher finden können.\nBearbeite hierfür einfach dein Standard-Profil (über die Profil-Seite).\n\nWir empfehlen dir, deinen kompletten Namen anzugeben und ein zu dir\npassendes Profilbild zu wählen, damit dich alte Bekannte wiederfinden.\nAußerdem ist es nützlich, wenn du auf deinem Profil Schlüsselwörter\nangibst. Das erleichtert es, Leute zu finden, die deine Interessen teilen.\n\nWir respektieren deine Privatsphäre - keine dieser Angaben ist nötig.\nWenn du neu im Netzwerk bist und noch niemanden kennst, dann können sie\nallerdings dabei helfen, neue und interessante Kontakte zu knüpfen.\n\nSolltest du dein Nutzerkonto löschen wollen, kannst du dies unter %3$s/removeme jederzeit tun.\n\nDanke für deine Aufmerksamkeit und willkommen auf %2$s."
#: src/Moderation/DomainPatternBlocklist.php:218 #: src/Moderation/DomainPatternBlocklist.php:228
#, php-format #, php-format
msgid "[%s] Notice of remote server domain pattern block list update" msgid "[%s] Notice of remote server domain pattern block list update"
msgstr "[%s] Die Liste der blockierten Domain Muster wurde aktualisiert" msgstr "[%s] Die Liste der blockierten Domain Muster wurde aktualisiert"
#: src/Moderation/DomainPatternBlocklist.php:220 #: src/Moderation/DomainPatternBlocklist.php:230
#, php-format #, php-format
msgid "" msgid ""
"Dear %s,\n" "Dear %s,\n"
@ -4374,7 +4322,7 @@ msgstr "Einschalten"
#: src/Module/Admin/Blocklist/Server/Add.php:121 #: src/Module/Admin/Blocklist/Server/Add.php:121
#: src/Module/Admin/Blocklist/Server/Import.php:117 #: src/Module/Admin/Blocklist/Server/Import.php:117
#: src/Module/Admin/Blocklist/Server/Index.php:93 #: src/Module/Admin/Blocklist/Server/Index.php:93
#: src/Module/Admin/Federation.php:200 src/Module/Admin/Item/Delete.php:64 #: src/Module/Admin/Federation.php:201 src/Module/Admin/Item/Delete.php:64
#: src/Module/Admin/Logs/Settings.php:79 src/Module/Admin/Logs/View.php:84 #: src/Module/Admin/Logs/Settings.php:79 src/Module/Admin/Logs/View.php:84
#: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:433 #: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:433
#: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:233 #: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:233
@ -4441,8 +4389,8 @@ msgstr "Aktive"
msgid "List of active accounts" msgid "List of active accounts"
msgstr "Liste der aktiven Benutzerkonten" msgstr "Liste der aktiven Benutzerkonten"
#: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:314 #: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:317
#: src/Module/Contact.php:374 #: src/Module/Contact.php:377
msgid "Pending" msgid "Pending"
msgstr "Ausstehend" msgstr "Ausstehend"
@ -4450,8 +4398,8 @@ msgstr "Ausstehend"
msgid "List of pending registrations" msgid "List of pending registrations"
msgstr "Liste der anstehenden Benutzerkonten" msgstr "Liste der anstehenden Benutzerkonten"
#: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:322 #: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:325
#: src/Module/Contact.php:375 #: src/Module/Contact.php:378
msgid "Blocked" msgid "Blocked"
msgstr "Geblockt" msgstr "Geblockt"
@ -4467,19 +4415,19 @@ msgstr "Gelöscht"
msgid "List of pending user deletions" msgid "List of pending user deletions"
msgstr "Liste der auf Löschung wartenden Benutzer" msgstr "Liste der auf Löschung wartenden Benutzer"
#: src/Module/Admin/BaseUsers.php:100 src/Module/Settings/Account.php:493 #: src/Module/Admin/BaseUsers.php:100 src/Module/Settings/Account.php:494
msgid "Normal Account Page" msgid "Normal Account Page"
msgstr "Normales Konto" msgstr "Normales Konto"
#: src/Module/Admin/BaseUsers.php:101 src/Module/Settings/Account.php:500 #: src/Module/Admin/BaseUsers.php:101 src/Module/Settings/Account.php:501
msgid "Soapbox Page" msgid "Soapbox Page"
msgstr "Marktschreier-Konto" msgstr "Marktschreier-Konto"
#: src/Module/Admin/BaseUsers.php:102 src/Module/Settings/Account.php:507 #: src/Module/Admin/BaseUsers.php:102 src/Module/Settings/Account.php:508
msgid "Public Forum" msgid "Public Forum"
msgstr "Öffentliches Forum" msgstr "Öffentliches Forum"
#: src/Module/Admin/BaseUsers.php:103 src/Module/Settings/Account.php:514 #: src/Module/Admin/BaseUsers.php:103 src/Module/Settings/Account.php:515
msgid "Automatic Friend Page" msgid "Automatic Friend Page"
msgstr "Automatische Freunde-Seite" msgstr "Automatische Freunde-Seite"
@ -4487,19 +4435,19 @@ msgstr "Automatische Freunde-Seite"
msgid "Private Forum" msgid "Private Forum"
msgstr "Privates Forum" msgstr "Privates Forum"
#: src/Module/Admin/BaseUsers.php:107 src/Module/Settings/Account.php:465 #: src/Module/Admin/BaseUsers.php:107 src/Module/Settings/Account.php:466
msgid "Personal Page" msgid "Personal Page"
msgstr "Persönliche Seite" msgstr "Persönliche Seite"
#: src/Module/Admin/BaseUsers.php:108 src/Module/Settings/Account.php:472 #: src/Module/Admin/BaseUsers.php:108 src/Module/Settings/Account.php:473
msgid "Organisation Page" msgid "Organisation Page"
msgstr "Organisationsseite" msgstr "Organisationsseite"
#: src/Module/Admin/BaseUsers.php:109 src/Module/Settings/Account.php:479 #: src/Module/Admin/BaseUsers.php:109 src/Module/Settings/Account.php:480
msgid "News Page" msgid "News Page"
msgstr "Nachrichtenseite" msgstr "Nachrichtenseite"
#: src/Module/Admin/BaseUsers.php:110 src/Module/Settings/Account.php:486 #: src/Module/Admin/BaseUsers.php:110 src/Module/Settings/Account.php:487
msgid "Community Forum" msgid "Community Forum"
msgstr "Gemeinschaftsforum" msgstr "Gemeinschaftsforum"
@ -4545,7 +4493,7 @@ msgstr "Auswahl aufheben"
#: src/Module/Admin/Blocklist/Contact.php:101 #: src/Module/Admin/Blocklist/Contact.php:101
#: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156 #: src/Module/Admin/Users/Blocked.php:142 src/Module/Admin/Users/Index.php:156
#: src/Module/Contact.php:398 src/Module/Contact/Profile.php:348 #: src/Module/Contact.php:401 src/Module/Contact/Profile.php:348
#: src/Module/Contact/Profile.php:449 #: src/Module/Contact/Profile.php:449
msgid "Unblock" msgid "Unblock"
msgstr "Entsperren" msgstr "Entsperren"
@ -4699,83 +4647,83 @@ msgstr "Warum werden Server die diesem Domainmuster entsprechen geblockt? Die Be
#: src/Module/Admin/Blocklist/Server/Import.php:75 #: src/Module/Admin/Blocklist/Server/Import.php:75
#: src/Module/Admin/Blocklist/Server/Import.php:84 #: src/Module/Admin/Blocklist/Server/Import.php:84
msgid "Error importing pattern file" msgid "Error importing pattern file"
msgstr "" msgstr "Fehler beim Import der Muster Datei"
#: src/Module/Admin/Blocklist/Server/Import.php:90 #: src/Module/Admin/Blocklist/Server/Import.php:90
msgid "Local blocklist replaced with the provided file." msgid "Local blocklist replaced with the provided file."
msgstr "" msgstr "Lokale Blockliste wurde durch die bereitgestellte Datei ersetzt."
#: src/Module/Admin/Blocklist/Server/Import.php:94 #: src/Module/Admin/Blocklist/Server/Import.php:94
#, php-format #, php-format
msgid "%d pattern was added to the local blocklist." msgid "%d pattern was added to the local blocklist."
msgid_plural "%d patterns were added to the local blocklist." msgid_plural "%d patterns were added to the local blocklist."
msgstr[0] "" msgstr[0] "%d Muster wurde zur lokalen Blockliste hinzugefügt."
msgstr[1] "" msgstr[1] "%d Muster wurden zur lokalen Blockliste hinzugefügt."
#: src/Module/Admin/Blocklist/Server/Import.php:96 #: src/Module/Admin/Blocklist/Server/Import.php:96
msgid "No pattern was added to the local blocklist." msgid "No pattern was added to the local blocklist."
msgstr "" msgstr "Kein Muster wurde zur lokalen Blockliste hinzugefügt."
#: src/Module/Admin/Blocklist/Server/Import.php:118 #: src/Module/Admin/Blocklist/Server/Import.php:118
msgid "Import a Server Domain Pattern Blocklist" msgid "Import a Server Domain Pattern Blocklist"
msgstr "" msgstr "Server Domain Muster Blockliste importieren"
#: src/Module/Admin/Blocklist/Server/Import.php:119 #: src/Module/Admin/Blocklist/Server/Import.php:119
msgid "" msgid ""
"<p>This file can be downloaded from the <code>/friendica</code> path of any " "<p>This file can be downloaded from the <code>/friendica</code> path of any "
"Friendica server.</p>" "Friendica server.</p>"
msgstr "" msgstr "<p>Diese Datei kann vom <code>/friendica</code> Pfad auf jedem Friendica Server heruntergeladen werden.</p>"
#: src/Module/Admin/Blocklist/Server/Import.php:120 #: src/Module/Admin/Blocklist/Server/Import.php:120
#: src/Module/Admin/Blocklist/Server/Index.php:104 #: src/Module/Admin/Blocklist/Server/Index.php:104
msgid "Upload file" msgid "Upload file"
msgstr "" msgstr "Datei hochladen"
#: src/Module/Admin/Blocklist/Server/Import.php:121 #: src/Module/Admin/Blocklist/Server/Import.php:121
msgid "Patterns to import" msgid "Patterns to import"
msgstr "" msgstr "Zu importierende Muster"
#: src/Module/Admin/Blocklist/Server/Import.php:122 #: src/Module/Admin/Blocklist/Server/Import.php:122
msgid "Domain Pattern" msgid "Domain Pattern"
msgstr "" msgstr "Domain Muster"
#: src/Module/Admin/Blocklist/Server/Import.php:124 #: src/Module/Admin/Blocklist/Server/Import.php:124
msgid "Import Mode" msgid "Import Mode"
msgstr "" msgstr "Importmodus"
#: src/Module/Admin/Blocklist/Server/Import.php:125 #: src/Module/Admin/Blocklist/Server/Import.php:125
msgid "Import Patterns" msgid "Import Patterns"
msgstr "" msgstr "Muster importieren"
#: src/Module/Admin/Blocklist/Server/Import.php:126 #: src/Module/Admin/Blocklist/Server/Import.php:126
#, php-format #, php-format
msgid "%d total pattern" msgid "%d total pattern"
msgid_plural "%d total patterns" msgid_plural "%d total patterns"
msgstr[0] "" msgstr[0] "%dMuster gesamt"
msgstr[1] "" msgstr[1] "%dMuster gesamt"
#: src/Module/Admin/Blocklist/Server/Import.php:128 #: src/Module/Admin/Blocklist/Server/Import.php:128
#: src/Module/Admin/Blocklist/Server/Index.php:113 #: src/Module/Admin/Blocklist/Server/Index.php:113
msgid "Server domain pattern blocklist CSV file" msgid "Server domain pattern blocklist CSV file"
msgstr "" msgstr "Server Domain Muster Blockliste CSV-Datei"
#: src/Module/Admin/Blocklist/Server/Import.php:129 #: src/Module/Admin/Blocklist/Server/Import.php:129
msgid "Append" msgid "Append"
msgstr "" msgstr "Anhängen"
#: src/Module/Admin/Blocklist/Server/Import.php:129 #: src/Module/Admin/Blocklist/Server/Import.php:129
msgid "" msgid ""
"Imports patterns from the file that weren't already existing in the current " "Imports patterns from the file that weren't already existing in the current "
"blocklist." "blocklist."
msgstr "" msgstr "Importiert Muster aus der Datei, die nicht bereits in der aktuellen Blockliste vorhanden waren."
#: src/Module/Admin/Blocklist/Server/Import.php:130 #: src/Module/Admin/Blocklist/Server/Import.php:130
msgid "Replace" msgid "Replace"
msgstr "" msgstr "Ersetzen"
#: src/Module/Admin/Blocklist/Server/Import.php:130 #: src/Module/Admin/Blocklist/Server/Import.php:130
msgid "Replaces the current blocklist by the imported patterns." msgid "Replaces the current blocklist by the imported patterns."
msgstr "" msgstr "Ersetzt die aktuelle Blockliste durch die importierten Muster."
#: src/Module/Admin/Blocklist/Server/Index.php:84 #: src/Module/Admin/Blocklist/Server/Index.php:84
#: src/Module/Admin/Blocklist/Server/Index.php:108 #: src/Module/Admin/Blocklist/Server/Index.php:108
@ -4815,7 +4763,7 @@ msgstr "Die Liste der blockierten Domain Muster wird auf der Seite <a href=\"/fr
#: src/Module/Admin/Blocklist/Server/Index.php:102 #: src/Module/Admin/Blocklist/Server/Index.php:102
msgid "Import server domain pattern blocklist" msgid "Import server domain pattern blocklist"
msgstr "" msgstr "Server Domain Muster Blockliste importieren"
#: src/Module/Admin/Blocklist/Server/Index.php:103 #: src/Module/Admin/Blocklist/Server/Index.php:103
msgid "Add new entry to the blocklist" msgid "Add new entry to the blocklist"
@ -4905,75 +4853,75 @@ msgstr "Feature festlegen: %s"
msgid "Manage Additional Features" msgid "Manage Additional Features"
msgstr "Zusätzliche Features Verwalten" msgstr "Zusätzliche Features Verwalten"
#: src/Module/Admin/Federation.php:68 #: src/Module/Admin/Federation.php:69
msgid "Other" msgid "Other"
msgstr "Andere" msgstr "Andere"
#: src/Module/Admin/Federation.php:140 src/Module/Admin/Federation.php:389 #: src/Module/Admin/Federation.php:141 src/Module/Admin/Federation.php:390
msgid "unknown" msgid "unknown"
msgstr "Unbekannt" msgstr "Unbekannt"
#: src/Module/Admin/Federation.php:173 #: src/Module/Admin/Federation.php:174
#, php-format #, php-format
msgid "%2$s total system" msgid "%2$s total system"
msgid_plural "%2$s total systems" msgid_plural "%2$s total systems"
msgstr[0] "" msgstr[0] "%2$sServer gesamt"
msgstr[1] "" msgstr[1] "%2$s Server gesamt"
#: src/Module/Admin/Federation.php:174
#, php-format
msgid "%2$s active user last month"
msgid_plural "%2$s active users last month"
msgstr[0] ""
msgstr[1] ""
#: src/Module/Admin/Federation.php:175 #: src/Module/Admin/Federation.php:175
#, php-format #, php-format
msgid "%2$s active user last six months" msgid "%2$s active user last month"
msgid_plural "%2$s active users last six months" msgid_plural "%2$s active users last month"
msgstr[0] "" msgstr[0] "%2$s aktiver Nutzer im letzten Monat"
msgstr[1] "" msgstr[1] "%2$s aktive Nutzer im letzten Monat"
#: src/Module/Admin/Federation.php:176 #: src/Module/Admin/Federation.php:176
#, php-format #, php-format
msgid "%2$s registered user" msgid "%2$s active user last six months"
msgid_plural "%2$s registered users" msgid_plural "%2$s active users last six months"
msgstr[0] "" msgstr[0] "%2$s aktive Nutzer im letzten halben Jahr"
msgstr[1] "" msgstr[1] "%2$s aktive Nutzer im letzten halben Jahr"
#: src/Module/Admin/Federation.php:177 #: src/Module/Admin/Federation.php:177
#, php-format #, php-format
msgid "%2$s registered user"
msgid_plural "%2$s registered users"
msgstr[0] "%2$sregistrierter Nutzer"
msgstr[1] "%2$s registrierte Nutzer"
#: src/Module/Admin/Federation.php:178
#, php-format
msgid "%2$s locally created post or comment" msgid "%2$s locally created post or comment"
msgid_plural "%2$s locally created posts and comments" msgid_plural "%2$s locally created posts and comments"
msgstr[0] "" msgstr[0] "%2$slokal erstellter Beitrag oder Kommentar"
msgstr[1] "" msgstr[1] "%2$slokal erstellte Beiträge und Kommentare"
#: src/Module/Admin/Federation.php:180 #: src/Module/Admin/Federation.php:181
#, php-format #, php-format
msgid "%2$s post per user" msgid "%2$s post per user"
msgid_plural "%2$s posts per user" msgid_plural "%2$s posts per user"
msgstr[0] "" msgstr[0] "%2$sBeitrag pro Nutzer"
msgstr[1] "" msgstr[1] "%2$sBeiträge pro Nutzer"
#: src/Module/Admin/Federation.php:185 #: src/Module/Admin/Federation.php:186
#, php-format #, php-format
msgid "%2$s user per system" msgid "%2$s user per system"
msgid_plural "%2$s users per system" msgid_plural "%2$s users per system"
msgstr[0] "" msgstr[0] "%2$sNutzer pro System"
msgstr[1] "" msgstr[1] "%2$sNutzer pro System"
#: src/Module/Admin/Federation.php:195 #: src/Module/Admin/Federation.php:196
msgid "" msgid ""
"This page offers you some numbers to the known part of the federated social " "This page offers you some numbers to the known part of the federated social "
"network your Friendica node is part of. These numbers are not complete but " "network your Friendica node is part of. These numbers are not complete but "
"only reflect the part of the network your node is aware of." "only reflect the part of the network your node is aware of."
msgstr "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt." msgstr "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt."
#: src/Module/Admin/Federation.php:201 src/Module/BaseAdmin.php:90 #: src/Module/Admin/Federation.php:202 src/Module/BaseAdmin.php:90
msgid "Federation Statistics" msgid "Federation Statistics"
msgstr "Föderation Statistik" msgstr "Föderation Statistik"
#: src/Module/Admin/Federation.php:205 #: src/Module/Admin/Federation.php:206
#, php-format #, php-format
msgid "" msgid ""
"Currently this node is aware of %2$s node (%3$s active users last month, " "Currently this node is aware of %2$s node (%3$s active users last month, "
@ -4983,8 +4931,8 @@ msgid_plural ""
"Currently this node is aware of %2$s nodes (%3$s active users last month, " "Currently this node is aware of %2$s nodes (%3$s active users last month, "
"%4$s active users last six months, %5$s registered users in total) from the " "%4$s active users last six months, %5$s registered users in total) from the "
"following platforms:" "following platforms:"
msgstr[0] "" msgstr[0] "Derzeit kennt dieser Knoten %2$s andere Knoten (mit %3$s aktiven Nutzern im letzten Monat, %4$s aktiven Nutzern im letzten halben Jahr, %5$s registrierten Nutzern insgesamt) von den folgenden Plattformen:"
msgstr[1] "" msgstr[1] "Derzeit kennt dieser Knoten %2$s andere Knoten (mit %3$s aktiven Nutzern im letzten Monat, %4$s aktiven Nutzern im letzten halben Jahr, %5$s registrierten Nutzern insgesamt) von den folgenden Plattformen:"
#: src/Module/Admin/Item/Delete.php:53 #: src/Module/Admin/Item/Delete.php:53
msgid "Item marked for deletion." msgid "Item marked for deletion."
@ -6068,13 +6016,13 @@ msgstr "Auf großen Knoten kann die Volltext-Suche das System ausbremsen."
#: src/Module/Admin/Site.php:539 #: src/Module/Admin/Site.php:539
msgid "Generate counts per contact group when calculating network count" msgid "Generate counts per contact group when calculating network count"
msgstr "" msgstr "Erstelle Zählungen je Kontaktgruppe bei der Berechnung der Netzwerkanzahl"
#: src/Module/Admin/Site.php:539 #: src/Module/Admin/Site.php:539
msgid "" msgid ""
"On systems with users that heavily use contact groups the query can be very " "On systems with users that heavily use contact groups the query can be very "
"expensive." "expensive."
msgstr "" msgstr "Auf Systemen mit Benutzern, die häufig Kontaktgruppen verwenden, kann die Abfrage sehr aufwändig sein."
#: src/Module/Admin/Site.php:541 #: src/Module/Admin/Site.php:541
msgid "Maximum number of parallel workers" msgid "Maximum number of parallel workers"
@ -6653,12 +6601,12 @@ msgstr "Hinweis vom Nutzer"
msgid "Deny" msgid "Deny"
msgstr "Verwehren" msgstr "Verwehren"
#: src/Module/Api/ApiResponse.php:272 #: src/Module/Api/ApiResponse.php:279
#, php-format #, php-format
msgid "API endpoint %s %s is not implemented" msgid "API endpoint %s %s is not implemented"
msgstr "API Endpunkt %s %s ist nicht implementiert" msgstr "API Endpunkt %s %s ist nicht implementiert"
#: src/Module/Api/ApiResponse.php:273 #: src/Module/Api/ApiResponse.php:280
msgid "" msgid ""
"The API endpoint is currently not implemented but might be in the future." "The API endpoint is currently not implemented but might be in the future."
msgstr "The API endpoint is currently not implemented but might be in the future." msgstr "The API endpoint is currently not implemented but might be in the future."
@ -6820,10 +6768,10 @@ msgstr[1] "Das wöchentliche Limit von %d Beiträgen wurde erreicht. Der Beitrag
msgid "Monthly posting limit of %d post reached. The post was rejected." msgid "Monthly posting limit of %d post reached. The post was rejected."
msgid_plural "" msgid_plural ""
"Monthly posting limit of %d posts reached. The post was rejected." "Monthly posting limit of %d posts reached. The post was rejected."
msgstr[0] "" msgstr[0] "Das monatliche Limit von %d Beitrag wurde erreicht. Der Beitrag wurde verworfen."
msgstr[1] "" msgstr[1] "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen."
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:460 #: src/Module/BaseProfile.php:51 src/Module/Contact.php:463
msgid "Profile Details" msgid "Profile Details"
msgstr "Profildetails" msgstr "Profildetails"
@ -6897,110 +6845,110 @@ msgid_plural "%d contacts edited."
msgstr[0] "%d Kontakt bearbeitet." msgstr[0] "%d Kontakt bearbeitet."
msgstr[1] "%d Kontakte bearbeitet." msgstr[1] "%d Kontakte bearbeitet."
#: src/Module/Contact.php:309 #: src/Module/Contact.php:312
msgid "Show all contacts" msgid "Show all contacts"
msgstr "Alle Kontakte anzeigen" msgstr "Alle Kontakte anzeigen"
#: src/Module/Contact.php:317 #: src/Module/Contact.php:320
msgid "Only show pending contacts" msgid "Only show pending contacts"
msgstr "Zeige nur noch ausstehende Kontakte." msgstr "Zeige nur noch ausstehende Kontakte."
#: src/Module/Contact.php:325 #: src/Module/Contact.php:328
msgid "Only show blocked contacts" msgid "Only show blocked contacts"
msgstr "Nur blockierte Kontakte anzeigen" msgstr "Nur blockierte Kontakte anzeigen"
#: src/Module/Contact.php:330 src/Module/Contact.php:377 #: src/Module/Contact.php:333 src/Module/Contact.php:380
#: src/Object/Post.php:339 #: src/Object/Post.php:339
msgid "Ignored" msgid "Ignored"
msgstr "Ignoriert" msgstr "Ignoriert"
#: src/Module/Contact.php:333 #: src/Module/Contact.php:336
msgid "Only show ignored contacts" msgid "Only show ignored contacts"
msgstr "Nur ignorierte Kontakte anzeigen" msgstr "Nur ignorierte Kontakte anzeigen"
#: src/Module/Contact.php:338 src/Module/Contact.php:378 #: src/Module/Contact.php:341 src/Module/Contact.php:381
msgid "Archived" msgid "Archived"
msgstr "Archiviert" msgstr "Archiviert"
#: src/Module/Contact.php:341 #: src/Module/Contact.php:344
msgid "Only show archived contacts" msgid "Only show archived contacts"
msgstr "Nur archivierte Kontakte anzeigen" msgstr "Nur archivierte Kontakte anzeigen"
#: src/Module/Contact.php:346 src/Module/Contact.php:376 #: src/Module/Contact.php:349 src/Module/Contact.php:379
msgid "Hidden" msgid "Hidden"
msgstr "Verborgen" msgstr "Verborgen"
#: src/Module/Contact.php:349 #: src/Module/Contact.php:352
msgid "Only show hidden contacts" msgid "Only show hidden contacts"
msgstr "Nur verborgene Kontakte anzeigen" msgstr "Nur verborgene Kontakte anzeigen"
#: src/Module/Contact.php:357 #: src/Module/Contact.php:360
msgid "Organize your contact groups" msgid "Organize your contact groups"
msgstr "Verwalte deine Kontaktgruppen" msgstr "Verwalte deine Kontaktgruppen"
#: src/Module/Contact.php:389 #: src/Module/Contact.php:392
msgid "Search your contacts" msgid "Search your contacts"
msgstr "Suche in deinen Kontakten" msgstr "Suche in deinen Kontakten"
#: src/Module/Contact.php:390 src/Module/Search/Index.php:207 #: src/Module/Contact.php:393 src/Module/Search/Index.php:207
#, php-format #, php-format
msgid "Results for: %s" msgid "Results for: %s"
msgstr "Ergebnisse für: %s" msgstr "Ergebnisse für: %s"
#: src/Module/Contact.php:397 #: src/Module/Contact.php:400
msgid "Update" msgid "Update"
msgstr "Aktualisierungen" msgstr "Aktualisierungen"
#: src/Module/Contact.php:399 src/Module/Contact/Profile.php:349 #: src/Module/Contact.php:402 src/Module/Contact/Profile.php:349
#: src/Module/Contact/Profile.php:457 #: src/Module/Contact/Profile.php:457
msgid "Unignore" msgid "Unignore"
msgstr "Ignorieren aufheben" msgstr "Ignorieren aufheben"
#: src/Module/Contact.php:401 #: src/Module/Contact.php:404
msgid "Batch Actions" msgid "Batch Actions"
msgstr "Stapelverarbeitung" msgstr "Stapelverarbeitung"
#: src/Module/Contact.php:436 #: src/Module/Contact.php:439
msgid "Conversations started by this contact" msgid "Conversations started by this contact"
msgstr "Unterhaltungen, die von diesem Kontakt begonnen wurden" msgstr "Unterhaltungen, die von diesem Kontakt begonnen wurden"
#: src/Module/Contact.php:441 #: src/Module/Contact.php:444
msgid "Posts and Comments" msgid "Posts and Comments"
msgstr "Statusnachrichten und Kommentare" msgstr "Statusnachrichten und Kommentare"
#: src/Module/Contact.php:452 #: src/Module/Contact.php:455
msgid "Posts containing media objects" msgid "Posts containing media objects"
msgstr "Beiträge die Medien Objekte beinhalten" msgstr "Beiträge die Medien Objekte beinhalten"
#: src/Module/Contact.php:467 #: src/Module/Contact.php:470
msgid "View all known contacts" msgid "View all known contacts"
msgstr "Alle bekannten Kontakte anzeigen" msgstr "Alle bekannten Kontakte anzeigen"
#: src/Module/Contact.php:477 #: src/Module/Contact.php:480
msgid "Advanced Contact Settings" msgid "Advanced Contact Settings"
msgstr "Fortgeschrittene Kontakteinstellungen" msgstr "Fortgeschrittene Kontakteinstellungen"
#: src/Module/Contact.php:511 #: src/Module/Contact.php:514
msgid "Mutual Friendship" msgid "Mutual Friendship"
msgstr "Beidseitige Freundschaft" msgstr "Beidseitige Freundschaft"
#: src/Module/Contact.php:515 #: src/Module/Contact.php:518
msgid "is a fan of yours" msgid "is a fan of yours"
msgstr "ist ein Fan von dir" msgstr "ist ein Fan von dir"
#: src/Module/Contact.php:519 #: src/Module/Contact.php:522
msgid "you are a fan of" msgid "you are a fan of"
msgstr "Du bist Fan von" msgstr "Du bist Fan von"
#: src/Module/Contact.php:537 #: src/Module/Contact.php:540
msgid "Pending outgoing contact request" msgid "Pending outgoing contact request"
msgstr "Ausstehende ausgehende Kontaktanfrage" msgstr "Ausstehende ausgehende Kontaktanfrage"
#: src/Module/Contact.php:539 #: src/Module/Contact.php:542
msgid "Pending incoming contact request" msgid "Pending incoming contact request"
msgstr "Ausstehende eingehende Kontaktanfrage" msgstr "Ausstehende eingehende Kontaktanfrage"
#: src/Module/Contact.php:552 src/Module/Contact/Profile.php:334 #: src/Module/Contact.php:555 src/Module/Contact/Profile.php:334
#, php-format #, php-format
msgid "Visit %s's profile [%s]" msgid "Visit %s's profile [%s]"
msgstr "Besuche %ss Profil [%s]" msgstr "Besuche %ss Profil [%s]"
@ -7089,30 +7037,6 @@ msgid_plural "Contacts (%s)"
msgstr[0] "Kontakt (%s)" msgstr[0] "Kontakt (%s)"
msgstr[1] "Kontakte (%s)" msgstr[1] "Kontakte (%s)"
#: src/Module/Contact/Poke.php:135
msgid "Error while sending poke, please retry."
msgstr "Beim Versenden des Stupsers ist ein Fehler aufgetreten. Bitte erneut versuchen."
#: src/Module/Contact/Poke.php:148 src/Module/Search/Acl.php:55
msgid "You must be logged in to use this module."
msgstr "Du musst eingeloggt sein, um dieses Modul benutzen zu können."
#: src/Module/Contact/Poke.php:171
msgid "Poke/Prod"
msgstr "Anstupsen"
#: src/Module/Contact/Poke.php:172
msgid "poke, prod or do other things to somebody"
msgstr "Stupse Leute an oder mache anderes mit ihnen"
#: src/Module/Contact/Poke.php:174
msgid "Choose what you wish to do to recipient"
msgstr "Was willst du mit dem Empfänger machen:"
#: src/Module/Contact/Poke.php:175
msgid "Make this post private"
msgstr "Diesen Beitrag privat machen"
#: src/Module/Contact/Profile.php:127 #: src/Module/Contact/Profile.php:127
msgid "Failed to update contact record." msgid "Failed to update contact record."
msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen." msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
@ -7370,45 +7294,45 @@ msgstr "Willst du das Folgen dieses Kontakt wirklich widerrufen? Dies kann nicht
msgid "Yes" msgid "Yes"
msgstr "Ja" msgstr "Ja"
#: src/Module/Conversation/Community.php:68 #: src/Module/Conversation/Community.php:61
msgid "Local Community"
msgstr "Lokale Gemeinschaft"
#: src/Module/Conversation/Community.php:71
msgid "Posts from local users on this server"
msgstr "Beiträge von Nutzern dieses Servers"
#: src/Module/Conversation/Community.php:79
msgid "Global Community"
msgstr "Globale Gemeinschaft"
#: src/Module/Conversation/Community.php:82
msgid "Posts from users of the whole federated network"
msgstr "Beiträge von Nutzern des gesamten föderalen Netzwerks"
#: src/Module/Conversation/Community.php:115
msgid "Own Contacts"
msgstr "Eigene Kontakte"
#: src/Module/Conversation/Community.php:119
msgid "Include"
msgstr "Einschließen"
#: src/Module/Conversation/Community.php:120
msgid "Hide"
msgstr "Verbergen"
#: src/Module/Conversation/Community.php:137 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194
msgid "No results."
msgstr "Keine Ergebnisse."
#: src/Module/Conversation/Community.php:162
msgid "" msgid ""
"This community stream shows all public posts received by this node. They may" "This community stream shows all public posts received by this node. They may"
" not reflect the opinions of this nodes users." " not reflect the opinions of this nodes users."
msgstr "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers." msgstr "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers."
#: src/Module/Conversation/Community.php:74
msgid "Local Community"
msgstr "Lokale Gemeinschaft"
#: src/Module/Conversation/Community.php:77
msgid "Posts from local users on this server"
msgstr "Beiträge von Nutzern dieses Servers"
#: src/Module/Conversation/Community.php:85
msgid "Global Community"
msgstr "Globale Gemeinschaft"
#: src/Module/Conversation/Community.php:88
msgid "Posts from users of the whole federated network"
msgstr "Beiträge von Nutzern des gesamten föderalen Netzwerks"
#: src/Module/Conversation/Community.php:121
msgid "Own Contacts"
msgstr "Eigene Kontakte"
#: src/Module/Conversation/Community.php:125
msgid "Include"
msgstr "Einschließen"
#: src/Module/Conversation/Community.php:126
msgid "Hide"
msgstr "Verbergen"
#: src/Module/Conversation/Community.php:143 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194
msgid "No results."
msgstr "Keine Ergebnisse."
#: src/Module/Conversation/Community.php:199 #: src/Module/Conversation/Community.php:199
msgid "Community option not available." msgid "Community option not available."
msgstr "Optionen für die Gemeinschaftsseite nicht verfügbar." msgstr "Optionen für die Gemeinschaftsseite nicht verfügbar."
@ -7775,14 +7699,14 @@ msgstr "Ergebnisse für:"
msgid "Site Directory" msgid "Site Directory"
msgstr "Verzeichnis" msgstr "Verzeichnis"
#: src/Module/Filer/RemoveTag.php:68 #: src/Module/Filer/RemoveTag.php:101
msgid "Item was not removed"
msgstr "Item wurde nicht entfernt"
#: src/Module/Filer/RemoveTag.php:71
msgid "Item was not deleted" msgid "Item was not deleted"
msgstr "Item wurde nicht gelöscht" msgstr "Item wurde nicht gelöscht"
#: src/Module/Filer/RemoveTag.php:111
msgid "Item was not removed"
msgstr "Item wurde nicht entfernt"
#: src/Module/Filer/SaveTag.php:72 #: src/Module/Filer/SaveTag.php:72
msgid "- select -" msgid "- select -"
msgstr "- auswählen -" msgstr "- auswählen -"
@ -7823,7 +7747,7 @@ msgstr "Auf diesem Server werden die folgenden, entfernten Server blockiert."
#: src/Module/Friendica.php:84 #: src/Module/Friendica.php:84
msgid "Download this list in CSV format" msgid "Download this list in CSV format"
msgstr "" msgstr "Liste im CSV-Format herunterladen"
#: src/Module/Friendica.php:98 #: src/Module/Friendica.php:98
#, php-format #, php-format
@ -8208,40 +8132,46 @@ msgid ""
"important, please visit http://friendi.ca" "important, please visit http://friendi.ca"
msgstr "Für weitere Informationen über das Friendica-Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendi.ca." msgstr "Für weitere Informationen über das Friendica-Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendi.ca."
#: src/Module/Item/Compose.php:50 #: src/Module/Item/Compose.php:85
msgid "Please enter a post body." msgid "Please enter a post body."
msgstr "Bitte gibt den Text des Beitrags an" msgstr "Bitte gibt den Text des Beitrags an"
#: src/Module/Item/Compose.php:63 #: src/Module/Item/Compose.php:98
msgid "This feature is only available with the frio theme." msgid "This feature is only available with the frio theme."
msgstr "Diese Seite kann ausschließlich mit dem Frio Theme verwendet werden." msgstr "Diese Seite kann ausschließlich mit dem Frio Theme verwendet werden."
#: src/Module/Item/Compose.php:90 #: src/Module/Item/Compose.php:122
msgid "Compose new personal note" msgid "Compose new personal note"
msgstr "Neue persönliche Notiz verfassen" msgstr "Neue persönliche Notiz verfassen"
#: src/Module/Item/Compose.php:99 #: src/Module/Item/Compose.php:131
msgid "Compose new post" msgid "Compose new post"
msgstr "Neuen Beitrag verfassen" msgstr "Neuen Beitrag verfassen"
#: src/Module/Item/Compose.php:153 #: src/Module/Item/Compose.php:187
msgid "Visibility" msgid "Visibility"
msgstr "Sichtbarkeit" msgstr "Sichtbarkeit"
#: src/Module/Item/Compose.php:174 #: src/Module/Item/Compose.php:201
msgid "Clear the location" msgid "Clear the location"
msgstr "Ort löschen" msgstr "Ort löschen"
#: src/Module/Item/Compose.php:175 #: src/Module/Item/Compose.php:202
msgid "Location services are unavailable on your device" msgid "Location services are unavailable on your device"
msgstr "Ortungsdienste sind auf Ihrem Gerät nicht verfügbar" msgstr "Ortungsdienste sind auf Ihrem Gerät nicht verfügbar"
#: src/Module/Item/Compose.php:176 #: src/Module/Item/Compose.php:203
msgid "" msgid ""
"Location services are disabled. Please check the website's permissions on " "Location services are disabled. Please check the website's permissions on "
"your device" "your device"
msgstr "Ortungsdienste sind deaktiviert. Bitte überprüfe die Berechtigungen der Website auf deinem Gerät" msgstr "Ortungsdienste sind deaktiviert. Bitte überprüfe die Berechtigungen der Website auf deinem Gerät"
#: src/Module/Item/Compose.php:209
msgid ""
"You can make this page always open when you use the New Post button in the "
"<a href=\"/settings/display\">Theme Customization settings</a>."
msgstr "Wenn du magst, kannst du unter den <a href=\"/settings/display\">Benutzerdefinierte Theme-Einstellungen</a> einstellen, dass diese Seite immer geöffnet wird, wenn du den \"Neuer Beitrag\" Button verwendest."
#: src/Module/Item/Follow.php:52 #: src/Module/Item/Follow.php:52
msgid "Unable to follow this item." msgid "Unable to follow this item."
msgstr "Konnte dem Beitrag nicht folgen." msgstr "Konnte dem Beitrag nicht folgen."
@ -8471,7 +8401,7 @@ msgid ""
"class=\"btn btn-sm pull-right\">Cancel</a>" "class=\"btn btn-sm pull-right\">Cancel</a>"
msgstr "Du betrachtest dein Profil gerade als <b>%s</b> <a href=\"%s\" class=\"btn btn-sm pull-right\">Abbrechen</a>" msgstr "Du betrachtest dein Profil gerade als <b>%s</b> <a href=\"%s\" class=\"btn btn-sm pull-right\">Abbrechen</a>"
#: src/Module/Profile/Profile.php:144 src/Module/Settings/Account.php:578 #: src/Module/Profile/Profile.php:144 src/Module/Settings/Account.php:579
msgid "Full Name:" msgid "Full Name:"
msgstr "Kompletter Name:" msgstr "Kompletter Name:"
@ -8487,17 +8417,17 @@ msgstr "j F, Y"
msgid "j F" msgid "j F"
msgstr "j F" msgstr "j F"
#: src/Module/Profile/Profile.php:164 src/Util/Temporal.php:163 #: src/Module/Profile/Profile.php:164 src/Util/Temporal.php:166
msgid "Birthday:" msgid "Birthday:"
msgstr "Geburtstag:" msgstr "Geburtstag:"
#: src/Module/Profile/Profile.php:167 #: src/Module/Profile/Profile.php:167
#: src/Module/Settings/Profile/Index.php:245 src/Util/Temporal.php:165 #: src/Module/Settings/Profile/Index.php:245 src/Util/Temporal.php:168
msgid "Age: " msgid "Age: "
msgstr "Alter: " msgstr "Alter: "
#: src/Module/Profile/Profile.php:167 #: src/Module/Profile/Profile.php:167
#: src/Module/Settings/Profile/Index.php:245 src/Util/Temporal.php:165 #: src/Module/Settings/Profile/Index.php:245 src/Util/Temporal.php:168
#, php-format #, php-format
msgid "%d year old" msgid "%d year old"
msgid_plural "%d years old" msgid_plural "%d years old"
@ -8602,7 +8532,7 @@ msgid "Please repeat your e-mail address:"
msgstr "Bitte wiederhole deine E-Mail Adresse" msgstr "Bitte wiederhole deine E-Mail Adresse"
#: src/Module/Register.php:162 src/Module/Security/PasswordTooLong.php:97 #: src/Module/Register.php:162 src/Module/Security/PasswordTooLong.php:97
#: src/Module/Settings/Account.php:569 #: src/Module/Settings/Account.php:570
msgid "New Password:" msgid "New Password:"
msgstr "Neues Passwort:" msgstr "Neues Passwort:"
@ -8611,7 +8541,7 @@ msgid "Leave empty for an auto generated password."
msgstr "Leer lassen, um das Passwort automatisch zu generieren." msgstr "Leer lassen, um das Passwort automatisch zu generieren."
#: src/Module/Register.php:163 src/Module/Security/PasswordTooLong.php:98 #: src/Module/Register.php:163 src/Module/Security/PasswordTooLong.php:98
#: src/Module/Settings/Account.php:570 #: src/Module/Settings/Account.php:571
msgid "Confirm:" msgid "Confirm:"
msgstr "Bestätigen:" msgstr "Bestätigen:"
@ -8732,6 +8662,10 @@ msgstr "Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du <a
msgid "Your Webfinger address or profile URL:" msgid "Your Webfinger address or profile URL:"
msgstr "Deine Webfinger Adresse oder Profil-URL" msgstr "Deine Webfinger Adresse oder Profil-URL"
#: src/Module/Search/Acl.php:55
msgid "You must be logged in to use this module."
msgstr "Du musst eingeloggt sein, um dieses Modul benutzen zu können."
#: src/Module/Search/Index.php:69 #: src/Module/Search/Index.php:69
msgid "Only logged in users are permitted to perform a search." msgid "Only logged in users are permitted to perform a search."
msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet." msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet."
@ -8828,16 +8762,16 @@ msgid ""
msgstr "Nutzerkonto nicht gefunden. Bitte registriere ein neues Konto oder melde dich mit einem existierendem Konto an um diene OpenID hinzuzufügen." msgstr "Nutzerkonto nicht gefunden. Bitte registriere ein neues Konto oder melde dich mit einem existierendem Konto an um diene OpenID hinzuzufügen."
#: src/Module/Security/PasswordTooLong.php:53 #: src/Module/Security/PasswordTooLong.php:53
#: src/Module/Settings/Account.php:66 #: src/Module/Settings/Account.php:67
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "Die Passwörter stimmen nicht überein." msgstr "Die Passwörter stimmen nicht überein."
#: src/Module/Security/PasswordTooLong.php:60 #: src/Module/Security/PasswordTooLong.php:60
msgid "Password does not need changing." msgid "Password does not need changing."
msgstr "" msgstr "Passwort muss nicht geändert werden."
#: src/Module/Security/PasswordTooLong.php:73 #: src/Module/Security/PasswordTooLong.php:73
#: src/Module/Settings/Account.php:80 #: src/Module/Settings/Account.php:81
msgid "Password unchanged." msgid "Password unchanged."
msgstr "Passwort unverändert." msgstr "Passwort unverändert."
@ -8850,31 +8784,31 @@ msgid ""
"Since version 2022.09, we've realized that any password longer than 72 " "Since version 2022.09, we've realized that any password longer than 72 "
"characters is truncated during hashing. To prevent any confusion about this " "characters is truncated during hashing. To prevent any confusion about this "
"behavior, please update your password to be fewer or equal to 72 characters." "behavior, please update your password to be fewer or equal to 72 characters."
msgstr "" msgstr "Mit der Version 2022.09 haben wir festgestellt, dass jedes Passwort, das länger als 72 Zeichen ist, beim Hashing abgeschnitten wird. Um Verwirrung über dieses Verhalten zu vermeiden, aktualisieren Sie Ihr Passwort bitte so, dass es höchstens 72 Zeichen hat."
#: src/Module/Security/PasswordTooLong.php:89 #: src/Module/Security/PasswordTooLong.php:89
msgid "Update Password" msgid "Update Password"
msgstr "Passwort aktualisieren" msgstr "Passwort aktualisieren"
#: src/Module/Security/PasswordTooLong.php:96 #: src/Module/Security/PasswordTooLong.php:96
#: src/Module/Settings/Account.php:571 #: src/Module/Settings/Account.php:572
msgid "Current Password:" msgid "Current Password:"
msgstr "Aktuelles Passwort:" msgstr "Aktuelles Passwort:"
#: src/Module/Security/PasswordTooLong.php:96 #: src/Module/Security/PasswordTooLong.php:96
#: src/Module/Settings/Account.php:571 #: src/Module/Settings/Account.php:572
msgid "Your current password to confirm the changes" msgid "Your current password to confirm the changes"
msgstr "Dein aktuelles Passwort um die Änderungen zu bestätigen" msgstr "Dein aktuelles Passwort um die Änderungen zu bestätigen"
#: src/Module/Security/PasswordTooLong.php:97 #: src/Module/Security/PasswordTooLong.php:97
#: src/Module/Settings/Account.php:554 #: src/Module/Settings/Account.php:555
msgid "" msgid ""
"Allowed characters are a-z, A-Z, 0-9 and special characters except white " "Allowed characters are a-z, A-Z, 0-9 and special characters except white "
"spaces, accentuated letters and colon (:)." "spaces, accentuated letters and colon (:)."
msgstr "Erlaubte Zeichen sind a-z, A-Z, 0-9 und Sonderzeichen, abgesehen von Leerzeichen, Doppelpunkten (:) und akzentuierten Buchstaben." msgstr "Erlaubte Zeichen sind a-z, A-Z, 0-9 und Sonderzeichen, abgesehen von Leerzeichen, Doppelpunkten (:) und akzentuierten Buchstaben."
#: src/Module/Security/PasswordTooLong.php:97 #: src/Module/Security/PasswordTooLong.php:97
#: src/Module/Settings/Account.php:555 #: src/Module/Settings/Account.php:556
msgid "Password length is limited to 72 characters." msgid "Password length is limited to 72 characters."
msgstr "Die Länge des Passworts ist auf 72 Zeichen begrenzt." msgstr "Die Länge des Passworts ist auf 72 Zeichen begrenzt."
@ -8978,119 +8912,119 @@ msgstr "Bitte gebe einen Code aus Ihrer Authentifizierungs-App ein"
msgid "Verify code and complete login" msgid "Verify code and complete login"
msgstr "Code überprüfen und Anmeldung abschließen" msgstr "Code überprüfen und Anmeldung abschließen"
#: src/Module/Settings/Account.php:95 #: src/Module/Settings/Account.php:96
msgid "Please use a shorter name." msgid "Please use a shorter name."
msgstr "Bitte verwende einen kürzeren Namen." msgstr "Bitte verwende einen kürzeren Namen."
#: src/Module/Settings/Account.php:98 #: src/Module/Settings/Account.php:99
msgid "Name too short." msgid "Name too short."
msgstr "Der Name ist zu kurz." msgstr "Der Name ist zu kurz."
#: src/Module/Settings/Account.php:107 #: src/Module/Settings/Account.php:108
msgid "Wrong Password." msgid "Wrong Password."
msgstr "Falsches Passwort" msgstr "Falsches Passwort"
#: src/Module/Settings/Account.php:112 #: src/Module/Settings/Account.php:113
msgid "Invalid email." msgid "Invalid email."
msgstr "Ungültige E-Mail-Adresse." msgstr "Ungültige E-Mail-Adresse."
#: src/Module/Settings/Account.php:118 #: src/Module/Settings/Account.php:119
msgid "Cannot change to that email." msgid "Cannot change to that email."
msgstr "Ändern der E-Mail nicht möglich. " msgstr "Ändern der E-Mail nicht möglich. "
#: src/Module/Settings/Account.php:148 src/Module/Settings/Account.php:200 #: src/Module/Settings/Account.php:149 src/Module/Settings/Account.php:201
#: src/Module/Settings/Account.php:220 src/Module/Settings/Account.php:304 #: src/Module/Settings/Account.php:221 src/Module/Settings/Account.php:305
#: src/Module/Settings/Account.php:353 #: src/Module/Settings/Account.php:354
msgid "Settings were not updated." msgid "Settings were not updated."
msgstr "Einstellungen nicht aktualisiert" msgstr "Einstellungen nicht aktualisiert"
#: src/Module/Settings/Account.php:365 #: src/Module/Settings/Account.php:366
msgid "Contact CSV file upload error" msgid "Contact CSV file upload error"
msgstr "Fehler beim Hochladen der Kontakt CSV Datei" msgstr "Fehler beim Hochladen der Kontakt CSV Datei"
#: src/Module/Settings/Account.php:384 #: src/Module/Settings/Account.php:385
msgid "Importing Contacts done" msgid "Importing Contacts done"
msgstr "Kontakte wurden importiert." msgstr "Kontakte wurden importiert."
#: src/Module/Settings/Account.php:397 #: src/Module/Settings/Account.php:398
msgid "Relocate message has been send to your contacts" msgid "Relocate message has been send to your contacts"
msgstr "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet." msgstr "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet."
#: src/Module/Settings/Account.php:414 #: src/Module/Settings/Account.php:415
msgid "Unable to find your profile. Please contact your admin." msgid "Unable to find your profile. Please contact your admin."
msgstr "Konnte dein Profil nicht finden. Bitte kontaktiere den Admin." msgstr "Konnte dein Profil nicht finden. Bitte kontaktiere den Admin."
#: src/Module/Settings/Account.php:456 #: src/Module/Settings/Account.php:457
msgid "Personal Page Subtypes" msgid "Personal Page Subtypes"
msgstr "Unterarten der persönlichen Seite" msgstr "Unterarten der persönlichen Seite"
#: src/Module/Settings/Account.php:457 #: src/Module/Settings/Account.php:458
msgid "Community Forum Subtypes" msgid "Community Forum Subtypes"
msgstr "Unterarten des Gemeinschaftsforums" msgstr "Unterarten des Gemeinschaftsforums"
#: src/Module/Settings/Account.php:467 #: src/Module/Settings/Account.php:468
msgid "Account for a personal profile." msgid "Account for a personal profile."
msgstr "Konto für ein persönliches Profil." msgstr "Konto für ein persönliches Profil."
#: src/Module/Settings/Account.php:474 #: src/Module/Settings/Account.php:475
msgid "" msgid ""
"Account for an organisation that automatically approves contact requests as " "Account for an organisation that automatically approves contact requests as "
"\"Followers\"." "\"Followers\"."
msgstr "Konto für eine Organisation, das Kontaktanfragen automatisch als \"Follower\" annimmt." msgstr "Konto für eine Organisation, das Kontaktanfragen automatisch als \"Follower\" annimmt."
#: src/Module/Settings/Account.php:481 #: src/Module/Settings/Account.php:482
msgid "" msgid ""
"Account for a news reflector that automatically approves contact requests as" "Account for a news reflector that automatically approves contact requests as"
" \"Followers\"." " \"Followers\"."
msgstr "Konto für einen Feedspiegel, das Kontaktanfragen automatisch als \"Follower\" annimmt." msgstr "Konto für einen Feedspiegel, das Kontaktanfragen automatisch als \"Follower\" annimmt."
#: src/Module/Settings/Account.php:488 #: src/Module/Settings/Account.php:489
msgid "Account for community discussions." msgid "Account for community discussions."
msgstr "Konto für Diskussionsforen. " msgstr "Konto für Diskussionsforen. "
#: src/Module/Settings/Account.php:495 #: src/Module/Settings/Account.php:496
msgid "" msgid ""
"Account for a regular personal profile that requires manual approval of " "Account for a regular personal profile that requires manual approval of "
"\"Friends\" and \"Followers\"." "\"Friends\" and \"Followers\"."
msgstr "Konto für ein normales, persönliches Profil. Kontaktanfragen müssen manuell als \"Friend\" oder \"Follower\" bestätigt werden." msgstr "Konto für ein normales, persönliches Profil. Kontaktanfragen müssen manuell als \"Friend\" oder \"Follower\" bestätigt werden."
#: src/Module/Settings/Account.php:502 #: src/Module/Settings/Account.php:503
msgid "" msgid ""
"Account for a public profile that automatically approves contact requests as" "Account for a public profile that automatically approves contact requests as"
" \"Followers\"." " \"Followers\"."
msgstr "Konto für ein öffentliches Profil, das Kontaktanfragen automatisch als \"Follower\" annimmt." msgstr "Konto für ein öffentliches Profil, das Kontaktanfragen automatisch als \"Follower\" annimmt."
#: src/Module/Settings/Account.php:509 #: src/Module/Settings/Account.php:510
msgid "Automatically approves all contact requests." msgid "Automatically approves all contact requests."
msgstr "Bestätigt alle Kontaktanfragen automatisch." msgstr "Bestätigt alle Kontaktanfragen automatisch."
#: src/Module/Settings/Account.php:516 #: src/Module/Settings/Account.php:517
msgid "" msgid ""
"Account for a popular profile that automatically approves contact requests " "Account for a popular profile that automatically approves contact requests "
"as \"Friends\"." "as \"Friends\"."
msgstr "Konto für ein gefragtes Profil, das Kontaktanfragen automatisch als \"Friend\" annimmt." msgstr "Konto für ein gefragtes Profil, das Kontaktanfragen automatisch als \"Friend\" annimmt."
#: src/Module/Settings/Account.php:521 #: src/Module/Settings/Account.php:522
msgid "Private Forum [Experimental]" msgid "Private Forum [Experimental]"
msgstr "Privates Forum [Versuchsstadium]" msgstr "Privates Forum [Versuchsstadium]"
#: src/Module/Settings/Account.php:523 #: src/Module/Settings/Account.php:524
msgid "Requires manual approval of contact requests." msgid "Requires manual approval of contact requests."
msgstr "Kontaktanfragen müssen manuell bestätigt werden." msgstr "Kontaktanfragen müssen manuell bestätigt werden."
#: src/Module/Settings/Account.php:532 #: src/Module/Settings/Account.php:533
msgid "OpenID:" msgid "OpenID:"
msgstr "OpenID:" msgstr "OpenID:"
#: src/Module/Settings/Account.php:532 #: src/Module/Settings/Account.php:533
msgid "(Optional) Allow this OpenID to login to this account." msgid "(Optional) Allow this OpenID to login to this account."
msgstr "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID." msgstr "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID."
#: src/Module/Settings/Account.php:540 #: src/Module/Settings/Account.php:541
msgid "Publish your profile in your local site directory?" msgid "Publish your profile in your local site directory?"
msgstr "Darf dein Profil im lokalen Verzeichnis dieses Servers veröffentlicht werden?" msgstr "Darf dein Profil im lokalen Verzeichnis dieses Servers veröffentlicht werden?"
#: src/Module/Settings/Account.php:540 #: src/Module/Settings/Account.php:541
#, php-format #, php-format
msgid "" msgid ""
"Your profile will be published in this node's <a href=\"%s\">local " "Your profile will be published in this node's <a href=\"%s\">local "
@ -9098,89 +9032,89 @@ msgid ""
" system settings." " system settings."
msgstr "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein." msgstr "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein."
#: src/Module/Settings/Account.php:546 #: src/Module/Settings/Account.php:547
#, php-format #, php-format
msgid "" msgid ""
"Your profile will also be published in the global friendica directories " "Your profile will also be published in the global friendica directories "
"(e.g. <a href=\"%s\">%s</a>)." "(e.g. <a href=\"%s\">%s</a>)."
msgstr "Dein Profil wird auch in den globalen Friendica Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht werden." msgstr "Dein Profil wird auch in den globalen Friendica Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht werden."
#: src/Module/Settings/Account.php:559 #: src/Module/Settings/Account.php:560
msgid "Account Settings" msgid "Account Settings"
msgstr "Kontoeinstellungen" msgstr "Kontoeinstellungen"
#: src/Module/Settings/Account.php:560 #: src/Module/Settings/Account.php:561
#, php-format #, php-format
msgid "Your Identity Address is <strong>'%s'</strong> or '%s'." msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
msgstr "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'." msgstr "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'."
#: src/Module/Settings/Account.php:568 #: src/Module/Settings/Account.php:569
msgid "Password Settings" msgid "Password Settings"
msgstr "Passwort-Einstellungen" msgstr "Passwort-Einstellungen"
#: src/Module/Settings/Account.php:570 #: src/Module/Settings/Account.php:571
msgid "Leave password fields blank unless changing" msgid "Leave password fields blank unless changing"
msgstr "Lass die Passwort-Felder leer, außer du willst das Passwort ändern" msgstr "Lass die Passwort-Felder leer, außer du willst das Passwort ändern"
#: src/Module/Settings/Account.php:572 #: src/Module/Settings/Account.php:573
msgid "Password:" msgid "Password:"
msgstr "Passwort:" msgstr "Passwort:"
#: src/Module/Settings/Account.php:572 #: src/Module/Settings/Account.php:573
msgid "Your current password to confirm the changes of the email address" msgid "Your current password to confirm the changes of the email address"
msgstr "Dein aktuelles Passwort um die Änderungen deiner E-Mail Adresse zu bestätigen" msgstr "Dein aktuelles Passwort um die Änderungen deiner E-Mail Adresse zu bestätigen"
#: src/Module/Settings/Account.php:575 #: src/Module/Settings/Account.php:576
msgid "Delete OpenID URL" msgid "Delete OpenID URL"
msgstr "OpenID URL löschen" msgstr "OpenID URL löschen"
#: src/Module/Settings/Account.php:577 #: src/Module/Settings/Account.php:578
msgid "Basic Settings" msgid "Basic Settings"
msgstr "Grundeinstellungen" msgstr "Grundeinstellungen"
#: src/Module/Settings/Account.php:579 #: src/Module/Settings/Account.php:580
msgid "Email Address:" msgid "Email Address:"
msgstr "E-Mail-Adresse:" msgstr "E-Mail-Adresse:"
#: src/Module/Settings/Account.php:580 #: src/Module/Settings/Account.php:581
msgid "Your Timezone:" msgid "Your Timezone:"
msgstr "Deine Zeitzone:" msgstr "Deine Zeitzone:"
#: src/Module/Settings/Account.php:581 #: src/Module/Settings/Account.php:582
msgid "Your Language:" msgid "Your Language:"
msgstr "Deine Sprache:" msgstr "Deine Sprache:"
#: src/Module/Settings/Account.php:581 #: src/Module/Settings/Account.php:582
msgid "" msgid ""
"Set the language we use to show you friendica interface and to send you " "Set the language we use to show you friendica interface and to send you "
"emails" "emails"
msgstr "Wähle die Sprache, in der wir dir die Friendica-Oberfläche präsentieren sollen und dir E-Mail schicken" msgstr "Wähle die Sprache, in der wir dir die Friendica-Oberfläche präsentieren sollen und dir E-Mail schicken"
#: src/Module/Settings/Account.php:582 #: src/Module/Settings/Account.php:583
msgid "Default Post Location:" msgid "Default Post Location:"
msgstr "Standardstandort:" msgstr "Standardstandort:"
#: src/Module/Settings/Account.php:583 #: src/Module/Settings/Account.php:584
msgid "Use Browser Location:" msgid "Use Browser Location:"
msgstr "Standort des Browsers verwenden:" msgstr "Standort des Browsers verwenden:"
#: src/Module/Settings/Account.php:585 #: src/Module/Settings/Account.php:586
msgid "Security and Privacy Settings" msgid "Security and Privacy Settings"
msgstr "Sicherheits- und Privatsphäre-Einstellungen" msgstr "Sicherheits- und Privatsphäre-Einstellungen"
#: src/Module/Settings/Account.php:587 #: src/Module/Settings/Account.php:588
msgid "Maximum Friend Requests/Day:" msgid "Maximum Friend Requests/Day:"
msgstr "Maximale Anzahl von Kontaktanfragen/Tag:" msgstr "Maximale Anzahl von Kontaktanfragen/Tag:"
#: src/Module/Settings/Account.php:587 src/Module/Settings/Account.php:597 #: src/Module/Settings/Account.php:588 src/Module/Settings/Account.php:598
msgid "(to prevent spam abuse)" msgid "(to prevent spam abuse)"
msgstr "(um SPAM zu vermeiden)" msgstr "(um SPAM zu vermeiden)"
#: src/Module/Settings/Account.php:589 #: src/Module/Settings/Account.php:590
msgid "Allow your profile to be searchable globally?" msgid "Allow your profile to be searchable globally?"
msgstr "Darf dein Profil bei Suchanfragen gefunden werden?" msgstr "Darf dein Profil bei Suchanfragen gefunden werden?"
#: src/Module/Settings/Account.php:589 #: src/Module/Settings/Account.php:590
msgid "" msgid ""
"Activate this setting if you want others to easily find and follow you. Your" "Activate this setting if you want others to easily find and follow you. Your"
" profile will be searchable on remote systems. This setting also determines " " profile will be searchable on remote systems. This setting also determines "
@ -9188,43 +9122,43 @@ msgid ""
"indexed or not." "indexed or not."
msgstr "Aktiviere diese Einstellung, wenn du von anderen einfach gefunden und gefolgt werden möchtest. Dei Profil wird dann auf anderen Systemen leicht durchsuchbar. Außerdem regelt diese Einstellung ob Friendica Suchmaschinen mitteilen soll, ob dein Profil indiziert werden soll oder nicht." msgstr "Aktiviere diese Einstellung, wenn du von anderen einfach gefunden und gefolgt werden möchtest. Dei Profil wird dann auf anderen Systemen leicht durchsuchbar. Außerdem regelt diese Einstellung ob Friendica Suchmaschinen mitteilen soll, ob dein Profil indiziert werden soll oder nicht."
#: src/Module/Settings/Account.php:590 #: src/Module/Settings/Account.php:591
msgid "Hide your contact/friend list from viewers of your profile?" msgid "Hide your contact/friend list from viewers of your profile?"
msgstr "Liste der Kontakte vor Betrachtern des Profil verbergen?" msgstr "Liste der Kontakte vor Betrachtern des Profil verbergen?"
#: src/Module/Settings/Account.php:590 #: src/Module/Settings/Account.php:591
msgid "" msgid ""
"A list of your contacts is displayed on your profile page. Activate this " "A list of your contacts is displayed on your profile page. Activate this "
"option to disable the display of your contact list." "option to disable the display of your contact list."
msgstr "Auf deiner Profilseite wird eine Liste deiner Kontakte angezeigt. Aktiviere diese Option wenn du das nicht möchtest." msgstr "Auf deiner Profilseite wird eine Liste deiner Kontakte angezeigt. Aktiviere diese Option wenn du das nicht möchtest."
#: src/Module/Settings/Account.php:591 #: src/Module/Settings/Account.php:592
msgid "Hide your profile details from anonymous viewers?" msgid "Hide your profile details from anonymous viewers?"
msgstr "Profil-Details vor unbekannten Betrachtern verbergen?" msgstr "Profil-Details vor unbekannten Betrachtern verbergen?"
#: src/Module/Settings/Account.php:591 #: src/Module/Settings/Account.php:592
msgid "" msgid ""
"Anonymous visitors will only see your profile picture, your display name and" "Anonymous visitors will only see your profile picture, your display name and"
" the nickname you are using on your profile page. Your public posts and " " the nickname you are using on your profile page. Your public posts and "
"replies will still be accessible by other means." "replies will still be accessible by other means."
msgstr "Anonyme Besucher deines Profils werden ausschließlich dein Profilbild, deinen Namen sowie deinen Spitznamen sehen. Deine öffentlichen Beiträge und Kommentare werden weiterhin sichtbar sein." msgstr "Anonyme Besucher deines Profils werden ausschließlich dein Profilbild, deinen Namen sowie deinen Spitznamen sehen. Deine öffentlichen Beiträge und Kommentare werden weiterhin sichtbar sein."
#: src/Module/Settings/Account.php:592 #: src/Module/Settings/Account.php:593
msgid "Make public posts unlisted" msgid "Make public posts unlisted"
msgstr "Öffentliche Beiträge nicht listen" msgstr "Öffentliche Beiträge nicht listen"
#: src/Module/Settings/Account.php:592 #: src/Module/Settings/Account.php:593
msgid "" msgid ""
"Your public posts will not appear on the community pages or in search " "Your public posts will not appear on the community pages or in search "
"results, nor be sent to relay servers. However they can still appear on " "results, nor be sent to relay servers. However they can still appear on "
"public feeds on remote servers." "public feeds on remote servers."
msgstr "Deine öffentlichen Beiträge werden nicht auf der Gemeinschaftsseite oder in den Suchergebnissen erscheinen, außerdem werden sie nicht an Relay-Server geschickt. Sie werden aber weiterhin in allen öffentlichen Feeds, auch auf entfernten Servern, erscheinen." msgstr "Deine öffentlichen Beiträge werden nicht auf der Gemeinschaftsseite oder in den Suchergebnissen erscheinen, außerdem werden sie nicht an Relay-Server geschickt. Sie werden aber weiterhin in allen öffentlichen Feeds, auch auf entfernten Servern, erscheinen."
#: src/Module/Settings/Account.php:593 #: src/Module/Settings/Account.php:594
msgid "Make all posted pictures accessible" msgid "Make all posted pictures accessible"
msgstr "Alle geposteten Bilder zugreifbar machen" msgstr "Alle geposteten Bilder zugreifbar machen"
#: src/Module/Settings/Account.php:593 #: src/Module/Settings/Account.php:594
msgid "" msgid ""
"This option makes every posted picture accessible via the direct link. This " "This option makes every posted picture accessible via the direct link. This "
"is a workaround for the problem that most other networks can't handle " "is a workaround for the problem that most other networks can't handle "
@ -9232,131 +9166,127 @@ msgid ""
"public on your photo albums though." "public on your photo albums though."
msgstr "Diese Option macht jedes veröffentlichte Bild über den direkten Link zugänglich. Dies ist eine Problemumgehung für das Problem, dass die meisten anderen Netzwerke keine Berechtigungen für Bilder verarbeiten können. Nicht öffentliche Bilder sind in Ihren Fotoalben jedoch immer noch nicht für die Öffentlichkeit sichtbar." msgstr "Diese Option macht jedes veröffentlichte Bild über den direkten Link zugänglich. Dies ist eine Problemumgehung für das Problem, dass die meisten anderen Netzwerke keine Berechtigungen für Bilder verarbeiten können. Nicht öffentliche Bilder sind in Ihren Fotoalben jedoch immer noch nicht für die Öffentlichkeit sichtbar."
#: src/Module/Settings/Account.php:594 #: src/Module/Settings/Account.php:595
msgid "Allow friends to post to your profile page?" msgid "Allow friends to post to your profile page?"
msgstr "Dürfen deine Kontakte auf deine Pinnwand schreiben?" msgstr "Dürfen deine Kontakte auf deine Pinnwand schreiben?"
#: src/Module/Settings/Account.php:594 #: src/Module/Settings/Account.php:595
msgid "" msgid ""
"Your contacts may write posts on your profile wall. These posts will be " "Your contacts may write posts on your profile wall. These posts will be "
"distributed to your contacts" "distributed to your contacts"
msgstr "Deine Kontakte können Beiträge auf deiner Pinnwand hinterlassen. Diese werden an deine Kontakte verteilt." msgstr "Deine Kontakte können Beiträge auf deiner Pinnwand hinterlassen. Diese werden an deine Kontakte verteilt."
#: src/Module/Settings/Account.php:595 #: src/Module/Settings/Account.php:596
msgid "Allow friends to tag your posts?" msgid "Allow friends to tag your posts?"
msgstr "Dürfen deine Kontakte deine Beiträge mit Schlagwörtern versehen?" msgstr "Dürfen deine Kontakte deine Beiträge mit Schlagwörtern versehen?"
#: src/Module/Settings/Account.php:595 #: src/Module/Settings/Account.php:596
msgid "Your contacts can add additional tags to your posts." msgid "Your contacts can add additional tags to your posts."
msgstr "Deine Kontakte dürfen deine Beiträge mit zusätzlichen Schlagworten versehen." msgstr "Deine Kontakte dürfen deine Beiträge mit zusätzlichen Schlagworten versehen."
#: src/Module/Settings/Account.php:596 #: src/Module/Settings/Account.php:597
msgid "Permit unknown people to send you private mail?" msgid "Permit unknown people to send you private mail?"
msgstr "Dürfen dir Unbekannte private Nachrichten schicken?" msgstr "Dürfen dir Unbekannte private Nachrichten schicken?"
#: src/Module/Settings/Account.php:596 #: src/Module/Settings/Account.php:597
msgid "" msgid ""
"Friendica network users may send you private messages even if they are not " "Friendica network users may send you private messages even if they are not "
"in your contact list." "in your contact list."
msgstr "Nutzer des Friendica Netzwerks können dir private Nachrichten senden, selbst wenn sie nicht in deine Kontaktliste sind." msgstr "Nutzer des Friendica Netzwerks können dir private Nachrichten senden, selbst wenn sie nicht in deine Kontaktliste sind."
#: src/Module/Settings/Account.php:597 #: src/Module/Settings/Account.php:598
msgid "Maximum private messages per day from unknown people:" msgid "Maximum private messages per day from unknown people:"
msgstr "Maximale Anzahl privater Nachrichten von Unbekannten pro Tag:" msgstr "Maximale Anzahl privater Nachrichten von Unbekannten pro Tag:"
#: src/Module/Settings/Account.php:599 #: src/Module/Settings/Account.php:600
msgid "Default Post Permissions" msgid "Default Post Permissions"
msgstr "Standard-Zugriffsrechte für Beiträge" msgstr "Standard-Zugriffsrechte für Beiträge"
#: src/Module/Settings/Account.php:603 #: src/Module/Settings/Account.php:604
msgid "Expiration settings" msgid "Expiration settings"
msgstr "Verfalls-Einstellungen" msgstr "Verfalls-Einstellungen"
#: src/Module/Settings/Account.php:604 #: src/Module/Settings/Account.php:605
msgid "Automatically expire posts after this many days:" msgid "Automatically expire posts after this many days:"
msgstr "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:" msgstr "Beiträge verfallen automatisch nach dieser Anzahl von Tagen:"
#: src/Module/Settings/Account.php:604 #: src/Module/Settings/Account.php:605
msgid "If empty, posts will not expire. Expired posts will be deleted" msgid "If empty, posts will not expire. Expired posts will be deleted"
msgstr "Wenn leer, verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht." msgstr "Wenn leer, verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht."
#: src/Module/Settings/Account.php:605 #: src/Module/Settings/Account.php:606
msgid "Expire posts" msgid "Expire posts"
msgstr "Beiträge verfallen lassen" msgstr "Beiträge verfallen lassen"
#: src/Module/Settings/Account.php:605 #: src/Module/Settings/Account.php:606
msgid "When activated, posts and comments will be expired." msgid "When activated, posts and comments will be expired."
msgstr "Ist dies aktiviert, werden Beiträge und Kommentare verfallen." msgstr "Ist dies aktiviert, werden Beiträge und Kommentare verfallen."
#: src/Module/Settings/Account.php:606 #: src/Module/Settings/Account.php:607
msgid "Expire personal notes" msgid "Expire personal notes"
msgstr "Persönliche Notizen verfallen lassen" msgstr "Persönliche Notizen verfallen lassen"
#: src/Module/Settings/Account.php:606 #: src/Module/Settings/Account.php:607
msgid "" msgid ""
"When activated, the personal notes on your profile page will be expired." "When activated, the personal notes on your profile page will be expired."
msgstr "Ist dies aktiviert, werden persönliche Notizen auf deiner Pinnwand verfallen." msgstr "Ist dies aktiviert, werden persönliche Notizen auf deiner Pinnwand verfallen."
#: src/Module/Settings/Account.php:607 #: src/Module/Settings/Account.php:608
msgid "Expire starred posts" msgid "Expire starred posts"
msgstr "Markierte Beiträge verfallen lassen" msgstr "Markierte Beiträge verfallen lassen"
#: src/Module/Settings/Account.php:607 #: src/Module/Settings/Account.php:608
msgid "" msgid ""
"Starring posts keeps them from being expired. That behaviour is overwritten " "Starring posts keeps them from being expired. That behaviour is overwritten "
"by this setting." "by this setting."
msgstr "Markierte Beiträge verfallen eigentlich nicht. Mit dieser Option kannst du sie verfallen lassen." msgstr "Markierte Beiträge verfallen eigentlich nicht. Mit dieser Option kannst du sie verfallen lassen."
#: src/Module/Settings/Account.php:608 #: src/Module/Settings/Account.php:609
msgid "Only expire posts by others" msgid "Only expire posts by others"
msgstr "Nur Beiträge anderer verfallen lassen." msgstr "Nur Beiträge anderer verfallen lassen."
#: src/Module/Settings/Account.php:608 #: src/Module/Settings/Account.php:609
msgid "" msgid ""
"When activated, your own posts never expire. Then the settings above are " "When activated, your own posts never expire. Then the settings above are "
"only valid for posts you received." "only valid for posts you received."
msgstr "Wenn aktiviert werden deine eigenen Beiträge niemals verfallen. Die obigen Einstellungen betreffen dann ausschließlich die Beiträge von anderen Accounts." msgstr "Wenn aktiviert werden deine eigenen Beiträge niemals verfallen. Die obigen Einstellungen betreffen dann ausschließlich die Beiträge von anderen Accounts."
#: src/Module/Settings/Account.php:611 #: src/Module/Settings/Account.php:612
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Benachrichtigungseinstellungen" msgstr "Benachrichtigungseinstellungen"
#: src/Module/Settings/Account.php:612 #: src/Module/Settings/Account.php:613
msgid "Send a notification email when:" msgid "Send a notification email when:"
msgstr "Benachrichtigungs-E-Mail senden, wenn:" msgstr "Benachrichtigungs-E-Mail senden, wenn:"
#: src/Module/Settings/Account.php:613 #: src/Module/Settings/Account.php:614
msgid "You receive an introduction" msgid "You receive an introduction"
msgstr " du eine Kontaktanfrage erhältst" msgstr " du eine Kontaktanfrage erhältst"
#: src/Module/Settings/Account.php:614 #: src/Module/Settings/Account.php:615
msgid "Your introductions are confirmed" msgid "Your introductions are confirmed"
msgstr " eine Deiner Kontaktanfragen akzeptiert wurde" msgstr " eine Deiner Kontaktanfragen akzeptiert wurde"
#: src/Module/Settings/Account.php:615 #: src/Module/Settings/Account.php:616
msgid "Someone writes on your profile wall" msgid "Someone writes on your profile wall"
msgstr " jemand etwas auf Deine Pinnwand schreibt" msgstr " jemand etwas auf Deine Pinnwand schreibt"
#: src/Module/Settings/Account.php:616 #: src/Module/Settings/Account.php:617
msgid "Someone writes a followup comment" msgid "Someone writes a followup comment"
msgstr " jemand auch einen Kommentar verfasst" msgstr " jemand auch einen Kommentar verfasst"
#: src/Module/Settings/Account.php:617 #: src/Module/Settings/Account.php:618
msgid "You receive a private message" msgid "You receive a private message"
msgstr " du eine private Nachricht erhältst" msgstr " du eine private Nachricht erhältst"
#: src/Module/Settings/Account.php:618 #: src/Module/Settings/Account.php:619
msgid "You receive a friend suggestion" msgid "You receive a friend suggestion"
msgstr " du eine Empfehlung erhältst" msgstr " du eine Empfehlung erhältst"
#: src/Module/Settings/Account.php:619 #: src/Module/Settings/Account.php:620
msgid "You are tagged in a post" msgid "You are tagged in a post"
msgstr " du in einem Beitrag erwähnt wirst" msgstr " du in einem Beitrag erwähnt wirst"
#: src/Module/Settings/Account.php:620
msgid "You are poked/prodded/etc. in a post"
msgstr " du von jemandem angestupst oder sonstwie behandelt wirst"
#: src/Module/Settings/Account.php:622 #: src/Module/Settings/Account.php:622
msgid "Create a desktop notification when:" msgid "Create a desktop notification when:"
msgstr "Benachrichtigungen anzeigen wenn:" msgstr "Benachrichtigungen anzeigen wenn:"
@ -9553,121 +9483,121 @@ msgstr "Das gewählte Theme ist nicht verfügbar"
msgid "%s - (Unsupported)" msgid "%s - (Unsupported)"
msgstr "%s - (Nicht unterstützt)" msgstr "%s - (Nicht unterstützt)"
#: src/Module/Settings/Display.php:192 #: src/Module/Settings/Display.php:200
msgid "Display Settings" msgid "Display Settings"
msgstr "Anzeige-Einstellungen" msgstr "Anzeige-Einstellungen"
#: src/Module/Settings/Display.php:194 #: src/Module/Settings/Display.php:202
msgid "General Theme Settings" msgid "General Theme Settings"
msgstr "Allgemeine Theme-Einstellungen" msgstr "Allgemeine Theme-Einstellungen"
#: src/Module/Settings/Display.php:195 #: src/Module/Settings/Display.php:203
msgid "Custom Theme Settings" msgid "Custom Theme Settings"
msgstr "Benutzerdefinierte Theme-Einstellungen" msgstr "Benutzerdefinierte Theme-Einstellungen"
#: src/Module/Settings/Display.php:196 #: src/Module/Settings/Display.php:204
msgid "Content Settings" msgid "Content Settings"
msgstr "Einstellungen zum Inhalt" msgstr "Einstellungen zum Inhalt"
#: src/Module/Settings/Display.php:197 view/theme/duepuntozero/config.php:70 #: src/Module/Settings/Display.php:205 view/theme/duepuntozero/config.php:70
#: view/theme/frio/config.php:161 view/theme/quattro/config.php:72 #: view/theme/frio/config.php:172 view/theme/quattro/config.php:72
#: view/theme/vier/config.php:120 #: view/theme/vier/config.php:120
msgid "Theme settings" msgid "Theme settings"
msgstr "Theme-Einstellungen" msgstr "Theme-Einstellungen"
#: src/Module/Settings/Display.php:198 #: src/Module/Settings/Display.php:206
msgid "Calendar" msgid "Calendar"
msgstr "Kalender" msgstr "Kalender"
#: src/Module/Settings/Display.php:204 #: src/Module/Settings/Display.php:212
msgid "Display Theme:" msgid "Display Theme:"
msgstr "Theme:" msgstr "Theme:"
#: src/Module/Settings/Display.php:205 #: src/Module/Settings/Display.php:213
msgid "Mobile Theme:" msgid "Mobile Theme:"
msgstr "Mobiles Theme" msgstr "Mobiles Theme"
#: src/Module/Settings/Display.php:208 #: src/Module/Settings/Display.php:216
msgid "Number of items to display per page:" msgid "Number of items to display per page:"
msgstr "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: " msgstr "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: "
#: src/Module/Settings/Display.php:208 src/Module/Settings/Display.php:209 #: src/Module/Settings/Display.php:216 src/Module/Settings/Display.php:217
msgid "Maximum of 100 items" msgid "Maximum of 100 items"
msgstr "Maximal 100 Beiträge" msgstr "Maximal 100 Beiträge"
#: src/Module/Settings/Display.php:209 #: src/Module/Settings/Display.php:217
msgid "Number of items to display per page when viewed from mobile device:" msgid "Number of items to display per page when viewed from mobile device:"
msgstr "Zahl der Beiträge, die pro Netzwerkseite auf mobilen Geräten angezeigt werden sollen:" msgstr "Zahl der Beiträge, die pro Netzwerkseite auf mobilen Geräten angezeigt werden sollen:"
#: src/Module/Settings/Display.php:210 #: src/Module/Settings/Display.php:218
msgid "Update browser every xx seconds" msgid "Update browser every xx seconds"
msgstr "Browser alle xx Sekunden aktualisieren" msgstr "Browser alle xx Sekunden aktualisieren"
#: src/Module/Settings/Display.php:210 #: src/Module/Settings/Display.php:218
msgid "Minimum of 10 seconds. Enter -1 to disable it." msgid "Minimum of 10 seconds. Enter -1 to disable it."
msgstr "Minimum sind 10 Sekunden. Gib -1 ein, um abzuschalten." msgstr "Minimum sind 10 Sekunden. Gib -1 ein, um abzuschalten."
#: src/Module/Settings/Display.php:211 #: src/Module/Settings/Display.php:219
msgid "Automatic updates only at the top of the post stream pages" msgid "Automatic updates only at the top of the post stream pages"
msgstr "Automatische Updates nur, wenn du oben auf den Beitragsstream-Seiten bist." msgstr "Automatische Updates nur, wenn du oben auf den Beitragsstream-Seiten bist."
#: src/Module/Settings/Display.php:211 #: src/Module/Settings/Display.php:219
msgid "" msgid ""
"Auto update may add new posts at the top of the post stream pages, which can" "Auto update may add new posts at the top of the post stream pages, which can"
" affect the scroll position and perturb normal reading if it happens " " affect the scroll position and perturb normal reading if it happens "
"anywhere else the top of the page." "anywhere else the top of the page."
msgstr "Das automatische Aktualisieren des Streams kann neue Beiträge am Anfang des Stream einfügen. Dies kann die angezeigte Position im Stream beeinflussen, wenn du gerade nicht den Anfang des Streams betrachtest." msgstr "Das automatische Aktualisieren des Streams kann neue Beiträge am Anfang des Stream einfügen. Dies kann die angezeigte Position im Stream beeinflussen, wenn du gerade nicht den Anfang des Streams betrachtest."
#: src/Module/Settings/Display.php:212 #: src/Module/Settings/Display.php:220
msgid "Display emoticons" msgid "Display emoticons"
msgstr "Zeige Emoticons" msgstr "Zeige Emoticons"
#: src/Module/Settings/Display.php:212 #: src/Module/Settings/Display.php:220
msgid "When enabled, emoticons are replaced with matching symbols." msgid "When enabled, emoticons are replaced with matching symbols."
msgstr "Wenn dies aktiviert ist, werden Text-Emoticons in Beiträgen durch Symbole ersetzt." msgstr "Wenn dies aktiviert ist, werden Text-Emoticons in Beiträgen durch Symbole ersetzt."
#: src/Module/Settings/Display.php:213 #: src/Module/Settings/Display.php:221
msgid "Infinite scroll" msgid "Infinite scroll"
msgstr "Endloses Scrollen" msgstr "Endloses Scrollen"
#: src/Module/Settings/Display.php:213 #: src/Module/Settings/Display.php:221
msgid "Automatic fetch new items when reaching the page end." msgid "Automatic fetch new items when reaching the page end."
msgstr "Automatisch neue Beiträge laden, wenn das Ende der Seite erreicht ist." msgstr "Automatisch neue Beiträge laden, wenn das Ende der Seite erreicht ist."
#: src/Module/Settings/Display.php:214 #: src/Module/Settings/Display.php:222
msgid "Enable Smart Threading" msgid "Enable Smart Threading"
msgstr "Intelligentes Threading aktivieren" msgstr "Intelligentes Threading aktivieren"
#: src/Module/Settings/Display.php:214 #: src/Module/Settings/Display.php:222
msgid "Enable the automatic suppression of extraneous thread indentation." msgid "Enable the automatic suppression of extraneous thread indentation."
msgstr "Schaltet das automatische Unterdrücken von überflüssigen Thread-Einrückungen ein." msgstr "Schaltet das automatische Unterdrücken von überflüssigen Thread-Einrückungen ein."
#: src/Module/Settings/Display.php:215 #: src/Module/Settings/Display.php:223
msgid "Display the Dislike feature" msgid "Display the Dislike feature"
msgstr "Das \"Nicht-mögen\" Feature anzeigen" msgstr "Das \"Nicht-mögen\" Feature anzeigen"
#: src/Module/Settings/Display.php:215 #: src/Module/Settings/Display.php:223
msgid "" msgid ""
"Display the Dislike button and dislike reactions on posts and comments." "Display the Dislike button and dislike reactions on posts and comments."
msgstr "Einen \"Ich mag das nicht\" Button und die dislike Reaktion auf Beiträge und Kommentare anzeigen." msgstr "Einen \"Ich mag das nicht\" Button und die dislike Reaktion auf Beiträge und Kommentare anzeigen."
#: src/Module/Settings/Display.php:216 #: src/Module/Settings/Display.php:224
msgid "Display the resharer" msgid "Display the resharer"
msgstr "Teilenden anzeigen" msgstr "Teilenden anzeigen"
#: src/Module/Settings/Display.php:216 #: src/Module/Settings/Display.php:224
msgid "Display the first resharer as icon and text on a reshared item." msgid "Display the first resharer as icon and text on a reshared item."
msgstr "Zeige das Profilbild des ersten Kontakts von dem ein Beitrag geteilt wurde." msgstr "Zeige das Profilbild des ersten Kontakts von dem ein Beitrag geteilt wurde."
#: src/Module/Settings/Display.php:217 #: src/Module/Settings/Display.php:225
msgid "Stay local" msgid "Stay local"
msgstr "Bleib lokal" msgstr "Bleib lokal"
#: src/Module/Settings/Display.php:217 #: src/Module/Settings/Display.php:225
msgid "Don't go to a remote system when following a contact link." msgid "Don't go to a remote system when following a contact link."
msgstr "Gehe nicht zu einem Remote-System, wenn einem Kontaktlink gefolgt wird" msgstr "Gehe nicht zu einem Remote-System, wenn einem Kontaktlink gefolgt wird"
#: src/Module/Settings/Display.php:219 #: src/Module/Settings/Display.php:227
msgid "Beginning of week:" msgid "Beginning of week:"
msgstr "Wochenbeginn:" msgstr "Wochenbeginn:"
@ -9723,8 +9653,8 @@ msgstr "Profilbild"
msgid "Location" msgid "Location"
msgstr "Wohnort" msgstr "Wohnort"
#: src/Module/Settings/Profile/Index.php:230 src/Util/Temporal.php:93 #: src/Module/Settings/Profile/Index.php:230 src/Util/Temporal.php:95
#: src/Util/Temporal.php:95 #: src/Util/Temporal.php:97
msgid "Miscellaneous" msgid "Miscellaneous"
msgstr "Verschiedenes" msgstr "Verschiedenes"
@ -10594,206 +10524,190 @@ msgstr "%1$s hat in der Unterhaltung von %3$s kommentiert"
msgid "%1$s commented on your thread %2$s" msgid "%1$s commented on your thread %2$s"
msgstr "%1$s hat in deiner Unterhaltung %2$s kommentiert" msgstr "%1$s hat in deiner Unterhaltung %2$s kommentiert"
#: src/Navigation/Notifications/Repository/Notify.php:222 #: src/Navigation/Notifications/Repository/Notify.php:225
#: src/Navigation/Notifications/Repository/Notify.php:736 #: src/Navigation/Notifications/Repository/Notify.php:721
msgid "[Friendica:Notify]" msgid "[Friendica:Notify]"
msgstr "[Friendica Meldung]" msgstr "[Friendica Meldung]"
#: src/Navigation/Notifications/Repository/Notify.php:286 #: src/Navigation/Notifications/Repository/Notify.php:289
#, php-format #, php-format
msgid "%s New mail received at %s" msgid "%s New mail received at %s"
msgstr "%sNeue Nachricht auf %s empfangen" msgstr "%sNeue Nachricht auf %s empfangen"
#: src/Navigation/Notifications/Repository/Notify.php:288 #: src/Navigation/Notifications/Repository/Notify.php:291
#, php-format #, php-format
msgid "%1$s sent you a new private message at %2$s." msgid "%1$s sent you a new private message at %2$s."
msgstr "%1$s hat dir eine neue, private Nachricht auf %2$s geschickt." msgstr "%1$s hat dir eine neue, private Nachricht auf %2$s geschickt."
#: src/Navigation/Notifications/Repository/Notify.php:289 #: src/Navigation/Notifications/Repository/Notify.php:292
msgid "a private message" msgid "a private message"
msgstr "eine private Nachricht" msgstr "eine private Nachricht"
#: src/Navigation/Notifications/Repository/Notify.php:289 #: src/Navigation/Notifications/Repository/Notify.php:292
#, php-format #, php-format
msgid "%1$s sent you %2$s." msgid "%1$s sent you %2$s."
msgstr "%1$s schickte dir %2$s." msgstr "%1$s schickte dir %2$s."
#: src/Navigation/Notifications/Repository/Notify.php:291 #: src/Navigation/Notifications/Repository/Notify.php:294
#, php-format #, php-format
msgid "Please visit %s to view and/or reply to your private messages." msgid "Please visit %s to view and/or reply to your private messages."
msgstr "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten." msgstr "Bitte besuche %s, um Deine privaten Nachrichten anzusehen und/oder zu beantworten."
#: src/Navigation/Notifications/Repository/Notify.php:321 #: src/Navigation/Notifications/Repository/Notify.php:324
#, php-format #, php-format
msgid "%1$s commented on %2$s's %3$s %4$s" msgid "%1$s commented on %2$s's %3$s %4$s"
msgstr "%1$s kommentierte %2$s's %3$s%4$s" msgstr "%1$s kommentierte %2$s's %3$s%4$s"
#: src/Navigation/Notifications/Repository/Notify.php:326 #: src/Navigation/Notifications/Repository/Notify.php:329
#, php-format #, php-format
msgid "%1$s commented on your %2$s %3$s" msgid "%1$s commented on your %2$s %3$s"
msgstr "%1$s kommentierte auf (%2$s) %3$s" msgstr "%1$s kommentierte auf (%2$s) %3$s"
#: src/Navigation/Notifications/Repository/Notify.php:330 #: src/Navigation/Notifications/Repository/Notify.php:333
#, php-format #, php-format
msgid "%1$s commented on their %2$s %3$s" msgid "%1$s commented on their %2$s %3$s"
msgstr "%1$s hat den eigenen %2$s %3$s kommentiert" msgstr "%1$s hat den eigenen %2$s %3$s kommentiert"
#: src/Navigation/Notifications/Repository/Notify.php:334 #: src/Navigation/Notifications/Repository/Notify.php:337
#: src/Navigation/Notifications/Repository/Notify.php:770 #: src/Navigation/Notifications/Repository/Notify.php:755
#, php-format #, php-format
msgid "%1$s Comment to conversation #%2$d by %3$s" msgid "%1$s Comment to conversation #%2$d by %3$s"
msgstr "%1$sKommentar von %3$s auf Unterhaltung %2$d" msgstr "%1$sKommentar von %3$s auf Unterhaltung %2$d"
#: src/Navigation/Notifications/Repository/Notify.php:336 #: src/Navigation/Notifications/Repository/Notify.php:339
#, php-format #, php-format
msgid "%s commented on an item/conversation you have been following." msgid "%s commented on an item/conversation you have been following."
msgstr "%s hat einen Beitrag kommentiert, dem du folgst." msgstr "%s hat einen Beitrag kommentiert, dem du folgst."
#: src/Navigation/Notifications/Repository/Notify.php:340 #: src/Navigation/Notifications/Repository/Notify.php:343
#: src/Navigation/Notifications/Repository/Notify.php:355 #: src/Navigation/Notifications/Repository/Notify.php:358
#: src/Navigation/Notifications/Repository/Notify.php:374 #: src/Navigation/Notifications/Repository/Notify.php:770
#: src/Navigation/Notifications/Repository/Notify.php:785
#, php-format #, php-format
msgid "Please visit %s to view and/or reply to the conversation." msgid "Please visit %s to view and/or reply to the conversation."
msgstr "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren." msgstr "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren."
#: src/Navigation/Notifications/Repository/Notify.php:347 #: src/Navigation/Notifications/Repository/Notify.php:350
#, php-format #, php-format
msgid "%s %s posted to your profile wall" msgid "%s %s posted to your profile wall"
msgstr "%s%s hat auf deine Pinnwand gepostet" msgstr "%s%s hat auf deine Pinnwand gepostet"
#: src/Navigation/Notifications/Repository/Notify.php:349 #: src/Navigation/Notifications/Repository/Notify.php:352
#, php-format #, php-format
msgid "%1$s posted to your profile wall at %2$s" msgid "%1$s posted to your profile wall at %2$s"
msgstr "%1$s schrieb um %2$s auf Deine Pinnwand" msgstr "%1$s schrieb um %2$s auf Deine Pinnwand"
#: src/Navigation/Notifications/Repository/Notify.php:350 #: src/Navigation/Notifications/Repository/Notify.php:353
#, php-format #, php-format
msgid "%1$s posted to [url=%2$s]your wall[/url]" msgid "%1$s posted to [url=%2$s]your wall[/url]"
msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet" msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet"
#: src/Navigation/Notifications/Repository/Notify.php:362 #: src/Navigation/Notifications/Repository/Notify.php:366
#, php-format
msgid "%1$s %2$s poked you"
msgstr "%1$s%2$shat dich angestubst"
#: src/Navigation/Notifications/Repository/Notify.php:364
#, php-format
msgid "%1$s poked you at %2$s"
msgstr "%1$s hat dich auf %2$s angestupst"
#: src/Navigation/Notifications/Repository/Notify.php:365
#, php-format
msgid "%1$s [url=%2$s]poked you[/url]."
msgstr "%1$s [url=%2$s]hat dich angestupst[/url]."
#: src/Navigation/Notifications/Repository/Notify.php:382
#, php-format #, php-format
msgid "%s Introduction received" msgid "%s Introduction received"
msgstr "%sVorstellung erhalten" msgstr "%sVorstellung erhalten"
#: src/Navigation/Notifications/Repository/Notify.php:384 #: src/Navigation/Notifications/Repository/Notify.php:368
#, php-format #, php-format
msgid "You've received an introduction from '%1$s' at %2$s" msgid "You've received an introduction from '%1$s' at %2$s"
msgstr "Du hast eine Kontaktanfrage von '%1$s' auf %2$s erhalten" msgstr "Du hast eine Kontaktanfrage von '%1$s' auf %2$s erhalten"
#: src/Navigation/Notifications/Repository/Notify.php:385 #: src/Navigation/Notifications/Repository/Notify.php:369
#, php-format #, php-format
msgid "You've received [url=%1$s]an introduction[/url] from %2$s." msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
msgstr "Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten." msgstr "Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten."
#: src/Navigation/Notifications/Repository/Notify.php:390 #: src/Navigation/Notifications/Repository/Notify.php:374
#: src/Navigation/Notifications/Repository/Notify.php:436 #: src/Navigation/Notifications/Repository/Notify.php:420
#, php-format #, php-format
msgid "You may visit their profile at %s" msgid "You may visit their profile at %s"
msgstr "Hier kannst du das Profil betrachten: %s" msgstr "Hier kannst du das Profil betrachten: %s"
#: src/Navigation/Notifications/Repository/Notify.php:392 #: src/Navigation/Notifications/Repository/Notify.php:376
#, php-format #, php-format
msgid "Please visit %s to approve or reject the introduction." msgid "Please visit %s to approve or reject the introduction."
msgstr "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen." msgstr "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen."
#: src/Navigation/Notifications/Repository/Notify.php:399 #: src/Navigation/Notifications/Repository/Notify.php:383
#, php-format #, php-format
msgid "%s A new person is sharing with you" msgid "%s A new person is sharing with you"
msgstr "%sEine neue Person teilt nun mit dir" msgstr "%sEine neue Person teilt nun mit dir"
#: src/Navigation/Notifications/Repository/Notify.php:401 #: src/Navigation/Notifications/Repository/Notify.php:385
#: src/Navigation/Notifications/Repository/Notify.php:402 #: src/Navigation/Notifications/Repository/Notify.php:386
#, php-format #, php-format
msgid "%1$s is sharing with you at %2$s" msgid "%1$s is sharing with you at %2$s"
msgstr "%1$s teilt mit dir auf %2$s" msgstr "%1$s teilt mit dir auf %2$s"
#: src/Navigation/Notifications/Repository/Notify.php:409 #: src/Navigation/Notifications/Repository/Notify.php:393
#, php-format #, php-format
msgid "%s You have a new follower" msgid "%s You have a new follower"
msgstr "%sDu hast einen neuen Kontakt" msgstr "%sDu hast einen neuen Kontakt"
#: src/Navigation/Notifications/Repository/Notify.php:411 #: src/Navigation/Notifications/Repository/Notify.php:395
#: src/Navigation/Notifications/Repository/Notify.php:412 #: src/Navigation/Notifications/Repository/Notify.php:396
#, php-format #, php-format
msgid "You have a new follower at %2$s : %1$s" msgid "You have a new follower at %2$s : %1$s"
msgstr "Du hast einen neuen Kontakt auf %2$s: %1$s" msgstr "Du hast einen neuen Kontakt auf %2$s: %1$s"
#: src/Navigation/Notifications/Repository/Notify.php:425 #: src/Navigation/Notifications/Repository/Notify.php:409
#, php-format #, php-format
msgid "%s Friend suggestion received" msgid "%s Friend suggestion received"
msgstr "%sKontaktvorschlag erhalten" msgstr "%sKontaktvorschlag erhalten"
#: src/Navigation/Notifications/Repository/Notify.php:427 #: src/Navigation/Notifications/Repository/Notify.php:411
#, php-format #, php-format
msgid "You've received a friend suggestion from '%1$s' at %2$s" msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr "Du hast einen Kontakt-Vorschlag von '%1$s' auf %2$s erhalten" msgstr "Du hast einen Kontakt-Vorschlag von '%1$s' auf %2$s erhalten"
#: src/Navigation/Notifications/Repository/Notify.php:428 #: src/Navigation/Notifications/Repository/Notify.php:412
#, php-format #, php-format
msgid "" msgid ""
"You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s." "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
msgstr "Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten." msgstr "Du hast einen [url=%1$s]Kontakt-Vorschlag[/url] %2$s von %3$s erhalten."
#: src/Navigation/Notifications/Repository/Notify.php:434 #: src/Navigation/Notifications/Repository/Notify.php:418
msgid "Name:" msgid "Name:"
msgstr "Name:" msgstr "Name:"
#: src/Navigation/Notifications/Repository/Notify.php:435 #: src/Navigation/Notifications/Repository/Notify.php:419
msgid "Photo:" msgid "Photo:"
msgstr "Foto:" msgstr "Foto:"
#: src/Navigation/Notifications/Repository/Notify.php:438 #: src/Navigation/Notifications/Repository/Notify.php:422
#, php-format #, php-format
msgid "Please visit %s to approve or reject the suggestion." msgid "Please visit %s to approve or reject the suggestion."
msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen." msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen."
#: src/Navigation/Notifications/Repository/Notify.php:446 #: src/Navigation/Notifications/Repository/Notify.php:430
#: src/Navigation/Notifications/Repository/Notify.php:461 #: src/Navigation/Notifications/Repository/Notify.php:445
#, php-format #, php-format
msgid "%s Connection accepted" msgid "%s Connection accepted"
msgstr "%sKontaktanfrage bestätigt" msgstr "%sKontaktanfrage bestätigt"
#: src/Navigation/Notifications/Repository/Notify.php:448 #: src/Navigation/Notifications/Repository/Notify.php:432
#: src/Navigation/Notifications/Repository/Notify.php:463 #: src/Navigation/Notifications/Repository/Notify.php:447
#, php-format #, php-format
msgid "'%1$s' has accepted your connection request at %2$s" msgid "'%1$s' has accepted your connection request at %2$s"
msgstr "'%1$s' hat Deine Kontaktanfrage auf %2$s bestätigt" msgstr "'%1$s' hat Deine Kontaktanfrage auf %2$s bestätigt"
#: src/Navigation/Notifications/Repository/Notify.php:449 #: src/Navigation/Notifications/Repository/Notify.php:433
#: src/Navigation/Notifications/Repository/Notify.php:464 #: src/Navigation/Notifications/Repository/Notify.php:448
#, php-format #, php-format
msgid "%2$s has accepted your [url=%1$s]connection request[/url]." msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
msgstr "%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert." msgstr "%2$s hat Deine [url=%1$s]Kontaktanfrage[/url] akzeptiert."
#: src/Navigation/Notifications/Repository/Notify.php:454 #: src/Navigation/Notifications/Repository/Notify.php:438
msgid "" msgid ""
"You are now mutual friends and may exchange status updates, photos, and " "You are now mutual friends and may exchange status updates, photos, and "
"email without restriction." "email without restriction."
msgstr "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und E-Mails ohne Einschränkungen austauschen." msgstr "Ihr seid nun beidseitige Kontakte und könnt Statusmitteilungen, Bilder und E-Mails ohne Einschränkungen austauschen."
#: src/Navigation/Notifications/Repository/Notify.php:456 #: src/Navigation/Notifications/Repository/Notify.php:440
#, php-format #, php-format
msgid "Please visit %s if you wish to make any changes to this relationship." msgid "Please visit %s if you wish to make any changes to this relationship."
msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst." msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst."
#: src/Navigation/Notifications/Repository/Notify.php:469 #: src/Navigation/Notifications/Repository/Notify.php:453
#, php-format #, php-format
msgid "" msgid ""
"'%1$s' has chosen to accept you a fan, which restricts some forms of " "'%1$s' has chosen to accept you a fan, which restricts some forms of "
@ -10802,33 +10716,33 @@ msgid ""
"automatically." "automatically."
msgstr "'%1$s' hat sich entschieden dich als Fan zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen." msgstr "'%1$s' hat sich entschieden dich als Fan zu akzeptieren, dies schränkt einige Kommunikationswege - wie private Nachrichten und einige Interaktionsmöglichkeiten auf der Profilseite - ein. Wenn dies eine Berühmtheiten- oder Gemeinschaftsseite ist, werden diese Einstellungen automatisch vorgenommen."
#: src/Navigation/Notifications/Repository/Notify.php:471 #: src/Navigation/Notifications/Repository/Notify.php:455
#, php-format #, php-format
msgid "" msgid ""
"'%1$s' may choose to extend this into a two-way or more permissive " "'%1$s' may choose to extend this into a two-way or more permissive "
"relationship in the future." "relationship in the future."
msgstr "'%1$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. " msgstr "'%1$s' kann den Kontaktstatus zu einem späteren Zeitpunkt erweitern und diese Einschränkungen aufheben. "
#: src/Navigation/Notifications/Repository/Notify.php:473 #: src/Navigation/Notifications/Repository/Notify.php:457
#, php-format #, php-format
msgid "Please visit %s if you wish to make any changes to this relationship." msgid "Please visit %s if you wish to make any changes to this relationship."
msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst." msgstr "Bitte besuche %s, wenn du Änderungen an eurer Beziehung vornehmen willst."
#: src/Navigation/Notifications/Repository/Notify.php:483 #: src/Navigation/Notifications/Repository/Notify.php:467
msgid "registration request" msgid "registration request"
msgstr "Registrierungsanfrage" msgstr "Registrierungsanfrage"
#: src/Navigation/Notifications/Repository/Notify.php:485 #: src/Navigation/Notifications/Repository/Notify.php:469
#, php-format #, php-format
msgid "You've received a registration request from '%1$s' at %2$s" msgid "You've received a registration request from '%1$s' at %2$s"
msgstr "Du hast eine Registrierungsanfrage von %2$s auf '%1$s' erhalten" msgstr "Du hast eine Registrierungsanfrage von %2$s auf '%1$s' erhalten"
#: src/Navigation/Notifications/Repository/Notify.php:486 #: src/Navigation/Notifications/Repository/Notify.php:470
#, php-format #, php-format
msgid "You've received a [url=%1$s]registration request[/url] from %2$s." msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
msgstr "Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten." msgstr "Du hast eine [url=%1$s]Registrierungsanfrage[/url] von %2$s erhalten."
#: src/Navigation/Notifications/Repository/Notify.php:491 #: src/Navigation/Notifications/Repository/Notify.php:475
#, php-format #, php-format
msgid "" msgid ""
"Full Name:\t%s\n" "Full Name:\t%s\n"
@ -10836,17 +10750,17 @@ msgid ""
"Login Name:\t%s (%s)" "Login Name:\t%s (%s)"
msgstr "Kompletter Name: %s\nURL der Seite: %s\nLogin Name: %s(%s)" msgstr "Kompletter Name: %s\nURL der Seite: %s\nLogin Name: %s(%s)"
#: src/Navigation/Notifications/Repository/Notify.php:497 #: src/Navigation/Notifications/Repository/Notify.php:481
#, php-format #, php-format
msgid "Please visit %s to approve or reject the request." msgid "Please visit %s to approve or reject the request."
msgstr "Bitte besuche %s, um die Anfrage zu bearbeiten." msgstr "Bitte besuche %s, um die Anfrage zu bearbeiten."
#: src/Navigation/Notifications/Repository/Notify.php:764 #: src/Navigation/Notifications/Repository/Notify.php:749
#, php-format #, php-format
msgid "%s %s tagged you" msgid "%s %s tagged you"
msgstr "%s %s hat dich erwähnt" msgstr "%s %s hat dich erwähnt"
#: src/Navigation/Notifications/Repository/Notify.php:767 #: src/Navigation/Notifications/Repository/Notify.php:752
#, php-format #, php-format
msgid "%s %s shared a new post" msgid "%s %s shared a new post"
msgstr "%s%shat einen Beitrag geteilt" msgstr "%s%shat einen Beitrag geteilt"
@ -11076,28 +10990,28 @@ msgstr "Zeige mehr"
msgid "Show fewer" msgid "Show fewer"
msgstr "Zeige weniger" msgstr "Zeige weniger"
#: src/Protocol/OStatus.php:1475 #: src/Protocol/OStatus.php:1471
#, php-format #, php-format
msgid "%s is now following %s." msgid "%s is now following %s."
msgstr "%s folgt nun %s" msgstr "%s folgt nun %s"
#: src/Protocol/OStatus.php:1476 #: src/Protocol/OStatus.php:1472
msgid "following" msgid "following"
msgstr "folgen" msgstr "folgen"
#: src/Protocol/OStatus.php:1479 #: src/Protocol/OStatus.php:1475
#, php-format #, php-format
msgid "%s stopped following %s." msgid "%s stopped following %s."
msgstr "%s hat aufgehört %s, zu folgen" msgstr "%s hat aufgehört %s, zu folgen"
#: src/Protocol/OStatus.php:1480 #: src/Protocol/OStatus.php:1476
msgid "stopped following" msgid "stopped following"
msgstr "wird nicht mehr gefolgt" msgstr "wird nicht mehr gefolgt"
#: src/Render/FriendicaSmartyEngine.php:53 #: src/Render/FriendicaSmartyEngine.php:56
#, php-format #, php-format
msgid "The folder %s must be writable by webserver." msgid "The folder %s must be writable by webserver."
msgstr "" msgstr "Das Verzeichnis %s muss für den Web-Server beschreibbar sein."
#: src/Security/Authentication.php:226 #: src/Security/Authentication.php:226
msgid "Login failed." msgid "Login failed."
@ -11139,86 +11053,86 @@ msgstr "der Administrator von %s"
msgid "thanks" msgid "thanks"
msgstr "danke" msgstr "danke"
#: src/Util/Temporal.php:167 #: src/Util/Temporal.php:170
msgid "YYYY-MM-DD or MM-DD" msgid "YYYY-MM-DD or MM-DD"
msgstr "YYYY-MM-DD oder MM-DD" msgstr "YYYY-MM-DD oder MM-DD"
#: src/Util/Temporal.php:275 #: src/Util/Temporal.php:278
#, php-format #, php-format
msgid "Time zone: <strong>%s</strong> <a href=\"%s\">Change in Settings</a>" msgid "Time zone: <strong>%s</strong> <a href=\"%s\">Change in Settings</a>"
msgstr "Zeitzone: <strong>%s</strong> <a href=\"%s\">Änderbar in den Einstellungen</a>" msgstr "Zeitzone: <strong>%s</strong> <a href=\"%s\">Änderbar in den Einstellungen</a>"
#: src/Util/Temporal.php:318 #: src/Util/Temporal.php:321
msgid "never" msgid "never"
msgstr "nie" msgstr "nie"
#: src/Util/Temporal.php:325 #: src/Util/Temporal.php:328
msgid "less than a second ago" msgid "less than a second ago"
msgstr "vor weniger als einer Sekunde" msgstr "vor weniger als einer Sekunde"
#: src/Util/Temporal.php:333 #: src/Util/Temporal.php:337
msgid "year" msgid "year"
msgstr "Jahr" msgstr "Jahr"
#: src/Util/Temporal.php:333 #: src/Util/Temporal.php:337
msgid "years" msgid "years"
msgstr "Jahre" msgstr "Jahre"
#: src/Util/Temporal.php:334 #: src/Util/Temporal.php:338
msgid "months" msgid "months"
msgstr "Monate" msgstr "Monate"
#: src/Util/Temporal.php:335 #: src/Util/Temporal.php:339
msgid "weeks" msgid "weeks"
msgstr "Wochen" msgstr "Wochen"
#: src/Util/Temporal.php:336 #: src/Util/Temporal.php:340
msgid "days" msgid "days"
msgstr "Tage" msgstr "Tage"
#: src/Util/Temporal.php:337 #: src/Util/Temporal.php:341
msgid "hour" msgid "hour"
msgstr "Stunde" msgstr "Stunde"
#: src/Util/Temporal.php:337 #: src/Util/Temporal.php:341
msgid "hours" msgid "hours"
msgstr "Stunden" msgstr "Stunden"
#: src/Util/Temporal.php:338 #: src/Util/Temporal.php:342
msgid "minute" msgid "minute"
msgstr "Minute" msgstr "Minute"
#: src/Util/Temporal.php:338 #: src/Util/Temporal.php:342
msgid "minutes" msgid "minutes"
msgstr "Minuten" msgstr "Minuten"
#: src/Util/Temporal.php:339 #: src/Util/Temporal.php:343
msgid "second" msgid "second"
msgstr "Sekunde" msgstr "Sekunde"
#: src/Util/Temporal.php:339 #: src/Util/Temporal.php:343
msgid "seconds" msgid "seconds"
msgstr "Sekunden" msgstr "Sekunden"
#: src/Util/Temporal.php:349 #: src/Util/Temporal.php:353
#, php-format #, php-format
msgid "in %1$d %2$s" msgid "in %1$d %2$s"
msgstr "in %1$d %2$s" msgstr "in %1$d %2$s"
#: src/Util/Temporal.php:352 #: src/Util/Temporal.php:356
#, php-format #, php-format
msgid "%1$d %2$s ago" msgid "%1$d %2$s ago"
msgstr "%1$d %2$s her" msgstr "%1$d %2$s her"
#: src/Worker/Delivery.php:525 #: src/Worker/Delivery.php:524
msgid "(no subject)" msgid "(no subject)"
msgstr "(kein Betreff)" msgstr "(kein Betreff)"
#: src/Worker/PushSubscription.php:111 #: src/Worker/PushSubscription.php:110
msgid "Notification from Friendica" msgid "Notification from Friendica"
msgstr "Benachrichtigung von Friendica" msgstr "Benachrichtigung von Friendica"
#: src/Worker/PushSubscription.php:112 #: src/Worker/PushSubscription.php:111
msgid "Empty Post" msgid "Empty Post"
msgstr "Leerer Beitrag" msgstr "Leerer Beitrag"
@ -11254,113 +11168,124 @@ msgstr "slackr"
msgid "Variations" msgid "Variations"
msgstr "Variationen" msgstr "Variationen"
#: view/theme/frio/config.php:142 #: view/theme/frio/config.php:153
msgid "Light (Accented)" msgid "Light (Accented)"
msgstr "Hell (Akzentuiert)" msgstr "Hell (Akzentuiert)"
#: view/theme/frio/config.php:143 #: view/theme/frio/config.php:154
msgid "Dark (Accented)" msgid "Dark (Accented)"
msgstr "Dunkel (Akzentuiert)" msgstr "Dunkel (Akzentuiert)"
#: view/theme/frio/config.php:144 #: view/theme/frio/config.php:155
msgid "Black (Accented)" msgid "Black (Accented)"
msgstr "Schwarz (Akzentuiert)" msgstr "Schwarz (Akzentuiert)"
#: view/theme/frio/config.php:156 #: view/theme/frio/config.php:167
msgid "Note" msgid "Note"
msgstr "Hinweis" msgstr "Hinweis"
#: view/theme/frio/config.php:156 #: view/theme/frio/config.php:167
msgid "Check image permissions if all users are allowed to see the image" msgid "Check image permissions if all users are allowed to see the image"
msgstr "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen" msgstr "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"
#: view/theme/frio/config.php:162 #: view/theme/frio/config.php:173
msgid "Custom" msgid "Custom"
msgstr "Benutzerdefiniert" msgstr "Benutzerdefiniert"
#: view/theme/frio/config.php:163 #: view/theme/frio/config.php:174
msgid "Legacy" msgid "Legacy"
msgstr "Vermächtnis" msgstr "Vermächtnis"
#: view/theme/frio/config.php:164 #: view/theme/frio/config.php:175
msgid "Accented" msgid "Accented"
msgstr "Akzentuiert" msgstr "Akzentuiert"
#: view/theme/frio/config.php:165 #: view/theme/frio/config.php:176
msgid "Select color scheme" msgid "Select color scheme"
msgstr "Farbschema auswählen" msgstr "Farbschema auswählen"
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Select scheme accent" msgid "Select scheme accent"
msgstr "Wähle einen Akzent für das Thema" msgstr "Wähle einen Akzent für das Thema"
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Blue" msgid "Blue"
msgstr "Blau" msgstr "Blau"
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Red" msgid "Red"
msgstr "Rot" msgstr "Rot"
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Purple" msgid "Purple"
msgstr "Violett" msgstr "Violett"
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Green" msgid "Green"
msgstr "Grün" msgstr "Grün"
#: view/theme/frio/config.php:166 #: view/theme/frio/config.php:177
msgid "Pink" msgid "Pink"
msgstr "Rosa" msgstr "Rosa"
#: view/theme/frio/config.php:167 #: view/theme/frio/config.php:178
msgid "Copy or paste schemestring" msgid "Copy or paste schemestring"
msgstr "Farbschema kopieren oder einfügen" msgstr "Farbschema kopieren oder einfügen"
#: view/theme/frio/config.php:167 #: view/theme/frio/config.php:178
msgid "" msgid ""
"You can copy this string to share your theme with others. Pasting here " "You can copy this string to share your theme with others. Pasting here "
"applies the schemestring" "applies the schemestring"
msgstr "Du kannst den String mit den Farbschema Informationen mit anderen Teilen. Wenn du einen neuen Farbschema-String hier einfügst wird er für deine Einstellungen übernommen." msgstr "Du kannst den String mit den Farbschema Informationen mit anderen Teilen. Wenn du einen neuen Farbschema-String hier einfügst wird er für deine Einstellungen übernommen."
#: view/theme/frio/config.php:168 #: view/theme/frio/config.php:179
msgid "Navigation bar background color" msgid "Navigation bar background color"
msgstr "Hintergrundfarbe der Navigationsleiste" msgstr "Hintergrundfarbe der Navigationsleiste"
#: view/theme/frio/config.php:169 #: view/theme/frio/config.php:180
msgid "Navigation bar icon color " msgid "Navigation bar icon color "
msgstr "Icon Farbe in der Navigationsleiste" msgstr "Icon Farbe in der Navigationsleiste"
#: view/theme/frio/config.php:170 #: view/theme/frio/config.php:181
msgid "Link color" msgid "Link color"
msgstr "Linkfarbe" msgstr "Linkfarbe"
#: view/theme/frio/config.php:171 #: view/theme/frio/config.php:182
msgid "Set the background color" msgid "Set the background color"
msgstr "Hintergrundfarbe festlegen" msgstr "Hintergrundfarbe festlegen"
#: view/theme/frio/config.php:172 #: view/theme/frio/config.php:183
msgid "Content background opacity" msgid "Content background opacity"
msgstr "Opazität des Hintergrunds von Beiträgen" msgstr "Opazität des Hintergrunds von Beiträgen"
#: view/theme/frio/config.php:173 #: view/theme/frio/config.php:184
msgid "Set the background image" msgid "Set the background image"
msgstr "Hintergrundbild festlegen" msgstr "Hintergrundbild festlegen"
#: view/theme/frio/config.php:174 #: view/theme/frio/config.php:185
msgid "Background image style" msgid "Background image style"
msgstr "Stil des Hintergrundbildes" msgstr "Stil des Hintergrundbildes"
#: view/theme/frio/config.php:179 #: view/theme/frio/config.php:188
msgid "Always open Compose page"
msgstr "Immer die Composer Seite öffnen"
#: view/theme/frio/config.php:188
msgid ""
"The New Post button always open the <a href=\"/compose\">Compose page</a> "
"instead of the modal form. When this is disabled, the Compose page can be "
"accessed with a middle click on the link or from the modal."
msgstr "Neue Beiträge werden immer in der <a href=\"/compose\">Composer Seite</a> anstelle des Dialoges bearbeitet. Ist diese Option deaktiviert, kann die Composer Seite durch einen Klick mit der mittleren Maustaste geöffnet werden."
#: view/theme/frio/config.php:192
msgid "Login page background image" msgid "Login page background image"
msgstr "Hintergrundbild der Login-Seite" msgstr "Hintergrundbild der Login-Seite"
#: view/theme/frio/config.php:183 #: view/theme/frio/config.php:196
msgid "Login page background color" msgid "Login page background color"
msgstr "Hintergrundfarbe der Login-Seite" msgstr "Hintergrundfarbe der Login-Seite"
#: view/theme/frio/config.php:183 #: view/theme/frio/config.php:196
msgid "Leave background image and color empty for theme defaults" msgid "Leave background image and color empty for theme defaults"
msgstr "Wenn die Theme-Vorgaben verwendet werden sollen, lass bitte die Felder für die Hintergrundfarbe und das Hintergrundbild leer." msgstr "Wenn die Theme-Vorgaben verwendet werden sollen, lass bitte die Felder für die Hintergrundfarbe und das Hintergrundbild leer."
@ -11408,11 +11333,11 @@ msgstr "Zum Inhalt der Seite gehen"
msgid "Back to top" msgid "Back to top"
msgstr "Zurück nach Oben" msgstr "Zurück nach Oben"
#: view/theme/frio/theme.php:212 #: view/theme/frio/theme.php:218
msgid "Guest" msgid "Guest"
msgstr "Gast" msgstr "Gast"
#: view/theme/frio/theme.php:215 #: view/theme/frio/theme.php:221
msgid "Visitor" msgid "Visitor"
msgstr "Besucher" msgstr "Besucher"

View file

@ -521,12 +521,17 @@ $a->strings['You subscribed to one or more tags in this post.'] = 'Du folgst ein
$a->strings['Reshared'] = 'Geteilt'; $a->strings['Reshared'] = 'Geteilt';
$a->strings['Reshared by %s <%s>'] = 'Geteilt von %s <%s>'; $a->strings['Reshared by %s <%s>'] = 'Geteilt von %s <%s>';
$a->strings['%s is participating in this thread.'] = '%s ist an der Unterhaltung beteiligt.'; $a->strings['%s is participating in this thread.'] = '%s ist an der Unterhaltung beteiligt.';
$a->strings['Stored for general reasons'] = 'Aus allgemeinen Gründen aufbewahrt';
$a->strings['Global post'] = 'Globaler Beitrag'; $a->strings['Global post'] = 'Globaler Beitrag';
$a->strings['Sent via an relay server'] = 'Über einen Relay-Server gesendet'; $a->strings['Sent via an relay server'] = 'Über einen Relay-Server gesendet';
$a->strings['Sent via the relay server %s <%s>'] = 'Über den Relay-Server %s <%s> gesendet'; $a->strings['Sent via the relay server %s <%s>'] = 'Über den Relay-Server %s <%s> gesendet';
$a->strings['Fetched'] = 'Abgerufen'; $a->strings['Fetched'] = 'Abgerufen';
$a->strings['Fetched because of %s <%s>'] = 'Wegen %s <%s> abgerufen'; $a->strings['Fetched because of %s <%s>'] = 'Wegen %s <%s> abgerufen';
$a->strings['Stored because of a child post to complete this thread.'] = 'Gespeichert wegen eines untergeordneten Beitrags zur Vervollständigung dieses Themas.';
$a->strings['Local delivery'] = 'Lokale Zustellung'; $a->strings['Local delivery'] = 'Lokale Zustellung';
$a->strings['Stored because of your activity (like, comment, star, ...)'] = 'Gespeichert aufgrund Ihrer Aktivität (Like, Kommentar, Stern, ...)';
$a->strings['Distributed'] = 'Verteilt';
$a->strings['Pushed to us'] = 'Zu uns gepusht';
$a->strings['General Features'] = 'Allgemeine Features'; $a->strings['General Features'] = 'Allgemeine Features';
$a->strings['Photo Location'] = 'Aufnahmeort'; $a->strings['Photo Location'] = 'Aufnahmeort';
$a->strings['Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'] = 'Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden.'; $a->strings['Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'] = 'Die Foto-Metadaten werden ausgelesen. Dadurch kann der Aufnahmeort (wenn vorhanden) in einer Karte angezeigt werden.';
@ -553,7 +558,6 @@ $a->strings['Forums'] = 'Foren';
$a->strings['External link to forum'] = 'Externer Link zum Forum'; $a->strings['External link to forum'] = 'Externer Link zum Forum';
$a->strings['show less'] = 'weniger anzeigen'; $a->strings['show less'] = 'weniger anzeigen';
$a->strings['show more'] = 'mehr anzeigen'; $a->strings['show more'] = 'mehr anzeigen';
$a->strings['%1$s poked %2$s'] = '%1$s stupste %2$s';
$a->strings['event'] = 'Veranstaltung'; $a->strings['event'] = 'Veranstaltung';
$a->strings['Follow Thread'] = 'Folge der Unterhaltung'; $a->strings['Follow Thread'] = 'Folge der Unterhaltung';
$a->strings['View Status'] = 'Status anschauen'; $a->strings['View Status'] = 'Status anschauen';
@ -565,7 +569,6 @@ $a->strings['Send PM'] = 'Private Nachricht senden';
$a->strings['Block'] = 'Sperren'; $a->strings['Block'] = 'Sperren';
$a->strings['Ignore'] = 'Ignorieren'; $a->strings['Ignore'] = 'Ignorieren';
$a->strings['Languages'] = 'Sprachen'; $a->strings['Languages'] = 'Sprachen';
$a->strings['Poke'] = 'Anstupsen';
$a->strings['Nothing new here'] = 'Keine Neuigkeiten'; $a->strings['Nothing new here'] = 'Keine Neuigkeiten';
$a->strings['Go back'] = 'Geh zurück'; $a->strings['Go back'] = 'Geh zurück';
$a->strings['Clear notifications'] = 'Bereinige Benachrichtigungen'; $a->strings['Clear notifications'] = 'Bereinige Benachrichtigungen';
@ -812,18 +815,6 @@ $a->strings['Sep'] = 'Sep';
$a->strings['Oct'] = 'Okt'; $a->strings['Oct'] = 'Okt';
$a->strings['Nov'] = 'Nov'; $a->strings['Nov'] = 'Nov';
$a->strings['Dec'] = 'Dez'; $a->strings['Dec'] = 'Dez';
$a->strings['poke'] = 'anstupsen';
$a->strings['poked'] = 'stupste';
$a->strings['ping'] = 'anpingen';
$a->strings['pinged'] = 'pingte';
$a->strings['prod'] = 'knuffen';
$a->strings['prodded'] = 'knuffte';
$a->strings['slap'] = 'ohrfeigen';
$a->strings['slapped'] = 'ohrfeigte';
$a->strings['finger'] = 'befummeln';
$a->strings['fingered'] = 'befummelte';
$a->strings['rebuff'] = 'eine Abfuhr erteilen';
$a->strings['rebuffed'] = 'abfuhrerteilte';
$a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica kann die Seite im Moment nicht darstellen. Bitte kontaktiere das Administratoren Team.'; $a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica kann die Seite im Moment nicht darstellen. Bitte kontaktiere das Administratoren Team.';
$a->strings['template engine cannot be registered without a name.'] = 'Die Template Engine kann nicht ohne einen Namen registriert werden.'; $a->strings['template engine cannot be registered without a name.'] = 'Die Template Engine kann nicht ohne einen Namen registriert werden.';
$a->strings['template engine is not registered!'] = 'Template Engine wurde nicht registriert!'; $a->strings['template engine is not registered!'] = 'Template Engine wurde nicht registriert!';
@ -1247,6 +1238,29 @@ $a->strings['Also purges all the locally stored content authored by the known co
]; ];
$a->strings['Block reason'] = 'Begründung der Blockierung'; $a->strings['Block reason'] = 'Begründung der Blockierung';
$a->strings['The reason why you blocked this server domain pattern. This reason will be shown publicly in the server information page.'] = 'Warum werden Server die diesem Domainmuster entsprechen geblockt? Die Begründung wird öffentlich auf der Server-Informationsseite sichtbar sein.'; $a->strings['The reason why you blocked this server domain pattern. This reason will be shown publicly in the server information page.'] = 'Warum werden Server die diesem Domainmuster entsprechen geblockt? Die Begründung wird öffentlich auf der Server-Informationsseite sichtbar sein.';
$a->strings['Error importing pattern file'] = 'Fehler beim Import der Muster Datei';
$a->strings['Local blocklist replaced with the provided file.'] = 'Lokale Blockliste wurde durch die bereitgestellte Datei ersetzt.';
$a->strings['%d pattern was added to the local blocklist.'] = [
0 => '%d Muster wurde zur lokalen Blockliste hinzugefügt.',
1 => '%d Muster wurden zur lokalen Blockliste hinzugefügt.',
];
$a->strings['No pattern was added to the local blocklist.'] = 'Kein Muster wurde zur lokalen Blockliste hinzugefügt.';
$a->strings['Import a Server Domain Pattern Blocklist'] = 'Server Domain Muster Blockliste importieren';
$a->strings['<p>This file can be downloaded from the <code>/friendica</code> path of any Friendica server.</p>'] = '<p>Diese Datei kann vom <code>/friendica</code> Pfad auf jedem Friendica Server heruntergeladen werden.</p>';
$a->strings['Upload file'] = 'Datei hochladen';
$a->strings['Patterns to import'] = 'Zu importierende Muster';
$a->strings['Domain Pattern'] = 'Domain Muster';
$a->strings['Import Mode'] = 'Importmodus';
$a->strings['Import Patterns'] = 'Muster importieren';
$a->strings['%d total pattern'] = [
0 => '%dMuster gesamt',
1 => '%dMuster gesamt',
];
$a->strings['Server domain pattern blocklist CSV file'] = 'Server Domain Muster Blockliste CSV-Datei';
$a->strings['Append'] = 'Anhängen';
$a->strings['Imports patterns from the file that weren\'t already existing in the current blocklist.'] = 'Importiert Muster aus der Datei, die nicht bereits in der aktuellen Blockliste vorhanden waren.';
$a->strings['Replace'] = 'Ersetzen';
$a->strings['Replaces the current blocklist by the imported patterns.'] = 'Ersetzt die aktuelle Blockliste durch die importierten Muster.';
$a->strings['Blocked server domain pattern'] = 'Blockierte Server Domain Muster'; $a->strings['Blocked server domain pattern'] = 'Blockierte Server Domain Muster';
$a->strings['Reason for the block'] = 'Begründung für die Blockierung'; $a->strings['Reason for the block'] = 'Begründung für die Blockierung';
$a->strings['Delete server domain pattern'] = 'Server Domain Muster löschen'; $a->strings['Delete server domain pattern'] = 'Server Domain Muster löschen';
@ -1254,6 +1268,7 @@ $a->strings['Check to delete this entry from the blocklist'] = 'Markieren, um di
$a->strings['Server Domain Pattern Blocklist'] = 'Server Domain Muster Blockliste'; $a->strings['Server Domain Pattern Blocklist'] = 'Server Domain Muster Blockliste';
$a->strings['This page can be used to define a blocklist of server domain patterns from the federated network that are not allowed to interact with your node. For each domain pattern you should also provide the reason why you block it.'] = 'Auf dieser Seite kannst du Muster definieren mit denen Server Domains aus dem föderierten Netzwerk daran gehindert werden mit deiner Instanz zu interagieren. Es ist ratsam für jedes Muster anzugeben, warum du es zur Blockliste hinzugefügt hast.'; $a->strings['This page can be used to define a blocklist of server domain patterns from the federated network that are not allowed to interact with your node. For each domain pattern you should also provide the reason why you block it.'] = 'Auf dieser Seite kannst du Muster definieren mit denen Server Domains aus dem föderierten Netzwerk daran gehindert werden mit deiner Instanz zu interagieren. Es ist ratsam für jedes Muster anzugeben, warum du es zur Blockliste hinzugefügt hast.';
$a->strings['The list of blocked server domain patterns will be made publically available on the <a href="/friendica">/friendica</a> page so that your users and people investigating communication problems can find the reason easily.'] = 'Die Liste der blockierten Domain Muster wird auf der Seite <a href="/friendica">/friendica</a> öffentlich einsehbar gemacht, damit deine Nutzer und Personen, die Kommunikationsprobleme erkunden, die Ursachen einfach finden können.'; $a->strings['The list of blocked server domain patterns will be made publically available on the <a href="/friendica">/friendica</a> page so that your users and people investigating communication problems can find the reason easily.'] = 'Die Liste der blockierten Domain Muster wird auf der Seite <a href="/friendica">/friendica</a> öffentlich einsehbar gemacht, damit deine Nutzer und Personen, die Kommunikationsprobleme erkunden, die Ursachen einfach finden können.';
$a->strings['Import server domain pattern blocklist'] = 'Server Domain Muster Blockliste importieren';
$a->strings['Add new entry to the blocklist'] = 'Neuen Eintrag in die Blockliste'; $a->strings['Add new entry to the blocklist'] = 'Neuen Eintrag in die Blockliste';
$a->strings['Save changes to the blocklist'] = 'Änderungen der Blockliste speichern'; $a->strings['Save changes to the blocklist'] = 'Änderungen der Blockliste speichern';
$a->strings['Current Entries in the Blocklist'] = 'Aktuelle Einträge der Blockliste'; $a->strings['Current Entries in the Blocklist'] = 'Aktuelle Einträge der Blockliste';
@ -1276,8 +1291,40 @@ $a->strings['Lock feature %s'] = 'Feature festlegen: %s';
$a->strings['Manage Additional Features'] = 'Zusätzliche Features Verwalten'; $a->strings['Manage Additional Features'] = 'Zusätzliche Features Verwalten';
$a->strings['Other'] = 'Andere'; $a->strings['Other'] = 'Andere';
$a->strings['unknown'] = 'Unbekannt'; $a->strings['unknown'] = 'Unbekannt';
$a->strings['%2$s total system'] = [
0 => '%2$sServer gesamt',
1 => '%2$s Server gesamt',
];
$a->strings['%2$s active user last month'] = [
0 => '%2$s aktiver Nutzer im letzten Monat',
1 => '%2$s aktive Nutzer im letzten Monat',
];
$a->strings['%2$s active user last six months'] = [
0 => '%2$s aktive Nutzer im letzten halben Jahr',
1 => '%2$s aktive Nutzer im letzten halben Jahr',
];
$a->strings['%2$s registered user'] = [
0 => '%2$sregistrierter Nutzer',
1 => '%2$s registrierte Nutzer',
];
$a->strings['%2$s locally created post or comment'] = [
0 => '%2$slokal erstellter Beitrag oder Kommentar',
1 => '%2$slokal erstellte Beiträge und Kommentare',
];
$a->strings['%2$s post per user'] = [
0 => '%2$sBeitrag pro Nutzer',
1 => '%2$sBeiträge pro Nutzer',
];
$a->strings['%2$s user per system'] = [
0 => '%2$sNutzer pro System',
1 => '%2$sNutzer pro System',
];
$a->strings['This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of.'] = 'Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt.'; $a->strings['This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of.'] = 'Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt.';
$a->strings['Federation Statistics'] = 'Föderation Statistik'; $a->strings['Federation Statistics'] = 'Föderation Statistik';
$a->strings['Currently this node is aware of %2$s node (%3$s active users last month, %4$s active users last six months, %5$s registered users in total) from the following platforms:'] = [
0 => 'Derzeit kennt dieser Knoten %2$s andere Knoten (mit %3$s aktiven Nutzern im letzten Monat, %4$s aktiven Nutzern im letzten halben Jahr, %5$s registrierten Nutzern insgesamt) von den folgenden Plattformen:',
1 => 'Derzeit kennt dieser Knoten %2$s andere Knoten (mit %3$s aktiven Nutzern im letzten Monat, %4$s aktiven Nutzern im letzten halben Jahr, %5$s registrierten Nutzern insgesamt) von den folgenden Plattformen:',
];
$a->strings['Item marked for deletion.'] = 'Eintrag wurden zur Löschung markiert'; $a->strings['Item marked for deletion.'] = 'Eintrag wurden zur Löschung markiert';
$a->strings['Delete Item'] = 'Eintrag löschen'; $a->strings['Delete Item'] = 'Eintrag löschen';
$a->strings['Delete this Item'] = 'Diesen Eintrag löschen'; $a->strings['Delete this Item'] = 'Diesen Eintrag löschen';
@ -1509,6 +1556,8 @@ $a->strings['Temp path'] = 'Temp-Pfad';
$a->strings['If you have a restricted system where the webserver can\'t access the system temp path, enter another path here.'] = 'Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp-Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad.'; $a->strings['If you have a restricted system where the webserver can\'t access the system temp path, enter another path here.'] = 'Solltest du ein eingeschränktes System haben, auf dem der Webserver nicht auf das temp-Verzeichnis des Systems zugreifen kann, setze hier einen anderen Pfad.';
$a->strings['Only search in tags'] = 'Nur in Tags suchen'; $a->strings['Only search in tags'] = 'Nur in Tags suchen';
$a->strings['On large systems the text search can slow down the system extremely.'] = 'Auf großen Knoten kann die Volltext-Suche das System ausbremsen.'; $a->strings['On large systems the text search can slow down the system extremely.'] = 'Auf großen Knoten kann die Volltext-Suche das System ausbremsen.';
$a->strings['Generate counts per contact group when calculating network count'] = 'Erstelle Zählungen je Kontaktgruppe bei der Berechnung der Netzwerkanzahl';
$a->strings['On systems with users that heavily use contact groups the query can be very expensive.'] = 'Auf Systemen mit Benutzern, die häufig Kontaktgruppen verwenden, kann die Abfrage sehr aufwändig sein.';
$a->strings['Maximum number of parallel workers'] = 'Maximale Anzahl parallel laufender Worker'; $a->strings['Maximum number of parallel workers'] = 'Maximale Anzahl parallel laufender Worker';
$a->strings['On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.'] = 'Wenn dein Knoten bei einem Shared Hoster ist, setze diesen Wert auf %d. Auf größeren Systemen funktioniert ein Wert von %d recht gut. Standardeinstellung sind %d.'; $a->strings['On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.'] = 'Wenn dein Knoten bei einem Shared Hoster ist, setze diesen Wert auf %d. Auf größeren Systemen funktioniert ein Wert von %d recht gut. Standardeinstellung sind %d.';
$a->strings['Enable fastlane'] = 'Aktiviere Fastlane'; $a->strings['Enable fastlane'] = 'Aktiviere Fastlane';
@ -1680,6 +1729,10 @@ $a->strings['Weekly posting limit of %d post reached. The post was rejected.'] =
0 => 'Das wöchentliche Limit von %d Beitrag wurde erreicht. Die Nachricht wurde verworfen.', 0 => 'Das wöchentliche Limit von %d Beitrag wurde erreicht. Die Nachricht wurde verworfen.',
1 => 'Das wöchentliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.', 1 => 'Das wöchentliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.',
]; ];
$a->strings['Monthly posting limit of %d post reached. The post was rejected.'] = [
0 => 'Das monatliche Limit von %d Beitrag wurde erreicht. Der Beitrag wurde verworfen.',
1 => 'Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.',
];
$a->strings['Profile Details'] = 'Profildetails'; $a->strings['Profile Details'] = 'Profildetails';
$a->strings['Only You Can See This'] = 'Nur du kannst das sehen'; $a->strings['Only You Can See This'] = 'Nur du kannst das sehen';
$a->strings['Scheduled Posts'] = 'Geplante Beiträge'; $a->strings['Scheduled Posts'] = 'Geplante Beiträge';
@ -1757,12 +1810,6 @@ $a->strings['Contact (%s)'] = [
0 => 'Kontakt (%s)', 0 => 'Kontakt (%s)',
1 => 'Kontakte (%s)', 1 => 'Kontakte (%s)',
]; ];
$a->strings['Error while sending poke, please retry.'] = 'Beim Versenden des Stupsers ist ein Fehler aufgetreten. Bitte erneut versuchen.';
$a->strings['You must be logged in to use this module.'] = 'Du musst eingeloggt sein, um dieses Modul benutzen zu können.';
$a->strings['Poke/Prod'] = 'Anstupsen';
$a->strings['poke, prod or do other things to somebody'] = 'Stupse Leute an oder mache anderes mit ihnen';
$a->strings['Choose what you wish to do to recipient'] = 'Was willst du mit dem Empfänger machen:';
$a->strings['Make this post private'] = 'Diesen Beitrag privat machen';
$a->strings['Failed to update contact record.'] = 'Aktualisierung der Kontaktdaten fehlgeschlagen.'; $a->strings['Failed to update contact record.'] = 'Aktualisierung der Kontaktdaten fehlgeschlagen.';
$a->strings['Contact has been unblocked'] = 'Kontakt wurde wieder freigegeben'; $a->strings['Contact has been unblocked'] = 'Kontakt wurde wieder freigegeben';
$a->strings['Contact has been blocked'] = 'Kontakt wurde blockiert'; $a->strings['Contact has been blocked'] = 'Kontakt wurde blockiert';
@ -1822,6 +1869,7 @@ $a->strings['Contact is being deleted.'] = 'Kontakt wurde gelöscht.';
$a->strings['Follow was successfully revoked.'] = 'Folgen wurde erfolgreich widerrufen.'; $a->strings['Follow was successfully revoked.'] = 'Folgen wurde erfolgreich widerrufen.';
$a->strings['Do you really want to revoke this contact\'s follow? This cannot be undone and they will have to manually follow you back again.'] = 'Willst du das Folgen dieses Kontakt wirklich widerrufen? Dies kann nicht rückgängig gemacht werden und der Kontakt muss Ihnen manuell wieder folgen.'; $a->strings['Do you really want to revoke this contact\'s follow? This cannot be undone and they will have to manually follow you back again.'] = 'Willst du das Folgen dieses Kontakt wirklich widerrufen? Dies kann nicht rückgängig gemacht werden und der Kontakt muss Ihnen manuell wieder folgen.';
$a->strings['Yes'] = 'Ja'; $a->strings['Yes'] = 'Ja';
$a->strings['This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users.'] = 'Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.';
$a->strings['Local Community'] = 'Lokale Gemeinschaft'; $a->strings['Local Community'] = 'Lokale Gemeinschaft';
$a->strings['Posts from local users on this server'] = 'Beiträge von Nutzern dieses Servers'; $a->strings['Posts from local users on this server'] = 'Beiträge von Nutzern dieses Servers';
$a->strings['Global Community'] = 'Globale Gemeinschaft'; $a->strings['Global Community'] = 'Globale Gemeinschaft';
@ -1830,7 +1878,6 @@ $a->strings['Own Contacts'] = 'Eigene Kontakte';
$a->strings['Include'] = 'Einschließen'; $a->strings['Include'] = 'Einschließen';
$a->strings['Hide'] = 'Verbergen'; $a->strings['Hide'] = 'Verbergen';
$a->strings['No results.'] = 'Keine Ergebnisse.'; $a->strings['No results.'] = 'Keine Ergebnisse.';
$a->strings['This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users.'] = 'Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.';
$a->strings['Community option not available.'] = 'Optionen für die Gemeinschaftsseite nicht verfügbar.'; $a->strings['Community option not available.'] = 'Optionen für die Gemeinschaftsseite nicht verfügbar.';
$a->strings['Not available.'] = 'Nicht verfügbar.'; $a->strings['Not available.'] = 'Nicht verfügbar.';
$a->strings['No such group'] = 'Es gibt keine solche Gruppe'; $a->strings['No such group'] = 'Es gibt keine solche Gruppe';
@ -1919,8 +1966,8 @@ $a->strings['No entries (some entries may be hidden).'] = 'Keine Einträge (eini
$a->strings['Find on this site'] = 'Auf diesem Server suchen'; $a->strings['Find on this site'] = 'Auf diesem Server suchen';
$a->strings['Results for:'] = 'Ergebnisse für:'; $a->strings['Results for:'] = 'Ergebnisse für:';
$a->strings['Site Directory'] = 'Verzeichnis'; $a->strings['Site Directory'] = 'Verzeichnis';
$a->strings['Item was not removed'] = 'Item wurde nicht entfernt';
$a->strings['Item was not deleted'] = 'Item wurde nicht gelöscht'; $a->strings['Item was not deleted'] = 'Item wurde nicht gelöscht';
$a->strings['Item was not removed'] = 'Item wurde nicht entfernt';
$a->strings['- select -'] = '- auswählen -'; $a->strings['- select -'] = '- auswählen -';
$a->strings['Suggested contact not found.'] = 'Vorgeschlagener Kontakt wurde nicht gefunden.'; $a->strings['Suggested contact not found.'] = 'Vorgeschlagener Kontakt wurde nicht gefunden.';
$a->strings['Friend suggestion sent.'] = 'Kontaktvorschlag gesendet.'; $a->strings['Friend suggestion sent.'] = 'Kontaktvorschlag gesendet.';
@ -1930,6 +1977,7 @@ $a->strings['Installed addons/apps:'] = 'Installierte Apps und Addons';
$a->strings['No installed addons/apps'] = 'Es sind keine Addons oder Apps installiert'; $a->strings['No installed addons/apps'] = 'Es sind keine Addons oder Apps installiert';
$a->strings['Read about the <a href="%1$s/tos">Terms of Service</a> of this node.'] = 'Erfahre mehr über die <a href="%1$s/tos">Nutzungsbedingungen</a> dieses Knotens.'; $a->strings['Read about the <a href="%1$s/tos">Terms of Service</a> of this node.'] = 'Erfahre mehr über die <a href="%1$s/tos">Nutzungsbedingungen</a> dieses Knotens.';
$a->strings['On this server the following remote servers are blocked.'] = 'Auf diesem Server werden die folgenden, entfernten Server blockiert.'; $a->strings['On this server the following remote servers are blocked.'] = 'Auf diesem Server werden die folgenden, entfernten Server blockiert.';
$a->strings['Download this list in CSV format'] = 'Liste im CSV-Format herunterladen';
$a->strings['This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.'] = 'Diese Friendica-Instanz verwendet die Version %s, sie ist unter der folgenden Adresse im Web zu finden %s. Die Datenbankversion ist %s und die Post-Update-Version %s.'; $a->strings['This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.'] = 'Diese Friendica-Instanz verwendet die Version %s, sie ist unter der folgenden Adresse im Web zu finden %s. Die Datenbankversion ist %s und die Post-Update-Version %s.';
$a->strings['Please visit <a href="https://friendi.ca">Friendi.ca</a> to learn more about the Friendica project.'] = 'Bitte besuche <a href="https://friendi.ca">Friendi.ca</a>, um mehr über das Friendica-Projekt zu erfahren.'; $a->strings['Please visit <a href="https://friendi.ca">Friendi.ca</a> to learn more about the Friendica project.'] = 'Bitte besuche <a href="https://friendi.ca">Friendi.ca</a>, um mehr über das Friendica-Projekt zu erfahren.';
$a->strings['Bug reports and issues: please visit'] = 'Probleme oder Fehler gefunden? Bitte besuche'; $a->strings['Bug reports and issues: please visit'] = 'Probleme oder Fehler gefunden? Bitte besuche';
@ -2022,6 +2070,7 @@ $a->strings['Visibility'] = 'Sichtbarkeit';
$a->strings['Clear the location'] = 'Ort löschen'; $a->strings['Clear the location'] = 'Ort löschen';
$a->strings['Location services are unavailable on your device'] = 'Ortungsdienste sind auf Ihrem Gerät nicht verfügbar'; $a->strings['Location services are unavailable on your device'] = 'Ortungsdienste sind auf Ihrem Gerät nicht verfügbar';
$a->strings['Location services are disabled. Please check the website\'s permissions on your device'] = 'Ortungsdienste sind deaktiviert. Bitte überprüfe die Berechtigungen der Website auf deinem Gerät'; $a->strings['Location services are disabled. Please check the website\'s permissions on your device'] = 'Ortungsdienste sind deaktiviert. Bitte überprüfe die Berechtigungen der Website auf deinem Gerät';
$a->strings['You can make this page always open when you use the New Post button in the <a href="/settings/display">Theme Customization settings</a>.'] = 'Wenn du magst, kannst du unter den <a href="/settings/display">Benutzerdefinierte Theme-Einstellungen</a> einstellen, dass diese Seite immer geöffnet wird, wenn du den "Neuer Beitrag" Button verwendest.';
$a->strings['Unable to follow this item.'] = 'Konnte dem Beitrag nicht folgen.'; $a->strings['Unable to follow this item.'] = 'Konnte dem Beitrag nicht folgen.';
$a->strings['System down for maintenance'] = 'System zur Wartung abgeschaltet'; $a->strings['System down for maintenance'] = 'System zur Wartung abgeschaltet';
$a->strings['This Friendica node is currently in maintenance mode, either automatically because it is self-updating or manually by the node administrator. This condition should be temporary, please come back in a few minutes.'] = 'Diese Friendica Instanz befindet sich derzeit im Wartungsmodus, entweder aufgrund von automatischen Updateprozessen oder weil die Administratoren der Instanz den Wartungsmodus aktiviert haben. Dies sollte ein vorübergehender Zustand sein. Bitte versuche es in ein paar Minuten erneut.'; $a->strings['This Friendica node is currently in maintenance mode, either automatically because it is self-updating or manually by the node administrator. This condition should be temporary, please come back in a few minutes.'] = 'Diese Friendica Instanz befindet sich derzeit im Wartungsmodus, entweder aufgrund von automatischen Updateprozessen oder weil die Administratoren der Instanz den Wartungsmodus aktiviert haben. Dies sollte ein vorübergehender Zustand sein. Bitte versuche es in ein paar Minuten erneut.';
@ -2135,6 +2184,7 @@ $a->strings['Friend/Connection Request'] = 'Kontaktanfrage';
$a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to <strong>%s</strong> or <strong>%s</strong> directly on your system.'] = 'Gib entweder deine Webfinger- (user@domain.tld) oder die Profil-Adresse an. Wenn dies von deinem System nicht unterstützt wird, folge bitte <strong>%s</strong> oder <strong>%s</strong> direkt von deinem System. '; $a->strings['Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to <strong>%s</strong> or <strong>%s</strong> directly on your system.'] = 'Gib entweder deine Webfinger- (user@domain.tld) oder die Profil-Adresse an. Wenn dies von deinem System nicht unterstützt wird, folge bitte <strong>%s</strong> oder <strong>%s</strong> direkt von deinem System. ';
$a->strings['If you are not yet a member of the free social web, <a href="%s">follow this link to find a public Friendica node and join us today</a>.'] = 'Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du <a href="%s">diesem Link folgen</a> um eine öffentliche Friendica Instanz zu finden um noch heute dem Netzwerk beizutreten.'; $a->strings['If you are not yet a member of the free social web, <a href="%s">follow this link to find a public Friendica node and join us today</a>.'] = 'Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du <a href="%s">diesem Link folgen</a> um eine öffentliche Friendica Instanz zu finden um noch heute dem Netzwerk beizutreten.';
$a->strings['Your Webfinger address or profile URL:'] = 'Deine Webfinger Adresse oder Profil-URL'; $a->strings['Your Webfinger address or profile URL:'] = 'Deine Webfinger Adresse oder Profil-URL';
$a->strings['You must be logged in to use this module.'] = 'Du musst eingeloggt sein, um dieses Modul benutzen zu können.';
$a->strings['Only logged in users are permitted to perform a search.'] = 'Nur eingeloggten Benutzern ist das Suchen gestattet.'; $a->strings['Only logged in users are permitted to perform a search.'] = 'Nur eingeloggten Benutzern ist das Suchen gestattet.';
$a->strings['Only one search per minute is permitted for not logged in users.'] = 'Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.'; $a->strings['Only one search per minute is permitted for not logged in users.'] = 'Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.';
$a->strings['Items tagged with: %s'] = 'Beiträge, die mit %s getaggt sind'; $a->strings['Items tagged with: %s'] = 'Beiträge, die mit %s getaggt sind';
@ -2157,8 +2207,10 @@ $a->strings['OpenID protocol error. No ID returned'] = 'OpenID Protokollfehler.
$a->strings['Account not found. Please login to your existing account to add the OpenID to it.'] = 'Nutzerkonto nicht gefunden. Bitte melde dich an und füge die OpenID zu deinem Konto hinzu.'; $a->strings['Account not found. Please login to your existing account to add the OpenID to it.'] = 'Nutzerkonto nicht gefunden. Bitte melde dich an und füge die OpenID zu deinem Konto hinzu.';
$a->strings['Account not found. Please register a new account or login to your existing account to add the OpenID to it.'] = 'Nutzerkonto nicht gefunden. Bitte registriere ein neues Konto oder melde dich mit einem existierendem Konto an um diene OpenID hinzuzufügen.'; $a->strings['Account not found. Please register a new account or login to your existing account to add the OpenID to it.'] = 'Nutzerkonto nicht gefunden. Bitte registriere ein neues Konto oder melde dich mit einem existierendem Konto an um diene OpenID hinzuzufügen.';
$a->strings['Passwords do not match.'] = 'Die Passwörter stimmen nicht überein.'; $a->strings['Passwords do not match.'] = 'Die Passwörter stimmen nicht überein.';
$a->strings['Password does not need changing.'] = 'Passwort muss nicht geändert werden.';
$a->strings['Password unchanged.'] = 'Passwort unverändert.'; $a->strings['Password unchanged.'] = 'Passwort unverändert.';
$a->strings['Password Too Long'] = 'Passwort ist zu lang'; $a->strings['Password Too Long'] = 'Passwort ist zu lang';
$a->strings['Since version 2022.09, we\'ve realized that any password longer than 72 characters is truncated during hashing. To prevent any confusion about this behavior, please update your password to be fewer or equal to 72 characters.'] = 'Mit der Version 2022.09 haben wir festgestellt, dass jedes Passwort, das länger als 72 Zeichen ist, beim Hashing abgeschnitten wird. Um Verwirrung über dieses Verhalten zu vermeiden, aktualisieren Sie Ihr Passwort bitte so, dass es höchstens 72 Zeichen hat.';
$a->strings['Update Password'] = 'Passwort aktualisieren'; $a->strings['Update Password'] = 'Passwort aktualisieren';
$a->strings['Current Password:'] = 'Aktuelles Passwort:'; $a->strings['Current Password:'] = 'Aktuelles Passwort:';
$a->strings['Your current password to confirm the changes'] = 'Dein aktuelles Passwort um die Änderungen zu bestätigen'; $a->strings['Your current password to confirm the changes'] = 'Dein aktuelles Passwort um die Änderungen zu bestätigen';
@ -2267,7 +2319,6 @@ $a->strings['Someone writes a followup comment'] = ' jemand auch einen Kommen
$a->strings['You receive a private message'] = ' du eine private Nachricht erhältst'; $a->strings['You receive a private message'] = ' du eine private Nachricht erhältst';
$a->strings['You receive a friend suggestion'] = ' du eine Empfehlung erhältst'; $a->strings['You receive a friend suggestion'] = ' du eine Empfehlung erhältst';
$a->strings['You are tagged in a post'] = ' du in einem Beitrag erwähnt wirst'; $a->strings['You are tagged in a post'] = ' du in einem Beitrag erwähnt wirst';
$a->strings['You are poked/prodded/etc. in a post'] = ' du von jemandem angestupst oder sonstwie behandelt wirst';
$a->strings['Create a desktop notification when:'] = 'Benachrichtigungen anzeigen wenn:'; $a->strings['Create a desktop notification when:'] = 'Benachrichtigungen anzeigen wenn:';
$a->strings['Someone tagged you'] = 'Dich jemand erwähnt'; $a->strings['Someone tagged you'] = 'Dich jemand erwähnt';
$a->strings['Someone directly commented on your post'] = 'Jemand einen Beitrag von dir kommentiert hat'; $a->strings['Someone directly commented on your post'] = 'Jemand einen Beitrag von dir kommentiert hat';
@ -2580,9 +2631,6 @@ $a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Bitt
$a->strings['%s %s posted to your profile wall'] = '%s%s hat auf deine Pinnwand gepostet'; $a->strings['%s %s posted to your profile wall'] = '%s%s hat auf deine Pinnwand gepostet';
$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s schrieb um %2$s auf Deine Pinnwand'; $a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s schrieb um %2$s auf Deine Pinnwand';
$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet'; $a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet';
$a->strings['%1$s %2$s poked you'] = '%1$s%2$shat dich angestubst';
$a->strings['%1$s poked you at %2$s'] = '%1$s hat dich auf %2$s angestupst';
$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]hat dich angestupst[/url].';
$a->strings['%s Introduction received'] = '%sVorstellung erhalten'; $a->strings['%s Introduction received'] = '%sVorstellung erhalten';
$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'Du hast eine Kontaktanfrage von \'%1$s\' auf %2$s erhalten'; $a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'Du hast eine Kontaktanfrage von \'%1$s\' auf %2$s erhalten';
$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten.'; $a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'Du hast eine [url=%1$s]Kontaktanfrage[/url] von %2$s erhalten.';
@ -2677,6 +2725,7 @@ $a->strings['%s is now following %s.'] = '%s folgt nun %s';
$a->strings['following'] = 'folgen'; $a->strings['following'] = 'folgen';
$a->strings['%s stopped following %s.'] = '%s hat aufgehört %s, zu folgen'; $a->strings['%s stopped following %s.'] = '%s hat aufgehört %s, zu folgen';
$a->strings['stopped following'] = 'wird nicht mehr gefolgt'; $a->strings['stopped following'] = 'wird nicht mehr gefolgt';
$a->strings['The folder %s must be writable by webserver.'] = 'Das Verzeichnis %s muss für den Web-Server beschreibbar sein.';
$a->strings['Login failed.'] = 'Anmeldung fehlgeschlagen.'; $a->strings['Login failed.'] = 'Anmeldung fehlgeschlagen.';
$a->strings['Login failed. Please check your credentials.'] = 'Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben.'; $a->strings['Login failed. Please check your credentials.'] = 'Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben.';
$a->strings['Welcome %s'] = 'Willkommen %s'; $a->strings['Welcome %s'] = 'Willkommen %s';
@ -2737,6 +2786,8 @@ $a->strings['Set the background color'] = 'Hintergrundfarbe festlegen';
$a->strings['Content background opacity'] = 'Opazität des Hintergrunds von Beiträgen'; $a->strings['Content background opacity'] = 'Opazität des Hintergrunds von Beiträgen';
$a->strings['Set the background image'] = 'Hintergrundbild festlegen'; $a->strings['Set the background image'] = 'Hintergrundbild festlegen';
$a->strings['Background image style'] = 'Stil des Hintergrundbildes'; $a->strings['Background image style'] = 'Stil des Hintergrundbildes';
$a->strings['Always open Compose page'] = 'Immer die Composer Seite öffnen';
$a->strings['The New Post button always open the <a href="/compose">Compose page</a> instead of the modal form. When this is disabled, the Compose page can be accessed with a middle click on the link or from the modal.'] = 'Neue Beiträge werden immer in der <a href="/compose">Composer Seite</a> anstelle des Dialoges bearbeitet. Ist diese Option deaktiviert, kann die Composer Seite durch einen Klick mit der mittleren Maustaste geöffnet werden.';
$a->strings['Login page background image'] = 'Hintergrundbild der Login-Seite'; $a->strings['Login page background image'] = 'Hintergrundbild der Login-Seite';
$a->strings['Login page background color'] = 'Hintergrundfarbe der Login-Seite'; $a->strings['Login page background color'] = 'Hintergrundfarbe der Login-Seite';
$a->strings['Leave background image and color empty for theme defaults'] = 'Wenn die Theme-Vorgaben verwendet werden sollen, lass bitte die Felder für die Hintergrundfarbe und das Hintergrundbild leer.'; $a->strings['Leave background image and color empty for theme defaults'] = 'Wenn die Theme-Vorgaben verwendet werden sollen, lass bitte die Felder für die Hintergrundfarbe und das Hintergrundbild leer.';

View file

@ -1,5 +1,8 @@
<div class="generic-page-wrapper"> <div class="generic-page-wrapper">
<h2>{{$compose_title}}</h2> <h2>{{$l10n.compose_title}}</h2>
{{if $l10n.always_open_compose}}
<p>{{$l10n.always_open_compose nofilter}}</p>
{{/if}}
<div id="profile-jot-wrapper"> <div id="profile-jot-wrapper">
<form class="comment-edit-form" data-item-id="{{$id}}" id="comment-edit-form-{{$id}}" action="compose/{{$type}}" method="post"> <form class="comment-edit-form" data-item-id="{{$id}}" id="comment-edit-form-{{$id}}" action="compose/{{$type}}" method="post">
{{*<!--<input type="hidden" name="return" value="{{$return_path}}" />-->*}} {{*<!--<input type="hidden" name="return" value="{{$return_path}}" />-->*}}
@ -8,74 +11,72 @@
<input type="hidden" name="wall" value="{{$wall}}" /> <input type="hidden" name="wall" value="{{$wall}}" />
<div id="jot-title-wrap"> <div id="jot-title-wrap">
<input type="text" name="title" id="jot-title" class="jothidden jotforms form-control" placeholder="{{$placeholdertitle}}" title="{{$placeholdertitle}}" value="{{$title}}" tabindex="1" dir="auto" /> <input type="text" name="title" id="jot-title" class="jothidden jotforms form-control" placeholder="{{$l10n.placeholdertitle}}" title="{{$l10n.placeholdertitle}}" value="{{$title}}" tabindex="1" dir="auto" />
</div> </div>
{{if $placeholdercategory}} {{if $l10n.placeholdercategory}}
<div id="jot-category-wrap"> <div id="jot-category-wrap">
<input name="category" id="jot-category" class="jothidden jotforms form-control" type="text" placeholder="{{$placeholdercategory}}" title="{{$placeholdercategory}}" value="{{$category}}" tabindex="2" dir="auto" /> <input name="category" id="jot-category" class="jothidden jotforms form-control" type="text" placeholder="{{$l10n.placeholdercategory}}" title="{{$l10n.placeholdercategory}}" value="{{$category}}" tabindex="2" dir="auto" />
</div> </div>
{{/if}} {{/if}}
<p class="comment-edit-bb-{{$id}} comment-icon-list"> <p class="comment-edit-bb-{{$id}} comment-icon-list">
<span> <span>
<button type="button" class="btn btn-sm icon bb-img" aria-label="{{$edimg}}" title="{{$edimg}}" data-role="insert-formatting" data-bbcode="img" data-id="{{$id}}" tabindex="7"> <button type="button" class="btn btn-sm icon bb-img" aria-label="{{$l10n.edimg}}" title="{{$l10n.edimg}}" data-role="insert-formatting" data-bbcode="img" data-id="{{$id}}" tabindex="7">
<i class="fa fa-picture-o"></i> <i class="fa fa-picture-o"></i>
</button> </button>
<button type="button" class="btn btn-sm icon bb-attach" aria-label="{{$edattach}}" title="{{$edattach}}" ondragenter="return commentLinkDrop(event, {{$id}});" ondragover="return commentLinkDrop(event, {{$id}});" ondrop="commentLinkDropper(event);" onclick="commentGetLink({{$id}}, '{{$prompttext}}');" tabindex="8"> <button type="button" class="btn btn-sm icon bb-attach" aria-label="{{$l10n.edattach}}" title="{{$l10n.edattach}}" ondragenter="return commentLinkDrop(event, {{$id}});" ondragover="return commentLinkDrop(event, {{$id}});" ondrop="commentLinkDropper(event);" onclick="commentGetLink({{$id}}, '{{$l10n.prompttext}}');" tabindex="8">
<i class="fa fa-paperclip"></i> <i class="fa fa-paperclip"></i>
</button> </button>
</span> </span>
<span> <span>
<button type="button" class="btn btn-sm icon bb-url" aria-label="{{$edurl}}" title="{{$edurl}}" onclick="insertFormatting('url',{{$id}});" tabindex="9"> <button type="button" class="btn btn-sm icon bb-url" aria-label="{{$l10n.edurl}}" title="{{$l10n.edurl}}" onclick="insertFormatting('url',{{$id}});" tabindex="9">
<i class="fa fa-link"></i> <i class="fa fa-link"></i>
</button> </button>
<button type="button" class="btn btn-sm icon underline" aria-label="{{$eduline}}" title="{{$eduline}}" onclick="insertFormatting('u',{{$id}});" tabindex="10"> <button type="button" class="btn btn-sm icon underline" aria-label="{{$l10n.eduline}}" title="{{$l10n.eduline}}" onclick="insertFormatting('u',{{$id}});" tabindex="10">
<i class="fa fa-underline"></i> <i class="fa fa-underline"></i>
</button> </button>
<button type="button" class="btn btn-sm icon italic" aria-label="{{$editalic}}" title="{{$editalic}}" onclick="insertFormatting('i',{{$id}});" tabindex="11"> <button type="button" class="btn btn-sm icon italic" aria-label="{{$l10n.editalic}}" title="{{$l10n.editalic}}" onclick="insertFormatting('i',{{$id}});" tabindex="11">
<i class="fa fa-italic"></i> <i class="fa fa-italic"></i>
</button> </button>
<button type="button" class="btn btn-sm icon bold" aria-label="{{$edbold}}" title="{{$edbold}}" onclick="insertFormatting('b',{{$id}});" tabindex="12"> <button type="button" class="btn btn-sm icon bold" aria-label="{{$l10n.edbold}}" title="{{$l10n.edbold}}" onclick="insertFormatting('b',{{$id}});" tabindex="12">
<i class="fa fa-bold"></i> <i class="fa fa-bold"></i>
</button> </button>
<button type="button" class="btn btn-sm icon quote" aria-label="{{$edquote}}" title="{{$edquote}}" onclick="insertFormatting('quote',{{$id}});" tabindex="13"> <button type="button" class="btn btn-sm icon quote" aria-label="{{$l10n.edquote}}" title="{{$l10n.edquote}}" onclick="insertFormatting('quote',{{$id}});" tabindex="13">
<i class="fa fa-quote-left"></i> <i class="fa fa-quote-left"></i>
</button> </button>
</span> </span>
</p> </p>
<p> <p>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text form-control text-autosize" name="body" placeholder="{{$default}}" rows="7" tabindex="3" dir="auto" dir="auto">{{$body}}</textarea> <textarea id="comment-edit-text-{{$id}}" class="comment-edit-text form-control text-autosize" name="body" placeholder="{{$l10n.default}}" rows="7" tabindex="3" dir="auto" dir="auto">{{$body}}</textarea>
</p> </p>
<p class="comment-edit-submit-wrapper"> <p class="comment-edit-submit-wrapper">
{{if $type == 'post'}} {{if $type == 'post'}}
<span role="presentation" class="form-inline"> <span role="presentation" class="form-inline">
<input type="text" name="location" class="form-control" id="jot-location" value="{{$location}}" placeholder="{{$location_set}}"/> <input type="text" name="location" class="form-control" id="jot-location" value="{{$location}}" placeholder="{{$l10n.location_set}}"/>
<button type="button" class="btn btn-sm icon" id="profile-location" <button type="button" class="btn btn-sm icon" id="profile-location"
data-title-set="{{$location_set}}" data-title-set="{{$l10n.location_set}}"
data-title-disabled="{{$location_disabled}}" data-title-disabled="{{$l10n.location_disabled}}"
data-title-unavailable="{{$location_unavailable}}" data-title-unavailable="{{$l10n.location_unavailable}}"
data-title-clear="{{$location_clear}}" data-title-clear="{{$l10n.location_clear}}"
title="{{$location_set}}" title="{{$l10n.location_set}}"
tabindex="6"> tabindex="6">
<i class="fa fa-map-marker" aria-hidden="true"></i> <i class="fa fa-map-marker" aria-hidden="true"></i>
</button> </button>
</span> </span>
{{/if}} {{/if}}
<span role="presentation" id="profile-rotator-wrapper"> <span role="presentation" id="profile-rotator-wrapper">
<img role="presentation" id="profile-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" /> <img role="presentation" id="profile-rotator" src="images/rotator.gif" alt="{{$l10n.wait}}" title="{{$l10n.wait}}" style="display: none;" />
</span> </span>
<span role="presentation" id="character-counter" class="grey text-info"></span> <span role="presentation" id="character-counter" class="grey text-info"></span>
{{if $preview}} <button type="button" class="btn btn-defaul btn-sm" onclick="preview_comment({{$id}});" id="comment-edit-preview-link-{{$id}}" tabindex="5"><i class="fa fa-eye"></i> {{$l10n.preview}}</button>
<button type="button" class="btn btn-defaul btn-sm" onclick="preview_comment({{$id}});" id="comment-edit-preview-link-{{$id}}" tabindex="5"><i class="fa fa-eye"></i> {{$preview}}</button> <button type="submit" class="btn btn-primary btn-sm" id="comment-edit-submit-{{$id}}" name="submit" tabindex="4"><i class="fa fa-envelope"></i> {{$l10n.submit}}</button>
{{/if}}
<button type="submit" class="btn btn-primary btn-sm" id="comment-edit-submit-{{$id}}" name="submit" tabindex="4"><i class="fa fa-envelope"></i> {{$submit}}</button>
</p> </p>
<div id="comment-edit-preview-{{$id}}" class="comment-edit-preview" style="display:none;"></div> <div id="comment-edit-preview-{{$id}}" class="comment-edit-preview" style="display:none;"></div>
{{if $type == 'post'}} {{if $type == 'post'}}
<h3>{{$visibility_title}}</h3> <h3>{{$l10n.visibility_title}}</h3>
{{$acl_selector nofilter}} {{$acl_selector nofilter}}
<div class="jotplugins"> <div class="jotplugins">

View file

@ -43,7 +43,8 @@ function theme_post(App $a)
'background_image', 'background_image',
'bg_image_option', 'bg_image_option',
'login_bg_image', 'login_bg_image',
'login_bg_color' 'login_bg_color',
'always_open_compose',
] as $field) { ] as $field) {
if (isset($_POST['frio_' . $field])) { if (isset($_POST['frio_' . $field])) {
DI::pConfig()->set(local_user(), 'frio', $field, $_POST['frio_' . $field]); DI::pConfig()->set(local_user(), 'frio', $field, $_POST['frio_' . $field]);
@ -73,7 +74,8 @@ function theme_admin_post(App $a)
'background_image', 'background_image',
'bg_image_option', 'bg_image_option',
'login_bg_image', 'login_bg_image',
'login_bg_color' 'login_bg_color',
'always_open_compose',
] as $field) { ] as $field) {
if (isset($_POST['frio_' . $field])) { if (isset($_POST['frio_' . $field])) {
DI::config()->set('frio', $field, $_POST['frio_' . $field]); DI::config()->set('frio', $field, $_POST['frio_' . $field]);
@ -84,48 +86,57 @@ function theme_admin_post(App $a)
} }
} }
function theme_content(App $a) function theme_content(): string
{ {
if (!local_user()) { if (!local_user()) {
return; return '';
} }
$arr = [];
$node_scheme = DI::config()->get('frio', 'scheme', DI::config()->get('frio', 'scheme')); $arr = [
'scheme' => DI::pConfig()->get(local_user(), 'frio', 'scheme',
DI::pConfig()->get(local_user(), 'frio', 'schema',
DI::config()->get('frio', 'scheme',
DI::config()->get('frio', 'schema')
)
)
),
$arr['scheme'] = DI::pConfig()->get(local_user(), 'frio', 'scheme', DI::pConfig()->get(local_user(), 'frio', 'schema', $node_scheme)); 'share_string' => '',
$arr['scheme_accent'] = DI::pConfig()->get(local_user(), 'frio', 'scheme_accent' , DI::config()->get('frio', 'scheme_accent')); 'scheme_accent' => DI::pConfig()->get(local_user(), 'frio', 'scheme_accent' , DI::config()->get('frio', 'scheme_accent')),
$arr['share_string'] = ''; 'nav_bg' => DI::pConfig()->get(local_user(), 'frio', 'nav_bg' , DI::config()->get('frio', 'nav_bg')),
$arr['nav_bg'] = DI::pConfig()->get(local_user(), 'frio', 'nav_bg' , DI::config()->get('frio', 'nav_bg')); 'nav_icon_color' => DI::pConfig()->get(local_user(), 'frio', 'nav_icon_color' , DI::config()->get('frio', 'nav_icon_color')),
$arr['nav_icon_color'] = DI::pConfig()->get(local_user(), 'frio', 'nav_icon_color' , DI::config()->get('frio', 'nav_icon_color')); 'link_color' => DI::pConfig()->get(local_user(), 'frio', 'link_color' , DI::config()->get('frio', 'link_color')),
$arr['link_color'] = DI::pConfig()->get(local_user(), 'frio', 'link_color' , DI::config()->get('frio', 'link_color')); 'background_color' => DI::pConfig()->get(local_user(), 'frio', 'background_color' , DI::config()->get('frio', 'background_color')),
$arr['background_color'] = DI::pConfig()->get(local_user(), 'frio', 'background_color', DI::config()->get('frio', 'background_color')); 'contentbg_transp' => DI::pConfig()->get(local_user(), 'frio', 'contentbg_transp' , DI::config()->get('frio', 'contentbg_transp')),
$arr['contentbg_transp'] = DI::pConfig()->get(local_user(), 'frio', 'contentbg_transp', DI::config()->get('frio', 'contentbg_transp')); 'background_image' => DI::pConfig()->get(local_user(), 'frio', 'background_image' , DI::config()->get('frio', 'background_image')),
$arr['background_image'] = DI::pConfig()->get(local_user(), 'frio', 'background_image', DI::config()->get('frio', 'background_image')); 'bg_image_option' => DI::pConfig()->get(local_user(), 'frio', 'bg_image_option' , DI::config()->get('frio', 'bg_image_option')),
$arr['bg_image_option'] = DI::pConfig()->get(local_user(), 'frio', 'bg_image_option' , DI::config()->get('frio', 'bg_image_option')); 'always_open_compose' => DI::pConfig()->get(local_user(), 'frio', 'always_open_compose', DI::config()->get('frio', 'always_open_compose', false)),
];
return frio_form($arr); return frio_form($arr);
} }
function theme_admin(App $a) function theme_admin(): string
{ {
if (!local_user()) { if (!local_user()) {
return; return '';
} }
$arr = [];
$arr['scheme'] = DI::config()->get('frio', 'scheme', DI::config()->get('frio', 'schema')); $arr = [
$arr['scheme_accent'] = DI::config()->get('frio', 'scheme_accent'); 'scheme' => DI::config()->get('frio', 'scheme', DI::config()->get('frio', 'schema')),
$arr['share_string'] = ''; 'scheme_accent' => DI::config()->get('frio', 'scheme_accent'),
$arr['nav_bg'] = DI::config()->get('frio', 'nav_bg'); 'share_string' => '',
$arr['nav_icon_color'] = DI::config()->get('frio', 'nav_icon_color'); 'nav_bg' => DI::config()->get('frio', 'nav_bg'),
$arr['link_color'] = DI::config()->get('frio', 'link_color'); 'nav_icon_color' => DI::config()->get('frio', 'nav_icon_color'),
$arr['background_color'] = DI::config()->get('frio', 'background_color'); 'link_color' => DI::config()->get('frio', 'link_color'),
$arr['contentbg_transp'] = DI::config()->get('frio', 'contentbg_transp'); 'background_color' => DI::config()->get('frio', 'background_color'),
$arr['background_image'] = DI::config()->get('frio', 'background_image'); 'contentbg_transp' => DI::config()->get('frio', 'contentbg_transp'),
$arr['bg_image_option'] = DI::config()->get('frio', 'bg_image_option'); 'background_image' => DI::config()->get('frio', 'background_image'),
$arr['login_bg_image'] = DI::config()->get('frio', 'login_bg_image'); 'bg_image_option' => DI::config()->get('frio', 'bg_image_option'),
$arr['login_bg_color'] = DI::config()->get('frio', 'login_bg_color'); 'login_bg_image' => DI::config()->get('frio', 'login_bg_image'),
'login_bg_color' => DI::config()->get('frio', 'login_bg_color'),
'always_open_compose' => DI::config()->get('frio', 'always_open_compose', false),
];
return frio_form($arr); return frio_form($arr);
} }
@ -173,6 +184,8 @@ function frio_form($arr)
'$background_image' => array_key_exists('background_image', $disable) ? '' : ['frio_background_image', DI::l10n()->t('Set the background image'), $arr['background_image'], $background_image_help, false], '$background_image' => array_key_exists('background_image', $disable) ? '' : ['frio_background_image', DI::l10n()->t('Set the background image'), $arr['background_image'], $background_image_help, false],
'$bg_image_options_title' => DI::l10n()->t('Background image style'), '$bg_image_options_title' => DI::l10n()->t('Background image style'),
'$bg_image_options' => Image::get_options($arr), '$bg_image_options' => Image::get_options($arr),
'$always_open_compose' => ['frio_always_open_compose', DI::l10n()->t('Always open Compose page'), $arr['always_open_compose'], DI::l10n()->t('The New Post button always open the <a href="/compose">Compose page</a> instead of the modal form. When this is disabled, the Compose page can be accessed with a middle click on the link or from the modal.')],
]; ];
if (array_key_exists('login_bg_image', $arr) && !array_key_exists('login_bg_image', $disable)) { if (array_key_exists('login_bg_image', $arr) && !array_key_exists('login_bg_image', $disable)) {
@ -183,7 +196,5 @@ function frio_form($arr)
$ctx['$login_bg_color'] = ['frio_login_bg_color', DI::l10n()->t('Login page background color'), $arr['login_bg_color'], DI::l10n()->t('Leave background image and color empty for theme defaults'), false]; $ctx['$login_bg_color'] = ['frio_login_bg_color', DI::l10n()->t('Login page background color'), $arr['login_bg_color'], DI::l10n()->t('Leave background image and color empty for theme defaults'), false];
} }
$o = Renderer::replaceMacros($t, $ctx); return Renderer::replaceMacros($t, $ctx);
return $o;
} }

View file

@ -87,11 +87,13 @@ $(document).ready(function () {
if ($("#jot-popup").is(":hidden")) { if ($("#jot-popup").is(":hidden")) {
$jotButton.hide(); $jotButton.hide();
} }
if ($jotButton.hasClass('modal-open')) {
$jotButton.on("click", function (e) { $jotButton.on("click", function (e) {
e.preventDefault(); e.preventDefault();
jotShow(); jotShow();
}); });
} }
}
let $body = $("body"); let $body = $("body");

View file

@ -1,5 +1,5 @@
{{* The button to open the jot - in This theme we move the button with js to the second nav bar *}} {{* The button to open the jot - in This theme we move the button with js to the second nav bar *}}
<a class="btn btn-sm btn-primary pull-right" id="jotOpen" href="compose/{{$posttype}}{{if $content}}?body={{$content}}{{/if}}" aria-label="{{$new_post}}" title="{{$new_post}}"><i class="fa fa-pencil-square-o fa-2x"></i></a> <a class="btn btn-sm btn-primary pull-right{{if !$always_open_compose}} modal-open{{/if}}" id="jotOpen" href="compose/{{$posttype}}{{if $content}}?body={{$content}}{{/if}}" aria-label="{{$new_post}}" title="{{$new_post}}"><i class="fa fa-pencil-square-o fa-2x"></i></a>
<div id="jot-content"> <div id="jot-content">
<div id="jot-sections"> <div id="jot-sections">

View file

@ -209,6 +209,8 @@
}); });
</script> </script>
{{include file="field_checkbox.tpl" field=$always_open_compose}}
<div class="settings-submit-wrapper pull-right"> <div class="settings-submit-wrapper pull-right">
<button type="submit" value="{{$submit}}" class="settings-submit btn btn-primary" name="frio-settings-submit">{{$submit}}</button> <button type="submit" value="{{$submit}}" class="settings-submit btn btn-primary" name="frio-settings-submit">{{$submit}}</button>
</div> </div>