1
0
Fork 0

Merge branch 'develop' into rewrite/gravity-constants

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

2
Vagrantfile vendored
View file

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

View file

@ -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();

View file

@ -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

133
boot.php
View file

@ -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', "<br />\r\n");
/**
* @name CP
*
* Type of the community page
* @{
*/
define('CP_NO_INTERNAL_COMMUNITY', -2);
define('CP_NO_COMMUNITY_PAGE', -1);
define('CP_USERS_ON_SERVER', 0);
define('CP_GLOBAL_COMMUNITY', 1);
define('CP_USERS_AND_GLOBAL', 2);
/**
* @}
*/
/**
* @name Priority
*
* Process priority for the worker
* @{
*/
define('PRIORITY_UNDEFINED', 0);
define('PRIORITY_CRITICAL', 10);
define('PRIORITY_HIGH', 20);
define('PRIORITY_MEDIUM', 30);
define('PRIORITY_LOW', 40);
define('PRIORITY_NEGLIGIBLE', 50);
define('PRIORITIES', [PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW, PRIORITY_NEGLIGIBLE]);
/* @}*/
// Normally this constant is defined - but not if "pcntl" isn't installed
if (!defined('SIGTERM')) {
define('SIGTERM', 15);
}
/**
* Depending on the PHP version this constant does exist - or not.
* See here: http://php.net/manual/en/curl.constants.php#117928
*/
if (!defined('CURLE_OPERATION_TIMEDOUT')) {
define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED);
}
if (!function_exists('exif_imagetype')) {
function exif_imagetype($file)
{
$size = getimagesize($file);
return $size[2];
}
}
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();
}

View file

@ -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",

84
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"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",

View file

@ -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`;

View file

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

View file

@ -34,7 +34,7 @@ Due to the large variety of operating systems and PHP platforms in existence we
* The POSIX module of PHP needs to be activated (e.g. [RHEL, CentOS](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) have disabled it)
* 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.

View file

@ -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/).
For further documentation of vagrant, please see [the vagrant*docs*](https://docs.vagrantup.com/v2/).

View file

@ -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)

View file

@ -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)

View file

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

View file

@ -31,7 +31,7 @@ Requirements
* Das POSIX Modul muss aktiviert sein ([CentOS, RHEL](http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7http://www.bigsoft.co.uk/blog/index.php/2014/12/08/posix-php-commands-not-working-under-centos-7) haben dies z.B. deaktiviert)
* 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.

View file

@ -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

View file

@ -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;
}

View file

@ -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');

View file

@ -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);
}

View file

@ -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
}

View file

@ -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('

View file

@ -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');

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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
}

View file

@ -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;
}

View file

@ -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
}

View file

@ -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 '';
}

View file

@ -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();
}

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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') . '<br />' . (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 . '<br />';
}
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 . '<br />';
}
System::exit();
}

View file

@ -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 . '<br />';
}
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 . '<br />';
}
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 . '<br />';
}
System::exit();
}

View file

@ -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;
}

View file

@ -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,

View file

@ -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');

View file

@ -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)) {

View file

@ -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);
}
}

View file

@ -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;

View file

@ -261,7 +261,7 @@ class Conversation
break;
}
$expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . EOL . '</p>';
$expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . '</p>';
}
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
@ -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),
]);

View file

@ -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']);
}

View file

@ -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')];
}

View file

@ -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);
}
/**

View file

@ -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

View file

@ -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.') . '<br />';
$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 <a href='https://github.com/friendica/friendica/blob/stable/doc/Install.md#set-up-the-worker'>'Setup the worker'</a>") . EOL;
$help .= EOL . EOL;
$help .= DI::l10n()->t('Could not find a command line version of PHP in the web server PATH.') . '<br />';
$help .= DI::l10n()->t("If you don't have a command line version of PHP installed on your server, you will not be able to run the background processing. See <a href='https://github.com/friendica/friendica/blob/stable/doc/Install.md#set-up-the-worker'>'Setup the worker'</a>") . '<br />';
$help .= '<br /><br />';
$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") . '<br />';
$help .= DI::l10n()->t('Found PHP version: ') . "<tt>$result</tt>";
}
$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.') . '<br />';
$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') . '<br />';
$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.') . '<br />';
$help .= DI::l10n()->t('This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.') . '<br />';
$help .= DI::l10n()->t('At the end of this procedure, we will give you a text to save in a file named local.config.php in your Friendica "config" folder.') . '<br />';
$help .= DI::l10n()->t('You can alternatively skip this procedure and perform a manual installation. Please see the file "doc/INSTALL.md" for instructions.') . '<br />';
}
$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.') . '<br />';
$help .= DI::l10n()->t('In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder.') . '<br />';
$help .= DI::l10n()->t("Please ensure that the user that your web server runs as \x28e.g. www-data\x29 has write access to this folder.") . '<br />';
$help .= DI::l10n()->t("Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files \x28.tpl\x29 that it contains.") . '<br />';
}
$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.') . '<br />';
$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');

View file

@ -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);
}
}
}
}

View file

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

View file

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

View file

@ -5,7 +5,6 @@ This namespace contains the different implementations of a Logger.
### Configuration guideline
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

View file

@ -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;
}

View file

@ -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
*

View file

@ -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)) {

View file

@ -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');
}
}
}

View file

@ -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');
}
}

View file

@ -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]);

View file

@ -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')) {

View file

@ -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 . '<br />';
}
/**

View file

@ -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();
}

View file

@ -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.') . '<br />';
if (empty($ret['poll'])) {
$result['message'] .= DI::l10n()->t('No compatible communication protocols or feeds were discovered.') . EOL;
$result['message'] .= DI::l10n()->t('No compatible communication protocols or feeds were discovered.') . '<br />';
}
if (empty($ret['name'])) {
$result['message'] .= DI::l10n()->t('An author or name was not found.') . EOL;
$result['message'] .= DI::l10n()->t('An author or name was not found.') . '<br />';
}
if (empty($ret['url'])) {
$result['message'] .= DI::l10n()->t('No browser URL could be matched to this address.') . EOL;
$result['message'] .= DI::l10n()->t('No browser URL could be matched to this address.') . '<br />';
}
if (strpos($ret['url'], '@') !== false) {
$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.') . '<br />';
$result['message'] .= DI::l10n()->t('Use mailto: in front of address to force email check.') . '<br />';
}
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.') . '<br />';
$ret['notify'] = '';
}
if (!$ret['notify']) {
$result['message'] .= DI::l10n()->t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL;
$result['message'] .= DI::l10n()->t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . '<br />';
}
$writeable = ((($protocol === Protocol::OSTATUS) && ($ret['notify'])) ? 1 : 0);
@ -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.') . '<br />';
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;

View file

@ -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)) {

View file

@ -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']]);

View file

@ -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 <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.'));
DI::sysmsg()->addNotice(DI::l10n()->t('A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.'));
}
return true;
}

View file

@ -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']);
}
}

View file

@ -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;

View file

@ -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;
}

View file

@ -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

View file

@ -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']);
}

View file

@ -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;
}

View file

@ -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);
}

View file

@ -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.') . '<br />' . 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;
}

View file

@ -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);

View file

@ -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;

View file

@ -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');

View file

@ -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)));

View file

@ -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;

View file

@ -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)),
]);
}

View file

@ -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');
}

View file

@ -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;
}

View file

@ -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 */

View file

@ -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.'));
}
}

View file

@ -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,

View file

@ -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);

View file

@ -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 '';
}

View file

@ -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));
}
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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());
}
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);
}
}

View file

@ -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,
]
],

View file

@ -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();
}

View file

@ -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');

View file

@ -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 {

View file

@ -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 '';
}

View file

@ -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);
}
}

View file

@ -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.'));
}
}

View file

@ -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']);

View file

@ -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']);
}

View file

@ -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) {

View file

@ -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();

View file

@ -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();
}
}

View file

@ -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');
}

View file

@ -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());

View file

@ -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();
}
}

View file

@ -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;
}

View file

@ -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();
}

View file

@ -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.',
'<strong>' . FRIENDICA_VERSION . '</strong>',
'<strong>' . App::VERSION . '</strong>',
DI::baseUrl()->get(),
'<strong>' . $config->get('system', 'build') . '/' . DB_UPDATE_VERSION . '</strong>',
'<strong>' . $config->get('system', 'post_update_version') . '/' . PostUpdate::VERSION . '</strong>'),
@ -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',
];

View file

@ -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');
}

View file

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

View file

@ -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

View file

@ -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 <a href="/settings/display">Theme Customization settings</a>.'),
],
'$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,

View file

@ -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' => [

View file

@ -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(),

View file

@ -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'],

View file

@ -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']);
}

View file

@ -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();
}

View file

@ -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]);
}

View file

@ -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 '';
}

View file

@ -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 '';
}

View file

@ -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:<br> login: %s<br> password: %s<br><br>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();
}

View file

@ -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;
}

View file

@ -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();
}

View file

@ -149,7 +149,7 @@ class Index extends BaseSearch
// Tags don't look like an URL and the fulltext search does only work with natural words
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;
}

View file

@ -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;
}

View file

@ -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();
}
}

View file

@ -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');

View file

@ -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.'));
}
}
}

View file

@ -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();
}

View file

@ -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]);

View file

@ -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 '';
}

View file

@ -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');
}

View file

@ -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);

View file

@ -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();
}

View file

@ -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());
}

View file

@ -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'));
}
}

View file

@ -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'));

View file

@ -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()));
}
}

View file

@ -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'));
}
}

View file

@ -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'));

View file

@ -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.'));
}
}
}

View file

@ -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,

View file

@ -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'),

View file

@ -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();

View file

@ -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');

View file

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

View file

@ -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']);
}
}
}

View file

@ -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']]);

View file

@ -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.
*

View file

@ -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);

View file

@ -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);
}
}

View file

@ -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')));

View file

@ -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')));

View file

@ -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.') . '<br /><br >' . $this->l10n->t('The error message was:') . ' ' . $e->getMessage());
DI::sysmsg()->addNotice($this->l10n->t('We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID.') . '<br /><br >' . $this->l10n->t('The error message was:') . ' ' . $e->getMessage());
}
}
@ -268,7 +268,7 @@ class Authentication
);
} catch (Exception $e) {
$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');
}
}

View file

@ -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' => ['<notification.' . $hostname . '>'],
'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',

View file

@ -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";

View file

@ -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);
}

View file

@ -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

View file

@ -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);
}

View file

@ -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');
}
/**

View file

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

View file

@ -86,7 +86,7 @@ class Notifier
foreach ($inboxes as $inbox => $receivers) {
$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++;

View file

@ -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"]);

View file

@ -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));

View file

@ -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();

View file

@ -63,12 +63,12 @@ class UpdateGServers
// There are duplicated "url" but not "nurl". So we check both addresses instead of just overwriting them,
// 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++;
}
}

View file

@ -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" => [

View file

@ -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`"

View file

@ -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

View file

@ -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;

View file

@ -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);
}

View file

@ -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);

View file

@ -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);

View file

@ -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;
}

View file

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -19,7 +19,7 @@ msgstr ""
#: mod/cal.php:46 mod/cal.php:50 mod/follow.php:39 mod/redir.php:36
#: mod/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 <strong>everybody</strong>"
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 ""
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %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 - <a href=\"%s\" "
"id=\"cnftheme\">Change default theme settings</a>"
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</a> 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 nodes 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 "
"<a href=\"/settings/display\">Theme Customization settings</a>."
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 <a href=\"/compose\">Compose page</a> "
"instead of the modal form. When this is disabled, the Compose page can be "
"accessed with a middle click on the link or from the modal."
msgstr ""
#: view/theme/frio/config.php:192
msgid "Login page background image"
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 ""

View file

@ -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 <tobias.diekershoff@gmx.net>, 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 "<span %1$s>%2$d Personen</span> haben dies geteilt"
msgid "Visible to <strong>everybody</strong>"
msgstr "Für <strong>jedermann</strong> sichtbar"
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:171
#: src/Content/Conversation.php:308 src/Module/Item/Compose.php:198
#: src/Object/Post.php:1002
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 "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a>%3$s"
#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3343
#: src/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 ""
"<p>This file can be downloaded from the <code>/friendica</code> path of any "
"Friendica server.</p>"
msgstr ""
msgstr "<p>Diese Datei kann vom <code>/friendica</code> Pfad auf jedem Friendica Server heruntergeladen werden.</p>"
#: src/Module/Admin/Blocklist/Server/Import.php:120
#: src/Module/Admin/Blocklist/Server/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 <a href=\"/fr
#: src/Module/Admin/Blocklist/Server/Index.php:102
msgid "Import server domain pattern blocklist"
msgstr ""
msgstr "Server Domain Muster Blockliste importieren"
#: src/Module/Admin/Blocklist/Server/Index.php:103
msgid "Add new entry to the blocklist"
@ -4905,75 +4853,75 @@ msgstr "Feature festlegen: %s"
msgid "Manage Additional Features"
msgstr "Zusätzliche Features Verwalten"
#: src/Module/Admin/Federation.php:68
#: src/Module/Admin/Federation.php:69
msgid "Other"
msgstr "Andere"
#: src/Module/Admin/Federation.php:140 src/Module/Admin/Federation.php:389
#: src/Module/Admin/Federation.php:141 src/Module/Admin/Federation.php:390
msgid "unknown"
msgstr "Unbekannt"
#: 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
#, php-format
msgid "%2$s active user last month"
msgid_plural "%2$s active users last month"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "%2$sServer gesamt"
msgstr[1] "%2$s Server gesamt"
#: src/Module/Admin/Federation.php:175
#, php-format
msgid "%2$s active user last six months"
msgid_plural "%2$s active users last six months"
msgstr[0] ""
msgstr[1] ""
msgid "%2$s active user last month"
msgid_plural "%2$s active users last month"
msgstr[0] "%2$s aktiver Nutzer im letzten Monat"
msgstr[1] "%2$s aktive Nutzer im letzten Monat"
#: src/Module/Admin/Federation.php:176
#, php-format
msgid "%2$s registered user"
msgid_plural "%2$s registered users"
msgstr[0] ""
msgstr[1] ""
msgid "%2$s active user last six months"
msgid_plural "%2$s active users last six months"
msgstr[0] "%2$s aktive Nutzer im letzten halben Jahr"
msgstr[1] "%2$s aktive Nutzer im letzten halben Jahr"
#: src/Module/Admin/Federation.php:177
#, php-format
msgid "%2$s registered user"
msgid_plural "%2$s registered users"
msgstr[0] "%2$sregistrierter Nutzer"
msgstr[1] "%2$s registrierte Nutzer"
#: src/Module/Admin/Federation.php:178
#, php-format
msgid "%2$s locally created post or comment"
msgid_plural "%2$s locally created posts and comments"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "%2$slokal erstellter Beitrag oder Kommentar"
msgstr[1] "%2$slokal erstellte Beiträge und Kommentare"
#: 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] ""
msgstr[0] "%2$sBeitrag pro Nutzer"
msgstr[1] "%2$sBeiträge pro Nutzer"
#: 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] ""
msgstr[0] "%2$sNutzer pro System"
msgstr[1] "%2$sNutzer pro System"
#: 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 "Diese Seite präsentiert einige Zahlen zu dem bekannten Teil des föderalen sozialen Netzwerks, von dem deine Friendica Installation ein Teil ist. Diese Zahlen sind nicht absolut und reflektieren nur den Teil des Netzwerks, den dein Knoten kennt."
#: src/Module/Admin/Federation.php:201 src/Module/BaseAdmin.php:90
#: src/Module/Admin/Federation.php:202 src/Module/BaseAdmin.php:90
msgid "Federation Statistics"
msgstr "Föderation Statistik"
#: 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, "
@ -4983,8 +4931,8 @@ msgid_plural ""
"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:"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Derzeit kennt dieser Knoten %2$s andere Knoten (mit %3$s aktiven Nutzern im letzten Monat, %4$s aktiven Nutzern im letzten halben Jahr, %5$s registrierten Nutzern insgesamt) von den folgenden Plattformen:"
msgstr[1] "Derzeit kennt dieser Knoten %2$s andere Knoten (mit %3$s aktiven Nutzern im letzten Monat, %4$s aktiven Nutzern im letzten halben Jahr, %5$s registrierten Nutzern insgesamt) von den folgenden Plattformen:"
#: src/Module/Admin/Item/Delete.php:53
msgid "Item marked for deletion."
@ -6068,13 +6016,13 @@ msgstr "Auf großen Knoten kann die Volltext-Suche das System ausbremsen."
#: src/Module/Admin/Site.php:539
msgid "Generate counts per contact group when calculating network count"
msgstr ""
msgstr "Erstelle Zählungen je Kontaktgruppe bei der Berechnung der Netzwerkanzahl"
#: src/Module/Admin/Site.php:539
msgid ""
"On systems with users that heavily use contact groups the query can be very "
"expensive."
msgstr ""
msgstr "Auf Systemen mit Benutzern, die häufig Kontaktgruppen verwenden, kann die Abfrage sehr aufwändig sein."
#: src/Module/Admin/Site.php:541
msgid "Maximum number of parallel workers"
@ -6653,12 +6601,12 @@ msgstr "Hinweis vom Nutzer"
msgid "Deny"
msgstr "Verwehren"
#: src/Module/Api/ApiResponse.php:272
#: src/Module/Api/ApiResponse.php:279
#, php-format
msgid "API endpoint %s %s is not implemented"
msgstr "API Endpunkt %s %s ist nicht implementiert"
#: src/Module/Api/ApiResponse.php:273
#: src/Module/Api/ApiResponse.php:280
msgid ""
"The API endpoint is currently not implemented but might be in the future."
msgstr "The API endpoint is currently not implemented but might be in the future."
@ -6820,10 +6768,10 @@ msgstr[1] "Das wöchentliche Limit von %d Beiträgen wurde erreicht. Der Beitrag
msgid "Monthly posting limit of %d post reached. The post was rejected."
msgid_plural ""
"Monthly posting limit of %d posts reached. The post was rejected."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Das monatliche Limit von %d Beitrag wurde erreicht. Der Beitrag wurde verworfen."
msgstr[1] "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen."
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:460
#: src/Module/BaseProfile.php:51 src/Module/Contact.php:463
msgid "Profile Details"
msgstr "Profildetails"
@ -6897,110 +6845,110 @@ msgid_plural "%d contacts edited."
msgstr[0] "%d Kontakt bearbeitet."
msgstr[1] "%d Kontakte bearbeitet."
#: src/Module/Contact.php:309
#: src/Module/Contact.php:312
msgid "Show all contacts"
msgstr "Alle Kontakte anzeigen"
#: src/Module/Contact.php:317
#: src/Module/Contact.php:320
msgid "Only show pending contacts"
msgstr "Zeige nur noch ausstehende Kontakte."
#: src/Module/Contact.php:325
#: src/Module/Contact.php:328
msgid "Only show blocked contacts"
msgstr "Nur blockierte Kontakte anzeigen"
#: src/Module/Contact.php:330 src/Module/Contact.php:377
#: src/Module/Contact.php:333 src/Module/Contact.php:380
#: src/Object/Post.php:339
msgid "Ignored"
msgstr "Ignoriert"
#: src/Module/Contact.php:333
#: src/Module/Contact.php:336
msgid "Only show ignored contacts"
msgstr "Nur ignorierte Kontakte anzeigen"
#: src/Module/Contact.php:338 src/Module/Contact.php:378
#: src/Module/Contact.php:341 src/Module/Contact.php:381
msgid "Archived"
msgstr "Archiviert"
#: src/Module/Contact.php:341
#: src/Module/Contact.php:344
msgid "Only show archived contacts"
msgstr "Nur archivierte Kontakte anzeigen"
#: src/Module/Contact.php:346 src/Module/Contact.php:376
#: src/Module/Contact.php:349 src/Module/Contact.php:379
msgid "Hidden"
msgstr "Verborgen"
#: src/Module/Contact.php:349
#: src/Module/Contact.php:352
msgid "Only show hidden contacts"
msgstr "Nur verborgene Kontakte anzeigen"
#: src/Module/Contact.php:357
#: src/Module/Contact.php:360
msgid "Organize your contact groups"
msgstr "Verwalte deine Kontaktgruppen"
#: src/Module/Contact.php:389
#: src/Module/Contact.php:392
msgid "Search your contacts"
msgstr "Suche in deinen Kontakten"
#: src/Module/Contact.php:390 src/Module/Search/Index.php:207
#: src/Module/Contact.php:393 src/Module/Search/Index.php:207
#, php-format
msgid "Results for: %s"
msgstr "Ergebnisse für: %s"
#: src/Module/Contact.php:397
#: src/Module/Contact.php:400
msgid "Update"
msgstr "Aktualisierungen"
#: src/Module/Contact.php:399 src/Module/Contact/Profile.php:349
#: src/Module/Contact.php:402 src/Module/Contact/Profile.php:349
#: src/Module/Contact/Profile.php:457
msgid "Unignore"
msgstr "Ignorieren aufheben"
#: src/Module/Contact.php:401
#: src/Module/Contact.php:404
msgid "Batch Actions"
msgstr "Stapelverarbeitung"
#: src/Module/Contact.php:436
#: src/Module/Contact.php:439
msgid "Conversations started by this contact"
msgstr "Unterhaltungen, die von diesem Kontakt begonnen wurden"
#: src/Module/Contact.php:441
#: src/Module/Contact.php:444
msgid "Posts and Comments"
msgstr "Statusnachrichten und Kommentare"
#: src/Module/Contact.php:452
#: src/Module/Contact.php:455
msgid "Posts containing media objects"
msgstr "Beiträge die Medien Objekte beinhalten"
#: src/Module/Contact.php:467
#: src/Module/Contact.php:470
msgid "View all known contacts"
msgstr "Alle bekannten Kontakte anzeigen"
#: src/Module/Contact.php:477
#: src/Module/Contact.php:480
msgid "Advanced Contact Settings"
msgstr "Fortgeschrittene Kontakteinstellungen"
#: src/Module/Contact.php:511
#: src/Module/Contact.php:514
msgid "Mutual Friendship"
msgstr "Beidseitige Freundschaft"
#: src/Module/Contact.php:515
#: src/Module/Contact.php:518
msgid "is a fan of yours"
msgstr "ist ein Fan von dir"
#: src/Module/Contact.php:519
#: src/Module/Contact.php:522
msgid "you are a fan of"
msgstr "Du bist Fan von"
#: src/Module/Contact.php:537
#: src/Module/Contact.php:540
msgid "Pending outgoing contact request"
msgstr "Ausstehende ausgehende Kontaktanfrage"
#: src/Module/Contact.php:539
#: src/Module/Contact.php:542
msgid "Pending incoming contact request"
msgstr "Ausstehende eingehende Kontaktanfrage"
#: src/Module/Contact.php:552 src/Module/Contact/Profile.php:334
#: src/Module/Contact.php:555 src/Module/Contact/Profile.php:334
#, php-format
msgid "Visit %s's profile [%s]"
msgstr "Besuche %ss Profil [%s]"
@ -7089,30 +7037,6 @@ msgid_plural "Contacts (%s)"
msgstr[0] "Kontakt (%s)"
msgstr[1] "Kontakte (%s)"
#: src/Module/Contact/Poke.php:135
msgid "Error while sending poke, please retry."
msgstr "Beim Versenden des Stupsers ist ein Fehler aufgetreten. Bitte erneut versuchen."
#: src/Module/Contact/Poke.php:148 src/Module/Search/Acl.php:55
msgid "You must be logged in to use this module."
msgstr "Du musst eingeloggt sein, um dieses Modul benutzen zu können."
#: src/Module/Contact/Poke.php:171
msgid "Poke/Prod"
msgstr "Anstupsen"
#: src/Module/Contact/Poke.php:172
msgid "poke, prod or do other things to somebody"
msgstr "Stupse Leute an oder mache anderes mit ihnen"
#: src/Module/Contact/Poke.php:174
msgid "Choose what you wish to do to recipient"
msgstr "Was willst du mit dem Empfänger machen:"
#: src/Module/Contact/Poke.php:175
msgid "Make this post private"
msgstr "Diesen Beitrag privat machen"
#: src/Module/Contact/Profile.php:127
msgid "Failed to update contact record."
msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
@ -7370,45 +7294,45 @@ msgstr "Willst du das Folgen dieses Kontakt wirklich widerrufen? Dies kann nicht
msgid "Yes"
msgstr "Ja"
#: src/Module/Conversation/Community.php:68
msgid "Local Community"
msgstr "Lokale Gemeinschaft"
#: src/Module/Conversation/Community.php:71
msgid "Posts from local users on this server"
msgstr "Beiträge von Nutzern dieses Servers"
#: src/Module/Conversation/Community.php:79
msgid "Global Community"
msgstr "Globale Gemeinschaft"
#: src/Module/Conversation/Community.php:82
msgid "Posts from users of the whole federated network"
msgstr "Beiträge von Nutzern des gesamten föderalen Netzwerks"
#: src/Module/Conversation/Community.php:115
msgid "Own Contacts"
msgstr "Eigene Kontakte"
#: src/Module/Conversation/Community.php:119
msgid "Include"
msgstr "Einschließen"
#: src/Module/Conversation/Community.php:120
msgid "Hide"
msgstr "Verbergen"
#: src/Module/Conversation/Community.php:137 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194
msgid "No results."
msgstr "Keine Ergebnisse."
#: src/Module/Conversation/Community.php:162
#: src/Module/Conversation/Community.php:61
msgid ""
"This community stream shows all public posts received by this node. They may"
" not reflect the opinions of this nodes users."
msgstr "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers."
#: src/Module/Conversation/Community.php:74
msgid "Local Community"
msgstr "Lokale Gemeinschaft"
#: src/Module/Conversation/Community.php:77
msgid "Posts from local users on this server"
msgstr "Beiträge von Nutzern dieses Servers"
#: src/Module/Conversation/Community.php:85
msgid "Global Community"
msgstr "Globale Gemeinschaft"
#: src/Module/Conversation/Community.php:88
msgid "Posts from users of the whole federated network"
msgstr "Beiträge von Nutzern des gesamten föderalen Netzwerks"
#: src/Module/Conversation/Community.php:121
msgid "Own Contacts"
msgstr "Eigene Kontakte"
#: src/Module/Conversation/Community.php:125
msgid "Include"
msgstr "Einschließen"
#: src/Module/Conversation/Community.php:126
msgid "Hide"
msgstr "Verbergen"
#: src/Module/Conversation/Community.php:143 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194
msgid "No results."
msgstr "Keine Ergebnisse."
#: src/Module/Conversation/Community.php:199
msgid "Community option not available."
msgstr "Optionen für die Gemeinschaftsseite nicht verfügbar."
@ -7775,14 +7699,14 @@ msgstr "Ergebnisse für:"
msgid "Site Directory"
msgstr "Verzeichnis"
#: src/Module/Filer/RemoveTag.php:68
msgid "Item was not removed"
msgstr "Item wurde nicht entfernt"
#: src/Module/Filer/RemoveTag.php:71
#: src/Module/Filer/RemoveTag.php:101
msgid "Item was not deleted"
msgstr "Item wurde nicht gelöscht"
#: src/Module/Filer/RemoveTag.php:111
msgid "Item was not removed"
msgstr "Item wurde nicht entfernt"
#: src/Module/Filer/SaveTag.php:72
msgid "- select -"
msgstr "- auswählen -"
@ -7823,7 +7747,7 @@ msgstr "Auf diesem Server werden die folgenden, entfernten Server blockiert."
#: src/Module/Friendica.php:84
msgid "Download this list in CSV format"
msgstr ""
msgstr "Liste im CSV-Format herunterladen"
#: src/Module/Friendica.php:98
#, php-format
@ -8208,40 +8132,46 @@ msgid ""
"important, please visit http://friendi.ca"
msgstr "Für weitere Informationen über das Friendica-Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendi.ca."
#: src/Module/Item/Compose.php:50
#: src/Module/Item/Compose.php:85
msgid "Please enter a post body."
msgstr "Bitte gibt den Text des Beitrags an"
#: src/Module/Item/Compose.php:63
#: src/Module/Item/Compose.php:98
msgid "This feature is only available with the frio theme."
msgstr "Diese Seite kann ausschließlich mit dem Frio Theme verwendet werden."
#: src/Module/Item/Compose.php:90
#: src/Module/Item/Compose.php:122
msgid "Compose new personal note"
msgstr "Neue persönliche Notiz verfassen"
#: src/Module/Item/Compose.php:99
#: src/Module/Item/Compose.php:131
msgid "Compose new post"
msgstr "Neuen Beitrag verfassen"
#: src/Module/Item/Compose.php:153
#: src/Module/Item/Compose.php:187
msgid "Visibility"
msgstr "Sichtbarkeit"
#: src/Module/Item/Compose.php:174
#: src/Module/Item/Compose.php:201
msgid "Clear the location"
msgstr "Ort löschen"
#: src/Module/Item/Compose.php:175
#: src/Module/Item/Compose.php:202
msgid "Location services are unavailable on your device"
msgstr "Ortungsdienste sind auf Ihrem Gerät nicht verfügbar"
#: 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 "Ortungsdienste sind deaktiviert. Bitte überprüfe die Berechtigungen der Website auf deinem Gerät"
#: src/Module/Item/Compose.php:209
msgid ""
"You can make this page always open when you use the New Post button in the "
"<a href=\"/settings/display\">Theme Customization settings</a>."
msgstr "Wenn du magst, kannst du unter den <a href=\"/settings/display\">Benutzerdefinierte Theme-Einstellungen</a> einstellen, dass diese Seite immer geöffnet wird, wenn du den \"Neuer Beitrag\" Button verwendest."
#: src/Module/Item/Follow.php:52
msgid "Unable to follow this item."
msgstr "Konnte dem Beitrag nicht folgen."
@ -8471,7 +8401,7 @@ msgid ""
"class=\"btn btn-sm pull-right\">Cancel</a>"
msgstr "Du betrachtest dein Profil gerade als <b>%s</b> <a href=\"%s\" class=\"btn btn-sm pull-right\">Abbrechen</a>"
#: 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 <a
msgid "Your Webfinger address or profile URL:"
msgstr "Deine Webfinger Adresse oder Profil-URL"
#: src/Module/Search/Acl.php:55
msgid "You must be logged in to use this module."
msgstr "Du musst eingeloggt sein, um dieses Modul benutzen zu können."
#: src/Module/Search/Index.php:69
msgid "Only logged in users are permitted to perform a search."
msgstr "Nur eingeloggten Benutzern ist das Suchen gestattet."
@ -8828,16 +8762,16 @@ msgid ""
msgstr "Nutzerkonto nicht gefunden. Bitte registriere ein neues Konto oder melde dich mit einem existierendem Konto an um diene OpenID hinzuzufügen."
#: src/Module/Security/PasswordTooLong.php:53
#: src/Module/Settings/Account.php:66
#: src/Module/Settings/Account.php:67
msgid "Passwords do not match."
msgstr "Die Passwörter stimmen nicht überein."
#: src/Module/Security/PasswordTooLong.php:60
msgid "Password does not need changing."
msgstr ""
msgstr "Passwort muss nicht geändert werden."
#: src/Module/Security/PasswordTooLong.php:73
#: src/Module/Settings/Account.php:80
#: src/Module/Settings/Account.php:81
msgid "Password unchanged."
msgstr "Passwort unverändert."
@ -8850,31 +8784,31 @@ msgid ""
"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."
msgstr ""
msgstr "Mit der Version 2022.09 haben wir festgestellt, dass jedes Passwort, das länger als 72 Zeichen ist, beim Hashing abgeschnitten wird. Um Verwirrung über dieses Verhalten zu vermeiden, aktualisieren Sie Ihr Passwort bitte so, dass es höchstens 72 Zeichen hat."
#: src/Module/Security/PasswordTooLong.php:89
msgid "Update Password"
msgstr "Passwort aktualisieren"
#: src/Module/Security/PasswordTooLong.php:96
#: src/Module/Settings/Account.php:571
#: src/Module/Settings/Account.php:572
msgid "Current Password:"
msgstr "Aktuelles Passwort:"
#: src/Module/Security/PasswordTooLong.php:96
#: src/Module/Settings/Account.php:571
#: src/Module/Settings/Account.php:572
msgid "Your current password to confirm the changes"
msgstr "Dein aktuelles Passwort um die Änderungen zu bestätigen"
#: src/Module/Security/PasswordTooLong.php:97
#: src/Module/Settings/Account.php:554
#: src/Module/Settings/Account.php:555
msgid ""
"Allowed characters are a-z, A-Z, 0-9 and special characters except white "
"spaces, accentuated letters and colon (:)."
msgstr "Erlaubte Zeichen sind a-z, A-Z, 0-9 und Sonderzeichen, abgesehen von Leerzeichen, Doppelpunkten (:) und akzentuierten Buchstaben."
#: src/Module/Security/PasswordTooLong.php:97
#: src/Module/Settings/Account.php:555
#: src/Module/Settings/Account.php:556
msgid "Password length is limited to 72 characters."
msgstr "Die Länge des Passworts ist auf 72 Zeichen begrenzt."
@ -8978,119 +8912,119 @@ msgstr "Bitte gebe einen Code aus Ihrer Authentifizierungs-App ein"
msgid "Verify code and complete login"
msgstr "Code überprüfen und Anmeldung abschließen"
#: src/Module/Settings/Account.php:95
#: src/Module/Settings/Account.php:96
msgid "Please use a shorter name."
msgstr "Bitte verwende einen kürzeren Namen."
#: src/Module/Settings/Account.php:98
#: src/Module/Settings/Account.php:99
msgid "Name too short."
msgstr "Der Name ist zu kurz."
#: src/Module/Settings/Account.php:107
#: src/Module/Settings/Account.php:108
msgid "Wrong Password."
msgstr "Falsches Passwort"
#: src/Module/Settings/Account.php:112
#: src/Module/Settings/Account.php:113
msgid "Invalid email."
msgstr "Ungültige E-Mail-Adresse."
#: src/Module/Settings/Account.php:118
#: src/Module/Settings/Account.php:119
msgid "Cannot change to that email."
msgstr "Ändern der E-Mail nicht möglich. "
#: src/Module/Settings/Account.php:148 src/Module/Settings/Account.php:200
#: src/Module/Settings/Account.php:220 src/Module/Settings/Account.php:304
#: src/Module/Settings/Account.php:353
#: src/Module/Settings/Account.php:149 src/Module/Settings/Account.php:201
#: src/Module/Settings/Account.php:221 src/Module/Settings/Account.php:305
#: src/Module/Settings/Account.php:354
msgid "Settings were not updated."
msgstr "Einstellungen nicht aktualisiert"
#: src/Module/Settings/Account.php:365
#: src/Module/Settings/Account.php:366
msgid "Contact CSV file upload error"
msgstr "Fehler beim Hochladen der Kontakt CSV Datei"
#: src/Module/Settings/Account.php:384
#: src/Module/Settings/Account.php:385
msgid "Importing Contacts done"
msgstr "Kontakte wurden importiert."
#: src/Module/Settings/Account.php:397
#: src/Module/Settings/Account.php:398
msgid "Relocate message has been send to your contacts"
msgstr "Die Umzugsbenachrichtigung wurde an Deine Kontakte versendet."
#: src/Module/Settings/Account.php:414
#: src/Module/Settings/Account.php:415
msgid "Unable to find your profile. Please contact your admin."
msgstr "Konnte dein Profil nicht finden. Bitte kontaktiere den Admin."
#: src/Module/Settings/Account.php:456
#: src/Module/Settings/Account.php:457
msgid "Personal Page Subtypes"
msgstr "Unterarten der persönlichen Seite"
#: src/Module/Settings/Account.php:457
#: src/Module/Settings/Account.php:458
msgid "Community Forum Subtypes"
msgstr "Unterarten des Gemeinschaftsforums"
#: src/Module/Settings/Account.php:467
#: src/Module/Settings/Account.php:468
msgid "Account for a personal profile."
msgstr "Konto für ein persönliches Profil."
#: src/Module/Settings/Account.php:474
#: src/Module/Settings/Account.php:475
msgid ""
"Account for an organisation that automatically approves contact requests as "
"\"Followers\"."
msgstr "Konto für eine Organisation, das Kontaktanfragen automatisch als \"Follower\" annimmt."
#: src/Module/Settings/Account.php:481
#: src/Module/Settings/Account.php:482
msgid ""
"Account for a news reflector that automatically approves contact requests as"
" \"Followers\"."
msgstr "Konto für einen Feedspiegel, das Kontaktanfragen automatisch als \"Follower\" annimmt."
#: src/Module/Settings/Account.php:488
#: src/Module/Settings/Account.php:489
msgid "Account for community discussions."
msgstr "Konto für Diskussionsforen. "
#: src/Module/Settings/Account.php:495
#: src/Module/Settings/Account.php:496
msgid ""
"Account for a regular personal profile that requires manual approval of "
"\"Friends\" and \"Followers\"."
msgstr "Konto für ein normales, persönliches Profil. Kontaktanfragen müssen manuell als \"Friend\" oder \"Follower\" bestätigt werden."
#: src/Module/Settings/Account.php:502
#: src/Module/Settings/Account.php:503
msgid ""
"Account for a public profile that automatically approves contact requests as"
" \"Followers\"."
msgstr "Konto für ein öffentliches Profil, das Kontaktanfragen automatisch als \"Follower\" annimmt."
#: src/Module/Settings/Account.php:509
#: src/Module/Settings/Account.php:510
msgid "Automatically approves all contact requests."
msgstr "Bestätigt alle Kontaktanfragen automatisch."
#: src/Module/Settings/Account.php:516
#: src/Module/Settings/Account.php:517
msgid ""
"Account for a popular profile that automatically approves contact requests "
"as \"Friends\"."
msgstr "Konto für ein gefragtes Profil, das Kontaktanfragen automatisch als \"Friend\" annimmt."
#: src/Module/Settings/Account.php:521
#: src/Module/Settings/Account.php:522
msgid "Private Forum [Experimental]"
msgstr "Privates Forum [Versuchsstadium]"
#: src/Module/Settings/Account.php:523
#: src/Module/Settings/Account.php:524
msgid "Requires manual approval of contact requests."
msgstr "Kontaktanfragen müssen manuell bestätigt werden."
#: src/Module/Settings/Account.php:532
#: src/Module/Settings/Account.php:533
msgid "OpenID:"
msgstr "OpenID:"
#: src/Module/Settings/Account.php:532
#: src/Module/Settings/Account.php:533
msgid "(Optional) Allow this OpenID to login to this account."
msgstr "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID."
#: src/Module/Settings/Account.php:540
#: src/Module/Settings/Account.php:541
msgid "Publish your profile in your local site directory?"
msgstr "Darf dein Profil im lokalen Verzeichnis dieses Servers veröffentlicht werden?"
#: src/Module/Settings/Account.php:540
#: src/Module/Settings/Account.php:541
#, php-format
msgid ""
"Your profile will be published in this node's <a href=\"%s\">local "
@ -9098,89 +9032,89 @@ msgid ""
" system settings."
msgstr "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein."
#: 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. <a href=\"%s\">%s</a>)."
msgstr "Dein Profil wird auch in den globalen Friendica Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht werden."
#: 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 <strong>'%s'</strong> or '%s'."
msgstr "Die Adresse deines Profils lautet <strong>'%s'</strong> oder '%s'."
#: src/Module/Settings/Account.php:568
#: src/Module/Settings/Account.php:569
msgid "Password Settings"
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: <strong>%s</strong> <a href=\"%s\">Change in Settings</a>"
msgstr "Zeitzone: <strong>%s</strong> <a href=\"%s\">Änderbar in den Einstellungen</a>"
#: src/Util/Temporal.php:318
#: src/Util/Temporal.php:321
msgid "never"
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 <a href=\"/compose\">Compose page</a> "
"instead of the modal form. When this is disabled, the Compose page can be "
"accessed with a middle click on the link or from the modal."
msgstr "Neue Beiträge werden immer in der <a href=\"/compose\">Composer Seite</a> anstelle des Dialoges bearbeitet. Ist diese Option deaktiviert, kann die Composer Seite durch einen Klick mit der mittleren Maustaste geöffnet werden."
#: view/theme/frio/config.php:192
msgid "Login page background image"
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"

View file

@ -521,12 +521,17 @@ $a->strings['You subscribed to one or more tags in this post.'] = 'Du folgst ein
$a->strings['Reshared'] = 'Geteilt';
$a->strings['Reshared 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['<p>This file can be downloaded from the <code>/friendica</code> path of any Friendica server.</p>'] = '<p>Diese Datei kann vom <code>/friendica</code> Pfad auf jedem Friendica Server heruntergeladen werden.</p>';
$a->strings['Upload file'] = 'Datei hochladen';
$a->strings['Patterns to import'] = 'Zu importierende Muster';
$a->strings['Domain Pattern'] = 'Domain Muster';
$a->strings['Import Mode'] = 'Importmodus';
$a->strings['Import Patterns'] = 'Muster importieren';
$a->strings['%d total pattern'] = [
0 => '%dMuster gesamt',
1 => '%dMuster gesamt',
];
$a->strings['Server domain pattern blocklist CSV file'] = 'Server Domain Muster Blockliste CSV-Datei';
$a->strings['Append'] = 'Anhängen';
$a->strings['Imports patterns from the file that weren\'t already existing in the current blocklist.'] = 'Importiert Muster aus der Datei, die nicht bereits in der aktuellen Blockliste vorhanden waren.';
$a->strings['Replace'] = 'Ersetzen';
$a->strings['Replaces the current blocklist by the imported patterns.'] = 'Ersetzt die aktuelle Blockliste durch die importierten Muster.';
$a->strings['Blocked server domain pattern'] = 'Blockierte Server Domain Muster';
$a->strings['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 <a href="/friendica">/friendica</a> page so that your users and people investigating communication problems can find the reason easily.'] = 'Die Liste der blockierten Domain Muster wird auf der Seite <a href="/friendica">/friendica</a> öffentlich einsehbar gemacht, damit deine Nutzer und Personen, die Kommunikationsprobleme erkunden, die Ursachen einfach finden können.';
$a->strings['Import server domain pattern blocklist'] = 'Server Domain Muster Blockliste importieren';
$a->strings['Add new entry to the blocklist'] = 'Neuen Eintrag in die Blockliste';
$a->strings['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 nodes users.'] = 'Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.';
$a->strings['Local Community'] = 'Lokale Gemeinschaft';
$a->strings['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 nodes users.'] = 'Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.';
$a->strings['Community option not available.'] = 'Optionen für die Gemeinschaftsseite nicht verfügbar.';
$a->strings['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 <a href="%1$s/tos">Terms of Service</a> of this node.'] = 'Erfahre mehr über die <a href="%1$s/tos">Nutzungsbedingungen</a> dieses Knotens.';
$a->strings['On this server the following remote servers are blocked.'] = 'Auf diesem Server werden die folgenden, entfernten Server blockiert.';
$a->strings['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 <a href="https://friendi.ca">Friendi.ca</a> to learn more about the Friendica project.'] = 'Bitte besuche <a href="https://friendi.ca">Friendi.ca</a>, um mehr über das Friendica-Projekt zu erfahren.';
$a->strings['Bug reports and issues: please visit'] = 'Probleme oder Fehler gefunden? Bitte besuche';
@ -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 <a href="/settings/display">Theme Customization settings</a>.'] = 'Wenn du magst, kannst du unter den <a href="/settings/display">Benutzerdefinierte Theme-Einstellungen</a> einstellen, dass diese Seite immer geöffnet wird, wenn du den "Neuer Beitrag" Button verwendest.';
$a->strings['Unable to follow this item.'] = 'Konnte dem Beitrag nicht folgen.';
$a->strings['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 <strong>%s</strong> or <strong>%s</strong> directly on your system.'] = 'Gib entweder deine Webfinger- (user@domain.tld) oder die Profil-Adresse an. Wenn dies von deinem System nicht unterstützt wird, folge bitte <strong>%s</strong> oder <strong>%s</strong> direkt von deinem System. ';
$a->strings['If you are not yet a member of the free social web, <a href="%s">follow this link to find a public Friendica node and join us today</a>.'] = 'Solltest du das freie Soziale Netzwerk noch nicht benutzen, kannst du <a href="%s">diesem Link folgen</a> um eine öffentliche Friendica Instanz zu finden um noch heute dem Netzwerk beizutreten.';
$a->strings['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 <a href="/compose">Compose page</a> instead of the modal form. When this is disabled, the Compose page can be accessed with a middle click on the link or from the modal.'] = 'Neue Beiträge werden immer in der <a href="/compose">Composer Seite</a> anstelle des Dialoges bearbeitet. Ist diese Option deaktiviert, kann die Composer Seite durch einen Klick mit der mittleren Maustaste geöffnet werden.';
$a->strings['Login page background image'] = 'Hintergrundbild der Login-Seite';
$a->strings['Login page background 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.';

View file

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

View file

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

View file

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

View file

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

View file

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