<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
namespace Friendica\Module\Settings;
use Friendica\App;
-use Friendica\Core\Config\Capability\IManageConfigValues;
+use Friendica\Content\Widget;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleUserSessions;
-use Friendica\Database\Database;
use Friendica\DI;
use Friendica\Model\User;
use Friendica\Model\User\Cookie;
class RemoveMe extends BaseSettings
{
- /** @var IManageConfigValues */
- private $config;
- /** @var Database */
- private $database;
/** @var Emailer */
private $emailer;
/** @var SystemMessages */
/** @var Cookie */
private $cookie;
- public function __construct(Cookie $cookie, SystemMessages $systemMessages, Emailer $emailer, Database $database, IManageConfigValues $config, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
+ public function __construct(Cookie $cookie, SystemMessages $systemMessages, Emailer $emailer, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
{
parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
- $this->config = $config;
- $this->database = $database;
$this->emailer = $emailer;
$this->systemMessages = $systemMessages;
$this->cookie = $cookie;
try {
$userId = User::getIdFromPasswordAuthentication($this->session->getLocalUserId(), trim($request[$hash]));
+ if ($userId != $this->session->getLocalUserId()) {
+ throw new \RuntimeException($this->t("There was a validation error, please make sure you're logged in with the account you want to remove and try again.") . ' ' . $this->t('If this error persists, please contact your administrator.'));
+ }
} catch (\Throwable $e) {
$this->systemMessages->addNotice($e->getMessage());
return;
}
// 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()
$this->emailer->send($email);
}
- User::remove($userId);
+ try {
+ User::remove($userId);
- $this->session->clear();
- $this->cookie->clear();
+ $this->session->clear();
+ $this->cookie->clear();
- $this->systemMessages->addInfo($this->t('Your user account has been successfully removed. Bye bye!'));
- $this->baseUrl->redirect();
+ $this->systemMessages->addInfo($this->t('Your account has been successfully removed. Bye bye!'));
+ $this->baseUrl->redirect();
+ } catch (\RuntimeException $e) {
+ $this->systemMessages->addNotice($e->getMessage());
+ } finally {
+ return;
+ }
}
protected function content(array $request = []): string
'title' => DI::l10n()->t('Remove My Account'),
'desc' => DI::l10n()->t('This will completely remove your account. Once this has been done it is not recoverable.'),
],
+
+ '$hovercard' => Widget\Hovercard::getHTML(User::getOwnerDataById($this->session->getLocalUserId())),
+
'$password' => [$hash, $this->t('Please enter your password for verification:'), null, null, true],
]);
}