diff --git a/database.sql b/database.sql
index 71a5f0ae5f..f471aec907 100644
--- a/database.sql
+++ b/database.sql
@@ -80,7 +80,7 @@ CREATE TABLE IF NOT EXISTS `user` (
`pwdreset` varchar(255) COMMENT 'Password reset request token',
`pwdreset_time` datetime COMMENT 'Timestamp of the last password reset request',
`maxreq` int unsigned NOT NULL DEFAULT 10 COMMENT '',
- `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
+ `expire` int unsigned NOT NULL DEFAULT 0 COMMENT 'Delay in days before deleting user-related posts. Scope is controlled by pConfig.',
`account_removed` boolean NOT NULL DEFAULT '0' COMMENT 'if 1 the account is removed',
`account_expired` boolean NOT NULL DEFAULT '0' COMMENT '',
`account_expires_on` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp when account expires and will be deleted',
diff --git a/doc/database/db_user.md b/doc/database/db_user.md
index 611fb76b05..85fe895e98 100644
--- a/doc/database/db_user.md
+++ b/doc/database/db_user.md
@@ -6,53 +6,53 @@ The local users
Fields
------
-| Field | Description | Type | Null | Key | Default | Extra |
-| ------------------------ | --------------------------------------------------------- | ------------------ | ---- | --- | ------------------- | -------------- |
-| uid | sequential ID | mediumint unsigned | NO | PRI | NULL | auto_increment |
-| parent-uid | The parent user that has full control about this user | mediumint unsigned | YES | | NULL | |
-| guid | A unique identifier for this user | varchar(64) | NO | | | |
-| username | Name that this user is known by | varchar(255) | NO | | | |
-| password | encrypted password | varchar(255) | NO | | | |
-| legacy_password | Is the password hash double-hashed? | boolean | NO | | 0 | |
-| nickname | nick- and user name | varchar(255) | NO | | | |
-| email | the users email address | varchar(255) | NO | | | |
-| openid | | varchar(255) | NO | | | |
-| timezone | PHP-legal timezone | varchar(128) | NO | | | |
-| language | default language | varchar(32) | NO | | en | |
-| register_date | timestamp of registration | datetime | NO | | 0001-01-01 00:00:00 | |
-| login_date | timestamp of last login | datetime | NO | | 0001-01-01 00:00:00 | |
-| default-location | Default for item.location | varchar(255) | NO | | | |
-| allow_location | 1 allows to display the location | boolean | NO | | 0 | |
-| theme | user theme preference | varchar(255) | NO | | | |
-| pubkey | RSA public key 4096 bit | text | YES | | NULL | |
-| prvkey | RSA private key 4096 bit | text | YES | | NULL | |
-| spubkey | | text | YES | | NULL | |
-| sprvkey | | text | YES | | NULL | |
-| verified | user is verified through email | boolean | NO | | 0 | |
-| blocked | 1 for user is blocked | boolean | NO | | 0 | |
-| blockwall | Prohibit contacts to post to the profile page of the user | boolean | NO | | 0 | |
-| hidewall | Hide profile details from unkown viewers | boolean | NO | | 0 | |
-| blocktags | Prohibit contacts to tag the post of this user | boolean | NO | | 0 | |
-| unkmail | Permit unknown people to send private mails to this user | boolean | NO | | 0 | |
-| cntunkmail | | int unsigned | NO | | 10 | |
-| notify-flags | email notification options | smallint unsigned | NO | | 65535 | |
-| page-flags | page/profile type | tinyint unsigned | NO | | 0 | |
-| account-type | | tinyint unsigned | NO | | 0 | |
-| prvnets | | boolean | NO | | 0 | |
-| pwdreset | Password reset request token | varchar(255) | YES | | NULL | |
-| pwdreset_time | Timestamp of the last password reset request | datetime | YES | | NULL | |
-| maxreq | | int unsigned | NO | | 10 | |
-| expire | | int unsigned | NO | | 0 | |
-| account_removed | if 1 the account is removed | boolean | NO | | 0 | |
-| account_expired | | boolean | NO | | 0 | |
-| account_expires_on | timestamp when account expires and will be deleted | datetime | NO | | 0001-01-01 00:00:00 | |
-| expire_notification_sent | timestamp of last warning of account expiration | datetime | NO | | 0001-01-01 00:00:00 | |
-| def_gid | | int unsigned | NO | | 0 | |
-| allow_cid | default permission for this user | mediumtext | YES | | NULL | |
-| allow_gid | default permission for this user | mediumtext | YES | | NULL | |
-| deny_cid | default permission for this user | mediumtext | YES | | NULL | |
-| deny_gid | default permission for this user | mediumtext | YES | | NULL | |
-| openidserver | | text | YES | | NULL | |
+| Field | Description | Type | Null | Key | Default | Extra |
+| ------------------------ | --------------------------------------------------------------------------------- | ------------------ | ---- | --- | ------------------- | -------------- |
+| uid | sequential ID | mediumint unsigned | NO | PRI | NULL | auto_increment |
+| parent-uid | The parent user that has full control about this user | mediumint unsigned | YES | | NULL | |
+| guid | A unique identifier for this user | varchar(64) | NO | | | |
+| username | Name that this user is known by | varchar(255) | NO | | | |
+| password | encrypted password | varchar(255) | NO | | | |
+| legacy_password | Is the password hash double-hashed? | boolean | NO | | 0 | |
+| nickname | nick- and user name | varchar(255) | NO | | | |
+| email | the users email address | varchar(255) | NO | | | |
+| openid | | varchar(255) | NO | | | |
+| timezone | PHP-legal timezone | varchar(128) | NO | | | |
+| language | default language | varchar(32) | NO | | en | |
+| register_date | timestamp of registration | datetime | NO | | 0001-01-01 00:00:00 | |
+| login_date | timestamp of last login | datetime | NO | | 0001-01-01 00:00:00 | |
+| default-location | Default for item.location | varchar(255) | NO | | | |
+| allow_location | 1 allows to display the location | boolean | NO | | 0 | |
+| theme | user theme preference | varchar(255) | NO | | | |
+| pubkey | RSA public key 4096 bit | text | YES | | NULL | |
+| prvkey | RSA private key 4096 bit | text | YES | | NULL | |
+| spubkey | | text | YES | | NULL | |
+| sprvkey | | text | YES | | NULL | |
+| verified | user is verified through email | boolean | NO | | 0 | |
+| blocked | 1 for user is blocked | boolean | NO | | 0 | |
+| blockwall | Prohibit contacts to post to the profile page of the user | boolean | NO | | 0 | |
+| hidewall | Hide profile details from unkown viewers | boolean | NO | | 0 | |
+| blocktags | Prohibit contacts to tag the post of this user | boolean | NO | | 0 | |
+| unkmail | Permit unknown people to send private mails to this user | boolean | NO | | 0 | |
+| cntunkmail | | int unsigned | NO | | 10 | |
+| notify-flags | email notification options | smallint unsigned | NO | | 65535 | |
+| page-flags | page/profile type | tinyint unsigned | NO | | 0 | |
+| account-type | | tinyint unsigned | NO | | 0 | |
+| prvnets | | boolean | NO | | 0 | |
+| pwdreset | Password reset request token | varchar(255) | YES | | NULL | |
+| pwdreset_time | Timestamp of the last password reset request | datetime | YES | | NULL | |
+| maxreq | | int unsigned | NO | | 10 | |
+| expire | Delay in days before deleting user-related posts. Scope is controlled by pConfig. | int unsigned | NO | | 0 | |
+| account_removed | if 1 the account is removed | boolean | NO | | 0 | |
+| account_expired | | boolean | NO | | 0 | |
+| account_expires_on | timestamp when account expires and will be deleted | datetime | NO | | 0001-01-01 00:00:00 | |
+| expire_notification_sent | timestamp of last warning of account expiration | datetime | NO | | 0001-01-01 00:00:00 | |
+| def_gid | | int unsigned | NO | | 0 | |
+| allow_cid | default permission for this user | mediumtext | YES | | NULL | |
+| allow_gid | default permission for this user | mediumtext | YES | | NULL | |
+| deny_cid | default permission for this user | mediumtext | YES | | NULL | |
+| deny_gid | default permission for this user | mediumtext | YES | | NULL | |
+| openidserver | | text | YES | | NULL | |
Indexes
------------
diff --git a/mod/lostpass.php b/mod/lostpass.php
index 62b621b8ce..f840f2fb62 100644
--- a/mod/lostpass.php
+++ b/mod/lostpass.php
@@ -34,7 +34,7 @@ function lostpass_post(App $a)
DI::baseUrl()->redirect();
}
- $condition = ['(`email` = ? OR `nickname` = ?) AND `verified` = 1 AND `blocked` = 0', $loginame, $loginame];
+ $condition = ['(`email` = ? OR `nickname` = ?) AND `verified` = 1 AND `blocked` = 0 AND `account_removed` = 0 AND `account_expired` = 0', $loginame, $loginame];
$user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'email', 'language'], $condition);
if (!DBA::isResult($user)) {
DI::sysmsg()->addNotice(DI::l10n()->t('No valid account found.'));
diff --git a/src/App.php b/src/App.php
index 27eaf100f4..abad4ee35d 100644
--- a/src/App.php
+++ b/src/App.php
@@ -27,6 +27,7 @@ use Friendica\App\BaseURL;
use Friendica\Capabilities\ICanCreateResponses;
use Friendica\Core\Config\Factory\Config;
use Friendica\Core\Session\Capability\IHandleUserSessions;
+use Friendica\Model\User;
use Friendica\Module\Maintenance;
use Friendica\Security\Authentication;
use Friendica\Core\Config\ValueObject\Cache;
@@ -164,14 +165,16 @@ class App
* Check if current user has admin role.
*
* @return bool true if user is an admin
+ * @throws Exception
*/
public function isSiteAdmin(): bool
{
- $admin_email = $this->config->get('config', 'admin_email');
-
- $adminlist = explode(',', str_replace(' ', '', $admin_email));
-
- return $this->session->getLocalUserId() && $admin_email && $this->database->exists('user', ['uid' => $this->getLoggedInUserId(), 'email' => $adminlist]);
+ return
+ $this->session->getLocalUserId()
+ && $this->database->exists('user', [
+ 'uid' => $this->getLoggedInUserId(),
+ 'email' => User::getAdminEmailList()
+ ]);
}
/**
@@ -259,8 +262,8 @@ class App
/**
* Set workerqueue information
*
- * @param array $queue
- * @return void
+ * @param array $queue
+ * @return void
*/
public function setQueue(array $queue)
{
diff --git a/src/Core/Update.php b/src/Core/Update.php
index 5f42517209..8ec96dc989 100644
--- a/src/Core/Update.php
+++ b/src/Core/Update.php
@@ -26,6 +26,7 @@ use Friendica\App\Mode;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
+use Friendica\Model\User;
use Friendica\Network\HTTPException\InternalServerErrorException;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Strings;
@@ -148,7 +149,7 @@ class Update
}
DI::config()->set('system', 'maintenance', 1);
-
+
// run the pre_update_nnnn functions in update.php
for ($version = $stored + 1; $version <= $current; $version++) {
Logger::notice('Execute pre update.', ['version' => $version]);
@@ -289,30 +290,16 @@ class Update
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- private static function updateFailed(int $update_id, string $error_message) {
- //send the administrators an e-mail
- $condition = ['email' => explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email'))), 'parent-uid' => 0];
- $adminlist = DBA::select('user', ['uid', 'language', 'email'], $condition, ['order' => ['uid']]);
-
- // No valid result?
- if (!DBA::isResult($adminlist)) {
+ private static function updateFailed(int $update_id, string $error_message)
+ {
+ $adminEmails = User::getAdminListForEmailing(['uid', 'language', 'email']);
+ if (!$adminEmails) {
Logger::warning('Cannot notify administrators .', ['update' => $update_id, 'message' => $error_message]);
-
- // Don't continue
return;
}
- $sent = [];
-
- // every admin could had different language
- while ($admin = DBA::fetch($adminlist)) {
- if (in_array($admin['email'], $sent)) {
- continue;
- }
- $sent[] = $admin['email'];
-
- $lang = $admin['language'] ?? 'en';
- $l10n = DI::l10n()->withLang($lang);
+ foreach($adminEmails as $admin) {
+ $l10n = DI::l10n()->withLang($admin['language'] ?: 'en');
$preamble = Strings::deindent($l10n->t("
The friendica developers released update %s recently,
@@ -343,35 +330,20 @@ class Update
*/
private static function updateSuccessful(int $from_build, int $to_build)
{
- //send the administrators an e-mail
- $condition = ['email' => explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email'))), 'parent-uid' => 0];
- $adminlist = DBA::select('user', ['uid', 'language', 'email'], $condition, ['order' => ['uid']]);
+ foreach(User::getAdminListForEmailing(['uid', 'language', 'email']) as $admin) {
+ $l10n = DI::l10n()->withLang($admin['language'] ?: 'en');
- if (DBA::isResult($adminlist)) {
- $sent = [];
+ $preamble = Strings::deindent($l10n->t('
+ The friendica database was successfully updated from %s to %s.',
+ $from_build, $to_build));
- // every admin could had different language
- while ($admin = DBA::fetch($adminlist)) {
- if (in_array($admin['email'], $sent)) {
- continue;
- }
- $sent[] = $admin['email'];
-
- $lang = (($admin['language']) ? $admin['language'] : 'en');
- $l10n = DI::l10n()->withLang($lang);
-
- $preamble = Strings::deindent($l10n->t('
- The friendica database was successfully updated from %s to %s.',
- $from_build, $to_build));
-
- $email = DI::emailer()
- ->newSystemMail()
- ->withMessage($l10n->t('[Friendica Notify] Database update'), $preamble)
- ->forUser($admin)
- ->withRecipient($admin['email'])
- ->build();
- DI::emailer()->send($email);
- }
+ $email = DI::emailer()
+ ->newSystemMail()
+ ->withMessage($l10n->t('[Friendica Notify] Database update'), $preamble)
+ ->forUser($admin)
+ ->withRecipient($admin['email'])
+ ->build();
+ DI::emailer()->send($email);
}
Logger::debug('Database structure update successful.');
diff --git a/src/Model/Nodeinfo.php b/src/Model/Nodeinfo.php
index 9a4d2bd60f..b10572612d 100644
--- a/src/Model/Nodeinfo.php
+++ b/src/Model/Nodeinfo.php
@@ -164,25 +164,16 @@ class Nodeinfo
*
* @param IManageConfigValues $config Configuration instance
* @return array Organization information
+ * @throws \Exception
*/
public static function getOrganization(IManageConfigValues $config): array
{
- $organization = [
- 'name' => null,
- 'contact' => null,
- 'account' => null
+ $administrator = User::getFirstAdmin(['username', 'email', 'nickname']);
+
+ return [
+ 'name' => $administrator['username'] ?? null,
+ 'contact' => $administrator['email'] ?? null,
+ 'account' => $administrator['nickname'] ?? '' ? DI::baseUrl()->get() . '/profile/' . $administrator['nickname'] : null,
];
-
- if (!empty($config->get('config', 'admin_email'))) {
- $adminList = explode(',', str_replace(' ', '', $config->get('config', 'admin_email')));
- $organization['contact'] = $adminList[0];
- $administrator = User::getByEmail($adminList[0], ['username', 'nickname']);
- if (!empty($administrator)) {
- $organization['name'] = $administrator['username'];
- $organization['account'] = DI::baseUrl()->get() . '/profile/' . $administrator['nickname'];
- }
- }
-
- return $organization;
}
}
diff --git a/src/Model/Post/UserNotification.php b/src/Model/Post/UserNotification.php
index 108f3c44ff..66ec6ac907 100644
--- a/src/Model/Post/UserNotification.php
+++ b/src/Model/Post/UserNotification.php
@@ -178,11 +178,15 @@ class UserNotification
return;
}
- $user = User::getById($uid, ['account-type']);
+ $user = User::getById($uid, ['account-type', 'account_removed', 'account_expired']);
if (in_array($user['account-type'], [User::ACCOUNT_TYPE_COMMUNITY, User::ACCOUNT_TYPE_RELAY])) {
return;
}
+ if ($user['account_removed'] || $user['account_expired']) {
+ return;
+ }
+
$author = Contact::getById($item['author-id'], ['contact-type']);
if (empty($author)) {
return;
diff --git a/src/Model/User.php b/src/Model/User.php
index 3f5376e0b8..73c380561c 100644
--- a/src/Model/User.php
+++ b/src/Model/User.php
@@ -265,7 +265,7 @@ class User
// List of possible actor names
$possible_accounts = ['friendica', 'actor', 'system', 'internal'];
foreach ($possible_accounts as $name) {
- if (!DBA::exists('user', ['nickname' => $name, 'account_removed' => false, 'expire' => false]) &&
+ if (!DBA::exists('user', ['nickname' => $name, 'account_removed' => false, 'account_expired' => false]) &&
!DBA::exists('userd', ['username' => $name])) {
DI::config()->set('system', 'actor_name', $name);
return $name;
@@ -381,17 +381,15 @@ class User
*
* @param array $fields
* @return array user
+ * @throws Exception
*/
public static function getFirstAdmin(array $fields = []) : array
{
if (!empty(DI::config()->get('config', 'admin_nickname'))) {
return self::getByNickname(DI::config()->get('config', 'admin_nickname'), $fields);
- } elseif (!empty(DI::config()->get('config', 'admin_email'))) {
- $adminList = explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email')));
- return self::getByEmail($adminList[0], $fields);
- } else {
- return [];
}
+
+ return self::getAdminList()[0] ?? [];
}
/**
@@ -1054,11 +1052,8 @@ class User
// Disallow somebody creating an account using openid that uses the admin email address,
// since openid bypasses email verification. We'll allow it if there is not yet an admin account.
- if (DI::config()->get('config', 'admin_email') && strlen($openid_url)) {
- $adminlist = explode(',', str_replace(' ', '', strtolower(DI::config()->get('config', 'admin_email'))));
- if (in_array(strtolower($email), $adminlist)) {
- throw new Exception(DI::l10n()->t('Cannot use that email.'));
- }
+ if (strlen($openid_url) && in_array(strtolower($email), self::getAdminEmailList())) {
+ throw new Exception(DI::l10n()->t('Cannot use that email.'));
}
$nickname = $data['nickname'] = strtolower($nickname);
@@ -1783,4 +1778,64 @@ class User
return DBA::selectToArray('owner-view', [], $condition, $param);
}
+
+ /**
+ * Returns a list of lowercase admin email addresses from the comma-separated list in the config
+ *
+ * @return array
+ */
+ public static function getAdminEmailList(): array
+ {
+ $adminEmails = strtolower(str_replace(' ', '', DI::config()->get('config', 'admin_email')));
+ if (!$adminEmails) {
+ return [];
+ }
+
+ return explode(',', $adminEmails);
+ }
+
+ /**
+ * Returns the complete list of admin user accounts
+ *
+ * @param array $fields
+ * @return array
+ * @throws Exception
+ */
+ public static function getAdminList(array $fields = []): array
+ {
+ $condition = [
+ 'email' => self::getAdminEmailList(),
+ 'parent-uid' => 0,
+ 'blocked' => 0,
+ 'verified' => true,
+ 'account_removed' => false,
+ 'account_expired' => false,
+ ];
+
+ return DBA::selectToArray('user', $fields, $condition, ['order' => ['uid']]);
+ }
+
+ /**
+ * Return a list of admin user accounts where each unique email address appears only once.
+ *
+ * This method is meant for admin notifications that do not need to be sent multiple times to the same email address.
+ *
+ * @param array $fields
+ * @return array
+ * @throws Exception
+ */
+ public static function getAdminListForEmailing(array $fields = []): array
+ {
+ return array_filter(self::getAdminList($fields), function ($user) {
+ static $emails = [];
+
+ if (in_array($user['email'], $emails)) {
+ return false;
+ }
+
+ $emails[] = $user['email'];
+
+ return true;
+ });
+ }
}
diff --git a/src/Module/Api/GNUSocial/GNUSocial/Config.php b/src/Module/Api/GNUSocial/GNUSocial/Config.php
index 8b38ca8967..ed27b8ef3a 100644
--- a/src/Module/Api/GNUSocial/GNUSocial/Config.php
+++ b/src/Module/Api/GNUSocial/GNUSocial/Config.php
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\GNUSocial\GNUSocial;
use Friendica\App;
use Friendica\DI;
+use Friendica\Model\User;
use Friendica\Module\BaseApi;
use Friendica\Module\Register;
@@ -42,7 +43,7 @@ class Config extends BaseApi
'logo' => DI::baseUrl() . '/images/friendica-64.png',
'fancy' => true,
'language' => DI::config()->get('system', 'language'),
- 'email' => DI::config()->get('config', 'admin_email'),
+ 'email' => implode(',', User::getAdminEmailList()),
'broughtby' => '',
'broughtbyurl' => '',
'timezone' => DI::config()->get('system', 'default_timezone'),
diff --git a/src/Module/Moderation/BaseUsers.php b/src/Module/Moderation/BaseUsers.php
index eddfc09097..b780277646 100644
--- a/src/Module/Moderation/BaseUsers.php
+++ b/src/Module/Moderation/BaseUsers.php
@@ -113,7 +113,7 @@ abstract class BaseUsers extends BaseModeration
protected function setupUserCallback(): \Closure
{
- $adminlist = explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email')));
+ $adminlist = User::getAdminEmailList();
return function ($user) use ($adminlist) {
$page_types = [
User::PAGE_FLAGS_NORMAL => $this->t('Normal Account Page'),
diff --git a/src/Module/Register.php b/src/Module/Register.php
index ad3e1feeac..b71fb777c5 100644
--- a/src/Module/Register.php
+++ b/src/Module/Register.php
@@ -352,7 +352,7 @@ class Register extends BaseModule
DI::baseUrl()->redirect();
}
} elseif (intval(DI::config()->get('config', 'register_policy')) === self::APPROVE) {
- if (!strlen(DI::config()->get('config', 'admin_email'))) {
+ if (!User::getAdminEmailList()) {
DI::sysmsg()->addNotice(DI::l10n()->t('Your registration can not be processed.'));
DI::baseUrl()->redirect();
}
@@ -387,34 +387,23 @@ class Register extends BaseModule
DI::sysmsg()->addInfo(DI::l10n()->t('Your registration is pending approval by the site owner.'));
DI::baseUrl()->redirect();
}
-
- return;
}
private function sendNotification(array $user, string $event)
{
- // send email to admins
- $admins_stmt = DBA::select(
- 'user',
- ['uid', 'language', 'email'],
- ['email' => explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email')))]
- );
-
- // send notification to admins
- while ($admin = DBA::fetch($admins_stmt)) {
+ foreach (User::getAdminListForEmailing(['uid', 'language', 'email']) as $admin) {
DI::notify()->createFromArray([
- 'type' => Model\Notification\Type::SYSTEM,
- 'event' => $event,
- 'uid' => $admin['uid'],
- 'link' => DI::baseUrl()->get(true) . '/moderation/users/',
- 'source_name' => $user['username'],
- 'source_mail' => $user['email'],
- 'source_nick' => $user['nickname'],
- 'source_link' => DI::baseUrl()->get(true) . '/moderation/users/',
- 'source_photo' => User::getAvatarUrl($user, Proxy::SIZE_THUMB),
+ 'type' => Model\Notification\Type::SYSTEM,
+ 'event' => $event,
+ 'uid' => $admin['uid'],
+ 'link' => DI::baseUrl()->get(true) . '/moderation/users/',
+ 'source_name' => $user['username'],
+ 'source_mail' => $user['email'],
+ 'source_nick' => $user['nickname'],
+ 'source_link' => DI::baseUrl()->get(true) . '/moderation/users/',
+ 'source_photo' => User::getAvatarUrl($user, Proxy::SIZE_THUMB),
'show_in_notification_page' => false
]);
}
- DBA::close($admins_stmt);
}
}
diff --git a/src/Module/Settings/Account.php b/src/Module/Settings/Account.php
index c9b140acb3..4217b1e88d 100644
--- a/src/Module/Settings/Account.php
+++ b/src/Module/Settings/Account.php
@@ -113,12 +113,9 @@ class Account extends BaseSettings
$err .= DI::l10n()->t('Invalid email.');
}
// ensure new email is not the admin mail
- if (DI::config()->get('config', 'admin_email')) {
- $adminlist = explode(",", str_replace(" ", "", strtolower(DI::config()->get('config', 'admin_email'))));
- if (in_array(strtolower($email), $adminlist)) {
- $err .= DI::l10n()->t('Cannot change to that email.');
- $email = $user['email'];
- }
+ if (in_array(strtolower($email), User::getAdminEmailList())) {
+ $err .= DI::l10n()->t('Cannot change to that email.');
+ $email = $user['email'];
}
}
diff --git a/src/Module/Settings/RemoveMe.php b/src/Module/Settings/RemoveMe.php
index 87bc6152a5..32dffd156f 100644
--- a/src/Module/Settings/RemoveMe.php
+++ b/src/Module/Settings/RemoveMe.php
@@ -85,14 +85,8 @@ class RemoveMe extends BaseSettings
}
// send notification to admins so that they can clean up the backups
- $admin_mails = explode(',', $this->config->get('config', 'admin_email'));
- foreach ($admin_mails as $mail) {
- $admin = $this->database->selectFirst('user', ['uid', 'language', 'email', 'username'], ['email' => trim($mail)]);
- if (!$admin) {
- continue;
- }
-
- $l10n = $this->l10n->withLang($admin['language']);
+ foreach (User::getAdminListForEmailing(['uid', 'language', 'email']) as $admin) {
+ $l10n = $this->l10n->withLang($admin['language'] ?: 'en');
$email = $this->emailer
->newSystemMail()
diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php
index 52c51fcb8e..683725e4ba 100644
--- a/src/Navigation/Notifications/Repository/Notify.php
+++ b/src/Navigation/Notifications/Repository/Notify.php
@@ -230,7 +230,7 @@ class Notify extends BaseRepository
}
// Ensure that the important fields are set at any time
- $fields = ['nickname', 'account-type', 'notify-flags', 'language', 'username', 'email'];
+ $fields = ['nickname', 'account-type', 'notify-flags', 'language', 'username', 'email', 'account_removed', 'account_expired'];
$user = DBA::selectFirst('user', $fields, ['uid' => $params['uid']]);
if (!DBA::isResult($user)) {
@@ -238,6 +238,10 @@ class Notify extends BaseRepository
return false;
}
+ if ($user['account_removed'] || $user['account_expired']) {
+ return false;
+ }
+
// There is no need to create notifications for forum accounts
if ($user['account-type'] == Model\User::ACCOUNT_TYPE_COMMUNITY) {
return false;
@@ -503,7 +507,7 @@ class Notify extends BaseRepository
$tsitelink = sprintf($sitelink, $params['link']);
$hsitelink = sprintf($sitelink, '' . $sitename . '
');
break;
-
+
case 'SYSTEM_DB_UPDATE_FAIL': // @TODO Unused (only here)
break;
}
@@ -525,8 +529,11 @@ class Notify extends BaseRepository
$parent_uri_id = $params['item']['parent-uri-id'] ?? null;
// Ensure that the important fields are set at any time
- $fields = ['nickname'];
+ $fields = ['nickname', 'account_removed', 'account_expired'];
$user = Model\User::getById($params['uid'], $fields);
+ if ($user['account_removed'] || $user['user_expired']) {
+ return false;
+ }
$sitename = $this->config->get('config', 'sitename');
@@ -711,6 +718,9 @@ class Notify extends BaseRepository
$params['otype'] = Model\Notification\ObjectType::ITEM;
$user = Model\User::getById($Notification->uid);
+ if ($user['account_removed'] || $user['account_expired']) {
+ return false;
+ }
$params['notify_flags'] = $user['notify-flags'];
$params['language'] = $user['language'];
diff --git a/src/Object/Api/Mastodon/Instance.php b/src/Object/Api/Mastodon/Instance.php
index 45fc4bf895..b659dc3063 100644
--- a/src/Object/Api/Mastodon/Instance.php
+++ b/src/Object/Api/Mastodon/Instance.php
@@ -86,7 +86,7 @@ class Instance extends BaseDataTransferObject
$this->uri = $baseUrl->get();
$this->title = $config->get('config', 'sitename');
$this->short_description = $this->description = $config->get('config', 'info');
- $this->email = $config->get('config', 'admin_email');
+ $this->email = implode(',', User::getAdminEmailList());
$this->version = '2.8.0 (compatible; Friendica ' . App::VERSION . ')';
$this->urls = null; // Not supported
$this->stats = new Stats($config, $database);
@@ -98,13 +98,10 @@ class Instance extends BaseDataTransferObject
$this->invites_enabled = false;
$this->contact_account = [];
- if (!empty($config->get('config', 'admin_email'))) {
- $adminList = explode(',', str_replace(' ', '', $config->get('config', 'admin_email')));
- $administrator = User::getByEmail($adminList[0], ['nickname']);
- if (!empty($administrator)) {
- $adminContact = $database->selectFirst('contact', ['id'], ['nick' => $administrator['nickname'], 'self' => true]);
- $this->contact_account = DI::mstdnAccount()->createFromContactId($adminContact['id']);
- }
+ $administrator = User::getFirstAdmin(['nickname']);
+ if ($administrator) {
+ $adminContact = $database->selectFirst('contact', ['uri-id'], ['nick' => $administrator['nickname'], 'self' => true]);
+ $this->contact_account = DI::mstdnAccount()->createFromUriId($adminContact['uri-id']);
}
}
}
diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php
index 95bb0f3121..ca9a605fc4 100644
--- a/src/Protocol/ActivityPub/Transmitter.php
+++ b/src/Protocol/ActivityPub/Transmitter.php
@@ -1710,7 +1710,7 @@ class Transmitter
}
$data['attachment'] = self::createAttachmentList($item);
- $data['tag'] = self::createTagList($item, $data['quoteUrl'] ?? '');
+ $data['tag'] = self::createTagList($item, $data['quoteUrl'] ?? '');
if (empty($data['location']) && (!empty($item['coord']) || !empty($item['location']))) {
$data['location'] = self::createLocation($item);
@@ -2073,13 +2073,14 @@ class Transmitter
}
if (empty($uid)) {
- // Fetch the list of administrators
- $admin_mail = explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email')));
-
// We need to use some user as a sender. It doesn't care who it will send. We will use an administrator account.
- $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false, 'email' => $admin_mail];
- $first_user = DBA::selectFirst('user', ['uid'], $condition);
- $uid = $first_user['uid'];
+ $admin = User::getFirstAdmin(['uid']);
+ if (!$admin) {
+ Logger::warning('No available admin user for transmission', ['target' => $target]);
+ return false;
+ }
+
+ $uid = $admin['uid'];
}
$condition = ['verb' => Activity::FOLLOW, 'uid' => 0, 'parent-uri' => $object,
diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php
index 17064fd959..f957596b64 100644
--- a/static/dbstructure.config.php
+++ b/static/dbstructure.config.php
@@ -136,7 +136,7 @@ return [
"pwdreset" => ["type" => "varchar(255)", "comment" => "Password reset request token"],
"pwdreset_time" => ["type" => "datetime", "comment" => "Timestamp of the last password reset request"],
"maxreq" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
- "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Delay in days before deleting user-related posts. Scope is controlled by pConfig."],
"account_removed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if 1 the account is removed"],
"account_expired" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"account_expires_on" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp when account expires and will be deleted"],
diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po
index 80b062030f..68e4b5d3d1 100644
--- a/view/lang/C/messages.po
+++ b/view/lang/C/messages.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2022.12-dev\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-11-11 00:42-0500\n"
+"POT-Creation-Date: 2022-11-14 17:05-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -54,7 +54,7 @@ msgstr ""
#: src/Module/Group.php:83 src/Module/Invite.php:42 src/Module/Invite.php:131
#: src/Module/Notifications/Notification.php:76
#: src/Module/Notifications/Notification.php:107
-#: src/Module/OStatus/Repair.php:60 src/Module/OStatus/Subscribe.php:55
+#: src/Module/OStatus/Repair.php:60 src/Module/OStatus/Subscribe.php:66
#: src/Module/Profile/Attachment/Upload.php:97 src/Module/Profile/Common.php:55
#: src/Module/Profile/Contacts.php:55 src/Module/Profile/Photos/Upload.php:108
#: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56
@@ -62,16 +62,16 @@ msgstr ""
#: src/Module/Profile/UnkMail.php:132 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:50 src/Module/Settings/Account.php:410
+#: src/Module/Settings/Account.php:50 src/Module/Settings/Account.php:407
#: src/Module/Settings/Delegation.php:41 src/Module/Settings/Delegation.php:69
#: src/Module/Settings/Display.php:41 src/Module/Settings/Display.php:119
#: src/Module/Settings/Profile/Photo/Crop.php:165
#: src/Module/Settings/Profile/Photo/Index.php:111
-#: src/Module/Settings/RemoveMe.php:126 src/Module/Settings/UserExport.php:84
-#: src/Module/Settings/UserExport.php:118
-#: src/Module/Settings/UserExport.php:219
-#: src/Module/Settings/UserExport.php:239
-#: src/Module/Settings/UserExport.php:304 src/Module/User/Import.php:84
+#: src/Module/Settings/RemoveMe.php:117 src/Module/Settings/UserExport.php:80
+#: src/Module/Settings/UserExport.php:114
+#: src/Module/Settings/UserExport.php:215
+#: src/Module/Settings/UserExport.php:235
+#: src/Module/Settings/UserExport.php:300 src/Module/User/Import.php:84
#: src/Module/User/Import.php:91
msgid "Permission denied."
msgstr ""
@@ -845,11 +845,11 @@ msgstr ""
msgid "View Album"
msgstr ""
-#: src/App.php:490
+#: src/App.php:493
msgid "No system theme config value set."
msgstr ""
-#: src/App.php:611
+#: src/App.php:614
msgid "Apologies but the website is unavailable at the moment."
msgstr ""
@@ -1054,7 +1054,7 @@ msgstr ""
msgid "Enter user nickname: "
msgstr ""
-#: src/Console/User.php:182 src/Model/User.php:663
+#: src/Console/User.php:182 src/Model/User.php:661
#: src/Module/Api/Twitter/ContactEndpoint.php:74
#: src/Module/Moderation/Users/Active.php:71
#: src/Module/Moderation/Users/Blocked.php:71
@@ -1624,31 +1624,31 @@ msgstr ""
msgid "Follow Thread"
msgstr ""
-#: src/Content/Item.php:387 src/Model/Contact.php:1199
+#: src/Content/Item.php:387 src/Model/Contact.php:1197
msgid "View Status"
msgstr ""
-#: src/Content/Item.php:388 src/Content/Item.php:406 src/Model/Contact.php:1137
-#: src/Model/Contact.php:1191 src/Model/Contact.php:1200
+#: src/Content/Item.php:388 src/Content/Item.php:406 src/Model/Contact.php:1135
+#: src/Model/Contact.php:1189 src/Model/Contact.php:1198
#: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:234
msgid "View Profile"
msgstr ""
-#: src/Content/Item.php:389 src/Model/Contact.php:1201
+#: src/Content/Item.php:389 src/Model/Contact.php:1199
msgid "View Photos"
msgstr ""
-#: src/Content/Item.php:390 src/Model/Contact.php:1192
-#: src/Model/Contact.php:1202
+#: src/Content/Item.php:390 src/Model/Contact.php:1190
+#: src/Model/Contact.php:1200
msgid "Network Posts"
msgstr ""
-#: src/Content/Item.php:391 src/Model/Contact.php:1193
-#: src/Model/Contact.php:1203
+#: src/Content/Item.php:391 src/Model/Contact.php:1191
+#: src/Model/Contact.php:1201
msgid "View Contact"
msgstr ""
-#: src/Content/Item.php:392 src/Model/Contact.php:1204
+#: src/Content/Item.php:392 src/Model/Contact.php:1202
msgid "Send PM"
msgstr ""
@@ -1673,7 +1673,7 @@ msgid "Languages"
msgstr ""
#: src/Content/Item.php:403 src/Content/Widget.php:80
-#: src/Model/Contact.php:1194 src/Model/Contact.php:1205
+#: src/Model/Contact.php:1192 src/Model/Contact.php:1203
#: src/Module/Contact/Follow.php:165 view/theme/vier/theme.php:198
msgid "Connect/Follow"
msgstr ""
@@ -2000,8 +2000,8 @@ msgid ""
"%2$s %3$s"
msgstr ""
-#: src/Content/Text/BBCode.php:1245 src/Model/Item.php:3483
-#: src/Model/Item.php:3489 src/Model/Item.php:3490
+#: src/Content/Text/BBCode.php:1245 src/Model/Item.php:3486
+#: src/Model/Item.php:3492 src/Model/Item.php:3493
msgid "Link to source"
msgstr ""
@@ -2161,11 +2161,11 @@ msgstr ""
msgid "Organisations"
msgstr ""
-#: src/Content/Widget.php:523 src/Model/Contact.php:1631
+#: src/Content/Widget.php:523 src/Model/Contact.php:1629
msgid "News"
msgstr ""
-#: src/Content/Widget.php:527 src/Module/Settings/Account.php:456
+#: src/Content/Widget.php:527 src/Module/Settings/Account.php:453
msgid "Account Types"
msgstr ""
@@ -2243,8 +2243,8 @@ msgstr ""
msgid "Network:"
msgstr ""
-#: src/Content/Widget/VCard.php:111 src/Model/Contact.php:1195
-#: src/Model/Contact.php:1206 src/Model/Profile.php:461
+#: src/Content/Widget/VCard.php:111 src/Model/Contact.php:1193
+#: src/Model/Contact.php:1204 src/Model/Profile.php:461
#: src/Module/Contact/Profile.php:420
msgid "Unfollow"
msgstr ""
@@ -2798,36 +2798,36 @@ msgstr ""
msgid "Enter a valid existing folder"
msgstr ""
-#: src/Core/Update.php:69
+#: src/Core/Update.php:70
#, 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:80
+#: src/Core/Update.php:81
#, 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:155
+#: src/Core/Update.php:156
#, php-format
msgid "%s: executing pre update %d"
msgstr ""
-#: src/Core/Update.php:193
+#: src/Core/Update.php:194
#, php-format
msgid "%s: executing post update %d"
msgstr ""
-#: src/Core/Update.php:263
+#: src/Core/Update.php:264
#, php-format
msgid "Update %s failed. See error logs."
msgstr ""
-#: src/Core/Update.php:317
+#: src/Core/Update.php:304
#, php-format
msgid ""
"\n"
@@ -2839,20 +2839,20 @@ msgid ""
"might be invalid."
msgstr ""
-#: src/Core/Update.php:323
+#: src/Core/Update.php:310
#, php-format
msgid "The error message is\\n[pre]%s[/pre]"
msgstr ""
-#: src/Core/Update.php:327 src/Core/Update.php:369
+#: src/Core/Update.php:314 src/Core/Update.php:342
msgid "[Friendica Notify] Database update"
msgstr ""
-#: src/Core/Update.php:363
+#: src/Core/Update.php:336
#, php-format
msgid ""
"\n"
-"\t\t\t\t\tThe friendica database was successfully updated from %s to %s."
+"\t\t\t\tThe friendica database was successfully updated from %s to %s."
msgstr ""
#: src/Database/DBStructure.php:57
@@ -2933,77 +2933,77 @@ msgstr ""
msgid "Legacy module file not found: %s"
msgstr ""
-#: src/Model/Contact.php:1212 src/Module/Moderation/Users/Pending.php:102
+#: src/Model/Contact.php:1210 src/Module/Moderation/Users/Pending.php:102
#: src/Module/Notifications/Introductions.php:132
#: src/Module/Notifications/Introductions.php:204
msgid "Approve"
msgstr ""
-#: src/Model/Contact.php:1627
+#: src/Model/Contact.php:1625
msgid "Organisation"
msgstr ""
-#: src/Model/Contact.php:1635
+#: src/Model/Contact.php:1633
msgid "Forum"
msgstr ""
-#: src/Model/Contact.php:2821
+#: src/Model/Contact.php:2819
msgid "Disallowed profile URL."
msgstr ""
-#: src/Model/Contact.php:2826 src/Module/Friendica.php:82
+#: src/Model/Contact.php:2824 src/Module/Friendica.php:82
msgid "Blocked domain"
msgstr ""
-#: src/Model/Contact.php:2831
+#: src/Model/Contact.php:2829
msgid "Connect URL missing."
msgstr ""
-#: src/Model/Contact.php:2840
+#: src/Model/Contact.php:2838
msgid ""
"The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page."
msgstr ""
-#: src/Model/Contact.php:2882
+#: src/Model/Contact.php:2880
msgid "The profile address specified does not provide adequate information."
msgstr ""
-#: src/Model/Contact.php:2884
+#: src/Model/Contact.php:2882
msgid "No compatible communication protocols or feeds were discovered."
msgstr ""
-#: src/Model/Contact.php:2887
+#: src/Model/Contact.php:2885
msgid "An author or name was not found."
msgstr ""
-#: src/Model/Contact.php:2890
+#: src/Model/Contact.php:2888
msgid "No browser URL could be matched to this address."
msgstr ""
-#: src/Model/Contact.php:2893
+#: src/Model/Contact.php:2891
msgid ""
"Unable to match @-style Identity Address with a known protocol or email "
"contact."
msgstr ""
-#: src/Model/Contact.php:2894
+#: src/Model/Contact.php:2892
msgid "Use mailto: in front of address to force email check."
msgstr ""
-#: src/Model/Contact.php:2900
+#: src/Model/Contact.php:2898
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr ""
-#: src/Model/Contact.php:2905
+#: src/Model/Contact.php:2903
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr ""
-#: src/Model/Contact.php:2964
+#: src/Model/Contact.php:2962
msgid "Unable to retrieve contact information."
msgstr ""
@@ -3168,44 +3168,44 @@ msgstr ""
msgid "Content warning: %s"
msgstr ""
-#: src/Model/Item.php:3395
+#: src/Model/Item.php:3398
msgid "bytes"
msgstr ""
-#: src/Model/Item.php:3426
+#: src/Model/Item.php:3429
#, 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:3428
+#: src/Model/Item.php:3431
#, php-format
msgid "%2$s (%1$d vote)"
msgid_plural "%2$s (%1$d votes)"
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3433
+#: src/Model/Item.php:3436
#, php-format
msgid "%d voter. Poll end: %s"
msgid_plural "%d voters. Poll end: %s"
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3435
+#: src/Model/Item.php:3438
#, php-format
msgid "%d voter."
msgid_plural "%d voters."
msgstr[0] ""
msgstr[1] ""
-#: src/Model/Item.php:3437
+#: src/Model/Item.php:3440
#, php-format
msgid "Poll end: %s"
msgstr ""
-#: src/Model/Item.php:3471 src/Model/Item.php:3472
+#: src/Model/Item.php:3474 src/Model/Item.php:3475
msgid "View on separate page"
msgstr ""
@@ -3362,146 +3362,146 @@ msgstr ""
msgid "Contact information and Social Networks"
msgstr ""
-#: src/Model/User.php:212 src/Model/User.php:1085
+#: src/Model/User.php:212 src/Model/User.php:1080
msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr ""
-#: src/Model/User.php:572 src/Model/User.php:605
+#: src/Model/User.php:570 src/Model/User.php:603
msgid "Login failed"
msgstr ""
-#: src/Model/User.php:637
+#: src/Model/User.php:635
msgid "Not enough information to authenticate"
msgstr ""
-#: src/Model/User.php:732
+#: src/Model/User.php:730
msgid "Password can't be empty"
msgstr ""
-#: src/Model/User.php:774
+#: src/Model/User.php:772
msgid "Empty passwords are not allowed."
msgstr ""
-#: src/Model/User.php:778
+#: src/Model/User.php:776
msgid ""
"The new password has been exposed in a public data dump, please choose "
"another."
msgstr ""
-#: src/Model/User.php:782
+#: src/Model/User.php:780
msgid "The password length is limited to 72 characters."
msgstr ""
-#: src/Model/User.php:786
+#: src/Model/User.php:784
msgid ""
"The password can't contain accentuated letters, white spaces or colons (:)"
msgstr ""
-#: src/Model/User.php:965
+#: src/Model/User.php:963
msgid "Passwords do not match. Password unchanged."
msgstr ""
-#: src/Model/User.php:972
+#: src/Model/User.php:970
msgid "An invitation is required."
msgstr ""
-#: src/Model/User.php:976
+#: src/Model/User.php:974
msgid "Invitation could not be verified."
msgstr ""
-#: src/Model/User.php:984
+#: src/Model/User.php:982
msgid "Invalid OpenID url"
msgstr ""
-#: src/Model/User.php:997 src/Security/Authentication.php:239
+#: src/Model/User.php:995 src/Security/Authentication.php:239
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
msgstr ""
-#: src/Model/User.php:997 src/Security/Authentication.php:239
+#: src/Model/User.php:995 src/Security/Authentication.php:239
msgid "The error message was:"
msgstr ""
-#: src/Model/User.php:1003
+#: src/Model/User.php:1001
msgid "Please enter the required information."
msgstr ""
-#: src/Model/User.php:1017
+#: src/Model/User.php:1015
#, php-format
msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values."
msgstr ""
-#: src/Model/User.php:1024
+#: src/Model/User.php:1022
#, php-format
msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters."
msgstr[0] ""
msgstr[1] ""
-#: src/Model/User.php:1028
+#: src/Model/User.php:1026
#, php-format
msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters."
msgstr[0] ""
msgstr[1] ""
-#: src/Model/User.php:1036
+#: src/Model/User.php:1034
msgid "That doesn't appear to be your full (First Last) name."
msgstr ""
-#: src/Model/User.php:1041
+#: src/Model/User.php:1039
msgid "Your email domain is not among those allowed on this site."
msgstr ""
-#: src/Model/User.php:1045
+#: src/Model/User.php:1043
msgid "Not a valid email address."
msgstr ""
-#: src/Model/User.php:1048
+#: src/Model/User.php:1046
msgid "The nickname was blocked from registration by the nodes admin."
msgstr ""
-#: src/Model/User.php:1052 src/Model/User.php:1060
+#: src/Model/User.php:1050 src/Model/User.php:1056
msgid "Cannot use that email."
msgstr ""
-#: src/Model/User.php:1067
+#: src/Model/User.php:1062
msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr ""
-#: src/Model/User.php:1075 src/Model/User.php:1132
+#: src/Model/User.php:1070 src/Model/User.php:1127
msgid "Nickname is already registered. Please choose another."
msgstr ""
-#: src/Model/User.php:1119 src/Model/User.php:1123
+#: src/Model/User.php:1114 src/Model/User.php:1118
msgid "An error occurred during registration. Please try again."
msgstr ""
-#: src/Model/User.php:1146
+#: src/Model/User.php:1141
msgid "An error occurred creating your default profile. Please try again."
msgstr ""
-#: src/Model/User.php:1153
+#: src/Model/User.php:1148
msgid "An error occurred creating your self contact. Please try again."
msgstr ""
-#: src/Model/User.php:1158
+#: src/Model/User.php:1153
msgid "Friends"
msgstr ""
-#: src/Model/User.php:1162
+#: src/Model/User.php:1157
msgid ""
"An error occurred creating your default contact group. Please try again."
msgstr ""
-#: src/Model/User.php:1201
+#: src/Model/User.php:1196
msgid "Profile Photos"
msgstr ""
-#: src/Model/User.php:1394
+#: src/Model/User.php:1389
#, php-format
msgid ""
"\n"
@@ -3509,7 +3509,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you."
msgstr ""
-#: src/Model/User.php:1397
+#: src/Model/User.php:1392
#, php-format
msgid ""
"\n"
@@ -3547,12 +3547,12 @@ msgid ""
"\t\tThank you and welcome to %4$s."
msgstr ""
-#: src/Model/User.php:1430 src/Model/User.php:1537
+#: src/Model/User.php:1425 src/Model/User.php:1532
#, php-format
msgid "Registration details for %s"
msgstr ""
-#: src/Model/User.php:1450
+#: src/Model/User.php:1445
#, php-format
msgid ""
"\n"
@@ -3568,12 +3568,12 @@ msgid ""
"\t\t"
msgstr ""
-#: src/Model/User.php:1469
+#: src/Model/User.php:1464
#, php-format
msgid "Registration at %s"
msgstr ""
-#: src/Model/User.php:1493
+#: src/Model/User.php:1488
#, php-format
msgid ""
"\n"
@@ -3582,7 +3582,7 @@ msgid ""
"\t\t\t"
msgstr ""
-#: src/Model/User.php:1501
+#: src/Model/User.php:1496
#, php-format
msgid ""
"\n"
@@ -3688,7 +3688,7 @@ msgstr ""
#: 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:434
#: src/Module/Admin/Themes/Index.php:113 src/Module/Admin/Tos.php:83
-#: src/Module/Settings/Account.php:563 src/Module/Settings/Addons.php:81
+#: src/Module/Settings/Account.php:560 src/Module/Settings/Addons.php:81
#: src/Module/Settings/Connectors.php:159
#: src/Module/Settings/Connectors.php:244
#: src/Module/Settings/Delegation.php:169 src/Module/Settings/Display.php:200
@@ -5493,7 +5493,7 @@ msgstr ""
msgid "Connected apps"
msgstr ""
-#: src/Module/BaseSettings.php:155 src/Module/Settings/UserExport.php:102
+#: src/Module/BaseSettings.php:155 src/Module/Settings/UserExport.php:98
msgid "Export personal data"
msgstr ""
@@ -7171,19 +7171,19 @@ msgstr ""
msgid "List of pending user deletions"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:119 src/Module/Settings/Account.php:494
+#: src/Module/Moderation/BaseUsers.php:119 src/Module/Settings/Account.php:491
msgid "Normal Account Page"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:120 src/Module/Settings/Account.php:501
+#: src/Module/Moderation/BaseUsers.php:120 src/Module/Settings/Account.php:498
msgid "Soapbox Page"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:121 src/Module/Settings/Account.php:508
+#: src/Module/Moderation/BaseUsers.php:121 src/Module/Settings/Account.php:505
msgid "Public Forum"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:122 src/Module/Settings/Account.php:515
+#: src/Module/Moderation/BaseUsers.php:122 src/Module/Settings/Account.php:512
msgid "Automatic Friend Page"
msgstr ""
@@ -7191,19 +7191,19 @@ msgstr ""
msgid "Private Forum"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:126 src/Module/Settings/Account.php:466
+#: src/Module/Moderation/BaseUsers.php:126 src/Module/Settings/Account.php:463
msgid "Personal Page"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:127 src/Module/Settings/Account.php:473
+#: src/Module/Moderation/BaseUsers.php:127 src/Module/Settings/Account.php:470
msgid "Organisation Page"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:128 src/Module/Settings/Account.php:480
+#: src/Module/Moderation/BaseUsers.php:128 src/Module/Settings/Account.php:477
msgid "News Page"
msgstr ""
-#: src/Module/Moderation/BaseUsers.php:129 src/Module/Settings/Account.php:487
+#: src/Module/Moderation/BaseUsers.php:129 src/Module/Settings/Account.php:484
msgid "Community Forum"
msgstr ""
@@ -7977,7 +7977,7 @@ msgstr ""
msgid "Resubscribing to OStatus contacts"
msgstr ""
-#: src/Module/OStatus/Repair.php:84 src/Module/OStatus/Subscribe.php:148
+#: src/Module/OStatus/Repair.php:84 src/Module/OStatus/Subscribe.php:158
msgid "Keep this window open until done."
msgstr ""
@@ -7989,47 +7989,47 @@ msgstr ""
msgid "No OStatus contacts to resubscribe to."
msgstr ""
-#: src/Module/OStatus/Subscribe.php:60
+#: src/Module/OStatus/Subscribe.php:70
msgid "Subscribing to contacts"
msgstr ""
-#: src/Module/OStatus/Subscribe.php:69
+#: src/Module/OStatus/Subscribe.php:79
msgid "No contact provided."
msgstr ""
-#: src/Module/OStatus/Subscribe.php:75
+#: src/Module/OStatus/Subscribe.php:85
msgid "Couldn't fetch information for contact."
msgstr ""
-#: src/Module/OStatus/Subscribe.php:86
+#: src/Module/OStatus/Subscribe.php:96
msgid "Couldn't fetch friends for contact."
msgstr ""
-#: src/Module/OStatus/Subscribe.php:92 src/Module/OStatus/Subscribe.php:103
+#: src/Module/OStatus/Subscribe.php:102 src/Module/OStatus/Subscribe.php:113
msgid "Couldn't fetch following contacts."
msgstr ""
-#: src/Module/OStatus/Subscribe.php:98
+#: src/Module/OStatus/Subscribe.php:108
msgid "Couldn't fetch remote profile."
msgstr ""
-#: src/Module/OStatus/Subscribe.php:108
+#: src/Module/OStatus/Subscribe.php:118
msgid "Unsupported network"
msgstr ""
-#: src/Module/OStatus/Subscribe.php:124
+#: src/Module/OStatus/Subscribe.php:134
msgid "Done"
msgstr ""
-#: src/Module/OStatus/Subscribe.php:138
+#: src/Module/OStatus/Subscribe.php:148
msgid "success"
msgstr ""
-#: src/Module/OStatus/Subscribe.php:140
+#: src/Module/OStatus/Subscribe.php:150
msgid "failed"
msgstr ""
-#: src/Module/OStatus/Subscribe.php:143
+#: src/Module/OStatus/Subscribe.php:153
msgid "ignored"
msgstr ""
@@ -8148,7 +8148,7 @@ msgid ""
"\"btn btn-sm pull-right\">Cancel"
msgstr ""
-#: src/Module/Profile/Profile.php:143 src/Module/Settings/Account.php:579
+#: src/Module/Profile/Profile.php:143 src/Module/Settings/Account.php:576
msgid "Full Name:"
msgstr ""
@@ -8362,7 +8362,7 @@ msgid "Please repeat your e-mail address:"
msgstr ""
#: src/Module/Register.php:162 src/Module/Security/PasswordTooLong.php:101
-#: src/Module/Settings/Account.php:570
+#: src/Module/Settings/Account.php:567
msgid "New Password:"
msgstr ""
@@ -8371,7 +8371,7 @@ msgid "Leave empty for an auto generated password."
msgstr ""
#: src/Module/Register.php:163 src/Module/Security/PasswordTooLong.php:102
-#: src/Module/Settings/Account.php:571
+#: src/Module/Settings/Account.php:568
msgid "Confirm:"
msgstr ""
@@ -8584,24 +8584,24 @@ msgid "Update Password"
msgstr ""
#: src/Module/Security/PasswordTooLong.php:100
-#: src/Module/Settings/Account.php:572
+#: src/Module/Settings/Account.php:569
msgid "Current Password:"
msgstr ""
#: src/Module/Security/PasswordTooLong.php:100
-#: src/Module/Settings/Account.php:572
+#: src/Module/Settings/Account.php:569
msgid "Your current password to confirm the changes"
msgstr ""
#: src/Module/Security/PasswordTooLong.php:101
-#: src/Module/Settings/Account.php:555
+#: src/Module/Settings/Account.php:552
msgid ""
"Allowed characters are a-z, A-Z, 0-9 and special characters except white "
"spaces, accentuated letters and colon (:)."
msgstr ""
#: src/Module/Security/PasswordTooLong.php:101
-#: src/Module/Settings/Account.php:556
+#: src/Module/Settings/Account.php:553
msgid "Password length is limited to 72 characters."
msgstr ""
@@ -8722,103 +8722,103 @@ msgstr ""
msgid "Invalid email."
msgstr ""
-#: src/Module/Settings/Account.php:119
+#: src/Module/Settings/Account.php:117
msgid "Cannot change to that email."
msgstr ""
-#: 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
+#: src/Module/Settings/Account.php:146 src/Module/Settings/Account.php:198
+#: src/Module/Settings/Account.php:218 src/Module/Settings/Account.php:302
+#: src/Module/Settings/Account.php:351
msgid "Settings were not updated."
msgstr ""
-#: src/Module/Settings/Account.php:366
+#: src/Module/Settings/Account.php:363
msgid "Contact CSV file upload error"
msgstr ""
-#: src/Module/Settings/Account.php:385
+#: src/Module/Settings/Account.php:382
msgid "Importing Contacts done"
msgstr ""
-#: src/Module/Settings/Account.php:398
+#: src/Module/Settings/Account.php:395
msgid "Relocate message has been send to your contacts"
msgstr ""
-#: src/Module/Settings/Account.php:415
+#: src/Module/Settings/Account.php:412
msgid "Unable to find your profile. Please contact your admin."
msgstr ""
-#: src/Module/Settings/Account.php:457
+#: src/Module/Settings/Account.php:454
msgid "Personal Page Subtypes"
msgstr ""
-#: src/Module/Settings/Account.php:458
+#: src/Module/Settings/Account.php:455
msgid "Community Forum Subtypes"
msgstr ""
-#: src/Module/Settings/Account.php:468
+#: src/Module/Settings/Account.php:465
msgid "Account for a personal profile."
msgstr ""
-#: src/Module/Settings/Account.php:475
+#: src/Module/Settings/Account.php:472
msgid ""
"Account for an organisation that automatically approves contact requests as "
"\"Followers\"."
msgstr ""
-#: src/Module/Settings/Account.php:482
+#: src/Module/Settings/Account.php:479
msgid ""
"Account for a news reflector that automatically approves contact requests as "
"\"Followers\"."
msgstr ""
-#: src/Module/Settings/Account.php:489
+#: src/Module/Settings/Account.php:486
msgid "Account for community discussions."
msgstr ""
-#: src/Module/Settings/Account.php:496
+#: src/Module/Settings/Account.php:493
msgid ""
"Account for a regular personal profile that requires manual approval of "
"\"Friends\" and \"Followers\"."
msgstr ""
-#: src/Module/Settings/Account.php:503
+#: src/Module/Settings/Account.php:500
msgid ""
"Account for a public profile that automatically approves contact requests as "
"\"Followers\"."
msgstr ""
-#: src/Module/Settings/Account.php:510
+#: src/Module/Settings/Account.php:507
msgid "Automatically approves all contact requests."
msgstr ""
-#: src/Module/Settings/Account.php:517
+#: src/Module/Settings/Account.php:514
msgid ""
"Account for a popular profile that automatically approves contact requests "
"as \"Friends\"."
msgstr ""
-#: src/Module/Settings/Account.php:522
+#: src/Module/Settings/Account.php:519
msgid "Private Forum [Experimental]"
msgstr ""
-#: src/Module/Settings/Account.php:524
+#: src/Module/Settings/Account.php:521
msgid "Requires manual approval of contact requests."
msgstr ""
-#: src/Module/Settings/Account.php:533
+#: src/Module/Settings/Account.php:530
msgid "OpenID:"
msgstr ""
-#: src/Module/Settings/Account.php:533
+#: src/Module/Settings/Account.php:530
msgid "(Optional) Allow this OpenID to login to this account."
msgstr ""
-#: src/Module/Settings/Account.php:541
+#: src/Module/Settings/Account.php:538
msgid "Publish your profile in your local site directory?"
msgstr ""
-#: src/Module/Settings/Account.php:541
+#: src/Module/Settings/Account.php:538
#, php-format
msgid ""
"Your profile will be published in this node's local "
@@ -8826,89 +8826,89 @@ msgid ""
"system settings."
msgstr ""
-#: src/Module/Settings/Account.php:547
+#: src/Module/Settings/Account.php:544
#, php-format
msgid ""
"Your profile will also be published in the global friendica directories (e."
"g. %s)."
msgstr ""
-#: src/Module/Settings/Account.php:560
+#: src/Module/Settings/Account.php:557
msgid "Account Settings"
msgstr ""
-#: src/Module/Settings/Account.php:561
+#: src/Module/Settings/Account.php:558
#, php-format
msgid "Your Identity Address is '%s' or '%s'."
msgstr ""
-#: src/Module/Settings/Account.php:569
+#: src/Module/Settings/Account.php:566
msgid "Password Settings"
msgstr ""
-#: src/Module/Settings/Account.php:571
+#: src/Module/Settings/Account.php:568
msgid "Leave password fields blank unless changing"
msgstr ""
-#: src/Module/Settings/Account.php:573
+#: src/Module/Settings/Account.php:570
msgid "Password:"
msgstr ""
-#: src/Module/Settings/Account.php:573
+#: src/Module/Settings/Account.php:570
msgid "Your current password to confirm the changes of the email address"
msgstr ""
-#: src/Module/Settings/Account.php:576
+#: src/Module/Settings/Account.php:573
msgid "Delete OpenID URL"
msgstr ""
-#: src/Module/Settings/Account.php:578
+#: src/Module/Settings/Account.php:575
msgid "Basic Settings"
msgstr ""
-#: src/Module/Settings/Account.php:580
+#: src/Module/Settings/Account.php:577
msgid "Email Address:"
msgstr ""
-#: src/Module/Settings/Account.php:581
+#: src/Module/Settings/Account.php:578
msgid "Your Timezone:"
msgstr ""
-#: src/Module/Settings/Account.php:582
+#: src/Module/Settings/Account.php:579
msgid "Your Language:"
msgstr ""
-#: src/Module/Settings/Account.php:582
+#: src/Module/Settings/Account.php:579
msgid ""
"Set the language we use to show you friendica interface and to send you "
"emails"
msgstr ""
-#: src/Module/Settings/Account.php:583
+#: src/Module/Settings/Account.php:580
msgid "Default Post Location:"
msgstr ""
-#: src/Module/Settings/Account.php:584
+#: src/Module/Settings/Account.php:581
msgid "Use Browser Location:"
msgstr ""
-#: src/Module/Settings/Account.php:586
+#: src/Module/Settings/Account.php:583
msgid "Security and Privacy Settings"
msgstr ""
-#: src/Module/Settings/Account.php:588
+#: src/Module/Settings/Account.php:585
msgid "Maximum Friend Requests/Day:"
msgstr ""
-#: src/Module/Settings/Account.php:588 src/Module/Settings/Account.php:598
+#: src/Module/Settings/Account.php:585 src/Module/Settings/Account.php:595
msgid "(to prevent spam abuse)"
msgstr ""
-#: src/Module/Settings/Account.php:590
+#: src/Module/Settings/Account.php:587
msgid "Allow your profile to be searchable globally?"
msgstr ""
-#: src/Module/Settings/Account.php:590
+#: src/Module/Settings/Account.php:587
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 "
@@ -8916,43 +8916,43 @@ msgid ""
"indexed or not."
msgstr ""
-#: src/Module/Settings/Account.php:591
+#: src/Module/Settings/Account.php:588
msgid "Hide your contact/friend list from viewers of your profile?"
msgstr ""
-#: src/Module/Settings/Account.php:591
+#: src/Module/Settings/Account.php:588
msgid ""
"A list of your contacts is displayed on your profile page. Activate this "
"option to disable the display of your contact list."
msgstr ""
-#: src/Module/Settings/Account.php:592
+#: src/Module/Settings/Account.php:589
msgid "Hide your profile details from anonymous viewers?"
msgstr ""
-#: src/Module/Settings/Account.php:592
+#: src/Module/Settings/Account.php:589
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 ""
-#: src/Module/Settings/Account.php:593
+#: src/Module/Settings/Account.php:590
msgid "Make public posts unlisted"
msgstr ""
-#: src/Module/Settings/Account.php:593
+#: src/Module/Settings/Account.php:590
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 ""
-#: src/Module/Settings/Account.php:594
+#: src/Module/Settings/Account.php:591
msgid "Make all posted pictures accessible"
msgstr ""
-#: src/Module/Settings/Account.php:594
+#: src/Module/Settings/Account.php:591
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 "
@@ -8960,233 +8960,233 @@ msgid ""
"public on your photo albums though."
msgstr ""
-#: src/Module/Settings/Account.php:595
+#: src/Module/Settings/Account.php:592
msgid "Allow friends to post to your profile page?"
msgstr ""
-#: src/Module/Settings/Account.php:595
+#: src/Module/Settings/Account.php:592
msgid ""
"Your contacts may write posts on your profile wall. These posts will be "
"distributed to your contacts"
msgstr ""
-#: src/Module/Settings/Account.php:596
+#: src/Module/Settings/Account.php:593
msgid "Allow friends to tag your posts?"
msgstr ""
-#: src/Module/Settings/Account.php:596
+#: src/Module/Settings/Account.php:593
msgid "Your contacts can add additional tags to your posts."
msgstr ""
-#: src/Module/Settings/Account.php:597
+#: src/Module/Settings/Account.php:594
msgid "Permit unknown people to send you private mail?"
msgstr ""
-#: src/Module/Settings/Account.php:597
+#: src/Module/Settings/Account.php:594
msgid ""
"Friendica network users may send you private messages even if they are not "
"in your contact list."
msgstr ""
-#: src/Module/Settings/Account.php:598
+#: src/Module/Settings/Account.php:595
msgid "Maximum private messages per day from unknown people:"
msgstr ""
-#: src/Module/Settings/Account.php:600
+#: src/Module/Settings/Account.php:597
msgid "Default Post Permissions"
msgstr ""
-#: src/Module/Settings/Account.php:604
+#: src/Module/Settings/Account.php:601
msgid "Expiration settings"
msgstr ""
-#: src/Module/Settings/Account.php:605
+#: src/Module/Settings/Account.php:602
msgid "Automatically expire posts after this many days:"
msgstr ""
-#: src/Module/Settings/Account.php:605
+#: src/Module/Settings/Account.php:602
msgid "If empty, posts will not expire. Expired posts will be deleted"
msgstr ""
-#: src/Module/Settings/Account.php:606
+#: src/Module/Settings/Account.php:603
msgid "Expire posts"
msgstr ""
-#: src/Module/Settings/Account.php:606
+#: src/Module/Settings/Account.php:603
msgid "When activated, posts and comments will be expired."
msgstr ""
-#: src/Module/Settings/Account.php:607
+#: src/Module/Settings/Account.php:604
msgid "Expire personal notes"
msgstr ""
-#: src/Module/Settings/Account.php:607
+#: src/Module/Settings/Account.php:604
msgid ""
"When activated, the personal notes on your profile page will be expired."
msgstr ""
-#: src/Module/Settings/Account.php:608
+#: src/Module/Settings/Account.php:605
msgid "Expire starred posts"
msgstr ""
-#: src/Module/Settings/Account.php:608
+#: src/Module/Settings/Account.php:605
msgid ""
"Starring posts keeps them from being expired. That behaviour is overwritten "
"by this setting."
msgstr ""
-#: src/Module/Settings/Account.php:609
+#: src/Module/Settings/Account.php:606
msgid "Only expire posts by others"
msgstr ""
-#: src/Module/Settings/Account.php:609
+#: src/Module/Settings/Account.php:606
msgid ""
"When activated, your own posts never expire. Then the settings above are "
"only valid for posts you received."
msgstr ""
-#: src/Module/Settings/Account.php:612
+#: src/Module/Settings/Account.php:609
msgid "Notification Settings"
msgstr ""
-#: src/Module/Settings/Account.php:613
+#: src/Module/Settings/Account.php:610
msgid "Send a notification email when:"
msgstr ""
-#: src/Module/Settings/Account.php:614
+#: src/Module/Settings/Account.php:611
msgid "You receive an introduction"
msgstr ""
-#: src/Module/Settings/Account.php:615
+#: src/Module/Settings/Account.php:612
msgid "Your introductions are confirmed"
msgstr ""
-#: src/Module/Settings/Account.php:616
+#: src/Module/Settings/Account.php:613
msgid "Someone writes on your profile wall"
msgstr ""
-#: src/Module/Settings/Account.php:617
+#: src/Module/Settings/Account.php:614
msgid "Someone writes a followup comment"
msgstr ""
-#: src/Module/Settings/Account.php:618
+#: src/Module/Settings/Account.php:615
msgid "You receive a private message"
msgstr ""
-#: src/Module/Settings/Account.php:619
+#: src/Module/Settings/Account.php:616
msgid "You receive a friend suggestion"
msgstr ""
-#: src/Module/Settings/Account.php:620
+#: src/Module/Settings/Account.php:617
msgid "You are tagged in a post"
msgstr ""
-#: src/Module/Settings/Account.php:622
+#: src/Module/Settings/Account.php:619
msgid "Create a desktop notification when:"
msgstr ""
-#: src/Module/Settings/Account.php:623
+#: src/Module/Settings/Account.php:620
msgid "Someone tagged you"
msgstr ""
-#: src/Module/Settings/Account.php:624
+#: src/Module/Settings/Account.php:621
msgid "Someone directly commented on your post"
msgstr ""
-#: src/Module/Settings/Account.php:625
+#: src/Module/Settings/Account.php:622
msgid "Someone liked your content"
msgstr ""
-#: src/Module/Settings/Account.php:625 src/Module/Settings/Account.php:626
+#: src/Module/Settings/Account.php:622 src/Module/Settings/Account.php:623
msgid "Can only be enabled, when the direct comment notification is enabled."
msgstr ""
-#: src/Module/Settings/Account.php:626
+#: src/Module/Settings/Account.php:623
msgid "Someone shared your content"
msgstr ""
-#: src/Module/Settings/Account.php:627
+#: src/Module/Settings/Account.php:624
msgid "Someone commented in your thread"
msgstr ""
-#: src/Module/Settings/Account.php:628
+#: src/Module/Settings/Account.php:625
msgid "Someone commented in a thread where you commented"
msgstr ""
-#: src/Module/Settings/Account.php:629
+#: src/Module/Settings/Account.php:626
msgid "Someone commented in a thread where you interacted"
msgstr ""
-#: src/Module/Settings/Account.php:631
+#: src/Module/Settings/Account.php:628
msgid "Activate desktop notifications"
msgstr ""
-#: src/Module/Settings/Account.php:631
+#: src/Module/Settings/Account.php:628
msgid "Show desktop popup on new notifications"
msgstr ""
-#: src/Module/Settings/Account.php:635
+#: src/Module/Settings/Account.php:632
msgid "Text-only notification emails"
msgstr ""
-#: src/Module/Settings/Account.php:637
+#: src/Module/Settings/Account.php:634
msgid "Send text only notification emails, without the html part"
msgstr ""
-#: src/Module/Settings/Account.php:641
+#: src/Module/Settings/Account.php:638
msgid "Show detailled notifications"
msgstr ""
-#: src/Module/Settings/Account.php:643
+#: src/Module/Settings/Account.php:640
msgid ""
"Per default, notifications are condensed to a single notification per item. "
"When enabled every notification is displayed."
msgstr ""
-#: src/Module/Settings/Account.php:647
+#: src/Module/Settings/Account.php:644
msgid "Show notifications of ignored contacts"
msgstr ""
-#: src/Module/Settings/Account.php:649
+#: src/Module/Settings/Account.php:646
msgid ""
"You don't see posts from ignored contacts. But you still see their comments. "
"This setting controls if you want to still receive regular notifications "
"that are caused by ignored contacts or not."
msgstr ""
-#: src/Module/Settings/Account.php:652
+#: src/Module/Settings/Account.php:649
msgid "Advanced Account/Page Type Settings"
msgstr ""
-#: src/Module/Settings/Account.php:653
+#: src/Module/Settings/Account.php:650
msgid "Change the behaviour of this account for special situations"
msgstr ""
-#: src/Module/Settings/Account.php:656
+#: src/Module/Settings/Account.php:653
msgid "Import Contacts"
msgstr ""
-#: src/Module/Settings/Account.php:657
+#: src/Module/Settings/Account.php:654
msgid ""
"Upload a CSV file that contains the handle of your followed accounts in the "
"first column you exported from the old account."
msgstr ""
-#: src/Module/Settings/Account.php:658
+#: src/Module/Settings/Account.php:655
msgid "Upload File"
msgstr ""
-#: src/Module/Settings/Account.php:661
+#: src/Module/Settings/Account.php:658
msgid "Relocate"
msgstr ""
-#: src/Module/Settings/Account.php:662
+#: src/Module/Settings/Account.php:659
msgid ""
"If you have moved this profile from another server, and some of your "
"contacts don't receive your updates, try pushing this button."
msgstr ""
-#: src/Module/Settings/Account.php:663
+#: src/Module/Settings/Account.php:660
msgid "Resend relocate message to contacts"
msgstr ""
@@ -9805,42 +9805,42 @@ msgstr ""
msgid "select a photo from your photo albums"
msgstr ""
-#: src/Module/Settings/RemoveMe.php:103
-#: src/Navigation/Notifications/Repository/Notify.php:467
-#: src/Navigation/Notifications/Repository/Notify.php:488
+#: src/Module/Settings/RemoveMe.php:94
+#: src/Navigation/Notifications/Repository/Notify.php:471
+#: src/Navigation/Notifications/Repository/Notify.php:492
msgid "[Friendica System Notify]"
msgstr ""
-#: src/Module/Settings/RemoveMe.php:103
+#: src/Module/Settings/RemoveMe.php:94
msgid "User deleted their account"
msgstr ""
-#: src/Module/Settings/RemoveMe.php:104
+#: src/Module/Settings/RemoveMe.php:95
msgid ""
"On your Friendica node an user deleted their account. Please ensure that "
"their data is removed from the backups."
msgstr ""
-#: src/Module/Settings/RemoveMe.php:105
+#: src/Module/Settings/RemoveMe.php:96
#, php-format
msgid "The user id is %d"
msgstr ""
-#: src/Module/Settings/RemoveMe.php:117
+#: src/Module/Settings/RemoveMe.php:108
msgid "Your user account has been successfully removed. Bye bye!"
msgstr ""
-#: src/Module/Settings/RemoveMe.php:137
+#: src/Module/Settings/RemoveMe.php:128
msgid "Remove My Account"
msgstr ""
-#: src/Module/Settings/RemoveMe.php:138
+#: src/Module/Settings/RemoveMe.php:129
msgid ""
"This will completely remove your account. Once this has been done it is not "
"recoverable."
msgstr ""
-#: src/Module/Settings/RemoveMe.php:140
+#: src/Module/Settings/RemoveMe.php:131
msgid "Please enter your password for verification:"
msgstr ""
@@ -10133,32 +10133,32 @@ msgstr ""
msgid "Verify code and enable two-factor authentication"
msgstr ""
-#: src/Module/Settings/UserExport.php:94
+#: src/Module/Settings/UserExport.php:90
msgid "Export account"
msgstr ""
-#: src/Module/Settings/UserExport.php:94
+#: src/Module/Settings/UserExport.php:90
msgid ""
"Export your account info and contacts. Use this to make a backup of your "
"account and/or to move it to another server."
msgstr ""
-#: src/Module/Settings/UserExport.php:95
+#: src/Module/Settings/UserExport.php:91
msgid "Export all"
msgstr ""
-#: src/Module/Settings/UserExport.php:95
+#: src/Module/Settings/UserExport.php:91
msgid ""
"Export your account info, contacts and all your items as json. Could be a "
"very big file, and could take a lot of time. Use this to make a full backup "
"of your account (photos are not exported)"
msgstr ""
-#: src/Module/Settings/UserExport.php:96
+#: src/Module/Settings/UserExport.php:92
msgid "Export Contacts to CSV"
msgstr ""
-#: src/Module/Settings/UserExport.php:96
+#: src/Module/Settings/UserExport.php:92
msgid ""
"Export the list of the accounts you are following as CSV file. Compatible to "
"e.g. Mastodon."
@@ -10626,188 +10626,188 @@ msgid "%1$s commented on your thread %2$s"
msgstr ""
#: src/Navigation/Notifications/Repository/Notify.php:225
-#: src/Navigation/Notifications/Repository/Notify.php:742
+#: src/Navigation/Notifications/Repository/Notify.php:752
msgid "[Friendica:Notify]"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:289
+#: src/Navigation/Notifications/Repository/Notify.php:293
#, php-format
msgid "%s New mail received at %s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:291
+#: src/Navigation/Notifications/Repository/Notify.php:295
#, php-format
msgid "%1$s sent you a new private message at %2$s."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:292
+#: src/Navigation/Notifications/Repository/Notify.php:296
msgid "a private message"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:292
+#: src/Navigation/Notifications/Repository/Notify.php:296
#, php-format
msgid "%1$s sent you %2$s."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:294
+#: src/Navigation/Notifications/Repository/Notify.php:298
#, php-format
msgid "Please visit %s to view and/or reply to your private messages."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:324
+#: src/Navigation/Notifications/Repository/Notify.php:328
#, php-format
msgid "%1$s commented on %2$s's %3$s %4$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:329
+#: src/Navigation/Notifications/Repository/Notify.php:333
#, php-format
msgid "%1$s commented on your %2$s %3$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:333
+#: src/Navigation/Notifications/Repository/Notify.php:337
#, php-format
msgid "%1$s commented on their %2$s %3$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:337
-#: src/Navigation/Notifications/Repository/Notify.php:776
+#: src/Navigation/Notifications/Repository/Notify.php:341
+#: src/Navigation/Notifications/Repository/Notify.php:786
#, php-format
msgid "%1$s Comment to conversation #%2$d by %3$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:339
+#: src/Navigation/Notifications/Repository/Notify.php:343
#, php-format
msgid "%s commented on an item/conversation you have been following."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:343
-#: src/Navigation/Notifications/Repository/Notify.php:358
-#: src/Navigation/Notifications/Repository/Notify.php:791
+#: src/Navigation/Notifications/Repository/Notify.php:347
+#: src/Navigation/Notifications/Repository/Notify.php:362
+#: src/Navigation/Notifications/Repository/Notify.php:801
#, php-format
msgid "Please visit %s to view and/or reply to the conversation."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:350
+#: src/Navigation/Notifications/Repository/Notify.php:354
#, php-format
msgid "%s %s posted to your profile wall"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:352
+#: src/Navigation/Notifications/Repository/Notify.php:356
#, php-format
msgid "%1$s posted to your profile wall at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:353
+#: src/Navigation/Notifications/Repository/Notify.php:357
#, php-format
msgid "%1$s posted to [url=%2$s]your wall[/url]"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:366
+#: src/Navigation/Notifications/Repository/Notify.php:370
#, php-format
msgid "%s Introduction received"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:368
+#: src/Navigation/Notifications/Repository/Notify.php:372
#, php-format
msgid "You've received an introduction from '%1$s' at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:369
+#: src/Navigation/Notifications/Repository/Notify.php:373
#, php-format
msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:374
-#: src/Navigation/Notifications/Repository/Notify.php:420
+#: src/Navigation/Notifications/Repository/Notify.php:378
+#: src/Navigation/Notifications/Repository/Notify.php:424
#, php-format
msgid "You may visit their profile at %s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:376
+#: src/Navigation/Notifications/Repository/Notify.php:380
#, php-format
msgid "Please visit %s to approve or reject the introduction."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:383
+#: src/Navigation/Notifications/Repository/Notify.php:387
#, php-format
msgid "%s A new person is sharing with you"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:385
-#: src/Navigation/Notifications/Repository/Notify.php:386
+#: src/Navigation/Notifications/Repository/Notify.php:389
+#: src/Navigation/Notifications/Repository/Notify.php:390
#, php-format
msgid "%1$s is sharing with you at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:393
+#: src/Navigation/Notifications/Repository/Notify.php:397
#, php-format
msgid "%s You have a new follower"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:395
-#: src/Navigation/Notifications/Repository/Notify.php:396
+#: src/Navigation/Notifications/Repository/Notify.php:399
+#: src/Navigation/Notifications/Repository/Notify.php:400
#, php-format
msgid "You have a new follower at %2$s : %1$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:409
+#: src/Navigation/Notifications/Repository/Notify.php:413
#, php-format
msgid "%s Friend suggestion received"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:411
+#: src/Navigation/Notifications/Repository/Notify.php:415
#, php-format
msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:412
+#: src/Navigation/Notifications/Repository/Notify.php:416
#, php-format
msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:418
+#: src/Navigation/Notifications/Repository/Notify.php:422
msgid "Name:"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:419
+#: src/Navigation/Notifications/Repository/Notify.php:423
msgid "Photo:"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:422
+#: src/Navigation/Notifications/Repository/Notify.php:426
#, php-format
msgid "Please visit %s to approve or reject the suggestion."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:430
-#: src/Navigation/Notifications/Repository/Notify.php:445
+#: src/Navigation/Notifications/Repository/Notify.php:434
+#: src/Navigation/Notifications/Repository/Notify.php:449
#, php-format
msgid "%s Connection accepted"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:432
-#: src/Navigation/Notifications/Repository/Notify.php:447
+#: src/Navigation/Notifications/Repository/Notify.php:436
+#: src/Navigation/Notifications/Repository/Notify.php:451
#, php-format
msgid "'%1$s' has accepted your connection request at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:433
-#: src/Navigation/Notifications/Repository/Notify.php:448
+#: src/Navigation/Notifications/Repository/Notify.php:437
+#: src/Navigation/Notifications/Repository/Notify.php:452
#, php-format
msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:438
+#: src/Navigation/Notifications/Repository/Notify.php:442
msgid ""
"You are now mutual friends and may exchange status updates, photos, and "
"email without restriction."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:440
+#: src/Navigation/Notifications/Repository/Notify.php:444
#, php-format
msgid "Please visit %s if you wish to make any changes to this relationship."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:453
+#: src/Navigation/Notifications/Repository/Notify.php:457
#, php-format
msgid ""
"'%1$s' has chosen to accept you a fan, which restricts some forms of "
@@ -10816,34 +10816,34 @@ msgid ""
"automatically."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:455
+#: src/Navigation/Notifications/Repository/Notify.php:459
#, php-format
msgid ""
"'%1$s' may choose to extend this into a two-way or more permissive "
"relationship in the future."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:457
+#: src/Navigation/Notifications/Repository/Notify.php:461
#, php-format
msgid "Please visit %s if you wish to make any changes to this relationship."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:467
+#: src/Navigation/Notifications/Repository/Notify.php:471
msgid "registration request"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:469
+#: src/Navigation/Notifications/Repository/Notify.php:473
#, php-format
msgid "You've received a registration request from '%1$s' at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:470
+#: src/Navigation/Notifications/Repository/Notify.php:474
#, php-format
msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:475
-#: src/Navigation/Notifications/Repository/Notify.php:496
+#: src/Navigation/Notifications/Repository/Notify.php:479
+#: src/Navigation/Notifications/Repository/Notify.php:500
#, php-format
msgid ""
"Full Name:\t%s\n"
@@ -10851,36 +10851,36 @@ msgid ""
"Login Name:\t%s (%s)"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:481
+#: src/Navigation/Notifications/Repository/Notify.php:485
#, php-format
msgid "Please visit %s to approve or reject the request."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:488
+#: src/Navigation/Notifications/Repository/Notify.php:492
msgid "new registration"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:490
+#: src/Navigation/Notifications/Repository/Notify.php:494
#, php-format
msgid "You've received a new registration from '%1$s' at %2$s"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:491
+#: src/Navigation/Notifications/Repository/Notify.php:495
#, php-format
msgid "You've received a [url=%1$s]new registration[/url] from %2$s."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:502
+#: src/Navigation/Notifications/Repository/Notify.php:506
#, php-format
msgid "Please visit %s to have a look at the new registration."
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:770
+#: src/Navigation/Notifications/Repository/Notify.php:780
#, php-format
msgid "%s %s tagged you"
msgstr ""
-#: src/Navigation/Notifications/Repository/Notify.php:773
+#: src/Navigation/Notifications/Repository/Notify.php:783
#, php-format
msgid "%s %s shared a new post"
msgstr ""