Implement account edit; add SessionHelper, PasswordHelper and ActionResult

This commit is contained in:
Lexi / Zoe 2021-08-15 17:40:35 +02:00
parent 32add30c9d
commit 6ace072841
Signed by: binaryDiv
GPG key ID: F8D4956E224DA232
15 changed files with 637 additions and 68 deletions

View file

@ -42,6 +42,9 @@ class AccountRepository extends BaseRepository
return $accountList;
}
/**
* @throws AccountNotFoundException
*/
public function fetchAccountById(int $accountId): Account
{
$statement = $this->pdo->prepare('SELECT * FROM mail_users WHERE user_id = :user_id LIMIT 1');
@ -54,4 +57,50 @@ class AccountRepository extends BaseRepository
$row = $statement->fetch(PDO::FETCH_ASSOC);
return Account::createFromArray($row);
}
public function checkUsernameAvailable(string $username): bool
{
$statement = $this->pdo->prepare('SELECT 1 FROM mail_users WHERE username = :username LIMIT 1');
$statement->execute(['username' => $username]);
return $statement->rowCount() === 0;
}
public function updateAccountWithId(int $accountId, ?string $newUsername, ?string $newPasswordHash, bool $newActive,
?string $newHomeDir, string $newMemo): void
{
$queryParams = [
'user_id' => $accountId,
'new_memo' => $newMemo,
'new_active' => $newActive ? '1' : '0',
];
$querySet = '';
if (isset($newUsername)) {
$querySet .= 'username = :new_username, ';
$queryParams['new_username'] = $newUsername;
}
if (isset($newPasswordHash)) {
$querySet .= 'password = :new_password, ';
$queryParams['new_password'] = $newPasswordHash;
}
if (isset($newHomeDir)) {
$querySet .= 'home_dir = :new_home_dir, ';
$queryParams['new_home_dir'] = $newHomeDir;
}
$query = '
UPDATE mail_users
SET
' . $querySet . '
memo = :new_memo,
is_active = :new_active,
modified_at = CURRENT_TIMESTAMP()
WHERE
user_id = :user_id
LIMIT 1
';
$statement = $this->pdo->prepare($query);
$statement->execute($queryParams);
}
}