diff --git a/Vagrantfile b/Vagrantfile
index 4684d9f09d..1687351231 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -1,5 +1,5 @@
-server_ip = "192.168.22.10"
+server_ip = "192.168.56.10"
server_memory = "2048" # MB
server_timezone = "UTC"
diff --git a/bin/console.php b/bin/console.php
index 3e588acd6d..41e0172489 100755
--- a/bin/console.php
+++ b/bin/console.php
@@ -26,6 +26,7 @@ if (php_sapi_name() !== 'cli') {
}
use Dice\Dice;
+use Friendica\DI;
use Psr\Log\LoggerInterface;
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 = $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));
(new Friendica\Core\Console($dice, $argv))->execute();
diff --git a/bin/dev/vagrant_provision.sh b/bin/dev/vagrant_provision.sh
index 3992550ee1..40d08cedb2 100755
--- a/bin/dev/vagrant_provision.sh
+++ b/bin/dev/vagrant_provision.sh
@@ -45,13 +45,13 @@ apt-get install -qq apache2
a2enmod rewrite actions ssl
cp /vagrant/bin/dev/vagrant_vhost.sh /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
service apache2 restart
#Install php
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
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
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
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
#Install mysql
diff --git a/boot.php b/boot.php
index 0f2b25027f..60c8bf5a30 100644
--- a/boot.php
+++ b/boot.php
@@ -27,156 +27,37 @@
* easily as email does today.
*/
-use Friendica\Model\Contact;
-
-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', "
\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];
- }
-}
+use Friendica\Core\Session;
/**
* Returns the user id of locally logged in user or false.
*
* @return int|bool user id or false
+ * @deprecated since version 2022.12, use Core\Session::getLocalUser() instead
*/
function local_user()
{
- if (!empty($_SESSION['authenticated']) && !empty($_SESSION['uid'])) {
- return intval($_SESSION['uid']);
- }
-
- return false;
+ return Session::getLocalUser();
}
/**
* Returns the public contact id of logged in user or false.
*
* @return int|bool public contact id or false
+ * @deprecated since version 2022.12, use Core\Session:: getPublicContact() instead
*/
function public_contact()
{
- static $public_contact_id = false;
-
- 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;
+ return Session::getPublicContact();
}
/**
* Returns public contact id of authenticated site visitor or false
*
* @return int|bool visitor_id or false
+ * @deprecated since version 2022.12, use Core\Session:: getRemoteUser() instead
*/
function remote_user()
{
- if (empty($_SESSION['authenticated'])) {
- 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);
+ return Session::getRemoteUser();
}
diff --git a/composer.json b/composer.json
index cc3a0db5fd..959e8de31c 100644
--- a/composer.json
+++ b/composer.json
@@ -41,7 +41,6 @@
"michelf/php-markdown": "^1.7",
"minishlink/web-push": "^6.0",
"mobiledetect/mobiledetectlib": "^2.8",
- "monolog/monolog": "^1.25",
"nikic/fast-route": "^1.3",
"paragonie/hidden-string": "^1.0",
"patrickschur/language-detection": "^5.0.0",
@@ -50,6 +49,7 @@
"pragmarx/google2fa": "^5.0",
"pragmarx/recovery": "^0.2",
"psr/container": "^1.0",
+ "psr/log": "^1.1",
"seld/cli-prompt": "^1.0",
"smarty/smarty": "^4",
"ua-parser/uap-php": "^3.9",
diff --git a/composer.lock b/composer.lock
index 9de7fd6966..96949561bb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "f5922f03b367e68a5930df6ed80c5c2f",
+ "content-hash": "c851fbba46ed090d0fbaf68e9b3b94df",
"packages": [
{
"name": "asika/simple-console",
@@ -1543,88 +1543,6 @@
],
"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",
"version": "v1.3.0",
diff --git a/database.sql b/database.sql
index 48de2fcaef..ab8c300a88 100644
--- a/database.sql
+++ b/database.sql
@@ -1,6 +1,6 @@
-- ------------------------------------------
--- Friendica 2022.09-rc (Giant Rhubarb)
--- DB_UPDATE_VERSION 1484
+-- Friendica 2022.12-dev (Giant Rhubarb)
+-- DB_UPDATE_VERSION 1486
-- ------------------------------------------
@@ -1186,6 +1186,7 @@ CREATE TABLE IF NOT EXISTS `post-content` (
`content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`body` mediumtext COMMENT 'item body content',
`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',
`coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
`language` text COMMENT 'Language information about this post',
@@ -1202,7 +1203,9 @@ CREATE TABLE IF NOT EXISTS `post-content` (
INDEX `plink` (`plink`(191)),
INDEX `resource-id` (`resource-id`),
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';
--
@@ -1289,6 +1292,7 @@ CREATE TABLE IF NOT EXISTS `post-media` (
`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',
`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',
`mimetype` varchar(60) COMMENT '',
`height` smallint unsigned COMMENT 'Height of the media',
@@ -1308,7 +1312,9 @@ CREATE TABLE IF NOT EXISTS `post-media` (
PRIMARY KEY(`id`),
UNIQUE INDEX `uri-id-url` (`uri-id`,`url`(512)),
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';
--
@@ -1807,6 +1813,8 @@ CREATE VIEW `post-user-view` AS SELECT
`post-user`.`thr-parent-id` AS `thr-parent-id`,
`conversation-item-uri`.`uri` AS `conversation`,
`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`,
`post-user`.`wall` AS `wall`,
`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 `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 `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-question` ON `post-question`.`uri-id` = `post-user`.`uri-id`
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`,
`conversation-item-uri`.`uri` AS `conversation`,
`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`,
`post-thread-user`.`wall` AS `wall`,
`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 `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 `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-question` ON `post-question`.`uri-id` = `post-thread-user`.`uri-id`
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`,
`conversation-item-uri`.`uri` AS `conversation`,
`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`,
`post`.`gravity` AS `gravity`,
`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 `diaspora-interaction` ON `diaspora-interaction`.`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` 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`;
@@ -2296,6 +2311,8 @@ CREATE VIEW `post-thread-view` AS SELECT
`post`.`thr-parent-id` AS `thr-parent-id`,
`conversation-item-uri`.`uri` AS `conversation`,
`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`,
`post`.`gravity` AS `gravity`,
`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 `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 `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` 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`;
diff --git a/doc/Addons.md b/doc/Addons.md
index bbc0ed61c1..91765ec484 100644
--- a/doc/Addons.md
+++ b/doc/Addons.md
@@ -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('unblock', $hook_data);
+### src/Core/Logger/Factory.php
+
+ Hook::callAll('logger_instance', $data);
+
### src/Core/StorageManager
Hook::callAll('storage_instance', $data);
diff --git a/doc/Install.md b/doc/Install.md
index b109113ef9..d0c3576ac8 100644
--- a/doc/Install.md
+++ b/doc/Install.md
@@ -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)
* 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.
-* 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)
* 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.
diff --git a/doc/Vagrant.md b/doc/Vagrant.md
index 3751b7bc06..ea098e3fb0 100644
--- a/doc/Vagrant.md
+++ b/doc/Vagrant.md
@@ -10,7 +10,7 @@ Getting started
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.
-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:
@@ -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.
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.
-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.
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).
@@ -66,4 +66,4 @@ On the next Vagrant up, the version problem should be fixed.
If `friendica.local` is not resolved, you may need to add an entry to the `/etc/hosts` file (or similar configuration depending on the OS you are using).
-For further documentation of vagrant, please see [the vagrant*docs*](https://docs.vagrantup.com/v2/).
\ No newline at end of file
+For further documentation of vagrant, please see [the vagrant*docs*](https://docs.vagrantup.com/v2/).
diff --git a/doc/database/db_post-content.md b/doc/database/db_post-content.md
index 86714c5ec9..27b372093a 100644
--- a/doc/database/db_post-content.md
+++ b/doc/database/db_post-content.md
@@ -13,6 +13,7 @@ Fields
| content-warning | | varchar(255) | NO | | | |
| body | item body content | 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 | | | |
| coord | longitude/latitude pair representing location where this item originated | varchar(255) | NO | | | |
| language | Language information about this post | text | YES | | NULL | |
@@ -35,6 +36,7 @@ Indexes
| plink | plink(191) |
| resource-id | resource-id |
| title-content-warning-body | FULLTEXT, title, content-warning, body |
+| quote-uri-id | quote-uri-id |
Foreign Keys
------------
@@ -42,5 +44,6 @@ Foreign Keys
| Field | Target Table | Target Field |
|-------|--------------|--------------|
| 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)
diff --git a/doc/database/db_post-media.md b/doc/database/db_post-media.md
index 59c87cd369..d6e3a703c6 100644
--- a/doc/database/db_post-media.md
+++ b/doc/database/db_post-media.md
@@ -6,36 +6,38 @@ Attached media
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| --------------- | --------------------------------------------------------- | ----------------- | ---- | --- | ------- | -------------- |
-| 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 | |
-| url | Media URL | varbinary(1024) | NO | | NULL | |
-| type | Media type | tinyint unsigned | NO | | 0 | |
-| mimetype | | varchar(60) | YES | | NULL | |
-| height | Height of the media | smallint unsigned | YES | | NULL | |
-| width | Width of the media | smallint unsigned | YES | | NULL | |
-| size | Media size | bigint unsigned | YES | | NULL | |
-| preview | Preview URL | varbinary(512) | YES | | NULL | |
-| preview-height | Height of the preview picture | smallint unsigned | YES | | NULL | |
-| preview-width | Width of the preview picture | smallint unsigned | YES | | NULL | |
-| description | | text | YES | | NULL | |
-| name | Name of the media | varchar(255) | YES | | NULL | |
-| author-url | URL of the author of the media | varbinary(383) | YES | | NULL | |
-| author-name | Name of the author of the media | varchar(255) | YES | | NULL | |
-| author-image | Image of the author of the media | varbinary(383) | YES | | NULL | |
-| publisher-url | URL of the publisher of the media | varbinary(383) | YES | | NULL | |
-| publisher-name | Name of the publisher of the media | varchar(255) | YES | | NULL | |
-| publisher-image | Image of the publisher of the media | varbinary(383) | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| --------------- | ------------------------------------------------------------------ | ----------------- | ---- | --- | ------- | -------------- |
+| 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 | |
+| 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 | |
+| mimetype | | varchar(60) | YES | | NULL | |
+| height | Height of the media | smallint unsigned | YES | | NULL | |
+| width | Width of the media | smallint unsigned | YES | | NULL | |
+| size | Media size | bigint unsigned | YES | | NULL | |
+| preview | Preview URL | varbinary(512) | YES | | NULL | |
+| preview-height | Height of the preview picture | smallint unsigned | YES | | NULL | |
+| preview-width | Width of the preview picture | smallint unsigned | YES | | NULL | |
+| description | | text | YES | | NULL | |
+| name | Name of the media | varchar(255) | YES | | NULL | |
+| author-url | URL of the author of the media | varbinary(383) | YES | | NULL | |
+| author-name | Name of the author of the media | varchar(255) | YES | | NULL | |
+| author-image | Image of the author of the media | varbinary(383) | YES | | NULL | |
+| publisher-url | URL of the publisher of the media | varbinary(383) | YES | | NULL | |
+| publisher-name | Name of the publisher of the media | varchar(255) | YES | | NULL | |
+| publisher-image | Image of the publisher of the media | varbinary(383) | YES | | NULL | |
Indexes
------------
-| Name | Fields |
-| ---------- | ------------------------ |
-| PRIMARY | id |
-| uri-id-url | UNIQUE, uri-id, url(512) |
-| uri-id-id | uri-id, id |
+| Name | Fields |
+| ------------ | ------------------------ |
+| PRIMARY | id |
+| uri-id-url | UNIQUE, uri-id, url(512) |
+| uri-id-id | uri-id, id |
+| media-uri-id | media-uri-id |
Foreign Keys
------------
@@ -43,5 +45,6 @@ Foreign Keys
| Field | Target Table | Target Field |
|-------|--------------|--------------|
| 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)
diff --git a/doc/de/Addons.md b/doc/de/Addons.md
index 5a4ca98a0b..342dd1b815 100644
--- a/doc/de/Addons.md
+++ b/doc/de/Addons.md
@@ -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('unblock', $hook_data);
+### src/Core/Logger/Factory.php
+
+ Hook::callAll('logger_instance', $data);
+
### src/Core/StorageManager
Hook::callAll('storage_instance', $data);
diff --git a/doc/de/Install.md b/doc/de/Install.md
index 03a46f6152..94ca08a2b6 100644
--- a/doc/de/Install.md
+++ b/doc/de/Install.md
@@ -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)
* 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.
-* 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]
* 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.
diff --git a/mod/cal.php b/mod/cal.php
index 3f249da0ac..ec6df1f165 100644
--- a/mod/cal.php
+++ b/mod/cal.php
@@ -119,7 +119,7 @@ function cal_content(App $a)
$is_owner = local_user() == $owner['uid'];
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;
}
@@ -262,7 +262,7 @@ function cal_content(App $a)
if ($mode == 'export') {
if (!$owner_uid) {
- notice(DI::l10n()->t('User not found'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('User not found'));
return;
}
@@ -271,9 +271,9 @@ function cal_content(App $a)
if (!$evexport["success"]) {
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 {
- 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
diff --git a/mod/editpost.php b/mod/editpost.php
index 3fb8c80ec0..8d2160fde0 100644
--- a/mod/editpost.php
+++ b/mod/editpost.php
@@ -35,14 +35,14 @@ function editpost_content(App $a)
$o = '';
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
$post_id = ((DI::args()->getArgc() > 1) ? intval(DI::args()->getArgv()[1]) : 0);
if (!$post_id) {
- notice(DI::l10n()->t('Item not found'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Item not found'));
return;
}
@@ -52,7 +52,7 @@ function editpost_content(App $a)
$item = Post::selectFirstForUser(local_user(), $fields, ['id' => $post_id, 'uid' => local_user()]);
if (!DBA::isResult($item)) {
- notice(DI::l10n()->t('Item not found'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Item not found'));
return;
}
diff --git a/mod/events.php b/mod/events.php
index bd80ee0ca6..a9a2e47fe2 100644
--- a/mod/events.php
+++ b/mod/events.php
@@ -121,7 +121,7 @@ function events_post(App $a)
$onerror_path = 'events/' . $action . '?' . http_build_query($params, '', '&', PHP_QUERY_RFC3986);
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'])) {
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)) {
- 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'])) {
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) {
- 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');
@@ -215,7 +215,7 @@ function events_post(App $a)
function events_content(App $a)
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form();
}
@@ -532,7 +532,7 @@ function events_content(App $a)
}
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');
diff --git a/mod/follow.php b/mod/follow.php
index 818a1ae5e9..b6ffe2ef0a 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -53,7 +53,7 @@ function follow_content(App $a)
$return_path = 'contact';
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect($return_path);
// NOTREACHED
}
@@ -81,7 +81,7 @@ function follow_content(App $a)
if (DBA::isResult($user_contact)) {
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 = '';
}
}
@@ -97,7 +97,7 @@ function follow_content(App $a)
// Possibly it is a remote item and not an account
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 = '';
$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']);
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 = '';
}
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 = '';
}
@@ -127,7 +127,7 @@ function follow_content(App $a)
$owner = User::getOwnerDataById($uid);
if (empty($owner)) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect($return_path);
// NOTREACHED
}
@@ -181,14 +181,14 @@ function follow_process(App $a, string $url)
follow_remote_item($url);
if ($result['message']) {
- notice($result['message']);
+ DI::sysmsg()->addNotice($result['message']);
}
DI::baseUrl()->redirect($return_path);
} elseif ($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);
}
diff --git a/mod/item.php b/mod/item.php
index 56384b22b9..799d1b8881 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -36,6 +36,7 @@ use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\Session;
use Friendica\Core\System;
+use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Attach;
@@ -128,7 +129,7 @@ function item_post(App $a) {
}
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) {
DI::baseUrl()->redirect($return_path);
}
@@ -178,7 +179,7 @@ function item_post(App $a) {
// Now check that valid personal details have been provided
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']]);
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
@@ -334,7 +335,7 @@ function item_post(App $a) {
System::jsonExit(['preview' => '']);
}
- notice(DI::l10n()->t('Empty post discarded.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Empty post discarded.'));
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
@@ -632,7 +633,7 @@ function item_post(App $a) {
unset($datarray['self']);
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);
}
}
@@ -681,7 +682,7 @@ function item_post(App $a) {
$post_id = Item::insert($datarray);
if (!$post_id) {
- notice(DI::l10n()->t('Item wasn\'t stored.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Item wasn\'t stored.'));
if ($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]);
if (!DBA::isResult($item)) {
- notice(DI::l10n()->t('Item not found.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Item not found.'));
DI::baseUrl()->redirect('network');
//NOTREACHED
}
@@ -861,7 +862,7 @@ function drop_item(int $id, string $return = ''): string
//NOTREACHED
} else {
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']);
//NOTREACHED
}
diff --git a/mod/lostpass.php b/mod/lostpass.php
index 6aa76e0cc6..62b621b8ce 100644
--- a/mod/lostpass.php
+++ b/mod/lostpass.php
@@ -37,7 +37,7 @@ function lostpass_post(App $a)
$condition = ['(`email` = ? OR `nickname` = ?) AND `verified` = 1 AND `blocked` = 0', $loginame, $loginame];
$user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'email', 'language'], $condition);
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();
}
@@ -49,7 +49,7 @@ function lostpass_post(App $a)
];
$result = DBA::update('user', $fields, ['uid' => $user['uid']]);
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');
@@ -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)]);
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();
}
@@ -110,7 +110,7 @@ function lostpass_content(App $a)
];
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();
}
@@ -152,7 +152,7 @@ function lostpass_generate_password($user)
'$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');
$preamble = Strings::deindent(DI::l10n()->t('
diff --git a/mod/match.php b/mod/match.php
index 02ee0c3339..a1f7be77ce 100644
--- a/mod/match.php
+++ b/mod/match.php
@@ -59,7 +59,7 @@ function match_content(App $a)
return '';
}
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 '';
}
@@ -90,7 +90,7 @@ function match_content(App $a)
}
if (empty($entries)) {
- info(DI::l10n()->t('No matches'));
+ DI::sysmsg()->addInfo(DI::l10n()->t('No matches'));
}
$tpl = Renderer::getMarkupTemplate('viewcontact_template.tpl');
diff --git a/mod/message.php b/mod/message.php
index e8fe60fd33..4b6f5b31b8 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -66,7 +66,7 @@ function message_init(App $a)
function message_post(App $a)
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
@@ -80,20 +80,20 @@ function message_post(App $a)
switch ($ret) {
case -1:
- notice(DI::l10n()->t('No recipient selected.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No recipient selected.'));
$norecip = true;
break;
case -2:
- notice(DI::l10n()->t('Unable to locate contact information.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Unable to locate contact information.'));
break;
case -3:
- notice(DI::l10n()->t('Message could not be sent.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Message could not be sent.'));
break;
case -4:
- notice(DI::l10n()->t('Message collection failure.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Message collection failure.'));
break;
}
@@ -111,7 +111,7 @@ function message_content(App $a)
Nav::setSelected('messages');
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form();
}
@@ -146,12 +146,12 @@ function message_content(App $a)
if ($cmd === 'drop') {
$message = DBA::selectFirst('mail', ['convid'], ['id' => DI::args()->getArgv()[2], 'uid' => local_user()]);
if(!DBA::isResult($message)){
- notice(DI::l10n()->t('Conversation not found.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Conversation not found.'));
DI::baseUrl()->redirect('message');
}
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()]);
@@ -166,7 +166,7 @@ function message_content(App $a)
$parent = $parentmail['parent-uri'];
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');
@@ -222,7 +222,7 @@ function message_content(App $a)
$r = get_messages(local_user(), $pager->getStart(), $pager->getItemsPerPage());
if (!DBA::isResult($r)) {
- notice(DI::l10n()->t('No messages.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No messages.'));
return $o;
}
@@ -278,7 +278,7 @@ function message_content(App $a)
}
if (!DBA::isResult($messages)) {
- notice(DI::l10n()->t('Message not available.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Message not available.'));
return $o;
}
diff --git a/mod/notes.php b/mod/notes.php
index e81cedf0b7..2c23e7aaa6 100644
--- a/mod/notes.php
+++ b/mod/notes.php
@@ -41,7 +41,7 @@ function notes_init(App $a)
function notes_content(App $a, bool $update = false)
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
diff --git a/mod/ostatus_subscribe.php b/mod/ostatus_subscribe.php
index 345e64924f..0dbce59f29 100644
--- a/mod/ostatus_subscribe.php
+++ b/mod/ostatus_subscribe.php
@@ -30,7 +30,7 @@ use Friendica\Protocol\ActivityPub;
function ostatus_subscribe_content(App $a): string
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('ostatus_subscribe');
// NOTREACHED
}
diff --git a/mod/photos.php b/mod/photos.php
index d953569edc..8111fffa30 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -157,14 +157,14 @@ function photos_post(App $a)
}
if (!$can_post) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
System::exit();
}
$owner_record = User::getOwnerDataById($page_owner_uid);
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);
System::exit();
}
@@ -193,7 +193,7 @@ function photos_post(App $a)
$album = hex2bin(DI::args()->getArgv()[3]);
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');
return; // NOTREACHED
}
@@ -247,9 +247,9 @@ function photos_post(App $a)
// Update the photo albums cache
Photo::clearAlbumCache($page_owner_uid);
- notice(DI::l10n()->t('Album successfully deleted'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Album successfully deleted'));
} 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
Photo::clearAlbumCache($page_owner_uid);
} 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]);
}
@@ -629,21 +629,21 @@ function photos_post(App $a)
if ($error !== UPLOAD_ERR_OK) {
switch ($error) {
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;
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;
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;
case UPLOAD_ERR_NO_FILE:
- notice(DI::l10n()->t('Image file is missing'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Image file is missing'));
break;
case UPLOAD_ERR_NO_TMP_DIR:
case UPLOAD_ERR_CANT_WRITE:
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;
}
@unlink($src);
@@ -659,7 +659,7 @@ function photos_post(App $a)
$maximagesize = DI::config()->get('system', '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);
$foo = 0;
Hook::callAll('photo_post_end', $foo);
@@ -667,7 +667,7 @@ function photos_post(App $a)
}
if (!$filesize) {
- notice(DI::l10n()->t('Image file is empty.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Image file is empty.'));
@unlink($src);
$foo = 0;
Hook::callAll('photo_post_end', $foo);
@@ -682,7 +682,7 @@ function photos_post(App $a)
if (!$image->isValid()) {
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);
$foo = 0;
Hook::callAll('photo_post_end',$foo);
@@ -708,7 +708,7 @@ function photos_post(App $a)
if (!$r) {
Logger::warning('image store failed');
- notice(DI::l10n()->t('Image upload failed.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Image upload failed.'));
return;
}
@@ -795,12 +795,12 @@ function photos_content(App $a)
}
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;
}
if (empty($user)) {
- notice(DI::l10n()->t('No photos selected'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No photos selected'));
return;
}
@@ -869,7 +869,7 @@ function photos_content(App $a)
}
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;
}
@@ -884,7 +884,7 @@ function photos_content(App $a)
// Display upload form
if ($datatype === 'upload') {
if (!$can_post) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
@@ -1084,9 +1084,9 @@ function photos_content(App $a)
if (!DBA::isResult($ph)) {
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 {
- notice(DI::l10n()->t('Photo not available'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Photo not available'));
}
return;
}
diff --git a/mod/repair_ostatus.php b/mod/repair_ostatus.php
index b2ca612185..bc2c8bba2d 100644
--- a/mod/repair_ostatus.php
+++ b/mod/repair_ostatus.php
@@ -28,7 +28,7 @@ use Friendica\Model\Contact;
function repair_ostatus_content(App $a) {
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('ostatus_repair');
// NOTREACHED
}
diff --git a/mod/settings.php b/mod/settings.php
index 2e21c26824..093572f18a 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -37,7 +37,7 @@ use Friendica\Protocol\Email;
function settings_init(App $a)
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
@@ -47,7 +47,7 @@ function settings_init(App $a)
function settings_post(App $a)
{
if (!$a->isLoggedIn()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
@@ -119,7 +119,7 @@ function settings_post(App $a)
$mbox = Email::connect($mb, $mail_user, $dcrpass);
unset($dcrpass);
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');
if (!local_user()) {
- //notice(DI::l10n()->t('Permission denied.'));
+ //DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form();
}
if (!empty($_SESSION['submanage'])) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return '';
}
diff --git a/mod/tagger.php b/mod/tagger.php
index a6d4595241..f3fe3b8861 100644
--- a/mod/tagger.php
+++ b/mod/tagger.php
@@ -166,6 +166,6 @@ EOT;
$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();
}
diff --git a/mod/uimport.php b/mod/uimport.php
index fb1ef25c34..da024a56ec 100644
--- a/mod/uimport.php
+++ b/mod/uimport.php
@@ -30,7 +30,7 @@ use Friendica\DI;
function uimport_post(App $a)
{
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;
}
@@ -43,7 +43,7 @@ function uimport_post(App $a)
function uimport_content(App $a)
{
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;
}
@@ -52,7 +52,7 @@ function uimport_content(App $a)
$total = DBA::count('user', ["`register_date` > UTC_TIMESTAMP - INTERVAL 1 DAY"]);
if ($total >= $max_dailies) {
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;
}
}
diff --git a/mod/unfollow.php b/mod/unfollow.php
index 10830bd103..61c88ee9e7 100644
--- a/mod/unfollow.php
+++ b/mod/unfollow.php
@@ -32,7 +32,7 @@ use Friendica\Util\Strings;
function unfollow_post(App $a)
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('login');
// NOTREACHED
}
@@ -47,7 +47,7 @@ function unfollow_content(App $a)
$base_return_path = 'contact';
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect('login');
// NOTREACHED
}
@@ -62,13 +62,13 @@ function unfollow_content(App $a)
$contact = DBA::selectFirst('contact', ['url', 'id', 'uid', 'network', 'addr', 'name'], $condition);
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);
// NOTREACHED
}
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']);
// NOTREACHED
}
@@ -79,7 +79,7 @@ function unfollow_content(App $a)
$self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]);
if (!DBA::isResult($self)) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect($base_return_path);
// NOTREACHED
}
@@ -131,7 +131,7 @@ function unfollow_process(string $url)
$contact = DBA::selectFirst('contact', [], $condition);
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);
// 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($notice_message);
+ DI::sysmsg()->addNotice($notice_message);
DI::baseUrl()->redirect($return_path);
}
diff --git a/mod/wall_attach.php b/mod/wall_attach.php
index 43f4681df3..8a3ed76066 100644
--- a/mod/wall_attach.php
+++ b/mod/wall_attach.php
@@ -66,7 +66,7 @@ function wall_attach_post(App $a) {
if ($r_json) {
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();
}
@@ -90,12 +90,12 @@ function wall_attach_post(App $a) {
*/
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') . '
' . (DI::l10n()->t('Or - did you try to upload an empty file?'));
@unlink($src);
if ($r_json) {
System::jsonExit(['error' => $msg]);
} else {
- notice($msg);
+ DI::sysmsg()->addNotice($msg);
}
System::exit();
}
@@ -106,7 +106,7 @@ function wall_attach_post(App $a) {
if ($r_json) {
System::jsonExit(['error' => $msg]);
} else {
- echo $msg . EOL;
+ echo $msg . '
';
}
System::exit();
}
@@ -120,7 +120,7 @@ function wall_attach_post(App $a) {
if ($r_json) {
System::jsonExit(['error' => $msg]);
} else {
- echo $msg . EOL;
+ echo $msg . '
';
}
System::exit();
}
diff --git a/mod/wall_upload.php b/mod/wall_upload.php
index 4554c55aa8..efea196fdc 100644
--- a/mod/wall_upload.php
+++ b/mod/wall_upload.php
@@ -88,7 +88,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) {
System::jsonExit(['error' => DI::l10n()->t('Permission denied.')]);
}
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
System::exit();
}
@@ -147,7 +147,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) {
System::jsonExit(['error' => DI::l10n()->t('Invalid request.')]);
}
- notice(DI::l10n()->t('Invalid request.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Invalid request.'));
System::exit();
}
@@ -165,7 +165,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) {
System::jsonExit(['error' => $msg]);
} else {
- echo $msg. EOL;
+ echo $msg . '
';
}
System::exit();
}
@@ -203,7 +203,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) {
System::jsonExit(['error' => $msg]);
} else {
- echo $msg. EOL;
+ echo $msg . '
';
}
System::exit();
}
@@ -227,7 +227,7 @@ function wall_upload_post(App $a, $desktopmode = true)
if ($r_json) {
System::jsonExit(['error' => $msg]);
} else {
- echo $msg. EOL;
+ echo $msg . '
';
}
System::exit();
}
diff --git a/mod/wallmessage.php b/mod/wallmessage.php
index e8f7d24e31..2b4b8d2a50 100644
--- a/mod/wallmessage.php
+++ b/mod/wallmessage.php
@@ -34,7 +34,7 @@ function wallmessage_post(App $a) {
$replyto = Profile::getMyURL();
if (!$replyto) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
@@ -53,13 +53,13 @@ function wallmessage_post(App $a) {
}
if (!$user['unkmail']) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
$total = DBA::count('mail', ["`uid` = ? AND `created` > ? AND `unknown`", $user['uid'], DateTimeFormat::utc('now - 1 day')]);
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;
}
@@ -67,16 +67,16 @@ function wallmessage_post(App $a) {
switch ($ret) {
case -1:
- notice(DI::l10n()->t('No recipient selected.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No recipient selected.'));
break;
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;
case -3:
- notice(DI::l10n()->t('Message could not be sent.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Message could not be sent.'));
break;
case -4:
- notice(DI::l10n()->t('Message collection failure.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Message collection failure.'));
break;
}
@@ -87,33 +87,33 @@ function wallmessage_post(App $a) {
function wallmessage_content(App $a) {
if (!Profile::getMyURL()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
$recipient = ((DI::args()->getArgc() > 1) ? DI::args()->getArgv()[1] : '');
if (!$recipient) {
- notice(DI::l10n()->t('No recipient.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No recipient.'));
return;
}
$user = User::getByNickname($recipient);
if (empty($user)) {
- notice(DI::l10n()->t('No recipient.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No recipient.'));
Logger::notice('wallmessage: no recipient');
return;
}
if (!$user['unkmail']) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
$total = DBA::count('mail', ["`uid` = ? AND `created` > ? AND `unknown`", $user['uid'], DateTimeFormat::utc('now - 1 day')]);
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;
}
diff --git a/mods/local.config.vagrant.php b/mods/local.config.vagrant.php
index 98e9a42e78..da873116d8 100644
--- a/mods/local.config.vagrant.php
+++ b/mods/local.config.vagrant.php
@@ -29,7 +29,7 @@ return [
// ****************************************************************
'config' => [
- 'hostname' => 'friendica.local',
+ 'hostname' => '192.168.56.10',
'admin_email' => 'admin@friendica.local',
'sitename' => 'Friendica Social Network',
'register_policy' => \Friendica\Module\Register::OPEN,
diff --git a/src/App.php b/src/App.php
index a141adf491..55b3e72e0e 100644
--- a/src/App.php
+++ b/src/App.php
@@ -58,6 +58,10 @@ use Psr\Log\LoggerInterface;
*/
class App
{
+ const PLATFORM = 'Friendica';
+ const CODENAME = 'Giant Rhubarb';
+ const VERSION = '2022.12-dev';
+
// Allow themes to control internal parameters
// by changing App values in theme.php
private $theme_info = [
@@ -347,6 +351,11 @@ class App
{
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
date_default_timezone_set('UTC');
diff --git a/src/App/Page.php b/src/App/Page.php
index 6331456119..dcd2e8832e 100644
--- a/src/App/Page.php
+++ b/src/App/Page.php
@@ -202,7 +202,7 @@ class Page implements ArrayAccess
*/
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) {
$path = mb_substr($path, mb_strlen($this->basePath . DIRECTORY_SEPARATOR));
@@ -277,7 +277,7 @@ class Page implements ArrayAccess
*/
$this->page['htmlhead'] = Renderer::replaceMacros($tpl, [
'$local_user' => local_user(),
- '$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
+ '$generator' => 'Friendica' . ' ' . App::VERSION,
'$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.'),
'$update_interval' => $interval,
@@ -395,7 +395,7 @@ class Page implements ArrayAccess
*/
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);
@@ -543,7 +543,7 @@ class Page implements ArrayAccess
$page = $this->page;
- header("X-Friendica-Version: " . FRIENDICA_VERSION);
+ header("X-Friendica-Version: " . App::VERSION);
header("Content-type: text/html; charset=utf-8");
if ($config->get('system', 'hsts') && ($baseURL->getSSLPolicy() == BaseURL::SSL_POLICY_FULL)) {
diff --git a/src/BaseModule.php b/src/BaseModule.php
index 99c297b756..09107f0472 100644
--- a/src/BaseModule.php
+++ b/src/BaseModule.php
@@ -389,7 +389,7 @@ abstract class BaseModule implements ICanHandleRequests
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')
@@ -397,7 +397,7 @@ abstract class BaseModule implements ICanHandleRequests
if (!self::checkFormSecurityToken($typename, $formname)) {
Logger::notice('checkFormSecurityToken failed: user ' . DI::app()->getLoggedInUserNickname() . ' - form element ' . $typename);
Logger::debug('checkFormSecurityToken failed', ['request' => $_REQUEST]);
- notice(self::getFormSecurityStandardErrorMessage());
+ DI::sysmsg()->addNotice(self::getFormSecurityStandardErrorMessage());
DI::baseUrl()->redirect($err_redirect);
}
}
diff --git a/src/Console/Relocate.php b/src/Console/Relocate.php
index c1db6ef534..729bee392f 100644
--- a/src/Console/Relocate.php
+++ b/src/Console/Relocate.php
@@ -197,7 +197,7 @@ HELP;
$this->out('Schedule relocation messages to remote Friendica and Diaspora hosts');
$users = $this->database->selectToArray('user', ['uid'], ['account_removed' => false, 'account_expired' => false]);
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;
diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php
index 5bdec3cb92..817bc402a8 100644
--- a/src/Content/Conversation.php
+++ b/src/Content/Conversation.php
@@ -261,7 +261,7 @@ class Conversation
break;
}
- $expanded .= "\t" . '
' . $explikers . EOL . '
';
+ $expanded .= "\t" . '' . $explikers . '
';
}
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
@@ -328,7 +328,7 @@ class Conversation
$created_at = '';
}
- $tpl = Renderer::getMarkupTemplate("jot.tpl");
+ $tpl = Renderer::getMarkupTemplate('jot.tpl');
$o .= Renderer::replaceMacros($tpl, [
'$new_post' => $this->l10n->t('New Post'),
@@ -393,7 +393,8 @@ class Conversation
'$message' => $this->l10n->t('Message'),
'$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),
]);
diff --git a/src/Content/Item.php b/src/Content/Item.php
index db1753893e..80edecc821 100644
--- a/src/Content/Item.php
+++ b/src/Content/Item.php
@@ -574,9 +574,10 @@ class Item
*
* @param string $url
* @param integer $uid
+ * @param bool $add_media
* @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)) {
$id = ModelItem::searchByLink($url, $uid);
@@ -599,7 +600,7 @@ class Item
return '';
}
- return $this->createSharedBlockByArray($shared_item);
+ return $this->createSharedBlockByArray($shared_item, $add_media);
}
/**
@@ -607,9 +608,10 @@ class Item
*
* @param integer $UriId
* @param integer $uid
+ * @param bool $add_media
* @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'];
$shared_item = Post::selectFirst($fields, ['uri-id' => $UriId, 'uid' => [$uid, 0], 'private' => [ModelItem::PUBLIC, ModelItem::UNLISTED]]);
@@ -618,7 +620,7 @@ class Item
return '';
}
- return $this->createSharedBlockByArray($shared_item);
+ return $this->createSharedBlockByArray($shared_item, $add_media);
}
/**
@@ -626,9 +628,10 @@ class Item
*
* @param string $guid
* @param integer $uid
+ * @param bool $add_media
* @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'];
$shared_item = Post::selectFirst($fields, ['guid' => $guid, 'uid' => [$uid, 0], 'private' => [ModelItem::PUBLIC, ModelItem::UNLISTED]]);
@@ -645,16 +648,17 @@ class Item
return '';
}
- return $this->createSharedBlockByArray($shared_item);
+ return $this->createSharedBlockByArray($shared_item, $add_media);
}
/**
* Add a share block for the given item array
*
* @param array $item
+ * @param bool $add_media
* @return string
*/
- public function createSharedBlockByArray(array $item): string
+ public function createSharedBlockByArray(array $item, bool $add_media = false): string
{
if ($item['network'] == Protocol::FEED) {
return PageInfo::getFooterFromUrl($item['plink']);
@@ -662,6 +666,8 @@ class Item
$item['guid'] = '';
$item['uri'] = '';
$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']);
@@ -674,7 +680,7 @@ class Item
// If it is a reshared post then reformat it to avoid display problems with two share elements
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']);
}
diff --git a/src/Content/Nav.php b/src/Content/Nav.php
index 77f068863a..6861d69e80 100644
--- a/src/Content/Nav.php
+++ b/src/Content/Nav.php
@@ -30,6 +30,7 @@ use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Profile;
use Friendica\Model\User;
+use Friendica\Module\Conversation\Community;
class Nav
{
@@ -251,8 +252,8 @@ class Nav
}
}
- if ((local_user() || DI::config()->get('system', 'community_page_style') != CP_NO_COMMUNITY_PAGE) &&
- !(DI::config()->get('system', 'community_page_style') == CP_NO_INTERNAL_COMMUNITY)) {
+ if ((local_user() || DI::config()->get('system', 'community_page_style') != Community::DISABLED_VISITOR) &&
+ !(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')];
}
diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php
index 43d4127ea9..d03161df9f 100644
--- a/src/Content/Text/BBCode.php
+++ b/src/Content/Text/BBCode.php
@@ -1069,6 +1069,38 @@ class BBCode
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:
*
@@ -1118,7 +1150,7 @@ class BBCode
);
DI::profiler()->stopRecording();
- return $return;
+ return trim($return);
}
/**
diff --git a/src/Core/Console.php b/src/Core/Console.php
index 2521e21bef..f51e33bd50 100644
--- a/src/Core/Console.php
+++ b/src/Core/Console.php
@@ -23,6 +23,7 @@ namespace Friendica\Core;
use Dice\Dice;
use Friendica;
+use Friendica\App;
/**
* Description of Console
@@ -133,7 +134,7 @@ HELP;
$command = null;
if ($this->getOption('version')) {
- $this->out('Friendica Console version ' . FRIENDICA_VERSION);
+ $this->out('Friendica Console version ' . App::VERSION);
return 0;
} elseif ((count($this->options) === 0 || $this->getOption($this->customHelpOptions) === true || $this->getOption($this->customHelpOptions) === 1) && count($this->args) === 0
diff --git a/src/Core/Installer.php b/src/Core/Installer.php
index 9a9bdfb5f7..1d29a5cf99 100644
--- a/src/Core/Installer.php
+++ b/src/Core/Installer.php
@@ -197,7 +197,7 @@ class Installer
$result = DBStructure::install();
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.') . '
';
$txt .= DI::l10n()->t('Please see the file "doc/INSTALL.md".');
$this->addCheck($txt, false, true, htmlentities($result, ENT_COMPAT, 'UTF-8'));
@@ -259,9 +259,9 @@ class Installer
$help = "";
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("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 'Setup the worker'") . EOL;
- $help .= EOL . EOL;
+ $help .= DI::l10n()->t('Could not find a command line version of PHP in the web server PATH.') . '
';
+ $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 'Setup the worker'") . '
';
+ $help .= '
';
$tpl = Renderer::getMarkupTemplate('field_input.tpl');
/// @todo Separate backend Installer class and presentation layer/view
$help .= Renderer::replaceMacros($tpl, [
@@ -279,7 +279,7 @@ class Installer
[$result] = explode("\n", $result);
$help = "";
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") . '
';
$help .= DI::l10n()->t('Found PHP version: ') . "$result";
}
$this->addCheck(DI::l10n()->t('PHP cli binary'), $passed2, true, $help);
@@ -295,7 +295,7 @@ class Installer
$passed3 = $result == $str;
$help = "";
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.') . '
';
$help .= DI::l10n()->t('This is required for message delivery to work.');
} else {
$this->phppath = $phppath;
@@ -333,7 +333,7 @@ class Installer
// Get private key
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') . '
';
$help .= DI::l10n()->t('If running under Windows, please see "http://www.php.net/manual/en/openssl.installation.php".');
$status = false;
}
@@ -511,10 +511,10 @@ class Installer
(!file_exists('config/local.config.php') && !is_writable('.'))) {
$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('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('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('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('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.') . '
';
+ $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.') . '
';
+ $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.') . '
';
+ $help .= DI::l10n()->t('You can alternatively skip this procedure and perform a manual installation. Please see the file "doc/INSTALL.md" for instructions.') . '
';
}
$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')) {
$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('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("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("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('Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering.') . '
';
+ $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.') . '
';
+ $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.") . '
';
+ $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.") . '
';
}
$this->addCheck(DI::l10n()->t('view/smarty3 is writable'), $status, true, $help);
@@ -571,7 +571,7 @@ class Installer
if ($fetchResult->getReturnCode() != 204) {
$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.') . '
';
$help .= DI::l10n()->t('In some circumstances (like running inside containers), you can skip this error.');
$error_msg = [];
$error_msg['head'] = DI::l10n()->t('Error message from Curl when fetching');
diff --git a/src/Core/Logger/Factory/Logger.php b/src/Core/Logger/Factory/Logger.php
index 954784c950..4df7d8ecaf 100644
--- a/src/Core/Logger/Factory/Logger.php
+++ b/src/Core/Logger/Factory/Logger.php
@@ -22,19 +22,16 @@
namespace Friendica\Core\Logger\Factory;
use Friendica\Core\Config\Capability\IManageConfigValues;
-use Friendica\Core\Logger\Exception\LoggerException;
use Friendica\Core;
use Friendica\Core\Logger\Exception\LogLevelException;
use Friendica\Database\Database;
+use Friendica\Network\HTTPException\InternalServerErrorException;
use Friendica\Util\FileSystem;
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\StreamLogger;
use Friendica\Core\Logger\Type\SyslogLogger;
use Friendica\Util\Profiler;
-use Monolog;
use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use Psr\Log\NullLogger;
@@ -60,9 +57,15 @@ class Logger
/** @var string The log-channel (app, worker, ...) */
private $channel;
- public function __construct(string $channel)
+ public function __construct(string $channel, bool $includeAddon = true)
{
$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');
$loglevel = self::mapLegacyConfigDebugLevel((string)$minLevel);
- switch ($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;
+ $name = $config->get('system', 'logger_config', 'stream');
+ switch ($name) {
case 'syslog':
try {
$logger = new SyslogLogger($this->channel, $introspection, $loglevel, $config->get('system', 'syslog_flags', SyslogLogger::DEFAULT_FLAGS), $config->get('system', 'syslog_facility', SyslogLogger::DEFAULT_FACILITY));
@@ -132,29 +109,48 @@ class Logger
case 'stream':
default:
- $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 {
- $logger = new StreamLogger($this->channel, $stream, $introspection, $fileSystem, $loglevel);
- } catch (LogLevelException $exception) {
- // If there's a wrong config value for loglevel, try again with standard
- $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE);
- $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]);
- } catch (\Throwable $t) {
- // No logger ...
- $logger = new NullLogger();
- }
- } else {
- try {
- $logger = new SyslogLogger($this->channel, $introspection, $loglevel);
- } catch (LogLevelException $exception) {
- // If there's a wrong config value for loglevel, try again with standard
- $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE);
- $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]);
- } catch (\Throwable $e) {
- // No logger ...
- $logger = new NullLogger();
+ $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');
+ // just add a stream in case it's either writable or not file
+ if (!is_file($stream) || is_writable($stream)) {
+ try {
+ $logger = new StreamLogger($this->channel, $stream, $introspection, $fileSystem, $loglevel);
+ } catch (LogLevelException $exception) {
+ // If there's a wrong config value for loglevel, try again with standard
+ $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE);
+ $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]);
+ } catch (\Throwable $t) {
+ // No logger ...
+ $logger = new NullLogger();
+ }
+ } else {
+ try {
+ $logger = new SyslogLogger($this->channel, $introspection, $loglevel);
+ } catch (LogLevelException $exception) {
+ // If there's a wrong config value for loglevel, try again with standard
+ $logger = $this->create($database, $config, $profiler, $fileSystem, LogLevel::NOTICE);
+ $logger->warning('Invalid loglevel set in config.', ['loglevel' => $loglevel]);
+ } catch (\Throwable $e) {
+ // No logger ...
+ $logger = new NullLogger();
+ }
}
}
break;
@@ -197,27 +193,11 @@ class Logger
return new NullLogger();
}
- $loggerTimeZone = new \DateTimeZone('UTC');
- Monolog\Logger::setTimezone($loggerTimeZone);
-
$introspection = new Introspection(self::$ignoreClassList);
- 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(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;
+ switch ($name) {
case 'syslog':
$logger = new SyslogLogger(self::DEV_CHANNEL, $introspection, LogLevel::DEBUG);
@@ -225,6 +205,23 @@ class Logger
case 'stream':
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);
break;
}
@@ -273,38 +270,4 @@ class Logger
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);
- }
- }
- }
}
diff --git a/src/Core/Logger/Type/Monolog/DevelopHandler.php b/src/Core/Logger/Type/Monolog/DevelopHandler.php
deleted file mode 100644
index febb8d6cda..0000000000
--- a/src/Core/Logger/Type/Monolog/DevelopHandler.php
+++ /dev/null
@@ -1,76 +0,0 @@
-.
- *
- */
-
-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;
- }
-}
diff --git a/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php b/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php
deleted file mode 100644
index 99a9defaf8..0000000000
--- a/src/Core/Logger/Type/Monolog/IntrospectionProcessor.php
+++ /dev/null
@@ -1,62 +0,0 @@
-.
- *
- */
-
-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;
- }
-}
diff --git a/src/Core/Logger/Type/README.md b/src/Core/Logger/Type/README.md
index 449403194d..b204353c04 100644
--- a/src/Core/Logger/Type/README.md
+++ b/src/Core/Logger/Type/README.md
@@ -5,7 +5,6 @@ This namespace contains the different implementations of a Logger.
### Configuration guideline
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
- [`syslog`](SyslogLogger.php): Prints the logging output into the syslog
diff --git a/src/Core/Search.php b/src/Core/Search.php
index 5ae1dd7ac4..cf3821afcf 100644
--- a/src/Core/Search.php
+++ b/src/Core/Search.php
@@ -192,7 +192,7 @@ class Search
}
// 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;
}
diff --git a/src/Core/Session.php b/src/Core/Session.php
index 059cd499c0..859dd8aa2e 100644
--- a/src/Core/Session.php
+++ b/src/Core/Session.php
@@ -69,6 +69,68 @@ class Session
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
*
diff --git a/src/Core/System.php b/src/Core/System.php
index 0c1e499d93..8a8f273a8d 100644
--- a/src/Core/System.php
+++ b/src/Core/System.php
@@ -442,10 +442,13 @@ class System
*/
public static function getLoadAvg(): array
{
- $content = @file_get_contents('/proc/loadavg');
- if (empty($content)) {
- $content = shell_exec('cat /proc/loadavg');
+ if (is_readable('/proc/loadavg')) {
+ $content = @file_get_contents('/proc/loadavg');
+ if (empty($content)) {
+ $content = shell_exec('cat /proc/loadavg');
+ }
}
+
if (empty($content) || !preg_match("#([.\d]+)\s([.\d]+)\s([.\d]+)\s(\d+)/(\d+)#", $content, $matches)) {
$load_arr = sys_getloadavg();
if (empty($load_arr)) {
diff --git a/src/Core/Update.php b/src/Core/Update.php
index ddb9effd71..5f42517209 100644
--- a/src/Core/Update.php
+++ b/src/Core/Update.php
@@ -35,6 +35,8 @@ class Update
const SUCCESS = 0;
const FAILED = 1;
+ const NEW_TABLE_STRUCTURE_VERSION = 1288;
+
/**
* 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
- 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);
if (DI::mode()->getExecutor() == Mode::INDEX) {
die($error);
@@ -73,8 +75,8 @@ class Update
}
// 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);
- if ($postupdate < NEW_TABLE_STRUCTURE_VERSION) {
+ $postupdate = DI::config()->get('system', 'post_update_version', self::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);
if (DI::mode()->getExecutor() == Mode::INDEX) {
die($error);
@@ -92,7 +94,7 @@ class Update
*/
self::run($basePath);
} else {
- Worker::add(PRIORITY_CRITICAL, 'DBUpdate');
+ Worker::add(Worker::PRIORITY_CRITICAL, 'DBUpdate');
}
}
}
diff --git a/src/Core/UserImport.php b/src/Core/UserImport.php
index 339ce0b65b..be7bbf0b57 100644
--- a/src/Core/UserImport.php
+++ b/src/Core/UserImport.php
@@ -123,13 +123,13 @@ class UserImport
$account = json_decode(file_get_contents($file['tmp_name']), true);
if ($account === null) {
- notice(DI::l10n()->t("Error decoding account file"));
+ DI::sysmsg()->addNotice(DI::l10n()->t("Error decoding account file"));
return;
}
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;
}
@@ -137,7 +137,7 @@ class UserImport
// check if username matches deleted account
if (DBA::exists('user', ['nickname' => $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;
}
@@ -173,7 +173,7 @@ class UserImport
$r = self::dbImportAssoc('user', $account['user']);
if ($r === false) {
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;
}
$newuid = self::lastInsertId();
@@ -218,7 +218,7 @@ class UserImport
}
}
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) {
@@ -271,7 +271,7 @@ class UserImport
if ($r === false) {
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('profile_field', ['uid' => $newuid]);
return;
@@ -322,9 +322,9 @@ class UserImport
}
// 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');
}
}
diff --git a/src/Core/Worker.php b/src/Core/Worker.php
index a57792ce7c..9ec2f8f04a 100644
--- a/src/Core/Worker.php
+++ b/src/Core/Worker.php
@@ -31,12 +31,20 @@ use Friendica\Util\DateTimeFormat;
*/
class Worker
{
- const PRIORITY_UNDEFINED = PRIORITY_UNDEFINED;
- const PRIORITY_CRITICAL = PRIORITY_CRITICAL;
- const PRIORITY_HIGH = PRIORITY_HIGH;
- const PRIORITY_MEDIUM = PRIORITY_MEDIUM;
- const PRIORITY_LOW = PRIORITY_LOW;
- const PRIORITY_NEGLIGIBLE = PRIORITY_NEGLIGIBLE;
+ /**
+ * @name Priority
+ *
+ * Process priority for the worker
+ * @{
+ */
+ 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_LONG_LOOP = 2; // Worker is processing the whole - long - loop.
@@ -807,7 +815,7 @@ class Worker
$top_priority = self::highestPriority();
$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]);
$queues = $active + 1;
}
@@ -939,7 +947,7 @@ class Worker
private static function nextPriority()
{
$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) {
$stamp = (float)microtime(true);
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);
}
- if (!empty($waiting[PRIORITY_CRITICAL])) {
- return PRIORITY_CRITICAL;
+ if (!empty($waiting[self::PRIORITY_CRITICAL])) {
+ return self::PRIORITY_CRITICAL;
}
$running = [];
@@ -1206,8 +1214,8 @@ class Worker
* @param (integer|array) priority or parameter array, strings are deprecated and are ignored
*
* next args are passed as $cmd command line
- * or: Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::DELETION, $drop_id);
- * or: Worker::add(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), 'Delivery', $post_id);
+ * or: Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::DELETION, $drop_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
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
@@ -1230,7 +1238,7 @@ class Worker
return 1;
}
- $priority = PRIORITY_MEDIUM;
+ $priority = self::PRIORITY_MEDIUM;
// Don't fork from frontend tasks by default
$dont_fork = DI::config()->get('system', 'worker_dont_fork', false) || !DI::mode()->isBackend();
$created = DateTimeFormat::utcNow();
@@ -1266,9 +1274,9 @@ class Worker
$found = DBA::exists('workerqueue', ['command' => $command, 'parameter' => $parameters, 'done' => false]);
$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)]);
- $priority = PRIORITY_MEDIUM;
+ $priority = self::PRIORITY_MEDIUM;
}
// 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));
$next = DateTimeFormat::utc('now + ' . $delay . ' seconds');
- if (($priority < PRIORITY_MEDIUM) && ($new_retrial > 3)) {
- $priority = PRIORITY_MEDIUM;
- } elseif (($priority < PRIORITY_LOW) && ($new_retrial > 6)) {
- $priority = PRIORITY_LOW;
- } elseif (($priority < PRIORITY_NEGLIGIBLE) && ($new_retrial > 8)) {
- $priority = PRIORITY_NEGLIGIBLE;
+ if (($priority < self::PRIORITY_MEDIUM) && ($new_retrial > 3)) {
+ $priority = self::PRIORITY_MEDIUM;
+ } elseif (($priority < self::PRIORITY_LOW) && ($new_retrial > 6)) {
+ $priority = self::PRIORITY_LOW;
+ } elseif (($priority < self::PRIORITY_NEGLIGIBLE) && ($new_retrial > 8)) {
+ $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]);
diff --git a/src/Core/Worker/Cron.php b/src/Core/Worker/Cron.php
index 0f2c4b41e7..11631e02b3 100644
--- a/src/Core/Worker/Cron.php
+++ b/src/Core/Worker/Cron.php
@@ -47,10 +47,10 @@ class Cron
Logger::info('Add cron entries');
// 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
- Worker::add(['priority' => PRIORITY_MEDIUM, 'force_priority' => true], 'Cron');
+ Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'Cron');
// Cleaning dead processes
self::killStaleWorkers();
@@ -112,12 +112,12 @@ class Cron
// 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)
$new_priority = $entry['priority'];
- if ($entry['priority'] == PRIORITY_HIGH) {
- $new_priority = PRIORITY_MEDIUM;
- } elseif ($entry['priority'] == PRIORITY_MEDIUM) {
- $new_priority = PRIORITY_LOW;
- } elseif ($entry['priority'] != PRIORITY_CRITICAL) {
- $new_priority = PRIORITY_NEGLIGIBLE;
+ if ($entry['priority'] == Worker::PRIORITY_HIGH) {
+ $new_priority = Worker::PRIORITY_MEDIUM;
+ } elseif ($entry['priority'] == Worker::PRIORITY_MEDIUM) {
+ $new_priority = Worker::PRIORITY_LOW;
+ } elseif ($entry['priority'] != Worker::PRIORITY_CRITICAL) {
+ $new_priority = Worker::PRIORITY_NEGLIGIBLE;
}
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']]);
continue;
} elseif ($delivery['failed'] < 3) {
- $priority = PRIORITY_HIGH;
+ $priority = Worker::PRIORITY_HIGH;
} elseif ($delivery['failed'] < 6) {
- $priority = PRIORITY_MEDIUM;
+ $priority = Worker::PRIORITY_MEDIUM;
} elseif ($delivery['failed'] < 8) {
- $priority = PRIORITY_LOW;
+ $priority = Worker::PRIORITY_LOW;
} else {
- $priority = PRIORITY_NEGLIGIBLE;
+ $priority = Worker::PRIORITY_NEGLIGIBLE;
}
if ($delivery['failed'] >= DI::config()->get('system', 'worker_defer_limit')) {
diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php
index d14e791e2c..74bd5b4237 100644
--- a/src/Database/DBStructure.php
+++ b/src/Database/DBStructure.php
@@ -150,7 +150,7 @@ class DBStructure
echo DI::l10n()->t("\nError %d occurred during database update:\n%s\n",
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 . '
';
}
/**
diff --git a/src/Database/Database.php b/src/Database/Database.php
index fde5bd9f10..79c39e9af7 100644
--- a/src/Database/Database.php
+++ b/src/Database/Database.php
@@ -36,6 +36,7 @@ use PDO;
use PDOException;
use PDOStatement;
use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
/**
* This class is for the low level database stuff that does driver specific things.
@@ -80,15 +81,17 @@ class Database
/** @var 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
$this->configCache = $configCache;
$this->profiler = $profiler;
- $this->logger = $logger;
$this->dbaDefinition = $dbaDefinition;
$this->viewDefinition = $viewDefinition;
+ // Temporary NullLogger until we can fetch the logger class from the config
+ $this->logger = new NullLogger();
+
$this->connect();
}
diff --git a/src/Model/Contact.php b/src/Model/Contact.php
index af8151e857..1a43d140b2 100644
--- a/src/Model/Contact.php
+++ b/src/Model/Contact.php
@@ -319,7 +319,7 @@ class Contact
// Update the contact in the background if needed
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
@@ -884,7 +884,7 @@ class Contact
}
// 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])) {
$cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']);
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])) {
$cdata = self::getPublicAndUserContactID($contact['id'], $contact['uid']);
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']);
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'])) {
- 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']);
@@ -1248,7 +1248,7 @@ class Contact
$contact_id = $contact['id'];
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))) {
@@ -2365,7 +2365,7 @@ class Contact
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]);
- 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)) {
Logger::notice('account-user was added', ['id' => $id, 'uid' => $uid, 'uri-id' => $uri_id, 'url' => $url]);
} else {
@@ -2406,7 +2406,7 @@ class Contact
continue;
}
- Worker::add(PRIORITY_HIGH, 'MergeContact', $first, $duplicate['id'], $uid);
+ Worker::add(Worker::PRIORITY_HIGH, 'MergeContact', $first, $duplicate['id'], $uid);
}
DBA::close($duplicates);
Logger::info('Duplicates handled', ['uid' => $uid, 'nurl' => $nurl, 'callstack' => System::callstack(20)]);
@@ -2608,7 +2608,7 @@ class Contact
if ($ret['network'] == Protocol::ACTIVITYPUB) {
$apcontact = APContact::getByURL($ret['url'], false);
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]);
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
@@ -2693,7 +2693,7 @@ class Contact
self::updateContact($id, $uid, $ret['uri-id'], $ret['url'], $ret);
if (Contact\Relation::isDiscoverable($ret['url'])) {
- Worker::add(PRIORITY_LOW, 'ContactDiscovery', $ret['url']);
+ Worker::add(Worker::PRIORITY_LOW, 'ContactDiscovery', $ret['url']);
}
return true;
@@ -2853,30 +2853,30 @@ class Contact
// do we have enough information?
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.') . '
';
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.') . '
';
}
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.') . '
';
}
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.') . '
';
}
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('Use mailto: in front of address to force email check.') . EOL;
+ $result['message'] .= DI::l10n()->t('Unable to match @-style Identity Address with a known protocol or email contact.') . '
';
+ $result['message'] .= DI::l10n()->t('Use mailto: in front of address to force email check.') . '
';
}
return $result;
}
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.') . '
';
$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.') . '
';
}
$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]);
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.') . '
';
return $result;
}
@@ -2949,13 +2949,13 @@ class Contact
// pull feed and consume it, which should subscribe to the hub.
if ($contact['network'] == Protocol::OSTATUS) {
- Worker::add(PRIORITY_HIGH, 'OnePoll', $contact_id, 'force');
+ Worker::add(Worker::PRIORITY_HIGH, 'OnePoll', $contact_id, 'force');
}
if ($probed) {
self::updateFromProbeArray($contact_id, $ret);
} else {
- Worker::add(PRIORITY_HIGH, 'UpdateContact', $contact_id);
+ Worker::add(Worker::PRIORITY_HIGH, 'UpdateContact', $contact_id);
}
$result['success'] = Protocol::follow($uid, $contact, $protocol);
@@ -3407,10 +3407,10 @@ class Contact
}
$contact = self::getByURL($url, false, ['id', 'network', 'next-update']);
if (empty($contact['id']) && Network::isValidHttpUrl($url)) {
- Worker::add(PRIORITY_LOW, 'AddContact', 0, $url);
+ Worker::add(Worker::PRIORITY_LOW, 'AddContact', 0, $url);
++$added;
} 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;
} else {
++$unchanged;
diff --git a/src/Model/FContact.php b/src/Model/FContact.php
index c72ee5e5ec..e13dcd46c9 100644
--- a/src/Model/FContact.php
+++ b/src/Model/FContact.php
@@ -59,7 +59,7 @@ class FContact
$update = empty($person['guid']) || empty($person['uri-id']) || ($person['created'] <= DBA::NULL_DATETIME);
if (GServer::getNextUpdateDate(true, $person['created'], $person['updated'], false) < DateTimeFormat::utcNow()) {
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)) {
diff --git a/src/Model/GServer.php b/src/Model/GServer.php
index ac8a843274..7e4b055d10 100644
--- a/src/Model/GServer.php
+++ b/src/Model/GServer.php
@@ -102,7 +102,7 @@ class GServer
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)) {
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']]);
- Worker::add(PRIORITY_LOW, 'UpdateServerDirectory', $gserver);
+ Worker::add(Worker::PRIORITY_LOW, 'UpdateServerDirectory', $gserver);
$fields = ['last_poco_query' => DateTimeFormat::utcNow()];
self::update($fields, ['nurl' => $gserver['nurl']]);
diff --git a/src/Model/Group.php b/src/Model/Group.php
index 4dec84c3a3..3487ab53d2 100644
--- a/src/Model/Group.php
+++ b/src/Model/Group.php
@@ -102,7 +102,7 @@ class Group
$group = DBA::selectFirst('group', ['deleted'], ['id' => $gid]);
if (DBA::isResult($group) && $group['deleted']) {
DBA::update('group', ['deleted' => 0], ['id' => $gid]);
- notice(DI::l10n()->t('A deleted group with this name was revived. Existing item permissions may 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 may 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;
}
diff --git a/src/Model/Item.php b/src/Model/Item.php
index 67e93362d2..7ca82f7e62 100644
--- a/src/Model/Item.php
+++ b/src/Model/Item.php
@@ -93,7 +93,7 @@ class Item
'commented', 'created', 'edited', 'received', 'verb', 'object-type', 'postopts', 'plink',
'wall', 'private', 'starred', 'origin', 'parent-origin', 'title', 'body', 'language',
'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',
'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',
@@ -115,7 +115,7 @@ class Item
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
'author-id', 'author-link', 'author-name', 'author-avatar', 'owner-id', 'owner-link', 'contact-uid',
'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-summary', 'event-desc', 'event-location', 'event-type',
'event-nofinish', 'event-ignore', 'event-id'];
@@ -123,7 +123,7 @@ class Item
// All fields in the item table
const ITEM_FIELDLIST = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent',
'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',
'postopts', 'plink', 'resource-id', 'event-id', 'inform',
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'post-type', 'post-reason',
@@ -238,7 +238,7 @@ class Item
foreach ($notify_items as $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;
@@ -252,7 +252,7 @@ class Item
* @return void
* @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);
while ($item = Post::fetch($items)) {
@@ -283,7 +283,7 @@ class Item
}
if ($item['uid'] == $uid) {
- self::markForDeletionById($item['id'], PRIORITY_HIGH);
+ self::markForDeletionById($item['id'], Worker::PRIORITY_HIGH);
} elseif ($item['uid'] != 0) {
Logger::warning('Wrong ownership. Not deleting item', ['id' => $item['id']]);
}
@@ -299,7 +299,7 @@ class Item
* @return boolean success
* @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()]);
// locate item to be deleted
@@ -822,7 +822,7 @@ class 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 ($notify) {
@@ -832,7 +832,7 @@ class Item
$item['protocol'] = Conversation::PARCEL_DIRECT;
$item['direction'] = Conversation::PUSH;
- if (is_int($notify) && in_array($notify, PRIORITIES)) {
+ if (is_int($notify) && in_array($notify, Worker::PRIORITIES)) {
$priority = $notify;
}
} else {
@@ -1125,6 +1125,13 @@ class Item
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $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])) {
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']);
}
@@ -2945,17 +2952,44 @@ class Item
$body = $item['body'] ?? '';
$shared = BBCode::fetchShareAttributes($body);
if (!empty($shared['guid'])) {
- $shared_item = Post::selectFirst(['uri-id', 'plink', 'has-media'], ['guid' => $shared['guid']]);
- $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);
+ $shared_item = Post::selectFirst(['uri-id', 'guid', 'plink', 'has-media'], ['guid' => $shared['guid'], 'uid' => [$item['uid'], 0]]);
+ }
+
+ $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['link'], 'url'));
$shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url'));
$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);
@@ -3277,7 +3311,7 @@ class Item
}
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'])) {
$parts = parse_url($data['url']);
if (!empty($parts['scheme']) && !empty($parts['host'])) {
@@ -3611,9 +3645,10 @@ class Item
* Improve the data in shared posts
*
* @param array $item
+ * @param bool $add_media
* @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']);
if (empty($shared['guid']) && empty($shared['message_id'])) {
@@ -3623,7 +3658,7 @@ class Item
$link = $shared['link'] ?: $shared['message_id'];
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)) {
@@ -3635,4 +3670,19 @@ class Item
Logger::debug('New shared data', ['uri-id' => $item['uri-id'], 'link' => $link, 'guid' => $item['guid']]);
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']);
+ }
}
diff --git a/src/Model/Mail.php b/src/Model/Mail.php
index e494119cb8..cdcd2258c1 100644
--- a/src/Model/Mail.php
+++ b/src/Model/Mail.php
@@ -239,7 +239,7 @@ class Mail
}
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);
} else {
return -3;
diff --git a/src/Model/Post/Delayed.php b/src/Model/Post/Delayed.php
index 1f15f26b97..3f96af6984 100644
--- a/src/Model/Post/Delayed.php
+++ b/src/Model/Post/Delayed.php
@@ -80,7 +80,7 @@ class Delayed
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) {
return 0;
}
diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php
index ce00b205c5..6d0707743e 100644
--- a/src/Model/Post/Media.php
+++ b/src/Model/Post/Media.php
@@ -23,10 +23,12 @@ namespace Friendica\Model\Post;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Logger;
+use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI;
+use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\Photo;
use Friendica\Model\Post;
@@ -56,6 +58,7 @@ class Media
const HTML = 17;
const XML = 18;
const PLAIN = 19;
+ const ACTIVITY = 20;
const DOCUMENT = 128;
/**
@@ -215,6 +218,10 @@ class 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) {
$data = ParseUrl::getSiteinfoCached($media['url'], false);
$media['preview'] = $data['images'][0]['src'] ?? null;
@@ -232,6 +239,65 @@ class 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
* @param array $media
diff --git a/src/Model/Profile.php b/src/Model/Profile.php
index 094df729e7..b58de4efb1 100644
--- a/src/Model/Profile.php
+++ b/src/Model/Profile.php
@@ -153,11 +153,11 @@ class Profile
if ($owner['net-publish'] || $force) {
// Update global directory in background
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']);
- 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']);
}
diff --git a/src/Model/PushSubscriber.php b/src/Model/PushSubscriber.php
index 8aa67eee5f..5b6c8813a8 100644
--- a/src/Model/PushSubscriber.php
+++ b/src/Model/PushSubscriber.php
@@ -37,7 +37,7 @@ class PushSubscriber
* @return void
* @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];
DBA::update('push_subscriber', ['push' => 1, 'next_try' => DBA::NULL_DATETIME], $condition);
@@ -52,7 +52,7 @@ class PushSubscriber
* @return void
* @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,
// i.e. there has been an update (set in notifier.php).
@@ -61,7 +61,7 @@ class PushSubscriber
while ($subscriber = DBA::fetch($subscribers)) {
// We always handle retries with low priority
if ($subscriber['push'] > 1) {
- $priority = PRIORITY_LOW;
+ $priority = Worker::PRIORITY_LOW;
} else {
$priority = $default_priority;
}
diff --git a/src/Model/Subscription.php b/src/Model/Subscription.php
index 26617f941a..2796b37a0f 100644
--- a/src/Model/Subscription.php
+++ b/src/Model/Subscription.php
@@ -152,7 +152,7 @@ class Subscription
$subscriptions = DBA::select('subscription', [], ['uid' => $notification->uid, $type => true]);
while ($subscription = DBA::fetch($subscriptions)) {
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);
}
diff --git a/src/Model/User.php b/src/Model/User.php
index 574830603e..005e3bbf35 100644
--- a/src/Model/User.php
+++ b/src/Model/User.php
@@ -994,7 +994,7 @@ class User
try {
$authurl = $openid->authUrl();
} 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.') . '
' . DI::l10n()->t('The error message was:') . $e->getMessage(), 0, $e);
}
System::externalRedirect($authurl);
// NOTREACHED
@@ -1317,7 +1317,7 @@ class User
if (DBA::isResult($profile) && $profile['net-publish'] && Search::getGlobalDirectory()) {
$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']);
@@ -1567,14 +1567,14 @@ class User
// 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]);
- Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::REMOVAL, $uid);
+ Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::REMOVAL, $uid);
// Send an update to the directory
$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
- Worker::add(PRIORITY_NEGLIGIBLE, 'RemoveUser', $uid);
+ Worker::add(Worker::PRIORITY_NEGLIGIBLE, 'RemoveUser', $uid);
return true;
}
diff --git a/src/Module/Admin/Addons/Details.php b/src/Module/Admin/Addons/Details.php
index 28435c545b..be0e59e329 100644
--- a/src/Module/Admin/Addons/Details.php
+++ b/src/Module/Admin/Addons/Details.php
@@ -62,7 +62,7 @@ class Details extends BaseAdmin
$addon = Strings::sanitizeFilePathItem($this->parameters['addon']);
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);
DI::baseUrl()->redirect('admin/addons');
}
@@ -73,10 +73,10 @@ class Details extends BaseAdmin
// Toggle addon status
if (Addon::isEnabled($addon)) {
Addon::uninstall($addon);
- info(DI::l10n()->t('Addon %s disabled.', $addon));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Addon %s disabled.', $addon));
} else {
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);
diff --git a/src/Module/Admin/Addons/Index.php b/src/Module/Admin/Addons/Index.php
index b9198ee361..8db0b70ed4 100644
--- a/src/Module/Admin/Addons/Index.php
+++ b/src/Module/Admin/Addons/Index.php
@@ -39,18 +39,18 @@ class Index extends BaseAdmin
switch ($_GET['action']) {
case 'reload':
Addon::reload();
- info(DI::l10n()->t('Addons reloaded'));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Addons reloaded'));
break;
case 'toggle' :
$addon = $_GET['addon'] ?? '';
if (Addon::isEnabled($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)) {
- info(DI::l10n()->t('Addon %s enabled.', $addon));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Addon %s enabled.', $addon));
} else {
- notice(DI::l10n()->t('Addon %s failed to install.', $addon));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Addon %s failed to install.', $addon));
}
break;
diff --git a/src/Module/Admin/Blocklist/Contact.php b/src/Module/Admin/Blocklist/Contact.php
index ac1406c7fe..85e7f2146a 100644
--- a/src/Module/Admin/Blocklist/Contact.php
+++ b/src/Module/Admin/Blocklist/Contact.php
@@ -46,12 +46,12 @@ class Contact extends BaseAdmin
if (!empty($_POST['page_contactblock_block'])) {
$contact = Model\Contact::getByURL($contact_url, null, ['id', 'nurl']);
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');
}
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');
}
@@ -59,18 +59,18 @@ class Contact extends BaseAdmin
if ($block_purge) {
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'])) {
foreach ($contacts as $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');
diff --git a/src/Module/Admin/Blocklist/Server/Add.php b/src/Module/Admin/Blocklist/Server/Add.php
index a4aaa4b65c..f060bcd060 100644
--- a/src/Module/Admin/Blocklist/Server/Add.php
+++ b/src/Module/Admin/Blocklist/Server/Add.php
@@ -82,7 +82,7 @@ class Add extends BaseAdmin
if (!empty($request['purge'])) {
$gservers = GServer::listByDomainPattern($pattern);
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)));
diff --git a/src/Module/Admin/DBSync.php b/src/Module/Admin/DBSync.php
index d5a16f9be2..bb1fa90330 100644
--- a/src/Module/Admin/DBSync.php
+++ b/src/Module/Admin/DBSync.php
@@ -48,7 +48,7 @@ class DBSync extends BaseAdmin
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;
diff --git a/src/Module/Admin/Federation.php b/src/Module/Admin/Federation.php
index 5144b1e765..0fae254ddc 100644
--- a/src/Module/Admin/Federation.php
+++ b/src/Module/Admin/Federation.php
@@ -21,6 +21,7 @@
namespace Friendica\Module\Admin;
+use Friendica\App;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Database\DBA;
@@ -202,7 +203,7 @@ class Federation extends BaseAdmin
'$page' => DI::l10n()->t('Federation Statistics'),
'$intro' => $intro,
'$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)),
]);
}
diff --git a/src/Module/Admin/Item/Delete.php b/src/Module/Admin/Item/Delete.php
index e521560514..d291e7b840 100644
--- a/src/Module/Admin/Item/Delete.php
+++ b/src/Module/Admin/Item/Delete.php
@@ -50,7 +50,7 @@ class Delete extends BaseAdmin
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');
}
diff --git a/src/Module/Admin/Logs/Settings.php b/src/Module/Admin/Logs/Settings.php
index 9dbc8f3528..e5324e6f68 100644
--- a/src/Module/Admin/Logs/Settings.php
+++ b/src/Module/Admin/Logs/Settings.php
@@ -44,7 +44,7 @@ class Settings extends BaseAdmin
if (is_file($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;
}
diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php
index fbebfcb3fe..011e3c411d 100644
--- a/src/Module/Admin/Site.php
+++ b/src/Module/Admin/Site.php
@@ -22,7 +22,6 @@
namespace Friendica\Module\Admin;
use Friendica\App;
-use Friendica\Core\Relocate;
use Friendica\Core\Renderer;
use Friendica\Core\Search;
use Friendica\Core\System;
@@ -33,12 +32,11 @@ use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\User;
use Friendica\Module\BaseAdmin;
+use Friendica\Module\Conversation\Community;
use Friendica\Module\Register;
use Friendica\Protocol\Relay;
use Friendica\Util\BasePath;
use Friendica\Util\EMailer\MailBuilder;
-use Friendica\Util\Strings;
-use Friendica\Worker\Delivery;
require_once __DIR__ . '/../../../boot.php';
@@ -53,7 +51,7 @@ class Site extends BaseAdmin
$a = DI::app();
if (!empty($_POST['republish_directory'])) {
- Worker::add(PRIORITY_LOW, 'Directory');
+ Worker::add(Worker::PRIORITY_LOW, 'Directory');
return;
}
@@ -150,7 +148,7 @@ class Site extends BaseAdmin
// Has the directory url changed? If yes, then resubmit the existing profiles there
if ($global_directory != DI::config()->get('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() != "") {
@@ -364,11 +362,11 @@ class Site extends BaseAdmin
/* Community page style */
$community_page_style_choices = [
- CP_NO_INTERNAL_COMMUNITY => DI::l10n()->t('No community page for local users'),
- CP_NO_COMMUNITY_PAGE => DI::l10n()->t('No community page'),
- CP_USERS_ON_SERVER => DI::l10n()->t('Public postings from users of this site'),
- CP_GLOBAL_COMMUNITY => 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::DISABLED => DI::l10n()->t('No community page'),
+ Community::DISABLED_VISITOR => DI::l10n()->t('No community page for visitors'),
+ Community::LOCAL => DI::l10n()->t('Public postings from users of this site'),
+ Community::GLOBAL => DI::l10n()->t('Public postings from 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 */
diff --git a/src/Module/Admin/Storage.php b/src/Module/Admin/Storage.php
index f54344f478..2075534372 100644
--- a/src/Module/Admin/Storage.php
+++ b/src/Module/Admin/Storage.php
@@ -43,7 +43,7 @@ class Storage extends BaseAdmin
/** @var ICanConfigureStorage|false $newStorageConfig */
$newStorageConfig = DI::storageManager()->getConfigurationByName($storagebackend);
} 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');
}
@@ -70,7 +70,7 @@ class Storage extends BaseAdmin
$storage_form_errors = $newStorageConfig->saveOptions($storage_opts_data);
if (count($storage_form_errors)) {
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');
}
@@ -81,10 +81,10 @@ class Storage extends BaseAdmin
$newstorage = DI::storageManager()->getWritableStorageByName($storagebackend);
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) {
- notice(DI::l10n()->t('Invalid storage backend setting value.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Invalid storage backend setting value.'));
}
}
diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php
index 667b322422..8eb4978b64 100644
--- a/src/Module/Admin/Summary.php
+++ b/src/Module/Admin/Summary.php
@@ -21,6 +21,7 @@
namespace Friendica\Module\Admin;
+use Friendica\App;
use Friendica\Core\Addon;
use Friendica\Core\Config\ValueObject\Cache;
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
if (DI::config()->get('system', 'check_new_version_url', 'none') != 'none') {
$gitversion = DI::config()->get('system', 'git_friendica_version');
- if (version_compare(FRIENDICA_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);
+ 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', App::VERSION, $gitversion);
}
}
@@ -236,9 +237,9 @@ class Summary extends BaseAdmin
'$users' => [DI::l10n()->t('Registered users'), $users],
'$accounts' => $accounts,
'$pending' => [DI::l10n()->t('Pending registrations'), $pending],
- '$version' => [DI::l10n()->t('Version'), FRIENDICA_VERSION],
- '$platform' => FRIENDICA_PLATFORM,
- '$codename' => FRIENDICA_CODENAME,
+ '$version' => [DI::l10n()->t('Version'), App::VERSION],
+ '$platform' => App::PLATFORM,
+ '$codename' => App::CODENAME,
'$build' => DI::config()->get('system', 'build'),
'$addons' => [DI::l10n()->t('Active addons'), Addon::getEnabledList()],
'$serversettings' => $server_settings,
diff --git a/src/Module/Admin/Themes/Details.php b/src/Module/Admin/Themes/Details.php
index dc6bf58184..45573cbe6e 100644
--- a/src/Module/Admin/Themes/Details.php
+++ b/src/Module/Admin/Themes/Details.php
@@ -36,7 +36,7 @@ class Details extends BaseAdmin
$theme = Strings::sanitizeFilePathItem($this->parameters['theme']);
if (!is_dir("view/theme/$theme")) {
- notice(DI::l10n()->t("Item not found."));
+ DI::sysmsg()->addNotice(DI::l10n()->t("Item not found."));
return '';
}
@@ -54,11 +54,11 @@ class Details extends BaseAdmin
if ($isEnabled) {
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)) {
- info(DI::l10n()->t('Theme %s successfully enabled.', $theme));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Theme %s successfully enabled.', $theme));
} 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);
diff --git a/src/Module/Admin/Themes/Embed.php b/src/Module/Admin/Themes/Embed.php
index 439e78e642..756b90afa5 100644
--- a/src/Module/Admin/Themes/Embed.php
+++ b/src/Module/Admin/Themes/Embed.php
@@ -77,7 +77,7 @@ class Embed extends BaseAdmin
$theme = Strings::sanitizeFilePathItem($this->parameters['theme']);
if (!is_dir("view/theme/$theme")) {
- notice($this->t('Unknown theme.'));
+ DI::sysmsg()->addNotice($this->t('Unknown theme.'));
return '';
}
diff --git a/src/Module/Admin/Themes/Index.php b/src/Module/Admin/Themes/Index.php
index cf0ddcfc6e..4dde4f856b 100644
--- a/src/Module/Admin/Themes/Index.php
+++ b/src/Module/Admin/Themes/Index.php
@@ -48,7 +48,7 @@ class Index extends BaseAdmin
}
Theme::setAllowedList($allowed_themes);
- info(DI::l10n()->t('Themes reloaded'));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Themes reloaded'));
break;
case 'toggle' :
@@ -56,17 +56,17 @@ class Index extends BaseAdmin
if ($theme) {
$theme = Strings::sanitizeFilePathItem($theme);
if (!is_dir("view/theme/$theme")) {
- notice(DI::l10n()->t('Item not found.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Item not found.'));
return '';
}
if (in_array($theme, Theme::getAllowedList())) {
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)) {
- info(DI::l10n()->t('Theme %s successfully enabled.', $theme));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Theme %s successfully enabled.', $theme));
} else {
- notice(DI::l10n()->t('Theme %s failed to install.', $theme));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Theme %s failed to install.', $theme));
}
}
diff --git a/src/Module/Admin/Users/Active.php b/src/Module/Admin/Users/Active.php
index eac12063e4..2188d4a591 100644
--- a/src/Module/Admin/Users/Active.php
+++ b/src/Module/Admin/Users/Active.php
@@ -42,7 +42,7 @@ class Active extends BaseUsers
foreach ($users as $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'])) {
@@ -50,11 +50,11 @@ class Active extends BaseUsers
if (local_user() != $uid) {
User::remove($uid);
} 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());
@@ -70,7 +70,7 @@ class Active extends BaseUsers
if ($uid) {
$user = User::getById($uid, ['username', 'blocked']);
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');
return ''; // NOTREACHED
}
@@ -83,9 +83,9 @@ class Active extends BaseUsers
// delete user
User::remove($uid);
- notice(DI::l10n()->t('User "%s" deleted', $user['username']));
+ DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" deleted', $user['username']));
} 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');
@@ -93,7 +93,7 @@ class Active extends BaseUsers
case 'block':
self::checkFormSecurityTokenRedirectOnError('admin/users/active', 'admin_users_active', 't');
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');
break;
}
diff --git a/src/Module/Admin/Users/Blocked.php b/src/Module/Admin/Users/Blocked.php
index 63294f17c2..e8434d5e09 100644
--- a/src/Module/Admin/Users/Blocked.php
+++ b/src/Module/Admin/Users/Blocked.php
@@ -43,7 +43,7 @@ class Blocked extends BaseUsers
foreach ($users as $uid) {
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'])) {
@@ -51,11 +51,11 @@ class Blocked extends BaseUsers
if (local_user() != $uid) {
User::remove($uid);
} 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');
@@ -71,7 +71,7 @@ class Blocked extends BaseUsers
if ($uid) {
$user = User::getById($uid, ['username', 'blocked']);
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');
return ''; // NOTREACHED
}
@@ -84,16 +84,16 @@ class Blocked extends BaseUsers
// delete user
User::remove($uid);
- notice(DI::l10n()->t('User "%s" deleted', $user['username']));
+ DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" deleted', $user['username']));
} 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');
break;
case 'unblock':
self::checkFormSecurityTokenRedirectOnError('/admin/users/blocked', 'admin_users_blocked', 't');
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');
break;
}
diff --git a/src/Module/Admin/Users/Create.php b/src/Module/Admin/Users/Create.php
index 5ab443b148..29dbf5d7ee 100644
--- a/src/Module/Admin/Users/Create.php
+++ b/src/Module/Admin/Users/Create.php
@@ -44,7 +44,7 @@ class Create extends BaseUsers
User::createMinimal($nu_name, $nu_email, $nu_nickname, $nu_language);
DI::baseUrl()->redirect('admin/users');
} catch (\Exception $ex) {
- notice($ex->getMessage());
+ DI::sysmsg()->addNotice($ex->getMessage());
}
}
diff --git a/src/Module/Admin/Users/Index.php b/src/Module/Admin/Users/Index.php
index 8dfac50573..e8356720d4 100644
--- a/src/Module/Admin/Users/Index.php
+++ b/src/Module/Admin/Users/Index.php
@@ -42,14 +42,14 @@ class Index extends BaseUsers
foreach ($users as $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'])) {
foreach ($users as $uid) {
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'])) {
@@ -57,11 +57,11 @@ class Index extends BaseUsers
if (local_user() != $uid) {
User::remove($uid);
} 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());
@@ -77,7 +77,7 @@ class Index extends BaseUsers
if ($uid) {
$user = User::getById($uid, ['username', 'blocked']);
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');
return ''; // NOTREACHED
}
@@ -90,9 +90,9 @@ class Index extends BaseUsers
// delete user
User::remove($uid);
- notice(DI::l10n()->t('User "%s" deleted', $user['username']));
+ DI::sysmsg()->addNotice(DI::l10n()->t('User "%s" deleted', $user['username']));
} 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');
@@ -100,13 +100,13 @@ class Index extends BaseUsers
case 'block':
self::checkFormSecurityTokenRedirectOnError('admin/users', 'admin_users', 't');
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');
break;
case 'unblock':
self::checkFormSecurityTokenRedirectOnError('admin/users', 'admin_users', 't');
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');
break;
}
diff --git a/src/Module/Admin/Users/Pending.php b/src/Module/Admin/Users/Pending.php
index b5b164bb57..484a128ebf 100644
--- a/src/Module/Admin/Users/Pending.php
+++ b/src/Module/Admin/Users/Pending.php
@@ -45,14 +45,14 @@ class Pending extends BaseUsers
foreach ($pending as $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'])) {
foreach ($pending as $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');
@@ -68,7 +68,7 @@ class Pending extends BaseUsers
if ($uid) {
$user = User::getById($uid, ['username', 'blocked']);
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');
return ''; // NOTREACHED
}
@@ -78,13 +78,13 @@ class Pending extends BaseUsers
case 'allow':
self::checkFormSecurityTokenRedirectOnError('/admin/users/pending', 'admin_users_pending', 't');
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');
break;
case 'deny':
self::checkFormSecurityTokenRedirectOnError('/admin/users/pending', 'admin_users_pending', 't');
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');
break;
}
diff --git a/src/Module/Api/Friendica/Events/Create.php b/src/Module/Api/Friendica/Events/Create.php
index 8a8f13b501..8c6ec8f635 100644
--- a/src/Module/Api/Friendica/Events/Create.php
+++ b/src/Module/Api/Friendica/Events/Create.php
@@ -104,7 +104,7 @@ class Create extends BaseApi
$item = ['network' => Protocol::DFRN, 'protocol' => Conversation::PARCEL_DIRECT, 'direction' => Conversation::PUSH];
$item = Event::getItemArrayForId($event_id, $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);
}
}
diff --git a/src/Module/Api/GNUSocial/GNUSocial/Config.php b/src/Module/Api/GNUSocial/GNUSocial/Config.php
index b0325f47ab..8b38ca8967 100644
--- a/src/Module/Api/GNUSocial/GNUSocial/Config.php
+++ b/src/Module/Api/GNUSocial/GNUSocial/Config.php
@@ -53,9 +53,8 @@ class Config extends BaseApi
'sslserver' => null,
'ssl' => DI::config()->get('system', 'ssl_policy') == App\BaseURL::SSL_POLICY_FULL ? 'always' : '0',
'friendica' => [
- 'FRIENDICA_PLATFORM' => FRIENDICA_PLATFORM,
- 'FRIENDICA_VERSION' => FRIENDICA_VERSION,
- 'DFRN_PROTOCOL_VERSION' => DFRN_PROTOCOL_VERSION,
+ 'FRIENDICA_PLATFORM' => App::PLATFORM,
+ 'FRIENDICA_VERSION' => App::VERSION,
'DB_UPDATE_VERSION' => DB_UPDATE_VERSION,
]
],
diff --git a/src/Module/Api/Mastodon/Statuses.php b/src/Module/Api/Mastodon/Statuses.php
index 0acc4989b2..7fe369d00e 100644
--- a/src/Module/Api/Mastodon/Statuses.php
+++ b/src/Module/Api/Mastodon/Statuses.php
@@ -25,6 +25,7 @@ use Friendica\App\Router;
use Friendica\Content\Text\Markdown;
use Friendica\Core\Protocol;
use Friendica\Core\System;
+use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
@@ -204,7 +205,7 @@ class Statuses extends BaseApi
if (!empty($request['scheduled_at'])) {
$item['guid'] = Item::guid($item, true);
$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)) {
DI::mstdnError()->InternalError();
}
diff --git a/src/Module/Apps.php b/src/Module/Apps.php
index db5636bf96..9ef4268de5 100644
--- a/src/Module/Apps.php
+++ b/src/Module/Apps.php
@@ -28,6 +28,7 @@ use Friendica\Content\Nav;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
+use Friendica\DI;
use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface;
@@ -51,7 +52,7 @@ class Apps extends BaseModule
$apps = Nav::getAppMenu();
if (count($apps) == 0) {
- notice($this->t('No installed applications.'));
+ DI::sysmsg()->addNotice($this->t('No installed applications.'));
}
$tpl = Renderer::getMarkupTemplate('apps.tpl');
diff --git a/src/Module/BaseAdmin.php b/src/Module/BaseAdmin.php
index 713c44cc20..dd4e108e77 100644
--- a/src/Module/BaseAdmin.php
+++ b/src/Module/BaseAdmin.php
@@ -54,7 +54,7 @@ abstract class BaseAdmin extends BaseModule
{
if (!local_user()) {
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());
DI::baseUrl()->redirect('login');
} else {
diff --git a/src/Module/BaseSearch.php b/src/Module/BaseSearch.php
index 276598131b..f14a93b0ff 100644
--- a/src/Module/BaseSearch.php
+++ b/src/Module/BaseSearch.php
@@ -116,7 +116,7 @@ class BaseSearch extends BaseModule
protected static function printResult(ResultList $results, Pager $pager, string $header = ''): string
{
if ($results->getTotal() == 0) {
- notice(DI::l10n()->t('No matches'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No matches'));
return '';
}
diff --git a/src/Module/Contact.php b/src/Module/Contact.php
index 9c073b3ef1..97f4b7e258 100644
--- a/src/Module/Contact.php
+++ b/src/Module/Contact.php
@@ -85,7 +85,7 @@ class Contact extends BaseModule
}
}
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);
@@ -126,9 +126,9 @@ class Contact extends BaseModule
}
// 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 {
- Worker::add(PRIORITY_HIGH, 'UpdateContact', $contact_id);
+ Worker::add(Worker::PRIORITY_HIGH, 'UpdateContact', $contact_id);
}
}
diff --git a/src/Module/Contact/Advanced.php b/src/Module/Contact/Advanced.php
index bbb1d59e0d..d722691ff7 100644
--- a/src/Module/Contact/Advanced.php
+++ b/src/Module/Contact/Advanced.php
@@ -30,6 +30,7 @@ use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Database\Database;
+use Friendica\DI;
use Friendica\Model;
use Friendica\Module\Contact;
use Friendica\Module\Response;
@@ -96,7 +97,7 @@ class Advanced extends BaseModule
}
if (!$r) {
- notice($this->t('Contact update failed.'));
+ DI::sysmsg()->addNotice($this->t('Contact update failed.'));
}
}
diff --git a/src/Module/Contact/Profile.php b/src/Module/Contact/Profile.php
index 793d0fa4a9..3af591a066 100644
--- a/src/Module/Contact/Profile.php
+++ b/src/Module/Contact/Profile.php
@@ -35,6 +35,7 @@ use Friendica\Core\L10n;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Database\DBA;
+use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Group;
use Friendica\Module;
@@ -124,7 +125,7 @@ class Profile extends BaseModule
}
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);
- info($message);
+ DI::sysmsg()->addInfo($message);
}
if ($cmd === 'ignore') {
@@ -198,7 +199,7 @@ class Profile extends BaseModule
}
// @TODO: add $this->localRelationship->save($localRelationship);
- info($message);
+ DI::sysmsg()->addInfo($message);
}
$this->baseUrl->redirect('contact/' . $contact['id']);
diff --git a/src/Module/Contact/Revoke.php b/src/Module/Contact/Revoke.php
index 35cb481495..4ade2b146a 100644
--- a/src/Module/Contact/Revoke.php
+++ b/src/Module/Contact/Revoke.php
@@ -28,6 +28,7 @@ use Friendica\Core\L10n;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Database\Database;
+use Friendica\DI;
use Friendica\Model;
use Friendica\Module\Contact;
use Friendica\Module\Response;
@@ -87,7 +88,7 @@ class Revoke extends BaseModule
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']);
}
diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php
index 8d73f825f9..a5bfe41908 100644
--- a/src/Module/Conversation/Community.php
+++ b/src/Module/Conversation/Community.php
@@ -40,6 +40,21 @@ use Friendica\Network\HTTPException;
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 $content;
protected static $accountTypeString;
@@ -69,7 +84,7 @@ class Community extends BaseModule
if (empty($_GET['mode']) || ($_GET['mode'] != 'raw')) {
$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[] = [
'label' => DI::l10n()->t('Local Community'),
'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[] = [
'label' => DI::l10n()->t('Global Community'),
'url' => 'community/global',
@@ -140,7 +155,7 @@ class Community extends BaseModule
$items = self::getItems();
if (!DBA::isResult($items)) {
- notice(DI::l10n()->t('No results.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No results.'));
return $o;
}
@@ -177,7 +192,7 @@ class Community extends BaseModule
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.'));
}
@@ -191,7 +206,7 @@ class Community extends BaseModule
self::$content = 'global';
} else {
// 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
if (!Session::isAuthenticated()) {
- $available = self::$page_style == CP_USERS_AND_GLOBAL;
+ $available = self::$page_style == self::LOCAL_AND_GLOBAL;
if (!$available) {
- $available = (self::$page_style == CP_USERS_ON_SERVER) && (self::$content == 'local');
+ $available = (self::$page_style == self::LOCAL) && (self::$content == 'local');
}
if (!$available) {
- $available = (self::$page_style == CP_GLOBAL_COMMUNITY) && (self::$content == 'global');
+ $available = (self::$page_style == self::GLOBAL) && (self::$content == 'global');
}
if (!$available) {
diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php
index e32226954f..bfdeb7e578 100644
--- a/src/Module/Conversation/Network.php
+++ b/src/Module/Conversation/Network.php
@@ -170,7 +170,7 @@ class Network extends BaseModule
if (self::$groupId) {
$group = DBA::selectFirst('group', ['name'], ['id' => self::$groupId, 'uid' => local_user()]);
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'), [
@@ -184,7 +184,7 @@ class Network extends BaseModule
'id' => DI::args()->get(0),
]) . $o;
} else {
- notice(DI::l10n()->t('Invalid contact.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Invalid contact.'));
}
} elseif (!DI::config()->get('theme', 'hide_eventlist')) {
$o .= Profile::getBirthdays();
diff --git a/src/Module/Debug/Feed.php b/src/Module/Debug/Feed.php
index 46ded4236b..fc9f95f07c 100644
--- a/src/Module/Debug/Feed.php
+++ b/src/Module/Debug/Feed.php
@@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\BaseModule;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
+use Friendica\DI;
use Friendica\Model;
use Friendica\Module\Response;
use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests;
@@ -48,7 +49,7 @@ class Feed extends BaseModule
$this->httpClient = $httpClient;
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();
}
}
diff --git a/src/Module/Delegation.php b/src/Module/Delegation.php
index c14573c8b3..146e9382b8 100644
--- a/src/Module/Delegation.php
+++ b/src/Module/Delegation.php
@@ -108,7 +108,7 @@ class Delegation extends BaseModule
$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');
}
diff --git a/src/Module/Directory.php b/src/Module/Directory.php
index 9fac9db302..f48e2bf7e3 100644
--- a/src/Module/Directory.php
+++ b/src/Module/Directory.php
@@ -72,7 +72,7 @@ class Directory extends BaseModule
$profiles = Profile::searchProfiles($pager->getStart(), $pager->getItemsPerPage(), $search);
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 {
foreach ($profiles['entries'] as $entry) {
$contact = Model\Contact::getByURLForUser($entry['url'], local_user());
diff --git a/src/Module/Filer/SaveTag.php b/src/Module/Filer/SaveTag.php
index 3dfd7877c5..c3b9acadd3 100644
--- a/src/Module/Filer/SaveTag.php
+++ b/src/Module/Filer/SaveTag.php
@@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Database\DBA;
+use Friendica\DI;
use Friendica\Model;
use Friendica\Module\Response;
use Friendica\Network\HTTPException;
@@ -43,7 +44,7 @@ class SaveTag extends BaseModule
parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
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();
}
}
diff --git a/src/Module/FollowConfirm.php b/src/Module/FollowConfirm.php
index b61cfd4326..0254bfae34 100644
--- a/src/Module/FollowConfirm.php
+++ b/src/Module/FollowConfirm.php
@@ -35,7 +35,7 @@ class FollowConfirm extends BaseModule
parent::post($request);
$uid = local_user();
if (!$uid) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
diff --git a/src/Module/FriendSuggest.php b/src/Module/FriendSuggest.php
index 3cebd72cea..815c4e1ec8 100644
--- a/src/Module/FriendSuggest.php
+++ b/src/Module/FriendSuggest.php
@@ -28,6 +28,7 @@ use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Worker;
use Friendica\Database\Database;
+use Friendica\DI;
use Friendica\Model\Contact as ContactModel;
use Friendica\Network\HTTPException\ForbiddenException;
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
$contact = $this->dba->selectFirst('contact', ['name', 'url', 'request', 'avatar'], ['id' => $suggest_contact_id, 'uid' => local_user()]);
if (empty($contact)) {
- notice($this->t('Suggested contact not found.'));
+ DI::sysmsg()->addNotice($this->t('Suggested contact not found.'));
return;
}
@@ -94,9 +95,9 @@ class FriendSuggest extends BaseModule
$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
@@ -105,7 +106,7 @@ class FriendSuggest extends BaseModule
$contact = $this->dba->selectFirst('contact', [], ['id' => $cid, 'uid' => local_user()]);
if (empty($contact)) {
- notice($this->t('Contact not found.'));
+ DI::sysmsg()->addNotice($this->t('Contact not found.'));
$this->baseUrl->redirect();
}
diff --git a/src/Module/Friendica.php b/src/Module/Friendica.php
index 012f65ef69..37bd69da49 100644
--- a/src/Module/Friendica.php
+++ b/src/Module/Friendica.php
@@ -21,6 +21,7 @@
namespace Friendica\Module;
+use Friendica\App;
use Friendica\BaseModule;
use Friendica\Core\Addon;
use Friendica\Core\Hook;
@@ -96,7 +97,7 @@ class Friendica extends BaseModule
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.',
- '' . FRIENDICA_VERSION . '',
+ '' . App::VERSION . '',
DI::baseUrl()->get(),
'' . $config->get('system', 'build') . '/' . DB_UPDATE_VERSION . '',
'' . $config->get('system', 'post_update_version') . '/' . PostUpdate::VERSION . ''),
@@ -169,7 +170,7 @@ class Friendica extends BaseModule
}
$data = [
- 'version' => FRIENDICA_VERSION,
+ 'version' => App::VERSION,
'url' => DI::baseUrl()->get(),
'addons' => $visible_addons,
'locked_features' => $locked_features,
@@ -178,7 +179,7 @@ class Friendica extends BaseModule
'register_policy' => $register_policy,
'admin' => $admin,
'site_name' => $config->get('config', 'sitename'),
- 'platform' => strtolower(FRIENDICA_PLATFORM),
+ 'platform' => strtolower(App::PLATFORM),
'info' => $config->get('config', 'info'),
'no_scrape_url' => DI::baseUrl()->get() . '/noscrape',
];
diff --git a/src/Module/Group.php b/src/Module/Group.php
index cd07e97812..06ee555a74 100644
--- a/src/Module/Group.php
+++ b/src/Module/Group.php
@@ -39,7 +39,7 @@ class Group extends BaseModule
}
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
DI::baseUrl()->redirect();
}
@@ -55,7 +55,7 @@ class Group extends BaseModule
DI::baseUrl()->redirect('group/' . $r);
}
} else {
- notice(DI::l10n()->t('Could not create group.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Could not create 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()]);
if (!DBA::isResult($group)) {
- notice(DI::l10n()->t('Group not found.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Group not found.'));
DI::baseUrl()->redirect('contact');
}
$groupname = trim($_POST['groupname']);
if (strlen($groupname) && ($groupname != $group['name'])) {
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);
}
- info($message);
+ DI::sysmsg()->addInfo($message);
System::jsonExit(['status' => 'OK', 'message' => $message]);
} catch (\Exception $e) {
- notice($e->getMessage());
+ DI::sysmsg()->addNotice($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
if (intval(DI::args()->getArgv()[2])) {
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');
}
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');
@@ -236,7 +236,7 @@ class Group extends BaseModule
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]);
if (!DBA::isResult($group)) {
- notice(DI::l10n()->t('Group not found.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Group not found.'));
DI::baseUrl()->redirect('contact');
}
diff --git a/src/Module/Install.php b/src/Module/Install.php
index 843cee9f18..1631cfe7f4 100644
--- a/src/Module/Install.php
+++ b/src/Module/Install.php
@@ -337,7 +337,7 @@ class Install extends BaseModule
if (count($this->installer->getChecks()) == 0) {
$txt = '';
- $txt .= $this->t('Your Friendica site database has been installed.') . EOL;
+ $txt .= $this->t('Your Friendica site database has been installed.') . '
';
$db_return_text .= $txt;
}
diff --git a/src/Module/Invite.php b/src/Module/Invite.php
index 77a7585bd4..c36a8ad7d8 100644
--- a/src/Module/Invite.php
+++ b/src/Module/Invite.php
@@ -79,7 +79,7 @@ class Invite extends BaseModule
$recipient = trim($recipient);
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;
}
@@ -114,15 +114,15 @@ class Invite extends BaseModule
$current_invites++;
DI::pConfig()->set(local_user(), 'system', 'sent_invites', $current_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;
}
} 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
diff --git a/src/Module/Item/Compose.php b/src/Module/Item/Compose.php
index a3ca4296a2..bd531d484b 100644
--- a/src/Module/Item/Compose.php
+++ b/src/Module/Item/Compose.php
@@ -22,10 +22,14 @@
namespace Friendica\Module\Item;
use DateTime;
+use Friendica\App;
use Friendica\BaseModule;
use Friendica\Content\Feature;
use Friendica\Core\ACL;
+use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\Hook;
+use Friendica\Core\L10n;
+use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer;
use Friendica\Core\Theme;
use Friendica\Database\DBA;
@@ -33,13 +37,44 @@ use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\User;
+use Friendica\Module\Response;
use Friendica\Module\Security\Login;
+use Friendica\Navigation\SystemMessages;
use Friendica\Network\HTTPException\NotImplementedException;
+use Friendica\Util\ACLFormatter;
use Friendica\Util\Crypto;
+use Friendica\Util\Profiler;
use Friendica\Util\Temporal;
+use Psr\Log\LoggerInterface;
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 = [])
{
if (!empty($_REQUEST['body'])) {
@@ -47,23 +82,22 @@ class Compose extends BaseModule
require_once 'mod/item.php';
item_post(DI::app());
} 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
{
if (!local_user()) {
- return Login::form('compose', false);
+ return Login::form('compose');
}
$a = DI::app();
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;
if (!in_array($posttype, [Item::PT_ARTICLE, Item::PT_PERSONAL_NOTE])) {
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']);
- $aclFormatter = DI::aclFormatter();
-
- $contact_allow_list = $aclFormatter->expand($user['allow_cid']);
- $group_allow_list = $aclFormatter->expand($user['allow_gid']);
- $contact_deny_list = $aclFormatter->expand($user['deny_cid']);
- $group_deny_list = $aclFormatter->expand($user['deny_gid']);
+ $contact_allow_list = $this->ACLFormatter->expand($user['allow_cid']);
+ $group_allow_list = $this->ACLFormatter->expand($user['allow_gid']);
+ $contact_deny_list = $this->ACLFormatter->expand($user['deny_cid']);
+ $group_deny_list = $this->ACLFormatter->expand($user['deny_gid']);
switch ($posttype) {
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';
$doesFederate = false;
$contact_allow_list = [$a->getContactId()];
@@ -96,7 +128,7 @@ class Compose extends BaseModule
$group_deny_list = [];
break;
default:
- $compose_title = DI::l10n()->t('Compose new post');
+ $compose_title = $this->l10n->t('Compose new post');
$type = 'post';
$doesFederate = true;
@@ -129,13 +161,13 @@ class Compose extends BaseModule
Hook::callAll('jot_tool', $jotplugins);
// Output
- DI::page()->registerFooterScript(Theme::getPathForFile('js/ajaxupload.js'));
- DI::page()->registerFooterScript(Theme::getPathForFile('js/linkPreview.js'));
- DI::page()->registerFooterScript(Theme::getPathForFile('js/compose.js'));
+ $this->page->registerFooterScript(Theme::getPathForFile('js/ajaxupload.js'));
+ $this->page->registerFooterScript(Theme::getPathForFile('js/linkPreview.js'));
+ $this->page->registerFooterScript(Theme::getPathForFile('js/compose.js'));
$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(
new \DateTime(DBA::NULL_DATETIME),
new \DateTime('now'),
@@ -149,39 +181,45 @@ class Compose extends BaseModule
$tpl = Renderer::getMarkupTemplate('item/compose.tpl');
return Renderer::replaceMacros($tpl, [
- '$compose_title'=> $compose_title,
- '$visibility_title'=> DI::l10n()->t('Visibility'),
+ '$l10n' => [
+ '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 Theme Customization settings.'),
+ ],
+
'$id' => 0,
'$posttype' => $posttype,
'$type' => $type,
'$wall' => $wall,
- '$default' => '',
- '$mylink' => DI::baseUrl()->remove($contact['url']),
- '$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)') : ''),
+ '$mylink' => $this->baseUrl->remove($contact['url']),
+ '$myphoto' => $this->baseUrl->remove($contact['thumb']),
'$scheduled_at' => Temporal::getDateTimeField(
new DateTime(),
new DateTime('now + 6 months'),
null,
- DI::l10n()->t('Scheduled at'),
+ $this->l10n->t('Scheduled at'),
'scheduled_at'
),
'$created_at' => $created_at,
@@ -197,7 +235,7 @@ class Compose extends BaseModule
'$jotplugins' => $jotplugins,
'$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_gid' => $group_allow_list,
'deny_cid' => $contact_deny_list,
diff --git a/src/Module/NodeInfo110.php b/src/Module/NodeInfo110.php
index a308f8e6f5..2f7042f105 100644
--- a/src/Module/NodeInfo110.php
+++ b/src/Module/NodeInfo110.php
@@ -53,7 +53,7 @@ class NodeInfo110 extends BaseModule
'version' => '1.0',
'software' => [
'name' => 'friendica',
- 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
+ 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
],
'protocols' => [
'inbound' => [
diff --git a/src/Module/NodeInfo120.php b/src/Module/NodeInfo120.php
index 3e6a69b749..34880c4e38 100644
--- a/src/Module/NodeInfo120.php
+++ b/src/Module/NodeInfo120.php
@@ -53,7 +53,7 @@ class NodeInfo120 extends BaseModule
'version' => '2.0',
'software' => [
'name' => 'friendica',
- 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
+ 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
],
'protocols' => ['dfrn', 'activitypub'],
'services' => Nodeinfo::getServices(),
diff --git a/src/Module/NodeInfo210.php b/src/Module/NodeInfo210.php
index 723736a618..f12ce52cb7 100644
--- a/src/Module/NodeInfo210.php
+++ b/src/Module/NodeInfo210.php
@@ -55,7 +55,7 @@ class NodeInfo210 extends BaseModule
'baseUrl' => $this->baseUrl->get(),
'name' => $this->config->get('config', 'sitename'),
'software' => 'friendica',
- 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
+ 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
],
'organization' => Nodeinfo::getOrganization($this->config),
'protocols' => ['dfrn', 'activitypub'],
diff --git a/src/Module/Notifications/Introductions.php b/src/Module/Notifications/Introductions.php
index 42ec3b6f75..ffe5d212fa 100644
--- a/src/Module/Notifications/Introductions.php
+++ b/src/Module/Notifications/Introductions.php
@@ -30,6 +30,7 @@ use Friendica\Content\Text\BBCode;
use Friendica\Core\L10n;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
+use Friendica\DI;
use Friendica\Model\User;
use Friendica\Module\BaseNotifications;
use Friendica\Module\Response;
@@ -211,7 +212,7 @@ class Introductions extends BaseNotifications
}
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']);
}
diff --git a/src/Module/Notifications/Notification.php b/src/Module/Notifications/Notification.php
index a28b5d6f65..cacf57ec09 100644
--- a/src/Module/Notifications/Notification.php
+++ b/src/Module/Notifications/Notification.php
@@ -27,6 +27,7 @@ use Friendica\Contact\Introduction\Repository\Introduction;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\System;
+use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Module\Response;
use Friendica\Module\Security\Login;
@@ -131,7 +132,7 @@ class Notification extends BaseModule
protected function content(array $request = []): string
{
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();
}
diff --git a/src/Module/Photo.php b/src/Module/Photo.php
index 076dc8107a..5fdabd33c5 100644
--- a/src/Module/Photo.php
+++ b/src/Module/Photo.php
@@ -338,7 +338,7 @@ class Photo extends BaseModule
}
if ($update) {
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 {
Logger::info('Invalid file', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]);
}
diff --git a/src/Module/Profile/Profile.php b/src/Module/Profile/Profile.php
index ccc3208b60..f5e904544c 100644
--- a/src/Module/Profile/Profile.php
+++ b/src/Module/Profile/Profile.php
@@ -106,7 +106,7 @@ class Profile extends BaseProfile
$o = self::getTabsHTML($a, 'profile', $is_owner, $profile['nickname'], $profile['hide-friends']);
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 '';
}
diff --git a/src/Module/Profile/Status.php b/src/Module/Profile/Status.php
index 469677fec5..7cdd907c8a 100644
--- a/src/Module/Profile/Status.php
+++ b/src/Module/Profile/Status.php
@@ -107,7 +107,7 @@ class Status extends BaseProfile
$last_updated_key = "profile:" . $profile['uid'] . ":" . local_user() . ":" . $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 '';
}
diff --git a/src/Module/Register.php b/src/Module/Register.php
index 9c09baef82..35faaa7dff 100644
--- a/src/Module/Register.php
+++ b/src/Module/Register.php
@@ -74,20 +74,20 @@ class Register extends BaseModule
$block = DI::config()->get('system', 'block_extended_register');
if (local_user() && $block) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return '';
}
if (local_user()) {
$user = DBA::selectFirst('user', ['parent-uid'], ['uid' => local_user()]);
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 '';
}
}
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 '';
}
@@ -96,7 +96,7 @@ class Register extends BaseModule
$count = DBA::count('user', ['`register_date` > UTC_TIMESTAMP - INTERVAL 1 day']);
if ($count >= $max_dailies) {
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 '';
}
}
@@ -203,19 +203,19 @@ class Register extends BaseModule
$additional_account = false;
if (!local_user() && !empty($arr['post']['parent_password'])) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
} elseif (local_user() && !empty($arr['post']['parent_password'])) {
try {
Model\User::getIdFromPasswordAuthentication(local_user(), $arr['post']['parent_password']);
} 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']];
DI::baseUrl()->redirect('register?' . http_build_query($regdata));
}
$additional_account = true;
} 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']];
DI::baseUrl()->redirect('register?' . http_build_query($regdata));
}
@@ -242,7 +242,7 @@ class Register extends BaseModule
case self::CLOSED:
default:
if (empty($_SESSION['authenticated']) && empty($_SESSION['administrator'])) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return;
}
$blocked = 1;
@@ -257,14 +257,14 @@ class Register extends BaseModule
// Is there text in the tar pit?
if (!empty($arr['email'])) {
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/');
}
if ($additional_account) {
$user = DBA::selectFirst('user', ['email'], ['uid' => local_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');
}
@@ -280,7 +280,7 @@ class Register extends BaseModule
if ($arr['email'] != $arr['repeat']) {
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']];
DI::baseUrl()->redirect('register?' . http_build_query($regdata));
}
@@ -292,7 +292,7 @@ class Register extends BaseModule
try {
$result = Model\User::create($arr);
} catch (\Exception $e) {
- notice($e->getMessage());
+ DI::sysmsg()->addNotice($e->getMessage());
return;
}
@@ -302,12 +302,12 @@ class Register extends BaseModule
if ($netpublish && intval(DI::config()->get('config', 'register_policy')) !== self::APPROVE) {
$url = $base_url . '/profile/' . $user['nickname'];
- Worker::add(PRIORITY_LOW, 'Directory', $url);
+ Worker::add(Worker::PRIORITY_LOW, 'Directory', $url);
}
if ($additional_account) {
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');
}
@@ -332,28 +332,28 @@ class Register extends BaseModule
);
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();
} else {
- notice(
+ DI::sysmsg()->addNotice(
DI::l10n()->t('Failed to send email message. Here your accout details:
login: %s
password: %s
You can change your password after login.',
$user['email'],
$result['password'])
);
}
} else {
- info(DI::l10n()->t('Registration successful.'));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Registration successful.'));
DI::baseUrl()->redirect();
}
} elseif (intval(DI::config()->get('config', 'register_policy')) === self::APPROVE) {
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();
}
// Check if the note to the admin is actually filled out
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::baseUrl()->redirect('register/');
@@ -399,7 +399,7 @@ class Register extends BaseModule
$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();
}
diff --git a/src/Module/RemoteFollow.php b/src/Module/RemoteFollow.php
index 130c76319c..05239440de 100644
--- a/src/Module/RemoteFollow.php
+++ b/src/Module/RemoteFollow.php
@@ -31,6 +31,7 @@ use Friendica\Core\Protocol;
use Friendica\Core\Renderer;
use Friendica\Core\Search;
use Friendica\Core\System;
+use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Profile;
use Friendica\Model\User;
@@ -68,25 +69,25 @@ class RemoteFollow extends BaseModule
}
if (empty($this->owner)) {
- notice($this->t('Profile unavailable.'));
+ DI::sysmsg()->addNotice($this->t('Profile unavailable.'));
return;
}
$url = Probe::cleanURI($_POST['dfrn_url']);
if (!strlen($url)) {
- notice($this->t("Invalid locator"));
+ DI::sysmsg()->addNotice($this->t("Invalid locator"));
return;
}
// Detect the network, make sure the provided URL is valid
$data = Contact::getByURL($url);
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;
}
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;
}
diff --git a/src/Module/Search/Directory.php b/src/Module/Search/Directory.php
index 496a3e0985..a088282cbe 100644
--- a/src/Module/Search/Directory.php
+++ b/src/Module/Search/Directory.php
@@ -34,7 +34,7 @@ class Directory extends BaseSearch
protected function content(array $request = []): string
{
if (!local_user()) {
- notice(DI::l10n()->t('Permission denied.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
return Login::form();
}
diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php
index db20dd0a3d..7dfdca39b4 100644
--- a/src/Module/Search/Index.php
+++ b/src/Module/Search/Index.php
@@ -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
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]);
- notice(DI::l10n()->t('No results.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No results.'));
return $o;
}
@@ -191,7 +191,7 @@ class Index extends BaseSearch
if (empty($items)) {
if (empty($last_uriid)) {
- notice(DI::l10n()->t('No results.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('No results.'));
}
return $o;
}
diff --git a/src/Module/Search/Saved.php b/src/Module/Search/Saved.php
index 4256ffcd44..cea0a9b1a5 100644
--- a/src/Module/Search/Saved.php
+++ b/src/Module/Search/Saved.php
@@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n;
use Friendica\Core\Search;
use Friendica\Database\Database;
+use Friendica\DI;
use Friendica\Module\Response;
use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface;
@@ -55,16 +56,16 @@ class Saved extends BaseModule
$fields = ['uid' => local_user(), 'term' => $search];
if (!$this->dba->exists('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 {
- notice($this->t('Search term already saved.'));
+ DI::sysmsg()->addNotice($this->t('Search term already saved.'));
}
break;
case 'remove':
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;
}
diff --git a/src/Module/Security/Logout.php b/src/Module/Security/Logout.php
index 004292cb5c..82c176feb6 100644
--- a/src/Module/Security/Logout.php
+++ b/src/Module/Security/Logout.php
@@ -28,6 +28,7 @@ use Friendica\Core\Hook;
use Friendica\Core\L10n;
use Friendica\Core\Session\Capability\IHandleSessions;
use Friendica\Core\System;
+use Friendica\DI;
use Friendica\Model\Profile;
use Friendica\Model\User\Cookie;
use Friendica\Module\Response;
@@ -80,7 +81,7 @@ class Logout extends BaseModule
if ($visitor_home) {
System::externalRedirect($visitor_home);
} else {
- info($this->t('Logged out.'));
+ DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect();
}
}
diff --git a/src/Module/Security/OpenID.php b/src/Module/Security/OpenID.php
index 7dbb765c6d..2675f1fec3 100644
--- a/src/Module/Security/OpenID.php
+++ b/src/Module/Security/OpenID.php
@@ -87,9 +87,9 @@ class OpenID extends BaseModule
$session->set('openid_server', $open_id_obj->discover($open_id_obj->identity));
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 {
- 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');
diff --git a/src/Module/Security/TwoFactor/Recovery.php b/src/Module/Security/TwoFactor/Recovery.php
index 6d8d91dbea..38b341dad9 100644
--- a/src/Module/Security/TwoFactor/Recovery.php
+++ b/src/Module/Security/TwoFactor/Recovery.php
@@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleSessions;
+use Friendica\DI;
use Friendica\Model\User;
use Friendica\Module\Response;
use Friendica\Security\Authentication;
@@ -70,13 +71,13 @@ class Recovery extends BaseModule
if (RecoveryCode::existsForUser(local_user(), $recovery_code)) {
RecoveryCode::markUsedForUser(local_user(), $recovery_code);
$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->baseUrl->redirect($this->session->pop('return_path', ''));
} else {
- notice($this->t('Invalid code, please retry.'));
+ DI::sysmsg()->addNotice($this->t('Invalid code, please retry.'));
}
}
}
diff --git a/src/Module/Security/TwoFactor/SignOut.php b/src/Module/Security/TwoFactor/SignOut.php
index 75efc9e60b..ac6e9321f4 100644
--- a/src/Module/Security/TwoFactor/SignOut.php
+++ b/src/Module/Security/TwoFactor/SignOut.php
@@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleSessions;
+use Friendica\DI;
use Friendica\Model\User\Cookie;
use Friendica\Module\Response;
use Friendica\Network\HTTPException\NotFoundException;
@@ -75,7 +76,7 @@ class SignOut extends BaseModule
$this->cookie->reset(['2fa_cookie_hash' => $trusted]);
$this->session->clear();
- info($this->t('Logged out.'));
+ DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect();
break;
case 'sign_out':
@@ -83,7 +84,7 @@ class SignOut extends BaseModule
$this->cookie->clear();
$this->session->clear();
- info($this->t('Logged out.'));
+ DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect();
break;
default:
@@ -105,14 +106,14 @@ class SignOut extends BaseModule
$this->cookie->reset(['2fa_cookie_hash' => $trusted]);
$this->session->clear();
- info($this->t('Logged out.'));
+ DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect();
}
} catch (TwoFactor\Exception\TrustedBrowserNotFoundException $exception) {
$this->cookie->clear();
$this->session->clear();
- info($this->t('Logged out.'));
+ DI::sysmsg()->addInfo($this->t('Logged out.'));
$this->baseUrl->redirect();
}
diff --git a/src/Module/Security/TwoFactor/Trust.php b/src/Module/Security/TwoFactor/Trust.php
index 1f5fb7418f..ed24c6b14c 100644
--- a/src/Module/Security/TwoFactor/Trust.php
+++ b/src/Module/Security/TwoFactor/Trust.php
@@ -26,6 +26,7 @@ use Friendica\BaseModule;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleSessions;
+use Friendica\DI;
use Friendica\Model\User;
use Friendica\Model\User\Cookie;
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
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) {
$this->logger->warning('Unexpected error when saving the trusted browser.', ['trustedBrowser' => $trustedBrowser, 'exception' => $exception]);
diff --git a/src/Module/Settings/Account.php b/src/Module/Settings/Account.php
index 373f1614d7..bb262ab1ab 100644
--- a/src/Module/Settings/Account.php
+++ b/src/Module/Settings/Account.php
@@ -75,10 +75,10 @@ class Account extends BaseSettings
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) {
- notice($e->getMessage());
- notice(DI::l10n()->t('Password unchanged.'));
+ DI::sysmsg()->addNotice($e->getMessage());
+ DI::sysmsg()->addNotice(DI::l10n()->t('Password unchanged.'));
}
DI::baseUrl()->redirect($redirectUrl);
@@ -123,7 +123,7 @@ class Account extends BaseSettings
}
if (strlen($err)) {
- notice($err);
+ DI::sysmsg()->addNotice($err);
return;
}
@@ -146,7 +146,7 @@ class Account extends BaseSettings
}
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
@@ -198,7 +198,7 @@ class Account extends BaseSettings
];
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);
@@ -218,7 +218,7 @@ class Account extends BaseSettings
DI::pConfig()->set(local_user(), 'expire', 'network_only', $expire_network_only);
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);
@@ -302,7 +302,7 @@ class Account extends BaseSettings
];
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);
@@ -351,7 +351,7 @@ class Account extends BaseSettings
]);
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);
@@ -363,7 +363,7 @@ class Account extends BaseSettings
// was there an error
if ($_FILES['importcontact-filename']['error'] > 0) {
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 {
$csvArray = array_map('str_getcsv', file($_FILES['importcontact-filename']['tmp_name']));
Logger::notice('Import started', ['lines' => count($csvArray)]);
@@ -375,14 +375,14 @@ class Account extends BaseSettings
// "http" or "@" to be present in the string.
// All other fields from the row will be ignored
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 {
Logger::notice('Invalid account', ['url' => $csvRow[0]]);
}
}
Logger::notice('Import done');
- info(DI::l10n()->t('Importing Contacts done'));
+ DI::sysmsg()->addInfo(DI::l10n()->t('Importing Contacts done'));
// delete temp file
unlink($_FILES['importcontact-filename']['tmp_name']);
}
@@ -394,8 +394,8 @@ class Account extends BaseSettings
}
if (!empty($request['relocate-submit'])) {
- Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, local_user());
- info(DI::l10n()->t("Relocate message has been send to your contacts"));
+ Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, local_user());
+ DI::sysmsg()->addInfo(DI::l10n()->t("Relocate message has been send to your contacts"));
DI::baseUrl()->redirect($redirectUrl);
}
@@ -412,7 +412,7 @@ class Account extends BaseSettings
$profile = DBA::selectFirst('profile', [], ['uid' => local_user()]);
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 '';
}
diff --git a/src/Module/Settings/Delegation.php b/src/Module/Settings/Delegation.php
index 75e683e60a..aeada0871e 100644
--- a/src/Module/Settings/Delegation.php
+++ b/src/Module/Settings/Delegation.php
@@ -50,13 +50,13 @@ class Delegation extends BaseSettings
if ($parent_uid != 0) {
try {
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) {
- 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;
}
} 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()]);
@@ -78,7 +78,7 @@ class Delegation extends BaseSettings
if ($action === 'add' && $user_id) {
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');
}
@@ -92,7 +92,7 @@ class Delegation extends BaseSettings
DBA::insert('manage', ['uid' => $user_id, 'mid' => local_user()]);
}
} else {
- notice(DI::l10n()->t('Delegate user not found.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Delegate user not found.'));
}
DI::baseUrl()->redirect('settings/delegation');
@@ -100,7 +100,7 @@ class Delegation extends BaseSettings
if ($action === 'remove' && $user_id) {
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');
}
diff --git a/src/Module/Settings/Display.php b/src/Module/Settings/Display.php
index 4670bf500d..fe42b8718d 100644
--- a/src/Module/Settings/Display.php
+++ b/src/Module/Settings/Display.php
@@ -104,7 +104,7 @@ class Display extends BaseSettings
DBA::update('user', ['theme' => $theme], ['uid' => local_user()]);
}
} 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);
diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php
index 49130e8c57..eec7468d06 100644
--- a/src/Module/Settings/Profile/Index.php
+++ b/src/Module/Settings/Profile/Index.php
@@ -80,7 +80,7 @@ class Index extends BaseSettings
$name = trim($_POST['name'] ?? '');
if (!strlen($name)) {
- notice(DI::l10n()->t('Profile Name is required.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Profile Name is required.'));
return;
}
@@ -128,7 +128,7 @@ class Index extends BaseSettings
);
if (!$result) {
- notice(DI::l10n()->t('Profile couldn\'t be updated.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Profile couldn\'t be updated.'));
return;
}
@@ -138,7 +138,7 @@ class Index extends BaseSettings
protected function content(array $request = []): string
{
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();
}
diff --git a/src/Module/Settings/Profile/Photo/Crop.php b/src/Module/Settings/Profile/Photo/Crop.php
index ee9ac3246f..5afab95035 100644
--- a/src/Module/Settings/Profile/Photo/Crop.php
+++ b/src/Module/Settings/Profile/Photo/Crop.php
@@ -105,7 +105,7 @@ class Crop extends BaseSettings
Photo::USER_AVATAR
);
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 {
Photo::update(['profile' => true], array_merge($condition, ['scale' => 4]));
}
@@ -123,7 +123,7 @@ class Crop extends BaseSettings
Photo::USER_AVATAR
);
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 {
Photo::update(['profile' => true], array_merge($condition, ['scale' => 5]));
}
@@ -141,19 +141,19 @@ class Crop extends BaseSettings
Photo::USER_AVATAR
);
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 {
Photo::update(['profile' => true], array_merge($condition, ['scale' => 6]));
}
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
Profile::publishUpdate(local_user());
} 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
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());
}
diff --git a/src/Module/Settings/Profile/Photo/Index.php b/src/Module/Settings/Profile/Photo/Index.php
index ff2a239b5b..4f0b5ddadf 100644
--- a/src/Module/Settings/Profile/Photo/Index.php
+++ b/src/Module/Settings/Profile/Photo/Index.php
@@ -43,7 +43,7 @@ class Index extends BaseSettings
self::checkFormSecurityTokenRedirectOnError('/settings/profile/photo', 'settings_profile_photo');
if (empty($_FILES['userfile'])) {
- notice(DI::l10n()->t('Missing uploaded image.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Missing uploaded image.'));
return;
}
@@ -57,7 +57,7 @@ class Index extends BaseSettings
$maximagesize = DI::config()->get('system', 'maximagesize', 0);
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);
return;
}
@@ -66,7 +66,7 @@ class Index extends BaseSettings
$Image = new Image($imagedata, $filetype);
if (!$Image->isValid()) {
- notice(DI::l10n()->t('Unable to process image.'));
+ DI::sysmsg()->addNotice(DI::l10n()->t('Unable to process image.'));
@unlink($src);
return;
}
@@ -93,13 +93,13 @@ class Index extends BaseSettings
$filename = '';
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) {
$Image->scaleDown(640);
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'));
}
}
diff --git a/src/Module/Settings/TwoFactor/AppSpecific.php b/src/Module/Settings/TwoFactor/AppSpecific.php
index 5fc513393e..69b509131a 100644
--- a/src/Module/Settings/TwoFactor/AppSpecific.php
+++ b/src/Module/Settings/TwoFactor/AppSpecific.php
@@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer;
+use Friendica\DI;
use Friendica\Module\Response;
use Friendica\Security\TwoFactor\Model\AppSpecificPassword;
use Friendica\Module\BaseSettings;
@@ -61,7 +62,7 @@ class AppSpecific extends BaseSettings
}
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');
}
}
@@ -79,20 +80,20 @@ class AppSpecific extends BaseSettings
case 'generate':
$description = $_POST['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'));
} 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'));
} else {
$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;
case 'revoke_all' :
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'));
break;
}
@@ -102,7 +103,7 @@ class AppSpecific extends BaseSettings
self::checkFormSecurityTokenRedirectOnError('settings/2fa/app_specific', 'settings_2fa_app_specific');
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'));
diff --git a/src/Module/Settings/TwoFactor/Index.php b/src/Module/Settings/TwoFactor/Index.php
index 0da49f3177..be3d8d232c 100644
--- a/src/Module/Settings/TwoFactor/Index.php
+++ b/src/Module/Settings/TwoFactor/Index.php
@@ -66,7 +66,7 @@ class Index extends BaseSettings
DI::pConfig()->delete(local_user(), '2fa', 'verified');
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');
}
break;
@@ -98,7 +98,7 @@ class Index extends BaseSettings
} catch (FoundException $exception) {
// Nothing to do here
} catch (\Exception $e) {
- notice(DI::l10n()->t($e->getMessage()));
+ DI::sysmsg()->addNotice(DI::l10n()->t($e->getMessage()));
}
}
diff --git a/src/Module/Settings/TwoFactor/Recovery.php b/src/Module/Settings/TwoFactor/Recovery.php
index 9d453d5a2d..04749f2f80 100644
--- a/src/Module/Settings/TwoFactor/Recovery.php
+++ b/src/Module/Settings/TwoFactor/Recovery.php
@@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer;
+use Friendica\DI;
use Friendica\Module\Response;
use Friendica\Security\TwoFactor\Model\RecoveryCode;
use Friendica\Module\BaseSettings;
@@ -59,7 +60,7 @@ class Recovery extends BaseSettings
}
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');
}
}
@@ -75,7 +76,7 @@ class Recovery extends BaseSettings
if ($_POST['action'] == 'regenerate') {
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'));
}
}
diff --git a/src/Module/Settings/TwoFactor/Trusted.php b/src/Module/Settings/TwoFactor/Trusted.php
index 140394e077..61f97dbd1d 100644
--- a/src/Module/Settings/TwoFactor/Trusted.php
+++ b/src/Module/Settings/TwoFactor/Trusted.php
@@ -25,6 +25,7 @@ use Friendica\App;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer;
+use Friendica\DI;
use Friendica\Module\BaseSettings;
use Friendica\Module\Response;
use Friendica\Security\TwoFactor;
@@ -62,7 +63,7 @@ class Trusted extends BaseSettings
}
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');
}
}
@@ -79,7 +80,7 @@ class Trusted extends BaseSettings
switch ($_POST['action']) {
case 'remove_all':
$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'));
break;
}
@@ -89,7 +90,7 @@ class Trusted extends BaseSettings
self::checkFormSecurityTokenRedirectOnError('settings/2fa/trusted', 'settings_2fa_trusted');
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'));
diff --git a/src/Module/Settings/TwoFactor/Verify.php b/src/Module/Settings/TwoFactor/Verify.php
index 7b5bea385e..3d7db01180 100644
--- a/src/Module/Settings/TwoFactor/Verify.php
+++ b/src/Module/Settings/TwoFactor/Verify.php
@@ -30,6 +30,7 @@ use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
+use Friendica\DI;
use Friendica\Module\BaseSettings;
use Friendica\Module\Response;
use Friendica\Module\Security\Login;
@@ -65,7 +66,7 @@ class Verify extends BaseSettings
}
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');
}
}
@@ -87,11 +88,11 @@ class Verify extends BaseSettings
$this->pConfig->set(local_user(), '2fa', 'verified', 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');
} else {
- notice($this->t('Invalid code, please retry.'));
+ DI::sysmsg()->addNotice($this->t('Invalid code, please retry.'));
}
}
}
diff --git a/src/Module/Settings/UserExport.php b/src/Module/Settings/UserExport.php
index 4dfbdb99eb..ccfd08b52c 100644
--- a/src/Module/Settings/UserExport.php
+++ b/src/Module/Settings/UserExport.php
@@ -21,11 +21,11 @@
namespace Friendica\Module\Settings;
+use Friendica\App;
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Core\System;
use Friendica\Database\DBA;
-use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Item;
use Friendica\Model\Post;
@@ -253,7 +253,7 @@ class UserExport extends BaseSettings
);
$output = [
- 'version' => FRIENDICA_VERSION,
+ 'version' => App::VERSION,
'schema' => DB_UPDATE_VERSION,
'baseurl' => DI::baseUrl(),
'user' => $user,
diff --git a/src/Module/Statistics.php b/src/Module/Statistics.php
index db145bd430..e06fc64052 100644
--- a/src/Module/Statistics.php
+++ b/src/Module/Statistics.php
@@ -69,8 +69,8 @@ class Statistics extends BaseModule
$statistics = array_merge([
'name' => $this->config->get('config', 'sitename'),
- 'network' => FRIENDICA_PLATFORM,
- 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
+ 'network' => App::PLATFORM,
+ 'version' => App::VERSION . '-' . DB_UPDATE_VERSION,
'registrations_open' => $registration_open,
'total_users' => $this->config->get('nodeinfo', 'total_users'),
'active_users_halfyear' => $this->config->get('nodeinfo', 'active_users_halfyear'),
diff --git a/src/Network/HTTPClient/Factory/HttpClient.php b/src/Network/HTTPClient/Factory/HttpClient.php
index 29ef3c09eb..713933222b 100644
--- a/src/Network/HTTPClient/Factory/HttpClient.php
+++ b/src/Network/HTTPClient/Factory/HttpClient.php
@@ -86,9 +86,9 @@ class HttpClient extends BaseFactory
$logger->notice('Curl redirect.', ['url' => $request->getUri(), 'to' => $uri, 'method' => $request->getMethod()]);
};
- $userAgent = FRIENDICA_PLATFORM . " '" .
- FRIENDICA_CODENAME . "' " .
- FRIENDICA_VERSION . '-' .
+ $userAgent = App::PLATFORM . " '" .
+ App::CODENAME . "' " .
+ App::VERSION . '-' .
DB_UPDATE_VERSION . '; ' .
$this->baseUrl->get();
diff --git a/src/Object/Api/Mastodon/Instance.php b/src/Object/Api/Mastodon/Instance.php
index 0ae96c972f..45fc4bf895 100644
--- a/src/Object/Api/Mastodon/Instance.php
+++ b/src/Object/Api/Mastodon/Instance.php
@@ -21,11 +21,11 @@
namespace Friendica\Object\Api\Mastodon;
+use Friendica\App;
use Friendica\App\BaseURL;
use Friendica\BaseDataTransferObject;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Database\Database;
-use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\User;
use Friendica\Module\Register;
@@ -87,7 +87,7 @@ class Instance extends BaseDataTransferObject
$this->title = $config->get('config', 'sitename');
$this->short_description = $this->description = $config->get('config', 'info');
$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->stats = new Stats($config, $database);
$this->thumbnail = $baseUrl->get() . ($config->get('system', 'shortcut_icon') ?? 'images/friendica-32.png');
diff --git a/src/Object/EMail/ItemCCEMail.php b/src/Object/EMail/ItemCCEMail.php
index 927a068d7d..fd4baa0b99 100644
--- a/src/Object/EMail/ItemCCEMail.php
+++ b/src/Object/EMail/ItemCCEMail.php
@@ -41,8 +41,8 @@ class ItemCCEMail extends Email
$disclaimer = '
' . $l10n->t('This message was sent to you by %s, a member of the Friendica social network.', $user['username'])
. '
';
- $disclaimer .= $l10n->t('You may visit them online at %s', $baseUrl . '/profile/' . $a->getLoggedInUserNickname()) . EOL;
- $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('You may visit them online at %s', $baseUrl . '/profile/' . $a->getLoggedInUserNickname()) . '
';
+ $disclaimer .= $l10n->t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . '
';
if (!$item['title'] == '') {
$subject = $item['title'];
} else {
diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php
index e413aac928..79626abbb8 100644
--- a/src/Protocol/ActivityPub/Processor.php
+++ b/src/Protocol/ActivityPub/Processor.php
@@ -170,7 +170,7 @@ class Processor
}
/**
- * Stire attachment data
+ * Store attachment data
*
* @param array $activity
* @param array $item
@@ -187,7 +187,7 @@ class Processor
}
/**
- * Store attachment data
+ * Store question data
*
* @param array $activity
* @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]);
Fetch::add($activity['reply-to-id']);
$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);
} else {
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')) {
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 {
- 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']);
}
}
}
diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php
index 5545d5b8aa..80eb602a0f 100644
--- a/src/Protocol/ActivityPub/Receiver.php
+++ b/src/Protocol/ActivityPub/Receiver.php
@@ -652,7 +652,7 @@ class Receiver
// We delay by 5 seconds to allow to accumulate all receivers
$delayed = date(DateTimeFormat::MYSQL, time() + 5);
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);
} else {
Logger::debug('Other queue entries need to be processed first.', ['id' => $object_data['entry-id']]);
diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php
index baa5c1350b..8b07d12e7d 100644
--- a/src/Protocol/ActivityPub/Transmitter.php
+++ b/src/Protocol/ActivityPub/Transmitter.php
@@ -21,6 +21,7 @@
namespace Friendica\Protocol\ActivityPub;
+use Friendica\App;
use Friendica\Content\Feature;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Cache\Enum\Duration;
@@ -40,6 +41,7 @@ use Friendica\Model\User;
use Friendica\Network\HTTPException;
use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub;
+use Friendica\Protocol\Diaspora;
use Friendica\Protocol\Relay;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\HTTPSignature;
@@ -415,7 +417,7 @@ class Transmitter
{
return [
'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()
];
}
@@ -1621,6 +1623,8 @@ class Transmitter
$permission_block = self::createPermissionBlockForItem($item, false);
+ $real_quote = false;
+
$body = $item['body'];
if ($type == 'Note') {
@@ -1662,10 +1666,17 @@ class Transmitter
$body = BBCode::setMentionsToNicknames($body);
- $shared = BBCode::fetchShareAttributes($body);
- if (!empty($shared['link']) && !empty($shared['guid']) && !empty($shared['comment'])) {
- $body = self::replaceSharedData($body);
- $data['quoteUrl'] = $shared['link'];
+ if (!empty($item['quote-uri']) && Post::exists(['uri-id' => $item['quote-uri-id'], 'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN]])) {
+ $real_quote = true;
+ if (Diaspora::isReshare($body, false)) {
+ $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);
@@ -1678,9 +1689,11 @@ class Transmitter
if (!empty($language)) {
$richbody = BBCode::setMentionsToNicknames($item['body'] ?? '');
- $shared = BBCode::fetchShareAttributes($richbody);
- if (!empty($shared['link']) && !empty($shared['guid']) && !empty($shared['comment'])) {
- $richbody = self::replaceSharedData($richbody);
+ if ($real_quote) {
+ $shared = BBCode::fetchShareAttributes($richbody);
+ if (!empty($shared['link']) && !empty($shared['guid']) && !empty($shared['comment'])) {
+ $richbody = BBCode::replaceSharedData($richbody);
+ }
}
$richbody = BBCode::removeAttachment($richbody);
@@ -1710,22 +1723,6 @@ class Transmitter
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.
*
diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php
index 7540d99d9f..8fe3c5556e 100644
--- a/src/Protocol/DFRN.php
+++ b/src/Protocol/DFRN.php
@@ -25,6 +25,7 @@ use DOMDocument;
use DOMElement;
use DOMNode;
use DOMXPath;
+use Friendica\App;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
@@ -369,8 +370,8 @@ class DFRN
XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']);
XML::addElement($doc, $root, 'title', $owner['name']);
- $attributes = ['uri' => 'https://friendi.ca', 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION];
- XML::addElement($doc, $root, 'generator', FRIENDICA_PLATFORM, $attributes);
+ $attributes = ['uri' => 'https://friendi.ca', 'version' => App::VERSION . '-' . DB_UPDATE_VERSION];
+ XML::addElement($doc, $root, 'generator', App::PLATFORM, $attributes);
$attributes = ['rel' => 'license', 'href' => 'http://creativecommons.org/licenses/by/3.0/'];
XML::addElement($doc, $root, 'link', '', $attributes);
diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index 70616104b4..ee8edf0a04 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -2020,7 +2020,7 @@ class Diaspora
}
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);
}
}
diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php
index 3253a1309b..e5f205aa5a 100644
--- a/src/Protocol/Feed.php
+++ b/src/Protocol/Feed.php
@@ -24,12 +24,14 @@ namespace Friendica\Protocol;
use DOMDocument;
use DOMElement;
use DOMXPath;
+use Friendica\App;
use Friendica\Content\PageInfo;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML;
use Friendica\Core\Cache\Enum\Duration;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
+use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
@@ -631,7 +633,7 @@ class Feed
unset($item['parent-uri']);
// Set the delivery priority for "remote self" to "medium"
- $notify = PRIORITY_MEDIUM;
+ $notify = Worker::PRIORITY_MEDIUM;
}
$condition = ['uid' => $item['uid'], 'uri' => $item['uri']];
@@ -1035,8 +1037,8 @@ class Feed
break;
}
- $attributes = ['uri' => 'https://friendi.ca', 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION];
- XML::addElement($doc, $root, 'generator', FRIENDICA_PLATFORM, $attributes);
+ $attributes = ['uri' => 'https://friendi.ca', 'version' => App::VERSION . '-' . DB_UPDATE_VERSION];
+ XML::addElement($doc, $root, 'generator', App::PLATFORM, $attributes);
XML::addElement($doc, $root, 'id', DI::baseUrl() . '/profile/' . $owner['nick']);
XML::addElement($doc, $root, 'title', $title);
XML::addElement($doc, $root, 'subtitle', sprintf("Updates from %s on %s", $owner['name'], DI::config()->get('config', 'sitename')));
diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php
index 216579466c..6ec9b9fea1 100644
--- a/src/Protocol/OStatus.php
+++ b/src/Protocol/OStatus.php
@@ -24,6 +24,7 @@ namespace Friendica\Protocol;
use DOMDocument;
use DOMElement;
use DOMXPath;
+use Friendica\App;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML;
use Friendica\Core\Cache\Enum\Duration;
@@ -1061,9 +1062,9 @@ class OStatus
$attributes = [
'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, 'title', $title);
XML::addElement($doc, $root, 'subtitle', sprintf("Updates from %s on %s", $owner['name'], DI::config()->get('config', 'sitename')));
diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php
index 42dc023404..3cd7b76bcf 100644
--- a/src/Security/Authentication.php
+++ b/src/Security/Authentication.php
@@ -223,7 +223,7 @@ class Authentication
// if it's an email address or doesn't resolve to a URL, fail.
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();
}
@@ -237,7 +237,7 @@ class Authentication
$openid->optional = ['namePerson/friendly', 'contact/email', 'namePerson', 'namePerson/first', 'media/image/aspect11', 'media/image/default'];
System::externalRedirect($openid->authUrl());
} 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.') . '
' . $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.') . '
' . $this->l10n->t('The error message was:') . ' ' . $e->getMessage());
}
}
@@ -268,7 +268,7 @@ class Authentication
);
} catch (Exception $e) {
$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();
}
@@ -379,8 +379,8 @@ class Authentication
if ($interactive) {
if ($user_record['login_date'] <= DBA::NULL_DATETIME) {
- info($this->l10n->t('Welcome %s', $user_record['username']));
- info($this->l10n->t('Please upload a profile photo.'));
+ DI::sysmsg()->addInfo($this->l10n->t('Welcome %s', $user_record['username']));
+ DI::sysmsg()->addInfo($this->l10n->t('Please upload a profile photo.'));
$this->baseUrl->redirect('settings/profile/photo/new');
}
}
diff --git a/src/Util/EMailer/MailBuilder.php b/src/Util/EMailer/MailBuilder.php
index 321bdc9e6b..2aadf955ae 100644
--- a/src/Util/EMailer/MailBuilder.php
+++ b/src/Util/EMailer/MailBuilder.php
@@ -22,6 +22,7 @@
namespace Friendica\Util\EMailer;
use Exception;
+use Friendica\App;
use Friendica\App\BaseURL;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
@@ -79,8 +80,8 @@ abstract class MailBuilder
$this->headers = [
'Precedence' => ['list'],
'X-Friendica-Host' => [$hostname],
- 'X-Friendica-Platform' => [FRIENDICA_PLATFORM],
- 'X-Friendica-Version' => [FRIENDICA_VERSION],
+ 'X-Friendica-Platform' => [App::PLATFORM],
+ 'X-Friendica-Version' => [App::VERSION],
'List-ID' => [''],
'List-Archive' => ['<' . $baseUrl->get() . '/notifications/system>'],
];
@@ -257,7 +258,7 @@ abstract class MailBuilder
$tpl = Renderer::getMarkupTemplate('email/html.tpl');
$msgHtml = Renderer::replaceMacros($tpl, [
'$title' => $this->l10n->t('Friendica Notification'),
- '$product' => FRIENDICA_PLATFORM,
+ '$product' => App::PLATFORM,
'$htmlversion' => $msgHtml,
'$sitename' => $this->config->get('config', 'sitename'),
'$banner' => $this->config->get('system', 'email_banner',
diff --git a/src/Util/Writer/DbaDefinitionSqlWriter.php b/src/Util/Writer/DbaDefinitionSqlWriter.php
index f5e41847fe..9f6d4701b6 100644
--- a/src/Util/Writer/DbaDefinitionSqlWriter.php
+++ b/src/Util/Writer/DbaDefinitionSqlWriter.php
@@ -22,6 +22,7 @@
namespace Friendica\Util\Writer;
use Exception;
+use Friendica\App;
use Friendica\Database\Definition\DbaDefinition;
/**
@@ -41,7 +42,7 @@ class DbaDefinitionSqlWriter
public static function create(DbaDefinition $definition): string
{
$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 .= "-- ------------------------------------------\n\n\n";
diff --git a/src/Worker/CheckDeletedContacts.php b/src/Worker/CheckDeletedContacts.php
index 4d1c3b6374..f612cd2ee9 100644
--- a/src/Worker/CheckDeletedContacts.php
+++ b/src/Worker/CheckDeletedContacts.php
@@ -34,7 +34,7 @@ class CheckDeletedContacts
{
$contacts = DBA::select('contact', ['id'], ['deleted' => true]);
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);
}
diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php
index 12ea6e60a3..21d2f8a205 100644
--- a/src/Worker/Cron.php
+++ b/src/Worker/Cron.php
@@ -62,25 +62,25 @@ class Cron
}
// 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
- Worker::add(PRIORITY_MEDIUM, 'PollContacts');
+ Worker::add(Worker::PRIORITY_MEDIUM, 'PollContacts');
// Update contact information
- Worker::add(PRIORITY_LOW, 'UpdateContacts');
+ Worker::add(Worker::PRIORITY_LOW, 'UpdateContacts');
// Update server information
- Worker::add(PRIORITY_LOW, 'UpdateGServers');
+ Worker::add(Worker::PRIORITY_LOW, 'UpdateGServers');
// 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
- Worker::add(PRIORITY_MEDIUM, 'ExpireAndRemoveUsers');
+ Worker::add(Worker::PRIORITY_MEDIUM, 'ExpireAndRemoveUsers');
// Call possible post update functions
- Worker::add(PRIORITY_LOW, 'PostUpdate');
+ Worker::add(Worker::PRIORITY_LOW, 'PostUpdate');
// Hourly cron calls
if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) {
@@ -97,11 +97,11 @@ class Cron
// Search for new contacts in the directory
if (DI::config()->get('system', 'synchronize_directory')) {
- Worker::add(PRIORITY_LOW, 'PullDirectory');
+ Worker::add(Worker::PRIORITY_LOW, 'PullDirectory');
}
// Clear cache entries
- Worker::add(PRIORITY_LOW, 'ClearCache');
+ Worker::add(Worker::PRIORITY_LOW, 'ClearCache');
DI::config()->set('system', 'last_cron_hourly', time());
}
@@ -109,27 +109,27 @@ class Cron
// Daily maintenance cron calls
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?
- 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')) {
- Worker::add(PRIORITY_LOW, 'OptimizeTables');
+ Worker::add(Worker::PRIORITY_LOW, 'OptimizeTables');
}
// Resubscribe to relay servers
diff --git a/src/Worker/Directory.php b/src/Worker/Directory.php
index bb8041a225..f0ee2ab5d1 100644
--- a/src/Worker/Directory.php
+++ b/src/Worker/Directory.php
@@ -64,7 +64,7 @@ class Directory
private static function updateAll() {
$users = DBA::select('owner-view', ['url'], ['net-publish' => true, 'account_expired' => false, 'verified' => true]);
while ($user = DBA::fetch($users)) {
- Worker::add(PRIORITY_LOW, 'Directory', $user['url']);
+ Worker::add(Worker::PRIORITY_LOW, 'Directory', $user['url']);
}
DBA::close($users);
}
diff --git a/src/Worker/ExpirePosts.php b/src/Worker/ExpirePosts.php
index 10325b32b3..6f75d18559 100644
--- a/src/Worker/ExpirePosts.php
+++ b/src/Worker/ExpirePosts.php
@@ -53,10 +53,10 @@ class ExpirePosts
}
// 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
- Worker::add(PRIORITY_LOW, 'NodeInfo');
+ Worker::add(Worker::PRIORITY_LOW, 'NodeInfo');
}
/**
diff --git a/src/Worker/MoveStorage.php b/src/Worker/MoveStorage.php
index 4b24caf5ba..30f42e40cd 100644
--- a/src/Worker/MoveStorage.php
+++ b/src/Worker/MoveStorage.php
@@ -37,7 +37,7 @@ class MoveStorage
$moved = DI::storageManager()->move($current);
if ($moved) {
- Worker::add(PRIORITY_LOW, 'MoveStorage');
+ Worker::add(Worker::PRIORITY_LOW, 'MoveStorage');
}
}
}
diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php
index 3092364c55..4498723223 100644
--- a/src/Worker/Notifier.php
+++ b/src/Worker/Notifier.php
@@ -86,7 +86,7 @@ class Notifier
foreach ($inboxes as $inbox => $receivers) {
$ap_contacts = array_merge($ap_contacts, $receivers);
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);
}
} elseif ($cmd == Delivery::SUGGESTION) {
@@ -568,7 +568,7 @@ class Notifier
// 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.
// 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];
} else {
$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);
foreach ($inboxes as $inbox => $receivers) {
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);
Worker::coolDown();
}
@@ -817,7 +817,7 @@ class Notifier
if (DI::config()->get('system', 'bulk_delivery')) {
$delivery_queue_count++;
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 {
if (Worker::add(['priority' => $priority, 'created' => $created, 'dont_fork' => true],
'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')) {
$delivery_queue_count++;
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 {
if (Worker::add(['priority' => $priority, 'dont_fork' => true], 'APDelivery', $cmd, $target_item['id'], $inbox, $uid, [], $target_item['uri-id'])) {
$delivery_queue_count++;
diff --git a/src/Worker/PollContacts.php b/src/Worker/PollContacts.php
index b4312ef0c3..454b5a9aea 100644
--- a/src/Worker/PollContacts.php
+++ b/src/Worker/PollContacts.php
@@ -71,11 +71,11 @@ class PollContacts
}
if ((($contact['network'] == Protocol::FEED) && ($contact['priority'] <= 3)) || ($contact['network'] == Protocol::MAIL)) {
- $priority = PRIORITY_MEDIUM;
+ $priority = Worker::PRIORITY_MEDIUM;
} elseif ($contact['archive']) {
- $priority = PRIORITY_NEGLIGIBLE;
+ $priority = Worker::PRIORITY_NEGLIGIBLE;
} else {
- $priority = PRIORITY_LOW;
+ $priority = Worker::PRIORITY_LOW;
}
Logger::notice("Polling " . $contact["network"] . " " . $contact["id"] . " " . $contact['priority'] . " " . $contact["nick"] . " " . $contact["name"]);
diff --git a/src/Worker/RemoveUser.php b/src/Worker/RemoveUser.php
index 6a2d54422e..72ead52642 100644
--- a/src/Worker/RemoveUser.php
+++ b/src/Worker/RemoveUser.php
@@ -21,6 +21,7 @@
namespace Friendica\Worker;
+use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\Model\Item;
use Friendica\Model\Post;
@@ -48,7 +49,7 @@ class RemoveUser {
do {
$items = Post::select(['id'], $condition, ['limit' => 100]);
while ($item = Post::fetch($items)) {
- Item::markForDeletionById($item['id'], PRIORITY_NEGLIGIBLE);
+ Item::markForDeletionById($item['id'], Worker::PRIORITY_NEGLIGIBLE);
}
DBA::close($items);
} while (Post::exists($condition));
diff --git a/src/Worker/UpdateContacts.php b/src/Worker/UpdateContacts.php
index 7e352a27ca..ed4a9932f1 100644
--- a/src/Worker/UpdateContacts.php
+++ b/src/Worker/UpdateContacts.php
@@ -59,7 +59,7 @@ class UpdateContacts
$contacts = DBA::select('contact', ['id'], $condition, ['order' => ['next-update'], 'limit' => $limit]);
$count = 0;
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;
}
Worker::coolDown();
diff --git a/src/Worker/UpdateGServers.php b/src/Worker/UpdateGServers.php
index 108482eaec..25a2db16e0 100644
--- a/src/Worker/UpdateGServers.php
+++ b/src/Worker/UpdateGServers.php
@@ -63,12 +63,12 @@ class UpdateGServers
// There are duplicated "url" but not "nurl". So we check both addresses instead of just overwriting them,
// since that would mean loosing data.
if (!empty($gserver['url'])) {
- if (Worker::add(PRIORITY_LOW, 'UpdateGServer', $gserver['url'])) {
+ if (Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'])) {
$count++;
}
}
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++;
}
}
diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php
index 90fea5bcfc..262d7d307f 100644
--- a/static/dbstructure.config.php
+++ b/static/dbstructure.config.php
@@ -55,7 +55,7 @@
use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
- define('DB_UPDATE_VERSION', 1484);
+ define('DB_UPDATE_VERSION', 1486);
}
return [
@@ -1218,6 +1218,7 @@ return [
"content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"body" => ["type" => "mediumtext", "comment" => "item body content"],
"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"],
"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"],
@@ -1236,6 +1237,7 @@ return [
"plink" => ["plink(191)"],
"resource-id" => ["resource-id"],
"title-content-warning-body" => ["FULLTEXT", "title", "content-warning", "body"],
+ "quote-uri-id" => ["quote-uri-id"],
]
],
"post-delivery" => [
@@ -1319,6 +1321,7 @@ return [
"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"],
"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"],
"mimetype" => ["type" => "varchar(60)", "comment" => ""],
"height" => ["type" => "smallint unsigned", "comment" => "Height of the media"],
@@ -1340,6 +1343,7 @@ return [
"PRIMARY" => ["id"],
"uri-id-url" => ["UNIQUE", "uri-id", "url(512)"],
"uri-id-id" => ["uri-id", "id"],
+ "media-uri-id" => ["media-uri-id"],
]
],
"post-question" => [
diff --git a/static/dbview.config.php b/static/dbview.config.php
index 2a7cb54feb..c12cccb4cc 100644
--- a/static/dbview.config.php
+++ b/static/dbview.config.php
@@ -72,6 +72,8 @@
"thr-parent-id" => ["post-user", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"],
"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"],
"wall" => ["post-user", "wall"],
"gravity" => ["post-user", "gravity"],
@@ -229,6 +231,7 @@
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 `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-question` ON `post-question`.`uri-id` = `post-user`.`uri-id`
LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-user`.`psid`
@@ -249,6 +252,8 @@
"thr-parent-id" => ["post-user", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"],
"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"],
"wall" => ["post-thread-user", "wall"],
"gravity" => ["post-user", "gravity"],
@@ -404,6 +409,7 @@
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 `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-question` ON `post-question`.`uri-id` = `post-thread-user`.`uri-id`
LEFT JOIN `permissionset` ON `permissionset`.`id` = `post-thread-user`.`psid`
@@ -420,6 +426,8 @@
"thr-parent-id" => ["post", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"],
"conversation-id" => ["post-thread", "conversation-id"],
+ "quote-uri" => ["quote-item-uri", "uri"],
+ "quote-uri-id" => ["post-content", "quote-uri-id"],
"guid" => ["item-uri", "guid"],
"gravity" => ["post", "gravity"],
"extid" => ["external-item-uri", "uri"],
@@ -544,6 +552,7 @@
LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
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 `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` 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`"
@@ -558,6 +567,8 @@
"thr-parent-id" => ["post", "thr-parent-id"],
"conversation" => ["conversation-item-uri", "uri"],
"conversation-id" => ["post-thread", "conversation-id"],
+ "quote-uri" => ["quote-item-uri", "uri"],
+ "quote-uri-id" => ["post-content", "quote-uri-id"],
"guid" => ["item-uri", "guid"],
"gravity" => ["post", "gravity"],
"extid" => ["external-item-uri", "uri"],
@@ -682,6 +693,7 @@
LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
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 `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` 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`"
diff --git a/static/defaults.config.php b/static/defaults.config.php
index f20b333dd8..647fb73b13 100644
--- a/static/defaults.config.php
+++ b/static/defaults.config.php
@@ -284,7 +284,7 @@ return [
// expire-notify-priority (integer)
// Priority for the expirary notification
- 'expire-notify-priority' => PRIORITY_LOW,
+ 'expire-notify-priority' => Friendica\Core\Worker::PRIORITY_LOW,
// fetch_by_worker (Boolean)
// Fetch missing posts via a background process
diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php
index 71b488bcb1..e0d47c2646 100644
--- a/tests/src/Core/Cache/DatabaseCacheTest.php
+++ b/tests/src/Core/Cache/DatabaseCacheTest.php
@@ -48,7 +48,6 @@ class DatabaseCacheTest extends CacheTest
protected function getInstance()
{
- $logger = new NullLogger();
$profiler = Mockery::mock(Profiler::class);
$profiler->shouldReceive('startRecording');
$profiler->shouldReceive('stopRecording');
@@ -62,7 +61,7 @@ class DatabaseCacheTest extends CacheTest
$dbaDefinition = (new DbaDefinition($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);
return $this->cache;
diff --git a/tests/src/Core/Storage/DatabaseStorageTest.php b/tests/src/Core/Storage/DatabaseStorageTest.php
index 75bbc4239b..2933fab52d 100644
--- a/tests/src/Core/Storage/DatabaseStorageTest.php
+++ b/tests/src/Core/Storage/DatabaseStorageTest.php
@@ -47,7 +47,6 @@ class DatabaseStorageTest extends StorageTest
protected function getInstance()
{
- $logger = new NullLogger();
$profiler = \Mockery::mock(Profiler::class);
$profiler->shouldReceive('startRecording');
$profiler->shouldReceive('stopRecording');
@@ -61,7 +60,7 @@ class DatabaseStorageTest extends StorageTest
$dbaDefinition = (new DbaDefinition($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);
}
diff --git a/tests/src/Core/Storage/Repository/StorageManagerTest.php b/tests/src/Core/Storage/Repository/StorageManagerTest.php
index 99dee27a63..27af7f8374 100644
--- a/tests/src/Core/Storage/Repository/StorageManagerTest.php
+++ b/tests/src/Core/Storage/Repository/StorageManagerTest.php
@@ -87,7 +87,7 @@ class StorageManagerTest extends DatabaseTest
$dbaDefinition = (new DbaDefinition($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));
$this->config = new PreloadConfig($configCache, $configModel);
diff --git a/tests/src/Module/NodeInfoTest.php b/tests/src/Module/NodeInfoTest.php
index ac3916fafd..a7766d2472 100644
--- a/tests/src/Module/NodeInfoTest.php
+++ b/tests/src/Module/NodeInfoTest.php
@@ -21,12 +21,12 @@
namespace Friendica\Test\src\Module;
+use Friendica\App;
use Friendica\Capabilities\ICanCreateResponses;
use Friendica\DI;
use Friendica\Module\NodeInfo110;
use Friendica\Module\NodeInfo120;
use Friendica\Module\NodeInfo210;
-use Friendica\Module\Response;
use Friendica\Test\FixtureTest;
class NodeInfoTest extends FixtureTest
@@ -44,7 +44,7 @@ class NodeInfoTest extends FixtureTest
self::assertEquals('1.0', $json->version);
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->outbound);
@@ -65,7 +65,7 @@ class NodeInfoTest extends FixtureTest
self::assertEquals('2.0', $json->version);
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->services->inbound);
@@ -85,7 +85,7 @@ class NodeInfoTest extends FixtureTest
self::assertEquals('1.0', $json->version);
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->services->inbound);
diff --git a/update.php b/update.php
index e66887a378..c7e2428af9 100644
--- a/update.php
+++ b/update.php
@@ -131,7 +131,7 @@ function update_1309()
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']);
Logger::info('Added delivery worker', ['item' => $item['id'], 'contact' => $entry['cid']]);
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' => 'Single'], ['marital' => 'Available']);
- Worker::add(PRIORITY_LOW, 'ProfileUpdate');
+ Worker::add(Worker::PRIORITY_LOW, 'ProfileUpdate');
return Update::SUCCESS;
}
diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po
index 080bd7366a..33b83ca217 100644
--- a/view/lang/C/messages.po
+++ b/view/lang/C/messages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 2022.09-rc\n"
+"Project-Id-Version: 2022.12-dev\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"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -19,7 +19,7 @@ msgstr ""
#: 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/Item/Follow.php:42 src/Module/Item/Ignore.php:41
#: 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."
msgstr ""
-#: mod/cal.php:243 mod/events.php:374 src/Content/Nav.php:196
-#: src/Content/Nav.php:260 src/Module/BaseProfile.php:84
+#: mod/cal.php:243 mod/events.php:374 src/Content/Nav.php:197
+#: src/Content/Nav.php:261 src/Module/BaseProfile.php:84
#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:240
#: view/theme/frio/theme.php:244
msgid "Events"
@@ -105,7 +105,7 @@ msgid "calendar"
msgstr ""
#: 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
msgid "Public access denied."
msgstr ""
@@ -119,7 +119,7 @@ msgid "The feed for this item is unavailable."
msgstr ""
#: 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/photos.php:160 mod/photos.php:891 mod/repair_ostatus.php:31
#: mod/settings.php:40 mod/settings.php:50 mod/settings.php:156
@@ -212,7 +212,7 @@ msgid "audio link"
msgstr ""
#: 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"
msgstr ""
@@ -230,7 +230,7 @@ msgstr ""
#: 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
-#: 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
msgid "Please wait"
msgstr ""
@@ -248,12 +248,12 @@ msgid "Public post"
msgstr ""
#: mod/editpost.php:120 src/Content/Conversation.php:357
-#: src/Module/Item/Compose.php:178
+#: src/Module/Item/Compose.php:205
msgid "Set title"
msgstr ""
#: 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)"
msgstr ""
@@ -263,11 +263,11 @@ msgstr ""
#: 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
-#: src/Module/Item/Compose.php:172 src/Object/Post.php:1003
+#: src/Module/Item/Compose.php:199 src/Object/Post.php:1003
msgid "Preview"
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/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:386
#: src/Module/Contact/Revoke.php:108 src/Module/RemoteFollow.php:127
@@ -276,37 +276,37 @@ msgid "Cancel"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
#: 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"
msgstr ""
@@ -415,9 +415,9 @@ msgstr ""
#: src/Module/Delegation.php:148 src/Module/FriendSuggest.php:144
#: src/Module/Install.php:252 src/Module/Install.php:294
#: 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
-#: 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
msgid "Submit"
msgstr ""
@@ -426,7 +426,7 @@ msgstr ""
msgid "Basic"
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
msgid "Advanced"
msgstr ""
@@ -435,17 +435,17 @@ msgstr ""
msgid "Failed to remove event"
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
msgid "Photos"
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
msgid "Upload"
msgstr ""
-#: mod/fbrowser.php:142
+#: mod/fbrowser.php:143
msgid "Files"
msgstr ""
@@ -469,8 +469,8 @@ msgstr ""
msgid "OStatus support is disabled. Contact can't be added."
msgstr ""
-#: mod/follow.php:138 src/Content/Item.php:397 src/Content/Widget.php:80
-#: src/Model/Contact.php:1146 src/Model/Contact.php:1157
+#: mod/follow.php:138 src/Content/Item.php:400 src/Content/Widget.php:80
+#: src/Model/Contact.php:1169 src/Model/Contact.php:1180
#: view/theme/vier/theme.php:181
msgid "Connect/Follow"
msgstr ""
@@ -507,7 +507,7 @@ msgid "Add a personal note:"
msgstr ""
#: 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"
msgstr ""
@@ -515,27 +515,27 @@ msgstr ""
msgid "The contact could not be added."
msgstr ""
-#: mod/item.php:131 mod/item.php:135
+#: mod/item.php:132 mod/item.php:136
msgid "Unable to locate original post."
msgstr ""
-#: mod/item.php:337 mod/item.php:342
+#: mod/item.php:338 mod/item.php:343
msgid "Empty post discarded."
msgstr ""
-#: mod/item.php:682
+#: mod/item.php:678
msgid "Post updated."
msgstr ""
-#: mod/item.php:692 mod/item.php:697
+#: mod/item.php:688 mod/item.php:693
msgid "Item wasn't stored."
msgstr ""
-#: mod/item.php:708
+#: mod/item.php:704
msgid "Item couldn't be fetched."
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/Debug/ItemBody.php:57
msgid "Item not found."
@@ -691,7 +691,7 @@ msgstr ""
msgid "Profile Match"
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"
msgstr ""
@@ -717,7 +717,7 @@ msgstr ""
msgid "Discard"
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"
msgstr ""
@@ -1070,7 +1070,7 @@ msgid "Rotate CCW (left)"
msgstr ""
#: 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
msgid "This is you"
msgstr ""
@@ -1080,11 +1080,11 @@ msgstr ""
msgid "Comment"
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"
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/Index.php:153
msgid "Delete"
@@ -1191,7 +1191,7 @@ msgstr ""
msgid "Name"
msgstr ""
-#: mod/settings.php:177 src/Content/Nav.php:214
+#: mod/settings.php:177 src/Content/Nav.php:215
msgid "Home Page"
msgstr ""
@@ -1206,7 +1206,7 @@ msgstr ""
#: mod/settings.php:205 mod/settings.php:237 mod/settings.php:268
#: 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/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/Settings/Delegation.php:170 src/Module/Settings/Display.php:201
msgid "Save Settings"
@@ -1389,7 +1389,7 @@ msgstr ""
msgid "Action after import:"
msgstr ""
-#: mod/settings.php:350 src/Content/Nav.php:282
+#: mod/settings.php:350 src/Content/Nav.php:283
msgid "Mark as seen"
msgstr ""
@@ -1411,15 +1411,15 @@ msgstr ""
msgid "Friend Suggestions"
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"
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"
msgstr ""
-#: mod/tagger.php:111 src/Content/Item.php:311
+#: mod/tagger.php:111 src/Content/Item.php:314
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
@@ -1595,16 +1595,16 @@ msgid "All contacts"
msgstr ""
#: 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
msgid "Followers"
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"
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"
msgstr ""
@@ -1947,7 +1947,7 @@ msgid "%s attends maybe."
msgstr ""
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260
-#: src/Content/Conversation.php:873
+#: src/Content/Conversation.php:874
#, php-format
msgid "%s reshared this."
msgstr ""
@@ -2020,7 +2020,7 @@ msgstr ""
msgid "Visible to everybody"
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
msgid "Please enter a image/video/audio/webpage URL:"
msgstr ""
@@ -2041,7 +2041,7 @@ msgstr ""
msgid "Delete item(s)?"
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"
msgstr ""
@@ -2053,7 +2053,7 @@ msgstr ""
msgid "Share"
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
msgid "Image"
msgstr ""
@@ -2062,117 +2062,117 @@ msgstr ""
msgid "Video"
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"
msgstr ""
-#: src/Content/Conversation.php:657 src/Object/Post.php:244
+#: src/Content/Conversation.php:658 src/Object/Post.php:244
msgid "Pinned item"
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
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
-#: src/Content/Conversation.php:686 src/Object/Post.php:474
+#: src/Content/Conversation.php:687 src/Object/Post.php:474
msgid "Categories:"
msgstr ""
-#: src/Content/Conversation.php:687 src/Object/Post.php:475
+#: src/Content/Conversation.php:688 src/Object/Post.php:475
msgid "Filed under:"
msgstr ""
-#: src/Content/Conversation.php:695 src/Object/Post.php:500
+#: src/Content/Conversation.php:696 src/Object/Post.php:500
#, php-format
msgid "%s from %s"
msgstr ""
-#: src/Content/Conversation.php:711
+#: src/Content/Conversation.php:712
msgid "View in context"
msgstr ""
-#: src/Content/Conversation.php:776
+#: src/Content/Conversation.php:777
msgid "remove"
msgstr ""
-#: src/Content/Conversation.php:780
+#: src/Content/Conversation.php:781
msgid "Delete Selected Items"
msgstr ""
-#: src/Content/Conversation.php:845 src/Content/Conversation.php:848
-#: src/Content/Conversation.php:851 src/Content/Conversation.php:854
+#: src/Content/Conversation.php:846 src/Content/Conversation.php:849
+#: src/Content/Conversation.php:852 src/Content/Conversation.php:855
#, php-format
msgid "You had been addressed (%s)."
msgstr ""
-#: src/Content/Conversation.php:857
+#: src/Content/Conversation.php:858
#, php-format
msgid "You are following %s."
msgstr ""
-#: src/Content/Conversation.php:860
+#: src/Content/Conversation.php:861
msgid "You subscribed to one or more tags in this post."
msgstr ""
-#: src/Content/Conversation.php:875
+#: src/Content/Conversation.php:876
msgid "Reshared"
msgstr ""
-#: src/Content/Conversation.php:875
+#: src/Content/Conversation.php:876
#, php-format
msgid "Reshared by %s <%s>"
msgstr ""
-#: src/Content/Conversation.php:878
+#: src/Content/Conversation.php:879
#, php-format
msgid "%s is participating in this thread."
msgstr ""
-#: src/Content/Conversation.php:881
+#: src/Content/Conversation.php:882
msgid "Stored for general reasons"
msgstr ""
-#: src/Content/Conversation.php:884
+#: src/Content/Conversation.php:885
msgid "Global post"
msgstr ""
-#: src/Content/Conversation.php:887
+#: src/Content/Conversation.php:888
msgid "Sent via an relay server"
msgstr ""
-#: src/Content/Conversation.php:887
+#: src/Content/Conversation.php:888
#, php-format
msgid "Sent via the relay server %s <%s>"
msgstr ""
-#: src/Content/Conversation.php:890
+#: src/Content/Conversation.php:891
msgid "Fetched"
msgstr ""
-#: src/Content/Conversation.php:890
+#: src/Content/Conversation.php:891
#, php-format
msgid "Fetched because of %s <%s>"
msgstr ""
-#: src/Content/Conversation.php:893
+#: src/Content/Conversation.php:894
msgid "Stored because of a child post to complete this thread."
msgstr ""
-#: src/Content/Conversation.php:896
+#: src/Content/Conversation.php:897
msgid "Local delivery"
msgstr ""
-#: src/Content/Conversation.php:899
+#: src/Content/Conversation.php:900
msgid "Stored because of your activity (like, comment, star, ...)"
msgstr ""
-#: src/Content/Conversation.php:902
+#: src/Content/Conversation.php:903
msgid "Distributed"
msgstr ""
-#: src/Content/Conversation.php:905
+#: src/Content/Conversation.php:906
msgid "Pushed to us"
msgstr ""
@@ -2274,7 +2274,7 @@ msgstr ""
msgid "Display membership date in profile"
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
msgid "Forums"
msgstr ""
@@ -2292,50 +2292,50 @@ msgstr ""
msgid "show more"
msgstr ""
-#: src/Content/Item.php:288 src/Model/Item.php:2844
+#: src/Content/Item.php:291 src/Model/Item.php:2853
msgid "event"
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"
msgstr ""
-#: src/Content/Item.php:381 src/Model/Contact.php:1151
+#: src/Content/Item.php:384 src/Model/Contact.php:1174
msgid "View Status"
msgstr ""
-#: src/Content/Item.php:382 src/Content/Item.php:400 src/Model/Contact.php:1089
-#: src/Model/Contact.php:1143 src/Model/Contact.php:1152
+#: src/Content/Item.php:385 src/Content/Item.php:403 src/Model/Contact.php:1112
+#: src/Model/Contact.php:1166 src/Model/Contact.php:1175
#: src/Module/Directory.php:158 src/Module/Settings/Profile/Index.php:225
msgid "View Profile"
msgstr ""
-#: src/Content/Item.php:383 src/Model/Contact.php:1153
+#: src/Content/Item.php:386 src/Model/Contact.php:1176
msgid "View Photos"
msgstr ""
-#: src/Content/Item.php:384 src/Model/Contact.php:1144
-#: src/Model/Contact.php:1154
+#: src/Content/Item.php:387 src/Model/Contact.php:1167
+#: src/Model/Contact.php:1177
msgid "Network Posts"
msgstr ""
-#: src/Content/Item.php:385 src/Model/Contact.php:1145
-#: src/Model/Contact.php:1155
+#: src/Content/Item.php:388 src/Model/Contact.php:1168
+#: src/Model/Contact.php:1178
msgid "View Contact"
msgstr ""
-#: src/Content/Item.php:386 src/Model/Contact.php:1156
+#: src/Content/Item.php:389 src/Model/Contact.php:1179
msgid "Send PM"
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/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
msgid "Block"
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/Notifications/Introductions.php:132
#: src/Module/Notifications/Introductions.php:204
@@ -2343,105 +2343,105 @@ msgstr ""
msgid "Ignore"
msgstr ""
-#: src/Content/Item.php:392 src/Object/Post.php:455
+#: src/Content/Item.php:395 src/Object/Post.php:455
msgid "Languages"
msgstr ""
-#: src/Content/Nav.php:90
+#: src/Content/Nav.php:91
msgid "Nothing new here"
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"
msgstr ""
-#: src/Content/Nav.php:95
+#: src/Content/Nav.php:96
msgid "Clear notifications"
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"
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"
msgstr ""
-#: src/Content/Nav.php:185
+#: src/Content/Nav.php:186
msgid "End this session"
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
msgid "Login"
msgstr ""
-#: src/Content/Nav.php:187
+#: src/Content/Nav.php:188
msgid "Sign in"
msgstr ""
-#: src/Content/Nav.php:192 src/Module/BaseProfile.php:56
-#: src/Module/Contact.php:434 src/Module/Contact/Profile.php:380
+#: src/Content/Nav.php:193 src/Module/BaseProfile.php:56
+#: src/Module/Contact.php:436 src/Module/Contact/Profile.php:380
#: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:236
msgid "Status"
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
msgid "Your posts and conversations"
msgstr ""
-#: src/Content/Nav.php:193 src/Module/BaseProfile.php:48
-#: src/Module/BaseSettings.php:55 src/Module/Contact.php:458
+#: src/Content/Nav.php:194 src/Module/BaseProfile.php:48
+#: src/Module/BaseSettings.php:55 src/Module/Contact.php:460
#: src/Module/Contact/Profile.php:382 src/Module/Profile/Profile.php:241
#: src/Module/Welcome.php:57 view/theme/frio/theme.php:237
msgid "Profile"
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"
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"
msgstr ""
-#: src/Content/Nav.php:195 src/Module/BaseProfile.php:72
-#: src/Module/BaseProfile.php:75 src/Module/Contact.php:450
+#: src/Content/Nav.php:196 src/Module/BaseProfile.php:72
+#: src/Module/BaseProfile.php:75 src/Module/Contact.php:452
#: view/theme/frio/theme.php:239
msgid "Media"
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"
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"
msgstr ""
-#: src/Content/Nav.php:197
+#: src/Content/Nav.php:198
msgid "Personal notes"
msgstr ""
-#: src/Content/Nav.php:197
+#: src/Content/Nav.php:198
msgid "Your personal notes"
msgstr ""
-#: src/Content/Nav.php:214 src/Content/Nav.php:275
+#: src/Content/Nav.php:215 src/Content/Nav.php:276
msgid "Home"
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
msgid "Register"
msgstr ""
-#: src/Content/Nav.php:218
+#: src/Content/Nav.php:219
msgid "Create an account"
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/Index.php:119
#: src/Module/Settings/TwoFactor/Recovery.php:105
@@ -2449,158 +2449,158 @@ msgstr ""
msgid "Help"
msgstr ""
-#: src/Content/Nav.php:224
+#: src/Content/Nav.php:225
msgid "Help and documentation"
msgstr ""
-#: src/Content/Nav.php:228
+#: src/Content/Nav.php:229
msgid "Apps"
msgstr ""
-#: src/Content/Nav.php:228
+#: src/Content/Nav.php:229
msgid "Addon applications, utilities, games"
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
msgid "Search"
msgstr ""
-#: src/Content/Nav.php:232
+#: src/Content/Nav.php:233
msgid "Search site content"
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"
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
msgid "Tags"
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/Module/BaseProfile.php:128 src/Module/Contact.php:371
-#: src/Module/Contact.php:465 view/theme/frio/theme.php:247
+#: src/Module/BaseProfile.php:128 src/Module/Contact.php:373
+#: src/Module/Contact.php:467 view/theme/frio/theme.php:247
msgid "Contacts"
msgstr ""
-#: src/Content/Nav.php:256
+#: src/Content/Nav.php:257
msgid "Community"
msgstr ""
-#: src/Content/Nav.php:256
+#: src/Content/Nav.php:257
msgid "Conversations on this and other servers"
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
msgid "Events and Calendar"
msgstr ""
-#: src/Content/Nav.php:263
+#: src/Content/Nav.php:264
msgid "Directory"
msgstr ""
-#: src/Content/Nav.php:263
+#: src/Content/Nav.php:264
msgid "People directory"
msgstr ""
-#: src/Content/Nav.php:265 src/Module/BaseAdmin.php:88
+#: src/Content/Nav.php:266 src/Module/BaseAdmin.php:88
msgid "Information"
msgstr ""
-#: src/Content/Nav.php:265
+#: src/Content/Nav.php:266
msgid "Information about this friendica instance"
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/Tos.php:87
msgid "Terms of Service"
msgstr ""
-#: src/Content/Nav.php:268
+#: src/Content/Nav.php:269
msgid "Terms of Service of this Friendica instance"
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"
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"
msgstr ""
-#: src/Content/Nav.php:279
+#: src/Content/Nav.php:280
msgid "Introductions"
msgstr ""
-#: src/Content/Nav.php:279
+#: src/Content/Nav.php:280
msgid "Friend Requests"
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
msgid "Notifications"
msgstr ""
-#: src/Content/Nav.php:281
+#: src/Content/Nav.php:282
msgid "See all notifications"
msgstr ""
-#: src/Content/Nav.php:282
+#: src/Content/Nav.php:283
msgid "Mark all system notifications as seen"
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"
msgstr ""
-#: src/Content/Nav.php:286
+#: src/Content/Nav.php:287
msgid "Inbox"
msgstr ""
-#: src/Content/Nav.php:287
+#: src/Content/Nav.php:288
msgid "Outbox"
msgstr ""
-#: src/Content/Nav.php:291
+#: src/Content/Nav.php:292
msgid "Accounts"
msgstr ""
-#: src/Content/Nav.php:291
+#: src/Content/Nav.php:292
msgid "Manage other pages"
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/Welcome.php:52 view/theme/frio/theme.php:246
msgid "Settings"
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"
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"
msgstr ""
-#: src/Content/Nav.php:301 src/Module/BaseAdmin.php:129
+#: src/Content/Nav.php:302 src/Module/BaseAdmin.php:129
msgid "Admin"
msgstr ""
-#: src/Content/Nav.php:301
+#: src/Content/Nav.php:302
msgid "Site setup and configuration"
msgstr ""
-#: src/Content/Nav.php:304
+#: src/Content/Nav.php:305
msgid "Navigation"
msgstr ""
-#: src/Content/Nav.php:304
+#: src/Content/Nav.php:305
msgid "Site map"
msgstr ""
@@ -2628,39 +2628,39 @@ msgstr ""
msgid "last"
msgstr ""
-#: src/Content/Text/BBCode.php:998 src/Content/Text/BBCode.php:1833
-#: src/Content/Text/BBCode.php:1834
+#: src/Content/Text/BBCode.php:1002 src/Content/Text/BBCode.php:1883
+#: src/Content/Text/BBCode.php:1884
msgid "Image/photo"
msgstr ""
-#: src/Content/Text/BBCode.php:1188
+#: src/Content/Text/BBCode.php:1238
#, php-format
msgid ""
"%2$s %3$s"
msgstr ""
-#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3420
-#: src/Model/Item.php:3426 src/Model/Item.php:3427
+#: src/Content/Text/BBCode.php:1263 src/Model/Item.php:3456
+#: src/Model/Item.php:3462 src/Model/Item.php:3463
msgid "Link to source"
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"
msgstr ""
-#: src/Content/Text/BBCode.php:1782
+#: src/Content/Text/BBCode.php:1832
msgid "$1 wrote:"
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"
msgstr ""
-#: src/Content/Text/BBCode.php:2057
+#: src/Content/Text/BBCode.php:2109
msgid "Invalid source protocol"
msgstr ""
-#: src/Content/Text/BBCode.php:2072
+#: src/Content/Text/BBCode.php:2124
msgid "Invalid link protocol"
msgstr ""
@@ -2712,7 +2712,7 @@ msgstr ""
msgid "Examples: Robert Morgenstein, Fishing"
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
msgid "Find"
msgstr ""
@@ -2739,7 +2739,7 @@ msgid "Local Directory"
msgstr ""
#: 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"
msgstr ""
@@ -2751,7 +2751,7 @@ msgstr ""
msgid "Relationships"
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
msgid "All Contacts"
msgstr ""
@@ -2795,7 +2795,7 @@ msgstr ""
msgid "Organisations"
msgstr ""
-#: src/Content/Widget.php:523 src/Model/Contact.php:1582
+#: src/Content/Widget.php:523 src/Model/Contact.php:1605
msgid "News"
msgstr ""
@@ -3421,36 +3421,36 @@ msgstr ""
msgid "Enter a valid existing folder"
msgstr ""
-#: src/Core/Update.php:67
+#: src/Core/Update.php:69
#, php-format
msgid ""
"Updates from version %s are not supported. Please update at least to version "
"2021.01 and wait until the postupdate finished version 1383."
msgstr ""
-#: src/Core/Update.php:78
+#: src/Core/Update.php:80
#, php-format
msgid ""
"Updates from postupdate version %s are not supported. Please update at least "
"to version 2021.01 and wait until the postupdate finished version 1383."
msgstr ""
-#: src/Core/Update.php:153
+#: src/Core/Update.php:155
#, php-format
msgid "%s: executing pre update %d"
msgstr ""
-#: src/Core/Update.php:191
+#: src/Core/Update.php:193
#, php-format
msgid "%s: executing post update %d"
msgstr ""
-#: src/Core/Update.php:261
+#: src/Core/Update.php:263
#, php-format
msgid "Update %s failed. See error logs."
msgstr ""
-#: src/Core/Update.php:315
+#: src/Core/Update.php:317
#, php-format
msgid ""
"\n"
@@ -3462,16 +3462,16 @@ msgid ""
"might be invalid."
msgstr ""
-#: src/Core/Update.php:321
+#: src/Core/Update.php:323
#, php-format
msgid "The error message is\\n[pre]%s[/pre]"
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"
msgstr ""
-#: src/Core/Update.php:361
+#: src/Core/Update.php:363
#, php-format
msgid ""
"\n"
@@ -3588,81 +3588,81 @@ msgstr ""
msgid "Legacy module file not found: %s"
msgstr ""
-#: src/Model/Contact.php:1147 src/Model/Contact.php:1158
+#: src/Model/Contact.php:1170 src/Model/Contact.php:1181
msgid "UnFollow"
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:202
msgid "Approve"
msgstr ""
-#: src/Model/Contact.php:1578
+#: src/Model/Contact.php:1601
msgid "Organisation"
msgstr ""
-#: src/Model/Contact.php:1586
+#: src/Model/Contact.php:1609
msgid "Forum"
msgstr ""
-#: src/Model/Contact.php:2774
+#: src/Model/Contact.php:2795
msgid "Disallowed profile URL."
msgstr ""
-#: src/Model/Contact.php:2779 src/Module/Friendica.php:81
+#: src/Model/Contact.php:2800 src/Module/Friendica.php:81
msgid "Blocked domain"
msgstr ""
-#: src/Model/Contact.php:2784
+#: src/Model/Contact.php:2805
msgid "Connect URL missing."
msgstr ""
-#: src/Model/Contact.php:2793
+#: src/Model/Contact.php:2814
msgid ""
"The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page."
msgstr ""
-#: src/Model/Contact.php:2835
+#: src/Model/Contact.php:2856
msgid "The profile address specified does not provide adequate information."
msgstr ""
-#: src/Model/Contact.php:2837
+#: src/Model/Contact.php:2858
msgid "No compatible communication protocols or feeds were discovered."
msgstr ""
-#: src/Model/Contact.php:2840
+#: src/Model/Contact.php:2861
msgid "An author or name was not found."
msgstr ""
-#: src/Model/Contact.php:2843
+#: src/Model/Contact.php:2864
msgid "No browser URL could be matched to this address."
msgstr ""
-#: src/Model/Contact.php:2846
+#: src/Model/Contact.php:2867
msgid ""
"Unable to match @-style Identity Address with a known protocol or email "
"contact."
msgstr ""
-#: src/Model/Contact.php:2847
+#: src/Model/Contact.php:2868
msgid "Use mailto: in front of address to force email check."
msgstr ""
-#: src/Model/Contact.php:2853
+#: src/Model/Contact.php:2874
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr ""
-#: src/Model/Contact.php:2858
+#: src/Model/Contact.php:2879
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr ""
-#: src/Model/Contact.php:2917
+#: src/Model/Contact.php:2938
msgid "Unable to retrieve contact information."
msgstr ""
@@ -3782,66 +3782,66 @@ msgstr ""
msgid "Edit groups"
msgstr ""
-#: src/Model/Item.php:1956
+#: src/Model/Item.php:1965
#, php-format
msgid "Detected languages in this post:\\n%s"
msgstr ""
-#: src/Model/Item.php:2848
+#: src/Model/Item.php:2857
msgid "activity"
msgstr ""
-#: src/Model/Item.php:2850
+#: src/Model/Item.php:2859
msgid "comment"
msgstr ""
-#: src/Model/Item.php:2853
+#: src/Model/Item.php:2862
msgid "post"
msgstr ""
-#: src/Model/Item.php:2969
+#: src/Model/Item.php:3005
#, php-format
msgid "Content warning: %s"
msgstr ""
-#: src/Model/Item.php:3332
+#: src/Model/Item.php:3368
msgid "bytes"
msgstr ""
-#: src/Model/Item.php:3363
+#: src/Model/Item.php:3399
#, php-format
msgid "%2$s (%3$d%%, %1$d vote)"
msgid_plural "%2$s (%3$d%%, %1$d votes)"
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3365
+#: src/Model/Item.php:3401
#, php-format
msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)"
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3370
+#: src/Model/Item.php:3406
#, php-format
msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s"
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3372
+#: src/Model/Item.php:3408
#, php-format
msgid "%d voter."
msgid_plural "%d voters."
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3374
+#: src/Model/Item.php:3410
#, php-format
msgid "Poll end: %s"
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"
msgstr ""
@@ -4292,9 +4292,9 @@ msgstr ""
#: src/Module/Admin/Blocklist/Server/Add.php:121
#: src/Module/Admin/Blocklist/Server/Import.php:117
#: 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/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/Themes/Details.php:90 src/Module/Admin/Themes/Index.php:111
#: src/Module/Admin/Tos.php:75 src/Module/Admin/Users/Active.php:136
@@ -4357,8 +4357,8 @@ msgstr ""
msgid "List of active accounts"
msgstr ""
-#: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:315
-#: src/Module/Contact.php:375
+#: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:317
+#: src/Module/Contact.php:377
msgid "Pending"
msgstr ""
@@ -4366,8 +4366,8 @@ msgstr ""
msgid "List of pending registrations"
msgstr ""
-#: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:323
-#: src/Module/Contact.php:376
+#: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:325
+#: src/Module/Contact.php:378
msgid "Blocked"
msgstr ""
@@ -4460,7 +4460,7 @@ msgstr ""
#: src/Module/Admin/Blocklist/Contact.php:101
#: 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
msgid "Unblock"
msgstr ""
@@ -4821,75 +4821,75 @@ msgstr ""
msgid "Manage Additional Features"
msgstr ""
-#: src/Module/Admin/Federation.php:68
+#: src/Module/Admin/Federation.php:69
msgid "Other"
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"
msgstr ""
-#: src/Module/Admin/Federation.php:173
+#: src/Module/Admin/Federation.php:174
#, php-format
msgid "%2$s total system"
msgid_plural "%2$s total systems"
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Admin/Federation.php:174
+#: src/Module/Admin/Federation.php:175
#, 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:176
#, php-format
msgid "%2$s active user last six months"
msgid_plural "%2$s active users last six months"
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Admin/Federation.php:176
+#: src/Module/Admin/Federation.php:177
#, php-format
msgid "%2$s registered user"
msgid_plural "%2$s registered users"
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Admin/Federation.php:177
+#: src/Module/Admin/Federation.php:178
#, php-format
msgid "%2$s locally created post or comment"
msgid_plural "%2$s locally created posts and comments"
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Admin/Federation.php:180
+#: src/Module/Admin/Federation.php:181
#, php-format
msgid "%2$s post per user"
msgid_plural "%2$s posts per user"
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Admin/Federation.php:185
+#: src/Module/Admin/Federation.php:186
#, php-format
msgid "%2$s user per system"
msgid_plural "%2$s users per system"
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Admin/Federation.php:195
+#: src/Module/Admin/Federation.php:196
msgid ""
"This page offers you some numbers to the known part of the federated social "
"network your Friendica node is part of. These numbers are not complete but "
"only reflect the part of the network your node is aware of."
msgstr ""
-#: src/Module/Admin/Federation.php:201 src/Module/BaseAdmin.php:90
+#: src/Module/Admin/Federation.php:202 src/Module/BaseAdmin.php:90
msgid "Federation Statistics"
msgstr ""
-#: src/Module/Admin/Federation.php:205
+#: src/Module/Admin/Federation.php:206
#, php-format
msgid ""
"Currently this node is aware of %2$s node (%3$s active users last month, "
@@ -5153,470 +5153,470 @@ msgstr ""
msgid "Priority"
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"
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
msgid "%s - (Experimental)"
msgstr ""
-#: src/Module/Admin/Site.php:367
-msgid "No community page for local users"
-msgstr ""
-
-#: src/Module/Admin/Site.php:368
+#: src/Module/Admin/Site.php:365
msgid "No community page"
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"
msgstr ""
-#: src/Module/Admin/Site.php:370
+#: src/Module/Admin/Site.php:368
msgid "Public postings from the federated network"
msgstr ""
-#: src/Module/Admin/Site.php:371
+#: src/Module/Admin/Site.php:369
msgid "Public postings from local users and the federated network"
msgstr ""
-#: src/Module/Admin/Site.php:377
+#: src/Module/Admin/Site.php:375
msgid "Multi user instance"
msgstr ""
-#: src/Module/Admin/Site.php:404
+#: src/Module/Admin/Site.php:402
msgid "Closed"
msgstr ""
-#: src/Module/Admin/Site.php:405
+#: src/Module/Admin/Site.php:403
msgid "Requires approval"
msgstr ""
-#: src/Module/Admin/Site.php:406
+#: src/Module/Admin/Site.php:404
msgid "Open"
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"
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"
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)"
msgstr ""
-#: src/Module/Admin/Site.php:416
+#: src/Module/Admin/Site.php:414
msgid "Don't check"
msgstr ""
-#: src/Module/Admin/Site.php:417
+#: src/Module/Admin/Site.php:415
msgid "check the stable version"
msgstr ""
-#: src/Module/Admin/Site.php:418
+#: src/Module/Admin/Site.php:416
msgid "check the development version"
msgstr ""
-#: src/Module/Admin/Site.php:422
+#: src/Module/Admin/Site.php:420
msgid "none"
msgstr ""
-#: src/Module/Admin/Site.php:423
+#: src/Module/Admin/Site.php:421
msgid "Local contacts"
msgstr ""
-#: src/Module/Admin/Site.php:424
+#: src/Module/Admin/Site.php:422
msgid "Interactors"
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"
msgstr ""
-#: src/Module/Admin/Site.php:435
+#: src/Module/Admin/Site.php:433
msgid "General Information"
msgstr ""
-#: src/Module/Admin/Site.php:437
+#: src/Module/Admin/Site.php:435
msgid "Republish users to directory"
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"
msgstr ""
-#: src/Module/Admin/Site.php:439
+#: src/Module/Admin/Site.php:437
msgid "File upload"
msgstr ""
-#: src/Module/Admin/Site.php:440
+#: src/Module/Admin/Site.php:438
msgid "Policies"
msgstr ""
-#: src/Module/Admin/Site.php:442
+#: src/Module/Admin/Site.php:440
msgid "Auto Discovered Contact Directory"
msgstr ""
-#: src/Module/Admin/Site.php:443
+#: src/Module/Admin/Site.php:441
msgid "Performance"
msgstr ""
-#: src/Module/Admin/Site.php:444
+#: src/Module/Admin/Site.php:442
msgid "Worker"
msgstr ""
-#: src/Module/Admin/Site.php:445
+#: src/Module/Admin/Site.php:443
msgid "Message Relay"
msgstr ""
-#: src/Module/Admin/Site.php:446
+#: src/Module/Admin/Site.php:444
msgid ""
"Use the command \"console relay\" in the command line to add or remove "
"relays."
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."
msgstr ""
-#: src/Module/Admin/Site.php:448
+#: src/Module/Admin/Site.php:446
msgid "The system is currently subscribed to the following relays:"
msgstr ""
-#: src/Module/Admin/Site.php:450
+#: src/Module/Admin/Site.php:448
msgid "Relocate Node"
msgstr ""
-#: src/Module/Admin/Site.php:451
+#: src/Module/Admin/Site.php:449
msgid ""
"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 "
"only be started from the relocate console command like this:"
msgstr ""
-#: src/Module/Admin/Site.php:452
+#: src/Module/Admin/Site.php:450
msgid "(Friendica directory)# bin/console relocate https://newdomain.com"
msgstr ""
-#: src/Module/Admin/Site.php:456
+#: src/Module/Admin/Site.php:454
msgid "Site name"
msgstr ""
-#: src/Module/Admin/Site.php:457
+#: src/Module/Admin/Site.php:455
msgid "Sender Email"
msgstr ""
-#: src/Module/Admin/Site.php:457
+#: src/Module/Admin/Site.php:455
msgid ""
"The email address your server shall use to send notification emails from."
msgstr ""
-#: src/Module/Admin/Site.php:458
+#: src/Module/Admin/Site.php:456
msgid "Name of the system actor"
msgstr ""
-#: src/Module/Admin/Site.php:458
+#: src/Module/Admin/Site.php:456
msgid ""
"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 "
"again."
msgstr ""
-#: src/Module/Admin/Site.php:459
+#: src/Module/Admin/Site.php:457
msgid "Banner/Logo"
msgstr ""
-#: src/Module/Admin/Site.php:460
+#: src/Module/Admin/Site.php:458
msgid "Email Banner/Logo"
msgstr ""
-#: src/Module/Admin/Site.php:461
+#: src/Module/Admin/Site.php:459
msgid "Shortcut icon"
msgstr ""
-#: src/Module/Admin/Site.php:461
+#: src/Module/Admin/Site.php:459
msgid "Link to an icon that will be used for browsers."
msgstr ""
-#: src/Module/Admin/Site.php:462
+#: src/Module/Admin/Site.php:460
msgid "Touch icon"
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."
msgstr ""
-#: src/Module/Admin/Site.php:463
+#: src/Module/Admin/Site.php:461
msgid "Additional Info"
msgstr ""
-#: src/Module/Admin/Site.php:463
+#: src/Module/Admin/Site.php:461
#, php-format
msgid ""
"For public servers: you can add additional information here that will be "
"listed at %s/servers."
msgstr ""
-#: src/Module/Admin/Site.php:464
+#: src/Module/Admin/Site.php:462
msgid "System language"
msgstr ""
-#: src/Module/Admin/Site.php:465
+#: src/Module/Admin/Site.php:463
msgid "System theme"
msgstr ""
-#: src/Module/Admin/Site.php:465
+#: src/Module/Admin/Site.php:463
#, php-format
msgid ""
"Default system theme - may be over-ridden by user profiles - Change default theme settings"
msgstr ""
-#: src/Module/Admin/Site.php:466
+#: src/Module/Admin/Site.php:464
msgid "Mobile system theme"
msgstr ""
-#: src/Module/Admin/Site.php:466
+#: src/Module/Admin/Site.php:464
msgid "Theme for mobile devices"
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"
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"
msgstr ""
-#: src/Module/Admin/Site.php:468
+#: src/Module/Admin/Site.php:466
msgid "Force SSL"
msgstr ""
-#: src/Module/Admin/Site.php:468
+#: src/Module/Admin/Site.php:466
msgid ""
"Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
"to endless loops."
msgstr ""
-#: src/Module/Admin/Site.php:469
+#: src/Module/Admin/Site.php:467
msgid "Show help entry from navigation menu"
msgstr ""
-#: src/Module/Admin/Site.php:469
+#: src/Module/Admin/Site.php:467
msgid ""
"Displays the menu entry for the Help pages from the navigation menu. It is "
"always accessible by calling /help directly."
msgstr ""
-#: src/Module/Admin/Site.php:470
+#: src/Module/Admin/Site.php:468
msgid "Single user instance"
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"
msgstr ""
-#: src/Module/Admin/Site.php:472
+#: src/Module/Admin/Site.php:470
msgid "Maximum image size"
msgstr ""
-#: src/Module/Admin/Site.php:472
+#: src/Module/Admin/Site.php:470
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr ""
-#: src/Module/Admin/Site.php:473
+#: src/Module/Admin/Site.php:471
msgid "Maximum image length"
msgstr ""
-#: src/Module/Admin/Site.php:473
+#: src/Module/Admin/Site.php:471
msgid ""
"Maximum length in pixels of the longest side of uploaded images. Default is "
"-1, which means no limits."
msgstr ""
-#: src/Module/Admin/Site.php:474
+#: src/Module/Admin/Site.php:472
msgid "JPEG image quality"
msgstr ""
-#: src/Module/Admin/Site.php:474
+#: src/Module/Admin/Site.php:472
msgid ""
"Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
"100, which is full quality."
msgstr ""
-#: src/Module/Admin/Site.php:476
+#: src/Module/Admin/Site.php:474
msgid "Register policy"
msgstr ""
-#: src/Module/Admin/Site.php:477
+#: src/Module/Admin/Site.php:475
msgid "Maximum Daily Registrations"
msgstr ""
-#: src/Module/Admin/Site.php:477
+#: src/Module/Admin/Site.php:475
msgid ""
"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 "
"has no effect."
msgstr ""
-#: src/Module/Admin/Site.php:478
+#: src/Module/Admin/Site.php:476
msgid "Register text"
msgstr ""
-#: src/Module/Admin/Site.php:478
+#: src/Module/Admin/Site.php:476
msgid ""
"Will be displayed prominently on the registration page. You can use BBCode "
"here."
msgstr ""
-#: src/Module/Admin/Site.php:479
+#: src/Module/Admin/Site.php:477
msgid "Forbidden Nicknames"
msgstr ""
-#: src/Module/Admin/Site.php:479
+#: src/Module/Admin/Site.php:477
msgid ""
"Comma separated list of nicknames that are forbidden from registration. "
"Preset is a list of role names according RFC 2142."
msgstr ""
-#: src/Module/Admin/Site.php:480
+#: src/Module/Admin/Site.php:478
msgid "Accounts abandoned after x days"
msgstr ""
-#: src/Module/Admin/Site.php:480
+#: src/Module/Admin/Site.php:478
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr ""
-#: src/Module/Admin/Site.php:481
+#: src/Module/Admin/Site.php:479
msgid "Allowed friend domains"
msgstr ""
-#: src/Module/Admin/Site.php:481
+#: src/Module/Admin/Site.php:479
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr ""
-#: src/Module/Admin/Site.php:482
+#: src/Module/Admin/Site.php:480
msgid "Allowed email domains"
msgstr ""
-#: src/Module/Admin/Site.php:482
+#: src/Module/Admin/Site.php:480
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr ""
-#: src/Module/Admin/Site.php:483
+#: src/Module/Admin/Site.php:481
msgid "No OEmbed rich content"
msgstr ""
-#: src/Module/Admin/Site.php:483
+#: src/Module/Admin/Site.php:481
msgid ""
"Don't show the rich content (e.g. embedded PDF), except from the domains "
"listed below."
msgstr ""
-#: src/Module/Admin/Site.php:484
+#: src/Module/Admin/Site.php:482
msgid "Trusted third-party domains"
msgstr ""
-#: src/Module/Admin/Site.php:484
+#: src/Module/Admin/Site.php:482
msgid ""
"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 "
"as well."
msgstr ""
-#: src/Module/Admin/Site.php:485
+#: src/Module/Admin/Site.php:483
msgid "Block public"
msgstr ""
-#: src/Module/Admin/Site.php:485
+#: src/Module/Admin/Site.php:483
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently logged in."
msgstr ""
-#: src/Module/Admin/Site.php:486
+#: src/Module/Admin/Site.php:484
msgid "Force publish"
msgstr ""
-#: src/Module/Admin/Site.php:486
+#: src/Module/Admin/Site.php:484
msgid ""
"Check to force all profiles on this site to be listed in the site directory."
msgstr ""
-#: src/Module/Admin/Site.php:486
+#: src/Module/Admin/Site.php:484
msgid "Enabling this may violate privacy laws like the GDPR"
msgstr ""
-#: src/Module/Admin/Site.php:487
+#: src/Module/Admin/Site.php:485
msgid "Global directory URL"
msgstr ""
-#: src/Module/Admin/Site.php:487
+#: src/Module/Admin/Site.php:485
msgid ""
"URL to the global directory. If this is not set, the global directory is "
"completely unavailable to the application."
msgstr ""
-#: src/Module/Admin/Site.php:488
+#: src/Module/Admin/Site.php:486
msgid "Private posts by default for new users"
msgstr ""
-#: src/Module/Admin/Site.php:488
+#: src/Module/Admin/Site.php:486
msgid ""
"Set default post permissions for all new members to the default privacy "
"group rather than public."
msgstr ""
-#: src/Module/Admin/Site.php:489
+#: src/Module/Admin/Site.php:487
msgid "Don't include post content in email notifications"
msgstr ""
-#: src/Module/Admin/Site.php:489
+#: src/Module/Admin/Site.php:487
msgid ""
"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."
msgstr ""
-#: src/Module/Admin/Site.php:490
+#: src/Module/Admin/Site.php:488
msgid "Disallow public access to addons listed in the apps menu."
msgstr ""
-#: src/Module/Admin/Site.php:490
+#: src/Module/Admin/Site.php:488
msgid ""
"Checking this box will restrict addons listed in the apps menu to members "
"only."
msgstr ""
-#: src/Module/Admin/Site.php:491
+#: src/Module/Admin/Site.php:489
msgid "Don't embed private images in posts"
msgstr ""
-#: src/Module/Admin/Site.php:491
+#: src/Module/Admin/Site.php:489
msgid ""
"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 "
"photos will have to authenticate and load each image, which may take a while."
msgstr ""
-#: src/Module/Admin/Site.php:492
+#: src/Module/Admin/Site.php:490
msgid "Explicit Content"
msgstr ""
-#: src/Module/Admin/Site.php:492
+#: src/Module/Admin/Site.php:490
msgid ""
"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 "
@@ -5625,257 +5625,257 @@ msgid ""
"will be shown at the user registration page."
msgstr ""
-#: src/Module/Admin/Site.php:493
+#: src/Module/Admin/Site.php:491
msgid "Proxify external content"
msgstr ""
-#: src/Module/Admin/Site.php:493
+#: src/Module/Admin/Site.php:491
msgid ""
"Route external content via the proxy functionality. This is used for example "
"for some OEmbed accesses and in some other rare cases."
msgstr ""
-#: src/Module/Admin/Site.php:494
+#: src/Module/Admin/Site.php:492
msgid "Cache contact avatars"
msgstr ""
-#: src/Module/Admin/Site.php:494
+#: src/Module/Admin/Site.php:492
msgid ""
"Locally store the avatar pictures of the contacts. This uses a lot of "
"storage space but it increases the performance."
msgstr ""
-#: src/Module/Admin/Site.php:495
+#: src/Module/Admin/Site.php:493
msgid "Allow Users to set remote_self"
msgstr ""
-#: src/Module/Admin/Site.php:495
+#: src/Module/Admin/Site.php:493
msgid ""
"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 "
"causes mirroring every posting of that contact in the users stream."
msgstr ""
-#: src/Module/Admin/Site.php:496
+#: src/Module/Admin/Site.php:494
msgid "Enable multiple registrations"
msgstr ""
-#: src/Module/Admin/Site.php:496
+#: src/Module/Admin/Site.php:494
msgid "Enable users to register additional accounts for use as pages."
msgstr ""
-#: src/Module/Admin/Site.php:497
+#: src/Module/Admin/Site.php:495
msgid "Enable OpenID"
msgstr ""
-#: src/Module/Admin/Site.php:497
+#: src/Module/Admin/Site.php:495
msgid "Enable OpenID support for registration and logins."
msgstr ""
-#: src/Module/Admin/Site.php:498
+#: src/Module/Admin/Site.php:496
msgid "Enable Fullname check"
msgstr ""
-#: src/Module/Admin/Site.php:498
+#: src/Module/Admin/Site.php:496
msgid ""
"Enable check to only allow users to register with a space between the first "
"name and the last name in their full name."
msgstr ""
-#: src/Module/Admin/Site.php:499
+#: src/Module/Admin/Site.php:497
msgid "Community pages for visitors"
msgstr ""
-#: src/Module/Admin/Site.php:499
+#: src/Module/Admin/Site.php:497
msgid ""
"Which community pages should be available for visitors. Local users always "
"see both pages."
msgstr ""
-#: src/Module/Admin/Site.php:500
+#: src/Module/Admin/Site.php:498
msgid "Posts per user on community page"
msgstr ""
-#: src/Module/Admin/Site.php:500
+#: src/Module/Admin/Site.php:498
msgid ""
"The maximum number of posts per user on the community page. (Not valid for "
"\"Global Community\")"
msgstr ""
-#: src/Module/Admin/Site.php:502
+#: src/Module/Admin/Site.php:500
msgid "Enable Mail support"
msgstr ""
-#: src/Module/Admin/Site.php:502
+#: src/Module/Admin/Site.php:500
msgid ""
"Enable built-in mail support to poll IMAP folders and to reply via mail."
msgstr ""
-#: src/Module/Admin/Site.php:503
+#: src/Module/Admin/Site.php:501
msgid ""
"Mail support can't be enabled because the PHP IMAP module is not installed."
msgstr ""
-#: src/Module/Admin/Site.php:504
+#: src/Module/Admin/Site.php:502
msgid "Enable OStatus support"
msgstr ""
-#: src/Module/Admin/Site.php:504
+#: src/Module/Admin/Site.php:502
msgid ""
"Enable built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
"communications in OStatus are public."
msgstr ""
-#: src/Module/Admin/Site.php:506
+#: src/Module/Admin/Site.php:504
msgid ""
"Diaspora support can't be enabled because Friendica was installed into a sub "
"directory."
msgstr ""
-#: src/Module/Admin/Site.php:507
+#: src/Module/Admin/Site.php:505
msgid "Enable Diaspora support"
msgstr ""
-#: src/Module/Admin/Site.php:507
+#: src/Module/Admin/Site.php:505
msgid ""
"Enable built-in Diaspora network compatibility for communicating with "
"diaspora servers."
msgstr ""
-#: src/Module/Admin/Site.php:508
+#: src/Module/Admin/Site.php:506
msgid "Verify SSL"
msgstr ""
-#: src/Module/Admin/Site.php:508
+#: src/Module/Admin/Site.php:506
msgid ""
"If you wish, you can turn on strict certificate checking. This will mean you "
"cannot connect (at all) to self-signed SSL sites."
msgstr ""
-#: src/Module/Admin/Site.php:509
+#: src/Module/Admin/Site.php:507
msgid "Proxy user"
msgstr ""
-#: src/Module/Admin/Site.php:509
+#: src/Module/Admin/Site.php:507
msgid "User name for the proxy server."
msgstr ""
-#: src/Module/Admin/Site.php:510
+#: src/Module/Admin/Site.php:508
msgid "Proxy URL"
msgstr ""
-#: src/Module/Admin/Site.php:510
+#: src/Module/Admin/Site.php:508
msgid ""
"If you want to use a proxy server that Friendica should use to connect to "
"the network, put the URL of the proxy here."
msgstr ""
-#: src/Module/Admin/Site.php:511
+#: src/Module/Admin/Site.php:509
msgid "Network timeout"
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)."
msgstr ""
-#: src/Module/Admin/Site.php:512
+#: src/Module/Admin/Site.php:510
msgid "Maximum Load Average"
msgstr ""
-#: src/Module/Admin/Site.php:512
+#: src/Module/Admin/Site.php:510
#, php-format
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default %d."
msgstr ""
-#: src/Module/Admin/Site.php:513
+#: src/Module/Admin/Site.php:511
msgid "Minimal Memory"
msgstr ""
-#: src/Module/Admin/Site.php:513
+#: src/Module/Admin/Site.php:511
msgid ""
"Minimal free memory in MB for the worker. Needs access to /proc/meminfo - "
"default 0 (deactivated)."
msgstr ""
-#: src/Module/Admin/Site.php:514
+#: src/Module/Admin/Site.php:512
msgid "Periodically optimize tables"
msgstr ""
-#: src/Module/Admin/Site.php:514
+#: src/Module/Admin/Site.php:512
msgid "Periodically optimize tables like the cache and the workerqueue"
msgstr ""
-#: src/Module/Admin/Site.php:516
+#: src/Module/Admin/Site.php:514
msgid "Discover followers/followings from contacts"
msgstr ""
-#: src/Module/Admin/Site.php:516
+#: src/Module/Admin/Site.php:514
msgid ""
"If enabled, contacts are checked for their followers and following contacts."
msgstr ""
-#: src/Module/Admin/Site.php:517
+#: src/Module/Admin/Site.php:515
msgid "None - deactivated"
msgstr ""
-#: src/Module/Admin/Site.php:518
+#: src/Module/Admin/Site.php:516
msgid ""
"Local contacts - contacts of our local contacts are discovered for their "
"followers/followings."
msgstr ""
-#: src/Module/Admin/Site.php:519
+#: src/Module/Admin/Site.php:517
msgid ""
"Interactors - contacts of our local contacts and contacts who interacted on "
"locally visible postings are discovered for their followers/followings."
msgstr ""
-#: src/Module/Admin/Site.php:521
+#: src/Module/Admin/Site.php:519
msgid "Synchronize the contacts with the directory server"
msgstr ""
-#: src/Module/Admin/Site.php:521
+#: src/Module/Admin/Site.php:519
msgid ""
"if enabled, the system will check periodically for new contacts on the "
"defined directory server."
msgstr ""
-#: src/Module/Admin/Site.php:523
+#: src/Module/Admin/Site.php:521
msgid "Days between requery"
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."
msgstr ""
-#: src/Module/Admin/Site.php:524
+#: src/Module/Admin/Site.php:522
msgid "Discover contacts from other servers"
msgstr ""
-#: src/Module/Admin/Site.php:524
+#: src/Module/Admin/Site.php:522
msgid ""
"Periodically query other servers for contacts. The system queries Friendica, "
"Mastodon and Hubzilla servers."
msgstr ""
-#: src/Module/Admin/Site.php:525
+#: src/Module/Admin/Site.php:523
msgid "Search the local directory"
msgstr ""
-#: src/Module/Admin/Site.php:525
+#: src/Module/Admin/Site.php:523
msgid ""
"Search the local directory instead of the global directory. When searching "
"locally, every search will be executed on the global directory in the "
"background. This improves the search results when the search is repeated."
msgstr ""
-#: src/Module/Admin/Site.php:527
+#: src/Module/Admin/Site.php:525
msgid "Publish server information"
msgstr ""
-#: src/Module/Admin/Site.php:527
+#: src/Module/Admin/Site.php:525
msgid ""
"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 "
@@ -5883,50 +5883,50 @@ msgid ""
"href=\"http://the-federation.info/\">the-federation.info for details."
msgstr ""
-#: src/Module/Admin/Site.php:529
+#: src/Module/Admin/Site.php:527
msgid "Check upstream version"
msgstr ""
-#: src/Module/Admin/Site.php:529
+#: src/Module/Admin/Site.php:527
msgid ""
"Enables checking for new Friendica versions at github. If there is a new "
"version, you will be informed in the admin panel overview."
msgstr ""
-#: src/Module/Admin/Site.php:530
+#: src/Module/Admin/Site.php:528
msgid "Suppress Tags"
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."
msgstr ""
-#: src/Module/Admin/Site.php:531
+#: src/Module/Admin/Site.php:529
msgid "Clean database"
msgstr ""
-#: src/Module/Admin/Site.php:531
+#: src/Module/Admin/Site.php:529
msgid ""
"Remove old remote items, orphaned database records and old content from some "
"other helper tables."
msgstr ""
-#: src/Module/Admin/Site.php:532
+#: src/Module/Admin/Site.php:530
msgid "Lifespan of remote items"
msgstr ""
-#: src/Module/Admin/Site.php:532
+#: src/Module/Admin/Site.php:530
msgid ""
"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 "
"always kept. 0 disables this behaviour."
msgstr ""
-#: src/Module/Admin/Site.php:533
+#: src/Module/Admin/Site.php:531
msgid "Lifespan of unclaimed items"
msgstr ""
-#: src/Module/Admin/Site.php:533
+#: src/Module/Admin/Site.php:531
msgid ""
"When the database cleanup is enabled, this defines the days after which "
"unclaimed remote items (mostly content from the relay) will be deleted. "
@@ -5934,144 +5934,144 @@ msgid ""
"items if set to 0."
msgstr ""
-#: src/Module/Admin/Site.php:534
+#: src/Module/Admin/Site.php:532
msgid "Lifespan of raw conversation data"
msgstr ""
-#: src/Module/Admin/Site.php:534
+#: src/Module/Admin/Site.php:532
msgid ""
"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 "
"days."
msgstr ""
-#: src/Module/Admin/Site.php:535
+#: src/Module/Admin/Site.php:533
msgid "Maximum numbers of comments per post"
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."
msgstr ""
-#: src/Module/Admin/Site.php:536
+#: src/Module/Admin/Site.php:534
msgid "Maximum numbers of comments per post on the display page"
msgstr ""
-#: src/Module/Admin/Site.php:536
+#: src/Module/Admin/Site.php:534
msgid ""
"How many comments should be shown on the single view for each post? Default "
"value is 1000."
msgstr ""
-#: src/Module/Admin/Site.php:537
+#: src/Module/Admin/Site.php:535
msgid "Temp path"
msgstr ""
-#: src/Module/Admin/Site.php:537
+#: src/Module/Admin/Site.php:535
msgid ""
"If you have a restricted system where the webserver can't access the system "
"temp path, enter another path here."
msgstr ""
-#: src/Module/Admin/Site.php:538
+#: src/Module/Admin/Site.php:536
msgid "Only search in tags"
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."
msgstr ""
-#: src/Module/Admin/Site.php:539
+#: src/Module/Admin/Site.php:537
msgid "Generate counts per contact group when calculating network count"
msgstr ""
-#: src/Module/Admin/Site.php:539
+#: src/Module/Admin/Site.php:537
msgid ""
"On systems with users that heavily use contact groups the query can be very "
"expensive."
msgstr ""
-#: src/Module/Admin/Site.php:541
+#: src/Module/Admin/Site.php:539
msgid "Maximum number of parallel workers"
msgstr ""
-#: src/Module/Admin/Site.php:541
+#: src/Module/Admin/Site.php:539
#, php-format
msgid ""
"On shared hosters set this to %d. On larger systems, values of %d are great. "
"Default value is %d."
msgstr ""
-#: src/Module/Admin/Site.php:542
+#: src/Module/Admin/Site.php:540
msgid "Enable fastlane"
msgstr ""
-#: src/Module/Admin/Site.php:542
+#: src/Module/Admin/Site.php:540
msgid ""
"When enabed, the fastlane mechanism starts an additional worker if processes "
"with higher priority are blocked by processes of lower priority."
msgstr ""
-#: src/Module/Admin/Site.php:544
+#: src/Module/Admin/Site.php:542
msgid "Direct relay transfer"
msgstr ""
-#: src/Module/Admin/Site.php:544
+#: src/Module/Admin/Site.php:542
msgid ""
"Enables the direct transfer to other servers without using the relay servers"
msgstr ""
-#: src/Module/Admin/Site.php:545
+#: src/Module/Admin/Site.php:543
msgid "Relay scope"
msgstr ""
-#: src/Module/Admin/Site.php:545
+#: src/Module/Admin/Site.php:543
msgid ""
"Can be \"all\" or \"tags\". \"all\" means that every public post should be "
"received. \"tags\" means that only posts with selected tags should be "
"received."
msgstr ""
-#: src/Module/Admin/Site.php: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
msgid "Disabled"
msgstr ""
-#: src/Module/Admin/Site.php:545
+#: src/Module/Admin/Site.php:543
msgid "all"
msgstr ""
-#: src/Module/Admin/Site.php:545
+#: src/Module/Admin/Site.php:543
msgid "tags"
msgstr ""
-#: src/Module/Admin/Site.php:546
+#: src/Module/Admin/Site.php:544
msgid "Server tags"
msgstr ""
-#: src/Module/Admin/Site.php:546
+#: src/Module/Admin/Site.php:544
msgid "Comma separated list of tags for the \"tags\" subscription."
msgstr ""
-#: src/Module/Admin/Site.php:547
+#: src/Module/Admin/Site.php:545
msgid "Deny Server tags"
msgstr ""
-#: src/Module/Admin/Site.php:547
+#: src/Module/Admin/Site.php:545
msgid "Comma separated list of tags that are rejected."
msgstr ""
-#: src/Module/Admin/Site.php:548
+#: src/Module/Admin/Site.php:546
msgid "Allow user tags"
msgstr ""
-#: src/Module/Admin/Site.php:548
+#: src/Module/Admin/Site.php:546
msgid ""
"If enabled, the tags from the saved searches will used for the \"tags\" "
"subscription in addition to the \"relay_server_tags\"."
msgstr ""
-#: src/Module/Admin/Site.php:551
+#: src/Module/Admin/Site.php:549
msgid "Start Relocation"
msgstr ""
@@ -6733,7 +6733,7 @@ msgid_plural ""
msgstr[0] ""
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"
msgstr ""
@@ -6807,110 +6807,110 @@ msgid_plural "%d contacts edited."
msgstr[0] ""
msgstr[1] ""
-#: src/Module/Contact.php:310
+#: src/Module/Contact.php:312
msgid "Show all contacts"
msgstr ""
-#: src/Module/Contact.php:318
+#: src/Module/Contact.php:320
msgid "Only show pending contacts"
msgstr ""
-#: src/Module/Contact.php:326
+#: src/Module/Contact.php:328
msgid "Only show blocked contacts"
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
msgid "Ignored"
msgstr ""
-#: src/Module/Contact.php:334
+#: src/Module/Contact.php:336
msgid "Only show ignored contacts"
msgstr ""
-#: src/Module/Contact.php:339 src/Module/Contact.php:379
+#: src/Module/Contact.php:341 src/Module/Contact.php:381
msgid "Archived"
msgstr ""
-#: src/Module/Contact.php:342
+#: src/Module/Contact.php:344
msgid "Only show archived contacts"
msgstr ""
-#: src/Module/Contact.php:347 src/Module/Contact.php:377
+#: src/Module/Contact.php:349 src/Module/Contact.php:379
msgid "Hidden"
msgstr ""
-#: src/Module/Contact.php:350
+#: src/Module/Contact.php:352
msgid "Only show hidden contacts"
msgstr ""
-#: src/Module/Contact.php:358
+#: src/Module/Contact.php:360
msgid "Organize your contact groups"
msgstr ""
-#: src/Module/Contact.php:390
+#: src/Module/Contact.php:392
msgid "Search your contacts"
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
msgid "Results for: %s"
msgstr ""
-#: src/Module/Contact.php:398
+#: src/Module/Contact.php:400
msgid "Update"
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
msgid "Unignore"
msgstr ""
-#: src/Module/Contact.php:402
+#: src/Module/Contact.php:404
msgid "Batch Actions"
msgstr ""
-#: src/Module/Contact.php:437
+#: src/Module/Contact.php:439
msgid "Conversations started by this contact"
msgstr ""
-#: src/Module/Contact.php:442
+#: src/Module/Contact.php:444
msgid "Posts and Comments"
msgstr ""
-#: src/Module/Contact.php:453
+#: src/Module/Contact.php:455
msgid "Posts containing media objects"
msgstr ""
-#: src/Module/Contact.php:468
+#: src/Module/Contact.php:470
msgid "View all known contacts"
msgstr ""
-#: src/Module/Contact.php:478
+#: src/Module/Contact.php:480
msgid "Advanced Contact Settings"
msgstr ""
-#: src/Module/Contact.php:512
+#: src/Module/Contact.php:514
msgid "Mutual Friendship"
msgstr ""
-#: src/Module/Contact.php:516
+#: src/Module/Contact.php:518
msgid "is a fan of yours"
msgstr ""
-#: src/Module/Contact.php:520
+#: src/Module/Contact.php:522
msgid "you are a fan of"
msgstr ""
-#: src/Module/Contact.php:538
+#: src/Module/Contact.php:540
msgid "Pending outgoing contact request"
msgstr ""
-#: src/Module/Contact.php:540
+#: src/Module/Contact.php:542
msgid "Pending incoming contact request"
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
msgid "Visit %s's profile [%s]"
msgstr ""
@@ -7256,50 +7256,50 @@ msgstr ""
msgid "Yes"
msgstr ""
-#: src/Module/Conversation/Community.php:61
+#: src/Module/Conversation/Community.php:76
msgid ""
"This community stream shows all public posts received by this node. They may "
"not reflect the opinions of this node’s users."
msgstr ""
-#: src/Module/Conversation/Community.php:76
+#: src/Module/Conversation/Community.php:89
msgid "Local Community"
msgstr ""
-#: src/Module/Conversation/Community.php:79
+#: src/Module/Conversation/Community.php:92
msgid "Posts from local users on this server"
msgstr ""
-#: src/Module/Conversation/Community.php:87
+#: src/Module/Conversation/Community.php:100
msgid "Global Community"
msgstr ""
-#: src/Module/Conversation/Community.php:90
+#: src/Module/Conversation/Community.php:103
msgid "Posts from users of the whole federated network"
msgstr ""
-#: src/Module/Conversation/Community.php:123
+#: src/Module/Conversation/Community.php:136
msgid "Own Contacts"
msgstr ""
-#: src/Module/Conversation/Community.php:127
+#: src/Module/Conversation/Community.php:140
msgid "Include"
msgstr ""
-#: src/Module/Conversation/Community.php:128
+#: src/Module/Conversation/Community.php:141
msgid "Hide"
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
msgid "No results."
msgstr ""
-#: src/Module/Conversation/Community.php:201
+#: src/Module/Conversation/Community.php:214
msgid "Community option not available."
msgstr ""
-#: src/Module/Conversation/Community.php:217
+#: src/Module/Conversation/Community.php:230
msgid "Not available."
msgstr ""
@@ -8094,40 +8094,46 @@ msgid ""
"important, please visit http://friendi.ca"
msgstr ""
-#: src/Module/Item/Compose.php:50
+#: src/Module/Item/Compose.php:85
msgid "Please enter a post body."
msgstr ""
-#: src/Module/Item/Compose.php:63
+#: src/Module/Item/Compose.php:98
msgid "This feature is only available with the frio theme."
msgstr ""
-#: src/Module/Item/Compose.php:90
+#: src/Module/Item/Compose.php:122
msgid "Compose new personal note"
msgstr ""
-#: src/Module/Item/Compose.php:99
+#: src/Module/Item/Compose.php:131
msgid "Compose new post"
msgstr ""
-#: src/Module/Item/Compose.php:153
+#: src/Module/Item/Compose.php:187
msgid "Visibility"
msgstr ""
-#: src/Module/Item/Compose.php:174
+#: src/Module/Item/Compose.php:201
msgid "Clear the location"
msgstr ""
-#: src/Module/Item/Compose.php:175
+#: src/Module/Item/Compose.php:202
msgid "Location services are unavailable on your device"
msgstr ""
-#: src/Module/Item/Compose.php:176
+#: src/Module/Item/Compose.php:203
msgid ""
"Location services are disabled. Please check the website's permissions on "
"your device"
msgstr ""
+#: src/Module/Item/Compose.php:209
+msgid ""
+"You can make this page always open when you use the New Post button in the "
+"Theme Customization settings."
+msgstr ""
+
#: src/Module/Item/Follow.php:52
msgid "Unable to follow this item."
msgstr ""
@@ -8404,19 +8410,19 @@ msgstr ""
#: 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/Protocol/Feed.php:1025 src/Protocol/OStatus.php:1046
+#: src/Protocol/Feed.php:1026 src/Protocol/OStatus.php:1046
#, php-format
msgid "%s's timeline"
msgstr ""
#: 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
msgid "%s's posts"
msgstr ""
#: 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
msgid "%s's comments"
msgstr ""
@@ -9456,7 +9462,7 @@ msgid "Content Settings"
msgstr ""
#: 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
msgid "Theme settings"
msgstr ""
@@ -11119,113 +11125,124 @@ msgstr ""
msgid "Variations"
msgstr ""
-#: view/theme/frio/config.php:142
+#: view/theme/frio/config.php:153
msgid "Light (Accented)"
msgstr ""
-#: view/theme/frio/config.php:143
+#: view/theme/frio/config.php:154
msgid "Dark (Accented)"
msgstr ""
-#: view/theme/frio/config.php:144
+#: view/theme/frio/config.php:155
msgid "Black (Accented)"
msgstr ""
-#: view/theme/frio/config.php:156
+#: view/theme/frio/config.php:167
msgid "Note"
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"
msgstr ""
-#: view/theme/frio/config.php:162
+#: view/theme/frio/config.php:173
msgid "Custom"
msgstr ""
-#: view/theme/frio/config.php:163
+#: view/theme/frio/config.php:174
msgid "Legacy"
msgstr ""
-#: view/theme/frio/config.php:164
+#: view/theme/frio/config.php:175
msgid "Accented"
msgstr ""
-#: view/theme/frio/config.php:165
+#: view/theme/frio/config.php:176
msgid "Select color scheme"
msgstr ""
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Select scheme accent"
msgstr ""
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Blue"
msgstr ""
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Red"
msgstr ""
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Purple"
msgstr ""
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Green"
msgstr ""
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Pink"
msgstr ""
-#: view/theme/frio/config.php:167
+#: view/theme/frio/config.php:178
msgid "Copy or paste schemestring"
msgstr ""
-#: view/theme/frio/config.php:167
+#: view/theme/frio/config.php:178
msgid ""
"You can copy this string to share your theme with others. Pasting here "
"applies the schemestring"
msgstr ""
-#: view/theme/frio/config.php:168
+#: view/theme/frio/config.php:179
msgid "Navigation bar background color"
msgstr ""
-#: view/theme/frio/config.php:169
+#: view/theme/frio/config.php:180
msgid "Navigation bar icon color "
msgstr ""
-#: view/theme/frio/config.php:170
+#: view/theme/frio/config.php:181
msgid "Link color"
msgstr ""
-#: view/theme/frio/config.php:171
+#: view/theme/frio/config.php:182
msgid "Set the background color"
msgstr ""
-#: view/theme/frio/config.php:172
+#: view/theme/frio/config.php:183
msgid "Content background opacity"
msgstr ""
-#: view/theme/frio/config.php:173
+#: view/theme/frio/config.php:184
msgid "Set the background image"
msgstr ""
-#: view/theme/frio/config.php:174
+#: view/theme/frio/config.php:185
msgid "Background image style"
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 Compose page "
+"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"
msgstr ""
-#: view/theme/frio/config.php:183
+#: view/theme/frio/config.php:196
msgid "Login page background color"
msgstr ""
-#: view/theme/frio/config.php:183
+#: view/theme/frio/config.php:196
msgid "Leave background image and color empty for theme defaults"
msgstr ""
diff --git a/view/lang/de/messages.po b/view/lang/de/messages.po
index 3e8281fc3f..c36cab7a6c 100644
--- a/view/lang/de/messages.po
+++ b/view/lang/de/messages.po
@@ -49,7 +49,7 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\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"
"Last-Translator: Tobias Diekershoff , 2016-2022\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
#: src/Content/Nav.php:260 src/Module/BaseProfile.php:84
-#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:234
-#: view/theme/frio/theme.php:238
+#: src/Module/BaseProfile.php:95 view/theme/frio/theme.php:240
+#: view/theme/frio/theme.php:244
msgid "Events"
msgstr "Veranstaltungen"
@@ -108,17 +108,17 @@ msgid "today"
msgstr "Heute"
#: 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"
msgstr "Monat"
#: 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"
msgstr "Woche"
#: 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"
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."
#: 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/photos.php:160 mod/photos.php:891 mod/repair_ostatus.php:31
#: 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/Register.php:77 src/Module/Register.php:90
#: src/Module/Register.php:206 src/Module/Register.php:245
-#: src/Module/Search/Directory.php:37 src/Module/Settings/Account.php:49
-#: src/Module/Settings/Account.php:409 src/Module/Settings/Delegation.php:42
+#: src/Module/Search/Directory.php:37 src/Module/Settings/Account.php:50
+#: 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/Display.php:120
#: src/Module/Settings/Profile/Photo/Crop.php:166
@@ -206,7 +206,7 @@ msgid "Save"
msgstr "Speichern"
#: 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..."
msgstr "lädt..."
@@ -253,7 +253,7 @@ msgid "audio link"
msgstr "Audio-Link"
#: 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"
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/photos.php:1489 mod/wallmessage.php:142
-#: src/Content/Conversation.php:368 src/Content/Conversation.php:713
-#: src/Module/Item/Compose.php:177 src/Object/Post.php:538
+#: src/Content/Conversation.php:368 src/Content/Conversation.php:714
+#: src/Module/Item/Compose.php:204 src/Object/Post.php:538
msgid "Please wait"
msgstr "Bitte warten"
@@ -289,12 +289,12 @@ msgid "Public post"
msgstr "Öffentlicher Beitrag"
#: mod/editpost.php:120 src/Content/Conversation.php:357
-#: src/Module/Item/Compose.php:178
+#: src/Module/Item/Compose.php:205
msgid "Set title"
msgstr "Titel setzen"
#: 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)"
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/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"
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/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:386
#: src/Module/Contact/Revoke.php:108 src/Module/RemoteFollow.php:127
@@ -317,37 +317,37 @@ msgid "Cancel"
msgstr "Abbrechen"
#: 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"
msgstr "Fett"
#: 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"
msgstr "Kursiv"
#: 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"
msgstr "Unterstrichen"
#: 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"
msgstr "Zitat"
#: 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"
msgstr "Code"
#: 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"
msgstr "Link"
#: 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"
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:1336 mod/photos.php:1392 mod/photos.php:1466
#: 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/Babel.php:313 src/Module/Debug/Localtime.php:64
#: src/Module/Debug/Probe.php:54 src/Module/Debug/WebFinger.php:51
#: src/Module/Delegation.php:148 src/Module/FriendSuggest.php:144
#: src/Module/Install.php:252 src/Module/Install.php:294
#: 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
-#: 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
msgid "Submit"
msgstr "Senden"
@@ -467,7 +467,7 @@ msgstr "Senden"
msgid "Basic"
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
msgid "Advanced"
msgstr "Erweitert"
@@ -477,16 +477,16 @@ msgid "Failed to remove event"
msgstr "Entfernen der Veranstaltung fehlgeschlagen"
#: 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"
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
msgid "Upload"
msgstr "Hochladen"
-#: mod/fbrowser.php:142
+#: mod/fbrowser.php:143
msgid "Files"
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."
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
-#: src/Model/Contact.php:1114 src/Model/Contact.php:1126
+#: mod/follow.php:138 src/Content/Item.php:400 src/Content/Widget.php:80
+#: src/Model/Contact.php:1169 src/Model/Contact.php:1180
#: view/theme/vier/theme.php:181
msgid "Connect/Follow"
msgstr "Verbinden/Folgen"
@@ -548,7 +548,7 @@ msgid "Add a personal note:"
msgstr "Eine persönliche Notiz beifügen:"
#: 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"
msgstr "Statusnachrichten und Beiträge"
@@ -564,19 +564,19 @@ msgstr "Konnte den Originalbeitrag nicht finden."
msgid "Empty post discarded."
msgstr "Leerer Beitrag wurde verworfen."
-#: mod/item.php:682
+#: mod/item.php:677
msgid "Post updated."
msgstr "Beitrag aktualisiert."
-#: mod/item.php:692 mod/item.php:697
+#: mod/item.php:687 mod/item.php:692
msgid "Item wasn't stored."
msgstr "Eintrag wurde nicht gespeichert"
-#: mod/item.php:708
+#: mod/item.php:703
msgid "Item couldn't be fetched."
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/Debug/ItemBody.php:57
msgid "Item not found."
@@ -754,7 +754,7 @@ msgstr "Konnte Nachrichten nicht abrufen."
msgid "Discard"
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"
msgstr "Nachrichten"
@@ -1108,7 +1108,7 @@ msgid "Rotate CCW (left)"
msgstr "Drehen EUS (links)"
#: 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
msgid "This is you"
msgstr "Das bist du"
@@ -1118,12 +1118,12 @@ msgstr "Das bist du"
msgid "Comment"
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
msgid "Select"
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/Blocked.php:140 src/Module/Admin/Users/Index.php:153
msgid "Delete"
@@ -1170,7 +1170,7 @@ msgstr "Ungültige Anfrage."
msgid "Contact not found."
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]"
msgstr "[Friendica-Systembenachrichtigung]"
@@ -1247,8 +1247,8 @@ msgstr "Autorisierung entziehen"
#: 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/Site.php:436 src/Module/Admin/Themes/Index.php:113
-#: src/Module/Admin/Tos.php:83 src/Module/Settings/Account.php:562
-#: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:193
+#: src/Module/Admin/Tos.php:83 src/Module/Settings/Account.php:563
+#: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:201
msgid "Save Settings"
msgstr "Einstellungen speichern"
@@ -1452,15 +1452,15 @@ msgstr "Keine Vorschläge verfügbar. Falls der Server frisch aufgesetzt wurde,
msgid "Friend Suggestions"
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"
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"
msgstr "Status"
-#: mod/tagger.php:111 src/Content/Item.php:368
+#: mod/tagger.php:111 src/Content/Item.php:314
#, php-format
msgid "%1$s tagged %2$s's %3$s with %4$s"
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."
msgstr "Entschuldigung, aber die Webseite ist derzeit nicht erreichbar."
-#: src/App/Page.php:276
+#: src/App/Page.php:281
msgid "Delete this item?"
msgstr "Diesen Beitrag löschen?"
-#: src/App/Page.php:277
+#: src/App/Page.php:282
msgid ""
"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."
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"
msgstr "mobile Ansicht umschalten"
@@ -1636,18 +1636,18 @@ msgid "All contacts"
msgstr "Alle Kontakte"
#: 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
msgid "Followers"
msgstr "Folgende"
#: src/BaseModule.php:429 src/Content/Widget.php:236
-#: src/Module/Contact.php:368
+#: src/Module/Contact.php:371
msgid "Following"
msgstr "Gefolgte"
#: src/BaseModule.php:434 src/Content/Widget.php:237
-#: src/Module/Contact.php:369
+#: src/Module/Contact.php:372
msgid "Mutual friends"
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"
msgstr "Der Kontakt wurde von diesem Knoten geblockt"
-#: src/Console/MergeContacts.php:74
+#: src/Console/MergeContacts.php:75
#, php-format
msgid "%d %s, %d duplicates."
msgstr "%d %s, Duplikat %d."
-#: src/Console/MergeContacts.php:77
+#: src/Console/MergeContacts.php:78
#, php-format
msgid "uri-id is empty for contact %s."
msgstr "URI-ID ist leer für den Kontakt %s."
-#: src/Console/MergeContacts.php:90
+#: src/Console/MergeContacts.php:91
#, php-format
msgid "No valid first contact found for uri-id %d."
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
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)."
-#: src/Console/MergeContacts.php:105
+#: src/Console/MergeContacts.php:106
#, php-format
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)."
-#: src/Console/MergeContacts.php:141
+#: src/Console/MergeContacts.php:142
#, php-format
msgid "Deletion of id %d failed"
msgstr "Löschung der ID %d fehlgeschlagen"
-#: src/Console/MergeContacts.php:143
+#: src/Console/MergeContacts.php:144
#, php-format
msgid "Deletion of id %d was successful"
msgstr "Löschug der ID %d war erfolgreich"
-#: src/Console/MergeContacts.php:149
+#: src/Console/MergeContacts.php:150
#, php-format
msgid "Updating \"%s\" in \"%s\" from %d to %d"
msgstr "Aktualisieren \"%s\" nach \"%s\" von %d nach %d"
-#: src/Console/MergeContacts.php:151
+#: src/Console/MergeContacts.php:152
msgid " - found"
msgstr "- gefunden"
-#: src/Console/MergeContacts.php:158
+#: src/Console/MergeContacts.php:159
msgid " - failed"
msgstr "- fehlgeschlagen"
-#: src/Console/MergeContacts.php:160
+#: src/Console/MergeContacts.php:161
msgid " - success"
msgstr "- Erfolg"
-#: src/Console/MergeContacts.php:164
+#: src/Console/MergeContacts.php:165
msgid " - deleted"
msgstr "- gelöscht"
-#: src/Console/MergeContacts.php:167
+#: src/Console/MergeContacts.php:168
msgid " - done"
msgstr "- erledigt"
@@ -1806,12 +1806,12 @@ msgid "Enter new password: "
msgstr "Neues Passwort eingeben:"
#: 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."
msgstr "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."
#: 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."
msgstr "Passwort geändert."
@@ -1990,7 +1990,7 @@ msgid "%s attends maybe."
msgstr "%s nimmt eventuell teil."
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260
-#: src/Content/Conversation.php:873
+#: src/Content/Conversation.php:874
#, php-format
msgid "%s reshared this."
msgstr "%s hat dies geteilt"
@@ -2063,7 +2063,7 @@ msgstr "%2$d Personen haben dies geteilt"
msgid "Visible to everybody"
msgstr "Für jedermann 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
msgid "Please enter a image/video/audio/webpage URL:"
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)?"
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"
msgstr "Erstellt am"
@@ -2096,7 +2096,7 @@ msgstr "Neuer Beitrag"
msgid "Share"
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
msgid "Image"
msgstr "Bild"
@@ -2105,119 +2105,119 @@ msgstr "Bild"
msgid "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"
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"
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
#, php-format
msgid "View %s's profile @ %s"
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:"
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:"
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
msgid "%s from %s"
msgstr "%s von %s"
-#: src/Content/Conversation.php:711
+#: src/Content/Conversation.php:712
msgid "View in context"
msgstr "Im Zusammenhang betrachten"
-#: src/Content/Conversation.php:776
+#: src/Content/Conversation.php:777
msgid "remove"
msgstr "löschen"
-#: src/Content/Conversation.php:780
+#: src/Content/Conversation.php:781
msgid "Delete Selected Items"
msgstr "Lösche die markierten Beiträge"
-#: src/Content/Conversation.php:845 src/Content/Conversation.php:848
-#: src/Content/Conversation.php:851 src/Content/Conversation.php:854
+#: src/Content/Conversation.php:846 src/Content/Conversation.php:849
+#: src/Content/Conversation.php:852 src/Content/Conversation.php:855
#, php-format
msgid "You had been addressed (%s)."
msgstr "Du wurdest angeschrieben (%s)."
-#: src/Content/Conversation.php:857
+#: src/Content/Conversation.php:858
#, php-format
msgid "You are following %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."
msgstr "Du folgst einem oder mehreren Hashtags dieses Beitrags."
-#: src/Content/Conversation.php:875
+#: src/Content/Conversation.php:876
msgid "Reshared"
msgstr "Geteilt"
-#: src/Content/Conversation.php:875
+#: src/Content/Conversation.php:876
#, php-format
msgid "Reshared by %s <%s>"
msgstr "Geteilt von %s <%s>"
-#: src/Content/Conversation.php:878
+#: src/Content/Conversation.php:879
#, php-format
msgid "%s is participating in this thread."
msgstr "%s ist an der Unterhaltung beteiligt."
-#: src/Content/Conversation.php:881
+#: src/Content/Conversation.php:882
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"
msgstr "Globaler Beitrag"
-#: src/Content/Conversation.php:887
+#: src/Content/Conversation.php:888
msgid "Sent via an relay server"
msgstr "Über einen Relay-Server gesendet"
-#: src/Content/Conversation.php:887
+#: src/Content/Conversation.php:888
#, php-format
msgid "Sent via the relay server %s <%s>"
msgstr "Über den Relay-Server %s <%s> gesendet"
-#: src/Content/Conversation.php:890
+#: src/Content/Conversation.php:891
msgid "Fetched"
msgstr "Abgerufen"
-#: src/Content/Conversation.php:890
+#: src/Content/Conversation.php:891
#, php-format
msgid "Fetched because of %s <%s>"
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."
-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"
msgstr "Lokale Zustellung"
-#: src/Content/Conversation.php:899
+#: src/Content/Conversation.php:900
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"
-msgstr ""
+msgstr "Verteilt"
-#: src/Content/Conversation.php:905
+#: src/Content/Conversation.php:906
msgid "Pushed to us"
-msgstr ""
+msgstr "Zu uns gepusht"
#: src/Content/Feature.php:96
msgid "General Features"
@@ -2335,56 +2335,51 @@ msgstr "weniger anzeigen"
msgid "show more"
msgstr "mehr anzeigen"
-#: src/Content/Item.php:306
-#, php-format
-msgid "%1$s poked %2$s"
-msgstr "%1$s stupste %2$s"
-
-#: src/Content/Item.php:345 src/Model/Item.php:2767
+#: src/Content/Item.php:291 src/Model/Item.php:2853
msgid "event"
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"
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"
msgstr "Status anschauen"
-#: src/Content/Item.php:440 src/Content/Item.php:462
-#: src/Model/Contact.php:1053 src/Model/Contact.php:1111
-#: src/Model/Contact.php:1120 src/Module/Directory.php:158
+#: src/Content/Item.php:385 src/Content/Item.php:403
+#: src/Model/Contact.php:1112 src/Model/Contact.php:1166
+#: src/Model/Contact.php:1175 src/Module/Directory.php:158
#: src/Module/Settings/Profile/Index.php:225
msgid "View Profile"
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"
msgstr "Bilder anschauen"
-#: src/Content/Item.php:442 src/Model/Contact.php:1112
-#: src/Model/Contact.php:1122
+#: src/Content/Item.php:387 src/Model/Contact.php:1167
+#: src/Model/Contact.php:1177
msgid "Network Posts"
msgstr "Netzwerkbeiträge"
-#: src/Content/Item.php:443 src/Model/Contact.php:1113
-#: src/Model/Contact.php:1123
+#: src/Content/Item.php:388 src/Model/Contact.php:1168
+#: src/Model/Contact.php:1178
msgid "View Contact"
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"
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/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
msgid "Block"
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/Notifications/Introductions.php:132
#: src/Module/Notifications/Introductions.php:204
@@ -2392,14 +2387,10 @@ msgstr "Sperren"
msgid "Ignore"
msgstr "Ignorieren"
-#: src/Content/Item.php:450 src/Object/Post.php:455
+#: src/Content/Item.php:395 src/Object/Post.php:455
msgid "Languages"
msgstr "Sprachen"
-#: src/Content/Item.php:454 src/Model/Contact.php:1125
-msgid "Poke"
-msgstr "Anstupsen"
-
#: src/Content/Nav.php:90
msgid "Nothing new here"
msgstr "Keine Neuigkeiten"
@@ -2434,42 +2425,42 @@ msgid "Sign in"
msgstr "Anmelden"
#: src/Content/Nav.php:192 src/Module/BaseProfile.php:56
-#: src/Module/Contact.php:433 src/Module/Contact/Profile.php:380
-#: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:230
+#: src/Module/Contact.php:436 src/Module/Contact/Profile.php:380
+#: src/Module/Settings/TwoFactor/Index.php:120 view/theme/frio/theme.php:236
msgid "Status"
msgstr "Status"
#: 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"
msgstr "Deine Beiträge und Unterhaltungen"
#: 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/Welcome.php:57 view/theme/frio/theme.php:231
+#: src/Module/Welcome.php:57 view/theme/frio/theme.php:237
msgid "Profile"
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"
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"
msgstr "Deine Fotos"
#: src/Content/Nav.php:195 src/Module/BaseProfile.php:72
-#: src/Module/BaseProfile.php:75 src/Module/Contact.php:449
-#: view/theme/frio/theme.php:233
+#: src/Module/BaseProfile.php:75 src/Module/Contact.php:452
+#: view/theme/frio/theme.php:239
msgid "Media"
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"
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"
msgstr "Deine Ereignisse"
@@ -2534,8 +2525,8 @@ msgstr "Tags"
#: src/Content/Nav.php:237 src/Content/Nav.php:296
#: src/Content/Text/HTML.php:899 src/Module/BaseProfile.php:125
-#: src/Module/BaseProfile.php:128 src/Module/Contact.php:370
-#: src/Module/Contact.php:464 view/theme/frio/theme.php:241
+#: src/Module/BaseProfile.php:128 src/Module/Contact.php:373
+#: src/Module/Contact.php:467 view/theme/frio/theme.php:247
msgid "Contacts"
msgstr "Kontakte"
@@ -2548,7 +2539,7 @@ msgid "Conversations on this and other servers"
msgstr "Unterhaltungen auf diesem und anderen Servern"
#: 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"
msgstr "Ereignisse und Kalender"
@@ -2578,11 +2569,11 @@ msgstr "Nutzungsbedingungen"
msgid "Terms of Service of this Friendica instance"
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"
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"
msgstr "Unterhaltungen Deiner Kontakte"
@@ -2607,7 +2598,7 @@ msgstr "Alle Benachrichtigungen anzeigen"
msgid "Mark all system notifications as seen"
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"
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/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"
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"
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"
msgstr "Freunde und Kontakte verwalten/bearbeiten"
@@ -2681,38 +2672,38 @@ msgstr "nächste"
msgid "last"
msgstr "letzte"
-#: src/Content/Text/BBCode.php:998 src/Content/Text/BBCode.php:1833
-#: src/Content/Text/BBCode.php:1834
+#: src/Content/Text/BBCode.php:1002 src/Content/Text/BBCode.php:1883
+#: src/Content/Text/BBCode.php:1884
msgid "Image/photo"
msgstr "Bild/Foto"
-#: src/Content/Text/BBCode.php:1188
+#: src/Content/Text/BBCode.php:1238
#, php-format
msgid "%2$s %3$s"
msgstr "%2$s%3$s"
-#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3343
-#: src/Model/Item.php:3349 src/Model/Item.php:3350
+#: src/Content/Text/BBCode.php:1263 src/Model/Item.php:3429
+#: src/Model/Item.php:3435 src/Model/Item.php:3436
msgid "Link to source"
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"
msgstr "Zum Öffnen/Schließen klicken"
-#: src/Content/Text/BBCode.php:1782
+#: src/Content/Text/BBCode.php:1832
msgid "$1 wrote:"
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"
msgstr "Verschlüsselter Inhalt"
-#: src/Content/Text/BBCode.php:2057
+#: src/Content/Text/BBCode.php:2109
msgid "Invalid source protocol"
msgstr "Ungültiges Quell-Protokoll"
-#: src/Content/Text/BBCode.php:2072
+#: src/Content/Text/BBCode.php:2124
msgid "Invalid link protocol"
msgstr "Ungültiges Link-Protokoll"
@@ -2764,7 +2755,7 @@ msgstr "Name oder Interessen eingeben"
msgid "Examples: Robert Morgenstein, Fishing"
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
msgid "Find"
msgstr "Finde"
@@ -2791,7 +2782,7 @@ msgid "Local Directory"
msgstr "Lokales Verzeichnis"
#: 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"
msgstr "Gruppen"
@@ -2803,7 +2794,7 @@ msgstr "Jeder"
msgid "Relationships"
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
msgid "All Contacts"
msgstr "Alle Kontakte"
@@ -2847,11 +2838,11 @@ msgstr "Personen"
msgid "Organisations"
msgstr "Organisationen"
-#: src/Content/Widget.php:523 src/Model/Contact.php:1547
+#: src/Content/Widget.php:523 src/Model/Contact.php:1605
msgid "News"
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"
msgstr "Kontenarten"
@@ -3291,32 +3282,37 @@ msgid "Could not connect to database."
msgstr "Verbindung zur Datenbank gescheitert."
#: src/Core/L10n.php:403 src/Model/Event.php:428
-#: src/Module/Settings/Display.php:182
+#: src/Module/Settings/Display.php:184
msgid "Monday"
msgstr "Montag"
#: src/Core/L10n.php:403 src/Model/Event.php:429
+#: src/Module/Settings/Display.php:185
msgid "Tuesday"
msgstr "Dienstag"
#: src/Core/L10n.php:403 src/Model/Event.php:430
+#: src/Module/Settings/Display.php:186
msgid "Wednesday"
msgstr "Mittwoch"
#: src/Core/L10n.php:403 src/Model/Event.php:431
+#: src/Module/Settings/Display.php:187
msgid "Thursday"
msgstr "Donnerstag"
#: src/Core/L10n.php:403 src/Model/Event.php:432
+#: src/Module/Settings/Display.php:188
msgid "Friday"
msgstr "Freitag"
#: src/Core/L10n.php:403 src/Model/Event.php:433
+#: src/Module/Settings/Display.php:189
msgid "Saturday"
msgstr "Samstag"
#: src/Core/L10n.php:403 src/Model/Event.php:427
-#: src/Module/Settings/Display.php:182
+#: src/Module/Settings/Display.php:183
msgid "Sunday"
msgstr "Sonntag"
@@ -3440,57 +3436,9 @@ msgstr "Nov"
msgid "Dec"
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:145 src/Core/Renderer.php:179
-#: src/Render/FriendicaSmartyEngine.php:57
+#: src/Render/FriendicaSmartyEngine.php:60
msgid ""
"Friendica can't display this page at the moment, please contact the "
"administrator."
@@ -3683,81 +3631,81 @@ msgstr "Interner Serverfehler"
msgid "Legacy module file not found: %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"
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:202
msgid "Approve"
msgstr "Genehmigen"
-#: src/Model/Contact.php:1543
+#: src/Model/Contact.php:1601
msgid "Organisation"
msgstr "Organisation"
-#: src/Model/Contact.php:1551
+#: src/Model/Contact.php:1609
msgid "Forum"
msgstr "Forum"
-#: src/Model/Contact.php:2640
+#: src/Model/Contact.php:2795
msgid "Disallowed profile 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"
msgstr "Blockierte Domain"
-#: src/Model/Contact.php:2650
+#: src/Model/Contact.php:2805
msgid "Connect URL missing."
msgstr "Connect-URL fehlt"
-#: src/Model/Contact.php:2659
+#: src/Model/Contact.php:2814
msgid ""
"The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page."
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."
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."
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."
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."
msgstr "Zu dieser Adresse konnte keine passende Browser-URL gefunden werden."
-#: src/Model/Contact.php:2712
+#: src/Model/Contact.php:2867
msgid ""
"Unable to match @-style Identity Address with a known protocol or email "
"contact."
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."
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 ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
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 ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
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."
msgstr "Konnte die Kontaktinformationen nicht empfangen."
@@ -3877,66 +3825,66 @@ msgstr "Gruppenname:"
msgid "Edit groups"
msgstr "Gruppen bearbeiten"
-#: src/Model/Item.php:1865
+#: src/Model/Item.php:1965
#, php-format
msgid "Detected languages in this post:\\n%s"
msgstr "Erkannte Sprachen in diesem Beitrag:\\n%s"
-#: src/Model/Item.php:2771
+#: src/Model/Item.php:2857
msgid "activity"
msgstr "Aktivität"
-#: src/Model/Item.php:2773
+#: src/Model/Item.php:2859
msgid "comment"
msgstr "Kommentar"
-#: src/Model/Item.php:2776
+#: src/Model/Item.php:2862
msgid "post"
msgstr "Beitrag"
-#: src/Model/Item.php:2892
+#: src/Model/Item.php:2978
#, php-format
msgid "Content warning: %s"
msgstr "Inhaltswarnung: %s"
-#: src/Model/Item.php:3255
+#: src/Model/Item.php:3341
msgid "bytes"
msgstr "Byte"
-#: src/Model/Item.php:3286
+#: src/Model/Item.php:3372
#, php-format
msgid "%2$s (%3$d%%, %1$d vote)"
msgid_plural "%2$s (%3$d%%, %1$d votes)"
msgstr[0] "%2$s (%3$d%%, %1$d Stimme)"
msgstr[1] "%2$s (%3$d%%, %1$d Stimmen)"
-#: src/Model/Item.php:3288
+#: src/Model/Item.php:3374
#, php-format
msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)"
msgstr[0] "%2$s (%1$d Stimme)"
msgstr[1] "%2$s (%1$d Stimmen)"
-#: src/Model/Item.php:3293
+#: src/Model/Item.php:3379
#, php-format
msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s"
msgstr[0] "%d Stimme, Abstimmung endet: %s"
msgstr[1] "%d Stimmen, Abstimmung endet: %s"
-#: src/Model/Item.php:3295
+#: src/Model/Item.php:3381
#, php-format
msgid "%d voter."
msgid_plural "%d voters."
msgstr[0] "%d Stimme."
msgstr[1] "%d Stimmen."
-#: src/Model/Item.php:3297
+#: src/Model/Item.php:3383
#, php-format
msgid "Poll end: %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"
msgstr "Auf separater Seite ansehen"
@@ -4329,12 +4277,12 @@ msgid ""
"\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."
-#: src/Moderation/DomainPatternBlocklist.php:218
+#: src/Moderation/DomainPatternBlocklist.php:228
#, php-format
msgid "[%s] Notice of remote server domain pattern block list update"
msgstr "[%s] Die Liste der blockierten Domain Muster wurde aktualisiert"
-#: src/Moderation/DomainPatternBlocklist.php:220
+#: src/Moderation/DomainPatternBlocklist.php:230
#, php-format
msgid ""
"Dear %s,\n"
@@ -4374,7 +4322,7 @@ msgstr "Einschalten"
#: src/Module/Admin/Blocklist/Server/Add.php:121
#: src/Module/Admin/Blocklist/Server/Import.php:117
#: 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/Queue.php:72 src/Module/Admin/Site.php:433
#: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:233
@@ -4441,8 +4389,8 @@ msgstr "Aktive"
msgid "List of active accounts"
msgstr "Liste der aktiven Benutzerkonten"
-#: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:314
-#: src/Module/Contact.php:374
+#: src/Module/Admin/BaseUsers.php:67 src/Module/Contact.php:317
+#: src/Module/Contact.php:377
msgid "Pending"
msgstr "Ausstehend"
@@ -4450,8 +4398,8 @@ msgstr "Ausstehend"
msgid "List of pending registrations"
msgstr "Liste der anstehenden Benutzerkonten"
-#: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:322
-#: src/Module/Contact.php:375
+#: src/Module/Admin/BaseUsers.php:75 src/Module/Contact.php:325
+#: src/Module/Contact.php:378
msgid "Blocked"
msgstr "Geblockt"
@@ -4467,19 +4415,19 @@ msgstr "Gelöscht"
msgid "List of pending user deletions"
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"
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"
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"
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"
msgstr "Automatische Freunde-Seite"
@@ -4487,19 +4435,19 @@ msgstr "Automatische Freunde-Seite"
msgid "Private 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"
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"
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"
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"
msgstr "Gemeinschaftsforum"
@@ -4545,7 +4493,7 @@ msgstr "Auswahl aufheben"
#: src/Module/Admin/Blocklist/Contact.php:101
#: 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
msgid "Unblock"
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:84
msgid "Error importing pattern file"
-msgstr ""
+msgstr "Fehler beim Import der Muster Datei"
#: src/Module/Admin/Blocklist/Server/Import.php:90
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
#, php-format
msgid "%d pattern was added to the local blocklist."
msgid_plural "%d patterns were added to the local blocklist."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d Muster wurde zur lokalen Blockliste hinzugefügt."
+msgstr[1] "%d Muster wurden zur lokalen Blockliste hinzugefügt."
#: src/Module/Admin/Blocklist/Server/Import.php:96
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
msgid "Import a Server Domain Pattern Blocklist"
-msgstr ""
+msgstr "Server Domain Muster Blockliste importieren"
#: src/Module/Admin/Blocklist/Server/Import.php:119
msgid ""
"This file can be downloaded from the /friendica
path of any "
"Friendica server.
"
-msgstr ""
+msgstr "Diese Datei kann vom /friendica
Pfad auf jedem Friendica Server heruntergeladen werden.
"
#: src/Module/Admin/Blocklist/Server/Import.php:120
#: src/Module/Admin/Blocklist/Server/Index.php:104
msgid "Upload file"
-msgstr ""
+msgstr "Datei hochladen"
#: src/Module/Admin/Blocklist/Server/Import.php:121
msgid "Patterns to import"
-msgstr ""
+msgstr "Zu importierende Muster"
#: src/Module/Admin/Blocklist/Server/Import.php:122
msgid "Domain Pattern"
-msgstr ""
+msgstr "Domain Muster"
#: src/Module/Admin/Blocklist/Server/Import.php:124
msgid "Import Mode"
-msgstr ""
+msgstr "Importmodus"
#: src/Module/Admin/Blocklist/Server/Import.php:125
msgid "Import Patterns"
-msgstr ""
+msgstr "Muster importieren"
#: src/Module/Admin/Blocklist/Server/Import.php:126
#, php-format
msgid "%d total pattern"
msgid_plural "%d total patterns"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%dMuster gesamt"
+msgstr[1] "%dMuster gesamt"
#: src/Module/Admin/Blocklist/Server/Import.php:128
#: src/Module/Admin/Blocklist/Server/Index.php:113
msgid "Server domain pattern blocklist CSV file"
-msgstr ""
+msgstr "Server Domain Muster Blockliste CSV-Datei"
#: src/Module/Admin/Blocklist/Server/Import.php:129
msgid "Append"
-msgstr ""
+msgstr "Anhängen"
#: src/Module/Admin/Blocklist/Server/Import.php:129
msgid ""
"Imports patterns from the file that weren't already existing in the current "
"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
msgid "Replace"
-msgstr ""
+msgstr "Ersetzen"
#: src/Module/Admin/Blocklist/Server/Import.php:130
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:108
@@ -4815,7 +4763,7 @@ msgstr "Die Liste der blockierten Domain Muster wird auf der Seite Theme Customization settings."
+msgstr "Wenn du magst, kannst du unter den Benutzerdefinierte Theme-Einstellungen einstellen, dass diese Seite immer geöffnet wird, wenn du den \"Neuer Beitrag\" Button verwendest."
+
#: src/Module/Item/Follow.php:52
msgid "Unable to follow this item."
msgstr "Konnte dem Beitrag nicht folgen."
@@ -8471,7 +8401,7 @@ msgid ""
"class=\"btn btn-sm pull-right\">Cancel"
msgstr "Du betrachtest dein Profil gerade als %s Abbrechen"
-#: 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:"
msgstr "Kompletter Name:"
@@ -8487,17 +8417,17 @@ msgstr "j F, Y"
msgid "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:"
msgstr "Geburtstag:"
#: 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: "
msgstr "Alter: "
#: 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
msgid "%d year old"
msgid_plural "%d years old"
@@ -8602,7 +8532,7 @@ msgid "Please repeat your e-mail address:"
msgstr "Bitte wiederhole deine E-Mail Adresse"
#: 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:"
msgstr "Neues Passwort:"
@@ -8611,7 +8541,7 @@ msgid "Leave empty for an auto generated password."
msgstr "Leer lassen, um das Passwort automatisch zu generieren."
#: 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:"
msgstr "Bestätigen:"
@@ -8732,6 +8662,10 @@ msgstr "Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du local "
@@ -9098,89 +9032,89 @@ msgid ""
" system settings."
msgstr "Dein Profil wird im lokalen Verzeichnis 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
msgid ""
"Your profile will also be published in the global friendica directories "
"(e.g. %s)."
msgstr "Dein Profil wird auch in den globalen Friendica Verzeichnissen (z.B. %s) veröffentlicht werden."
-#: src/Module/Settings/Account.php:559
+#: src/Module/Settings/Account.php:560
msgid "Account Settings"
msgstr "Kontoeinstellungen"
-#: src/Module/Settings/Account.php:560
+#: src/Module/Settings/Account.php:561
#, php-format
msgid "Your Identity Address is '%s' or '%s'."
msgstr "Die Adresse deines Profils lautet '%s' oder '%s'."
-#: src/Module/Settings/Account.php:568
+#: src/Module/Settings/Account.php:569
msgid "Password Settings"
msgstr "Passwort-Einstellungen"
-#: src/Module/Settings/Account.php:570
+#: src/Module/Settings/Account.php:571
msgid "Leave password fields blank unless changing"
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:"
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"
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"
msgstr "OpenID URL löschen"
-#: src/Module/Settings/Account.php:577
+#: src/Module/Settings/Account.php:578
msgid "Basic Settings"
msgstr "Grundeinstellungen"
-#: src/Module/Settings/Account.php:579
+#: src/Module/Settings/Account.php:580
msgid "Email Address:"
msgstr "E-Mail-Adresse:"
-#: src/Module/Settings/Account.php:580
+#: src/Module/Settings/Account.php:581
msgid "Your Timezone:"
msgstr "Deine Zeitzone:"
-#: src/Module/Settings/Account.php:581
+#: src/Module/Settings/Account.php:582
msgid "Your Language:"
msgstr "Deine Sprache:"
-#: src/Module/Settings/Account.php:581
+#: src/Module/Settings/Account.php:582
msgid ""
"Set the language we use to show you friendica interface and to send you "
"emails"
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:"
msgstr "Standardstandort:"
-#: src/Module/Settings/Account.php:583
+#: src/Module/Settings/Account.php:584
msgid "Use Browser Location:"
msgstr "Standort des Browsers verwenden:"
-#: src/Module/Settings/Account.php:585
+#: src/Module/Settings/Account.php:586
msgid "Security and Privacy Settings"
msgstr "Sicherheits- und Privatsphäre-Einstellungen"
-#: src/Module/Settings/Account.php:587
+#: src/Module/Settings/Account.php:588
msgid "Maximum Friend Requests/Day:"
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)"
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?"
msgstr "Darf dein Profil bei Suchanfragen gefunden werden?"
-#: src/Module/Settings/Account.php:589
+#: src/Module/Settings/Account.php:590
msgid ""
"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 "
@@ -9188,43 +9122,43 @@ msgid ""
"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."
-#: src/Module/Settings/Account.php:590
+#: src/Module/Settings/Account.php:591
msgid "Hide your contact/friend list from viewers of your profile?"
msgstr "Liste der Kontakte vor Betrachtern des Profil verbergen?"
-#: src/Module/Settings/Account.php:590
+#: src/Module/Settings/Account.php:591
msgid ""
"A list of your contacts is displayed on your profile page. Activate this "
"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."
-#: src/Module/Settings/Account.php:591
+#: src/Module/Settings/Account.php:592
msgid "Hide your profile details from anonymous viewers?"
msgstr "Profil-Details vor unbekannten Betrachtern verbergen?"
-#: src/Module/Settings/Account.php:591
+#: src/Module/Settings/Account.php:592
msgid ""
"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 "
"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."
-#: src/Module/Settings/Account.php:592
+#: src/Module/Settings/Account.php:593
msgid "Make public posts unlisted"
msgstr "Öffentliche Beiträge nicht listen"
-#: src/Module/Settings/Account.php:592
+#: src/Module/Settings/Account.php:593
msgid ""
"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 "
"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."
-#: src/Module/Settings/Account.php:593
+#: src/Module/Settings/Account.php:594
msgid "Make all posted pictures accessible"
msgstr "Alle geposteten Bilder zugreifbar machen"
-#: src/Module/Settings/Account.php:593
+#: src/Module/Settings/Account.php:594
msgid ""
"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 "
@@ -9232,131 +9166,127 @@ msgid ""
"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."
-#: src/Module/Settings/Account.php:594
+#: src/Module/Settings/Account.php:595
msgid "Allow friends to post to your profile page?"
msgstr "Dürfen deine Kontakte auf deine Pinnwand schreiben?"
-#: src/Module/Settings/Account.php:594
+#: src/Module/Settings/Account.php:595
msgid ""
"Your contacts may write posts on your profile wall. These posts will be "
"distributed to your contacts"
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?"
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."
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?"
msgstr "Dürfen dir Unbekannte private Nachrichten schicken?"
-#: src/Module/Settings/Account.php:596
+#: src/Module/Settings/Account.php:597
msgid ""
"Friendica network users may send you private messages even if they are not "
"in your contact list."
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:"
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"
msgstr "Standard-Zugriffsrechte für Beiträge"
-#: src/Module/Settings/Account.php:603
+#: src/Module/Settings/Account.php:604
msgid "Expiration settings"
msgstr "Verfalls-Einstellungen"
-#: src/Module/Settings/Account.php:604
+#: src/Module/Settings/Account.php:605
msgid "Automatically expire posts after this many days:"
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"
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"
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."
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"
msgstr "Persönliche Notizen verfallen lassen"
-#: src/Module/Settings/Account.php:606
+#: src/Module/Settings/Account.php:607
msgid ""
"When activated, the personal notes on your profile page will be expired."
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"
msgstr "Markierte Beiträge verfallen lassen"
-#: src/Module/Settings/Account.php:607
+#: src/Module/Settings/Account.php:608
msgid ""
"Starring posts keeps them from being expired. That behaviour is overwritten "
"by this setting."
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"
msgstr "Nur Beiträge anderer verfallen lassen."
-#: src/Module/Settings/Account.php:608
+#: src/Module/Settings/Account.php:609
msgid ""
"When activated, your own posts never expire. Then the settings above are "
"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."
-#: src/Module/Settings/Account.php:611
+#: src/Module/Settings/Account.php:612
msgid "Notification Settings"
msgstr "Benachrichtigungseinstellungen"
-#: src/Module/Settings/Account.php:612
+#: src/Module/Settings/Account.php:613
msgid "Send a notification email when:"
msgstr "Benachrichtigungs-E-Mail senden, wenn:"
-#: src/Module/Settings/Account.php:613
+#: src/Module/Settings/Account.php:614
msgid "You receive an introduction"
msgstr "– du eine Kontaktanfrage erhältst"
-#: src/Module/Settings/Account.php:614
+#: src/Module/Settings/Account.php:615
msgid "Your introductions are confirmed"
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"
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"
msgstr "– jemand auch einen Kommentar verfasst"
-#: src/Module/Settings/Account.php:617
+#: src/Module/Settings/Account.php:618
msgid "You receive a private message"
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"
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"
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
msgid "Create a desktop notification when:"
msgstr "Benachrichtigungen anzeigen wenn:"
@@ -9553,121 +9483,121 @@ msgstr "Das gewählte Theme ist nicht verfügbar"
msgid "%s - (Unsupported)"
msgstr "%s - (Nicht unterstützt)"
-#: src/Module/Settings/Display.php:192
+#: src/Module/Settings/Display.php:200
msgid "Display Settings"
msgstr "Anzeige-Einstellungen"
-#: src/Module/Settings/Display.php:194
+#: src/Module/Settings/Display.php:202
msgid "General Theme Settings"
msgstr "Allgemeine Theme-Einstellungen"
-#: src/Module/Settings/Display.php:195
+#: src/Module/Settings/Display.php:203
msgid "Custom Theme Settings"
msgstr "Benutzerdefinierte Theme-Einstellungen"
-#: src/Module/Settings/Display.php:196
+#: src/Module/Settings/Display.php:204
msgid "Content Settings"
msgstr "Einstellungen zum Inhalt"
-#: src/Module/Settings/Display.php:197 view/theme/duepuntozero/config.php:70
-#: view/theme/frio/config.php:161 view/theme/quattro/config.php:72
+#: src/Module/Settings/Display.php:205 view/theme/duepuntozero/config.php:70
+#: view/theme/frio/config.php:172 view/theme/quattro/config.php:72
#: view/theme/vier/config.php:120
msgid "Theme settings"
msgstr "Theme-Einstellungen"
-#: src/Module/Settings/Display.php:198
+#: src/Module/Settings/Display.php:206
msgid "Calendar"
msgstr "Kalender"
-#: src/Module/Settings/Display.php:204
+#: src/Module/Settings/Display.php:212
msgid "Display Theme:"
msgstr "Theme:"
-#: src/Module/Settings/Display.php:205
+#: src/Module/Settings/Display.php:213
msgid "Mobile Theme:"
msgstr "Mobiles Theme"
-#: src/Module/Settings/Display.php:208
+#: src/Module/Settings/Display.php:216
msgid "Number of items to display per page:"
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"
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:"
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"
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."
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"
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 ""
"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 "
"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."
-#: src/Module/Settings/Display.php:212
+#: src/Module/Settings/Display.php:220
msgid "Display 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."
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"
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."
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"
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."
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"
msgstr "Das \"Nicht-mögen\" Feature anzeigen"
-#: src/Module/Settings/Display.php:215
+#: src/Module/Settings/Display.php:223
msgid ""
"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."
-#: src/Module/Settings/Display.php:216
+#: src/Module/Settings/Display.php:224
msgid "Display the resharer"
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."
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"
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."
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:"
msgstr "Wochenbeginn:"
@@ -9723,8 +9653,8 @@ msgstr "Profilbild"
msgid "Location"
msgstr "Wohnort"
-#: src/Module/Settings/Profile/Index.php:230 src/Util/Temporal.php:93
-#: src/Util/Temporal.php:95
+#: src/Module/Settings/Profile/Index.php:230 src/Util/Temporal.php:95
+#: src/Util/Temporal.php:97
msgid "Miscellaneous"
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"
msgstr "%1$s hat in deiner Unterhaltung %2$s kommentiert"
-#: src/Navigation/Notifications/Repository/Notify.php:222
-#: src/Navigation/Notifications/Repository/Notify.php:736
+#: src/Navigation/Notifications/Repository/Notify.php:225
+#: src/Navigation/Notifications/Repository/Notify.php:721
msgid "[Friendica:Notify]"
msgstr "[Friendica Meldung]"
-#: src/Navigation/Notifications/Repository/Notify.php:286
+#: src/Navigation/Notifications/Repository/Notify.php:289
#, php-format
msgid "%s New mail received at %s"
msgstr "%sNeue Nachricht auf %s empfangen"
-#: src/Navigation/Notifications/Repository/Notify.php:288
+#: src/Navigation/Notifications/Repository/Notify.php:291
#, php-format
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."
-#: src/Navigation/Notifications/Repository/Notify.php:289
+#: src/Navigation/Notifications/Repository/Notify.php:292
msgid "a private message"
msgstr "eine private Nachricht"
-#: src/Navigation/Notifications/Repository/Notify.php:289
+#: src/Navigation/Notifications/Repository/Notify.php:292
#, php-format
msgid "%1$s sent you %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
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."
-#: src/Navigation/Notifications/Repository/Notify.php:321
+#: src/Navigation/Notifications/Repository/Notify.php:324
#, php-format
msgid "%1$s commented on %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
msgid "%1$s commented on your %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
msgid "%1$s commented on their %2$s %3$s"
msgstr "%1$s hat den eigenen %2$s %3$s kommentiert"
-#: src/Navigation/Notifications/Repository/Notify.php:334
-#: src/Navigation/Notifications/Repository/Notify.php:770
+#: src/Navigation/Notifications/Repository/Notify.php:337
+#: src/Navigation/Notifications/Repository/Notify.php:755
#, php-format
msgid "%1$s Comment to conversation #%2$d by %3$s"
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
msgid "%s commented on an item/conversation you have been following."
msgstr "%s hat einen Beitrag kommentiert, dem du folgst."
-#: src/Navigation/Notifications/Repository/Notify.php:340
-#: src/Navigation/Notifications/Repository/Notify.php:355
-#: src/Navigation/Notifications/Repository/Notify.php:374
-#: src/Navigation/Notifications/Repository/Notify.php:785
+#: src/Navigation/Notifications/Repository/Notify.php:343
+#: src/Navigation/Notifications/Repository/Notify.php:358
+#: src/Navigation/Notifications/Repository/Notify.php:770
#, php-format
msgid "Please visit %s to view and/or reply to the conversation."
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
msgid "%s %s posted to your profile wall"
msgstr "%s%s hat auf deine Pinnwand gepostet"
-#: src/Navigation/Notifications/Repository/Notify.php:349
+#: src/Navigation/Notifications/Repository/Notify.php:352
#, php-format
msgid "%1$s posted to your profile wall at %2$s"
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
msgid "%1$s posted to [url=%2$s]your wall[/url]"
msgstr "%1$s hat etwas auf [url=%2$s]Deiner Pinnwand[/url] gepostet"
-#: src/Navigation/Notifications/Repository/Notify.php:362
-#, 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
+#: src/Navigation/Notifications/Repository/Notify.php:366
#, php-format
msgid "%s Introduction received"
msgstr "%sVorstellung erhalten"
-#: src/Navigation/Notifications/Repository/Notify.php:384
+#: src/Navigation/Notifications/Repository/Notify.php:368
#, php-format
msgid "You've received an introduction from '%1$s' at %2$s"
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
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."
-#: src/Navigation/Notifications/Repository/Notify.php:390
-#: src/Navigation/Notifications/Repository/Notify.php:436
+#: src/Navigation/Notifications/Repository/Notify.php:374
+#: src/Navigation/Notifications/Repository/Notify.php:420
#, php-format
msgid "You may visit their profile at %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
msgid "Please visit %s to approve or reject the introduction."
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
msgid "%s A new person is sharing with you"
msgstr "%sEine neue Person teilt nun mit dir"
-#: src/Navigation/Notifications/Repository/Notify.php:401
-#: src/Navigation/Notifications/Repository/Notify.php:402
+#: src/Navigation/Notifications/Repository/Notify.php:385
+#: src/Navigation/Notifications/Repository/Notify.php:386
#, php-format
msgid "%1$s is sharing with you at %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
msgid "%s You have a new follower"
msgstr "%sDu hast einen neuen Kontakt"
-#: src/Navigation/Notifications/Repository/Notify.php:411
-#: src/Navigation/Notifications/Repository/Notify.php:412
+#: src/Navigation/Notifications/Repository/Notify.php:395
+#: src/Navigation/Notifications/Repository/Notify.php:396
#, php-format
msgid "You have a new follower at %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
msgid "%s Friend suggestion received"
msgstr "%sKontaktvorschlag erhalten"
-#: src/Navigation/Notifications/Repository/Notify.php:427
+#: src/Navigation/Notifications/Repository/Notify.php:411
#, php-format
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"
-#: src/Navigation/Notifications/Repository/Notify.php:428
+#: src/Navigation/Notifications/Repository/Notify.php:412
#, php-format
msgid ""
"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."
-#: src/Navigation/Notifications/Repository/Notify.php:434
+#: src/Navigation/Notifications/Repository/Notify.php:418
msgid "Name:"
msgstr "Name:"
-#: src/Navigation/Notifications/Repository/Notify.php:435
+#: src/Navigation/Notifications/Repository/Notify.php:419
msgid "Photo:"
msgstr "Foto:"
-#: src/Navigation/Notifications/Repository/Notify.php:438
+#: src/Navigation/Notifications/Repository/Notify.php:422
#, php-format
msgid "Please visit %s to approve or reject the suggestion."
msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen."
-#: src/Navigation/Notifications/Repository/Notify.php:446
-#: src/Navigation/Notifications/Repository/Notify.php:461
+#: src/Navigation/Notifications/Repository/Notify.php:430
+#: src/Navigation/Notifications/Repository/Notify.php:445
#, php-format
msgid "%s Connection accepted"
msgstr "%sKontaktanfrage bestätigt"
-#: src/Navigation/Notifications/Repository/Notify.php:448
-#: src/Navigation/Notifications/Repository/Notify.php:463
+#: src/Navigation/Notifications/Repository/Notify.php:432
+#: src/Navigation/Notifications/Repository/Notify.php:447
#, php-format
msgid "'%1$s' has accepted your connection request at %2$s"
msgstr "'%1$s' hat Deine Kontaktanfrage auf %2$s bestätigt"
-#: src/Navigation/Notifications/Repository/Notify.php:449
-#: src/Navigation/Notifications/Repository/Notify.php:464
+#: src/Navigation/Notifications/Repository/Notify.php:433
+#: src/Navigation/Notifications/Repository/Notify.php:448
#, php-format
msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
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 ""
"You are now mutual friends and may exchange status updates, photos, and "
"email without restriction."
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
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."
-#: src/Navigation/Notifications/Repository/Notify.php:469
+#: src/Navigation/Notifications/Repository/Notify.php:453
#, php-format
msgid ""
"'%1$s' has chosen to accept you a fan, which restricts some forms of "
@@ -10802,33 +10716,33 @@ msgid ""
"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."
-#: src/Navigation/Notifications/Repository/Notify.php:471
+#: src/Navigation/Notifications/Repository/Notify.php:455
#, php-format
msgid ""
"'%1$s' may choose to extend this into a two-way or more permissive "
"relationship in the future."
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
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."
-#: src/Navigation/Notifications/Repository/Notify.php:483
+#: src/Navigation/Notifications/Repository/Notify.php:467
msgid "registration request"
msgstr "Registrierungsanfrage"
-#: src/Navigation/Notifications/Repository/Notify.php:485
+#: src/Navigation/Notifications/Repository/Notify.php:469
#, php-format
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"
-#: src/Navigation/Notifications/Repository/Notify.php:486
+#: src/Navigation/Notifications/Repository/Notify.php:470
#, php-format
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."
-#: src/Navigation/Notifications/Repository/Notify.php:491
+#: src/Navigation/Notifications/Repository/Notify.php:475
#, php-format
msgid ""
"Full Name:\t%s\n"
@@ -10836,17 +10750,17 @@ msgid ""
"Login Name:\t%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
msgid "Please visit %s to approve or reject the request."
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
msgid "%s %s tagged you"
msgstr "%s %s hat dich erwähnt"
-#: src/Navigation/Notifications/Repository/Notify.php:767
+#: src/Navigation/Notifications/Repository/Notify.php:752
#, php-format
msgid "%s %s shared a new post"
msgstr "%s%shat einen Beitrag geteilt"
@@ -11076,28 +10990,28 @@ msgstr "Zeige mehr"
msgid "Show fewer"
msgstr "Zeige weniger"
-#: src/Protocol/OStatus.php:1475
+#: src/Protocol/OStatus.php:1471
#, php-format
msgid "%s is now following %s."
msgstr "%s folgt nun %s"
-#: src/Protocol/OStatus.php:1476
+#: src/Protocol/OStatus.php:1472
msgid "following"
msgstr "folgen"
-#: src/Protocol/OStatus.php:1479
+#: src/Protocol/OStatus.php:1475
#, php-format
msgid "%s stopped following %s."
msgstr "%s hat aufgehört %s, zu folgen"
-#: src/Protocol/OStatus.php:1480
+#: src/Protocol/OStatus.php:1476
msgid "stopped following"
msgstr "wird nicht mehr gefolgt"
-#: src/Render/FriendicaSmartyEngine.php:53
+#: src/Render/FriendicaSmartyEngine.php:56
#, php-format
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
msgid "Login failed."
@@ -11139,86 +11053,86 @@ msgstr "der Administrator von %s"
msgid "thanks"
msgstr "danke"
-#: src/Util/Temporal.php:167
+#: src/Util/Temporal.php:170
msgid "YYYY-MM-DD or MM-DD"
msgstr "YYYY-MM-DD oder MM-DD"
-#: src/Util/Temporal.php:275
+#: src/Util/Temporal.php:278
#, php-format
msgid "Time zone: %s Change in Settings"
msgstr "Zeitzone: %s Änderbar in den Einstellungen"
-#: src/Util/Temporal.php:318
+#: src/Util/Temporal.php:321
msgid "never"
msgstr "nie"
-#: src/Util/Temporal.php:325
+#: src/Util/Temporal.php:328
msgid "less than a second ago"
msgstr "vor weniger als einer Sekunde"
-#: src/Util/Temporal.php:333
+#: src/Util/Temporal.php:337
msgid "year"
msgstr "Jahr"
-#: src/Util/Temporal.php:333
+#: src/Util/Temporal.php:337
msgid "years"
msgstr "Jahre"
-#: src/Util/Temporal.php:334
+#: src/Util/Temporal.php:338
msgid "months"
msgstr "Monate"
-#: src/Util/Temporal.php:335
+#: src/Util/Temporal.php:339
msgid "weeks"
msgstr "Wochen"
-#: src/Util/Temporal.php:336
+#: src/Util/Temporal.php:340
msgid "days"
msgstr "Tage"
-#: src/Util/Temporal.php:337
+#: src/Util/Temporal.php:341
msgid "hour"
msgstr "Stunde"
-#: src/Util/Temporal.php:337
+#: src/Util/Temporal.php:341
msgid "hours"
msgstr "Stunden"
-#: src/Util/Temporal.php:338
+#: src/Util/Temporal.php:342
msgid "minute"
msgstr "Minute"
-#: src/Util/Temporal.php:338
+#: src/Util/Temporal.php:342
msgid "minutes"
msgstr "Minuten"
-#: src/Util/Temporal.php:339
+#: src/Util/Temporal.php:343
msgid "second"
msgstr "Sekunde"
-#: src/Util/Temporal.php:339
+#: src/Util/Temporal.php:343
msgid "seconds"
msgstr "Sekunden"
-#: src/Util/Temporal.php:349
+#: src/Util/Temporal.php:353
#, php-format
msgid "in %1$d %2$s"
msgstr "in %1$d %2$s"
-#: src/Util/Temporal.php:352
+#: src/Util/Temporal.php:356
#, php-format
msgid "%1$d %2$s ago"
msgstr "%1$d %2$s her"
-#: src/Worker/Delivery.php:525
+#: src/Worker/Delivery.php:524
msgid "(no subject)"
msgstr "(kein Betreff)"
-#: src/Worker/PushSubscription.php:111
+#: src/Worker/PushSubscription.php:110
msgid "Notification from Friendica"
msgstr "Benachrichtigung von Friendica"
-#: src/Worker/PushSubscription.php:112
+#: src/Worker/PushSubscription.php:111
msgid "Empty Post"
msgstr "Leerer Beitrag"
@@ -11254,113 +11168,124 @@ msgstr "slackr"
msgid "Variations"
msgstr "Variationen"
-#: view/theme/frio/config.php:142
+#: view/theme/frio/config.php:153
msgid "Light (Accented)"
msgstr "Hell (Akzentuiert)"
-#: view/theme/frio/config.php:143
+#: view/theme/frio/config.php:154
msgid "Dark (Accented)"
msgstr "Dunkel (Akzentuiert)"
-#: view/theme/frio/config.php:144
+#: view/theme/frio/config.php:155
msgid "Black (Accented)"
msgstr "Schwarz (Akzentuiert)"
-#: view/theme/frio/config.php:156
+#: view/theme/frio/config.php:167
msgid "Note"
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"
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"
msgstr "Benutzerdefiniert"
-#: view/theme/frio/config.php:163
+#: view/theme/frio/config.php:174
msgid "Legacy"
msgstr "Vermächtnis"
-#: view/theme/frio/config.php:164
+#: view/theme/frio/config.php:175
msgid "Accented"
msgstr "Akzentuiert"
-#: view/theme/frio/config.php:165
+#: view/theme/frio/config.php:176
msgid "Select color scheme"
msgstr "Farbschema auswählen"
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Select scheme accent"
msgstr "Wähle einen Akzent für das Thema"
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Blue"
msgstr "Blau"
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Red"
msgstr "Rot"
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Purple"
msgstr "Violett"
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Green"
msgstr "Grün"
-#: view/theme/frio/config.php:166
+#: view/theme/frio/config.php:177
msgid "Pink"
msgstr "Rosa"
-#: view/theme/frio/config.php:167
+#: view/theme/frio/config.php:178
msgid "Copy or paste schemestring"
msgstr "Farbschema kopieren oder einfügen"
-#: view/theme/frio/config.php:167
+#: view/theme/frio/config.php:178
msgid ""
"You can copy this string to share your theme with others. Pasting here "
"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."
-#: view/theme/frio/config.php:168
+#: view/theme/frio/config.php:179
msgid "Navigation bar background color"
msgstr "Hintergrundfarbe der Navigationsleiste"
-#: view/theme/frio/config.php:169
+#: view/theme/frio/config.php:180
msgid "Navigation bar icon color "
msgstr "Icon Farbe in der Navigationsleiste"
-#: view/theme/frio/config.php:170
+#: view/theme/frio/config.php:181
msgid "Link color"
msgstr "Linkfarbe"
-#: view/theme/frio/config.php:171
+#: view/theme/frio/config.php:182
msgid "Set the background color"
msgstr "Hintergrundfarbe festlegen"
-#: view/theme/frio/config.php:172
+#: view/theme/frio/config.php:183
msgid "Content background opacity"
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"
msgstr "Hintergrundbild festlegen"
-#: view/theme/frio/config.php:174
+#: view/theme/frio/config.php:185
msgid "Background image style"
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 Compose page "
+"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 Composer Seite 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"
msgstr "Hintergrundbild der Login-Seite"
-#: view/theme/frio/config.php:183
+#: view/theme/frio/config.php:196
msgid "Login page background color"
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"
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"
msgstr "Zurück nach Oben"
-#: view/theme/frio/theme.php:212
+#: view/theme/frio/theme.php:218
msgid "Guest"
msgstr "Gast"
-#: view/theme/frio/theme.php:215
+#: view/theme/frio/theme.php:221
msgid "Visitor"
msgstr "Besucher"
diff --git a/view/lang/de/strings.php b/view/lang/de/strings.php
index 8375f7b03d..69508c34e6 100644
--- a/view/lang/de/strings.php
+++ b/view/lang/de/strings.php
@@ -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 by %s <%s>'] = 'Geteilt von %s <%s>';
$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['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['Fetched'] = '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['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['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.';
@@ -553,7 +558,6 @@ $a->strings['Forums'] = 'Foren';
$a->strings['External link to forum'] = 'Externer Link zum Forum';
$a->strings['show less'] = 'weniger 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['Follow Thread'] = 'Folge der Unterhaltung';
$a->strings['View Status'] = 'Status anschauen';
@@ -565,7 +569,6 @@ $a->strings['Send PM'] = 'Private Nachricht senden';
$a->strings['Block'] = 'Sperren';
$a->strings['Ignore'] = 'Ignorieren';
$a->strings['Languages'] = 'Sprachen';
-$a->strings['Poke'] = 'Anstupsen';
$a->strings['Nothing new here'] = 'Keine Neuigkeiten';
$a->strings['Go back'] = 'Geh zurück';
$a->strings['Clear notifications'] = 'Bereinige Benachrichtigungen';
@@ -812,18 +815,6 @@ $a->strings['Sep'] = 'Sep';
$a->strings['Oct'] = 'Okt';
$a->strings['Nov'] = 'Nov';
$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['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!';
@@ -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['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['This file can be downloaded from the /friendica
path of any Friendica server.
'] = 'Diese Datei kann vom /friendica
Pfad auf jedem Friendica Server heruntergeladen werden.
';
+$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['Reason for the block'] = 'Begründung für die Blockierung';
$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['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 /friendica 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 /friendica ö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['Save changes to the blocklist'] = 'Änderungen der Blockliste speichern';
$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['Other'] = 'Andere';
$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['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['Delete Item'] = '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['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['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['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';
@@ -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.',
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['Only You Can See This'] = 'Nur du kannst das sehen';
$a->strings['Scheduled Posts'] = 'Geplante Beiträge';
@@ -1757,12 +1810,6 @@ $a->strings['Contact (%s)'] = [
0 => 'Kontakt (%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['Contact has been unblocked'] = 'Kontakt wurde wieder freigegeben';
$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['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['This community stream shows all public posts received by this node. They may not reflect the opinions of this node’s 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['Posts from local users on this server'] = 'Beiträge von Nutzern dieses Servers';
$a->strings['Global Community'] = 'Globale Gemeinschaft';
@@ -1830,7 +1878,6 @@ $a->strings['Own Contacts'] = 'Eigene Kontakte';
$a->strings['Include'] = 'Einschließen';
$a->strings['Hide'] = 'Verbergen';
$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 node’s 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['Not available.'] = 'Nicht verfügbar.';
$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['Results for:'] = 'Ergebnisse für:';
$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 removed'] = 'Item wurde nicht entfernt';
$a->strings['- select -'] = '- auswählen -';
$a->strings['Suggested contact not found.'] = 'Vorgeschlagener Kontakt wurde nicht gefunden.';
$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['Read about the Terms of Service of this node.'] = 'Erfahre mehr über die Nutzungsbedingungen dieses Knotens.';
$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['Please visit Friendi.ca to learn more about the Friendica project.'] = 'Bitte besuche Friendi.ca, um mehr über das Friendica-Projekt zu erfahren.';
$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['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['You can make this page always open when you use the New Post button in the Theme Customization settings.'] = 'Wenn du magst, kannst du unter den Benutzerdefinierte Theme-Einstellungen 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['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.';
@@ -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 %s or %s 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 %s oder %s direkt von deinem System. ';
$a->strings['If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.'] = 'Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du diesem Link folgen 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['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 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';
@@ -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 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['Password does not need changing.'] = 'Passwort muss nicht geändert werden.';
$a->strings['Password unchanged.'] = 'Passwort unverändert.';
$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['Current Password:'] = 'Aktuelles Passwort:';
$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 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 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['Someone tagged you'] = 'Dich jemand erwähnt';
$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['%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 %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['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.';
@@ -2677,6 +2725,7 @@ $a->strings['%s is now following %s.'] = '%s folgt nun %s';
$a->strings['following'] = 'folgen';
$a->strings['%s stopped following %s.'] = '%s hat aufgehört %s, zu folgen';
$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. Please check your credentials.'] = 'Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben.';
$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['Set the background image'] = 'Hintergrundbild festlegen';
$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 Compose page 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 Composer Seite 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 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.';
diff --git a/view/templates/item/compose.tpl b/view/templates/item/compose.tpl
index cbab655d2c..5583650e04 100644
--- a/view/templates/item/compose.tpl
+++ b/view/templates/item/compose.tpl
@@ -1,5 +1,8 @@
-
{{$compose_title}}
+
{{$l10n.compose_title}}
+ {{if $l10n.always_open_compose}}
+
{{$l10n.always_open_compose nofilter}}
+ {{/if}}