From e0ac55d88a2f16e58b65411799b04e0b5f7c1b3b Mon Sep 17 00:00:00 2001 From: Alexey Abel Date: Tue, 26 Jun 2018 23:29:39 +0200 Subject: When deleting a mail account also delete all aliases --- lib/Db/AliasMapper.php | 22 ++++++++++++++++++++++ lib/Service/AccountService.php | 9 ++++++++- lib/Service/AliasesService.php | 8 ++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/Db/AliasMapper.php b/lib/Db/AliasMapper.php index aba7fb665..fb8782da6 100644 --- a/lib/Db/AliasMapper.php +++ b/lib/Db/AliasMapper.php @@ -28,6 +28,7 @@ class AliasMapper extends QBMapper { /** * @param int $aliasId * @param string $currentUserId + * * @return Alias */ public function find(int $aliasId, string $currentUserId): Alias { @@ -48,6 +49,7 @@ class AliasMapper extends QBMapper { /** * @param int $accountId * @param string $currentUserId + * * @return Alias[] */ public function findAll(int $accountId, string $currentUserId): array { @@ -64,4 +66,24 @@ class AliasMapper extends QBMapper { return $this->findEntities($qb); } + + /** + * @param int $accountId the account whose aliases will be deleted + * @param string $currentUserId the user that is currently logged in + */ + public function deleteAll($accountId, $currentUserId) { + $qb = $this->db->getQueryBuilder(); + + $query = $qb->delete($this->getTableName(), 'aliases') + ->join('aliases', 'mail_accounts', 'accounts', $qb->expr()->eq('aliases.account_id', 'accounts.id')) + ->where($qb->expr()->eq('account_id', $qb->createNamedParameter($accountId))) + ->where( + $qb->expr()->andX( + $qb->expr()->eq('accounts.user_id', $qb->createNamedParameter($currentUserId)), + $qb->expr()->eq('aliases.account_id', $qb->createNamedParameter($accountId)) + ) + ); + + $query->execute(); + } } diff --git a/lib/Service/AccountService.php b/lib/Service/AccountService.php index 0a50477ec..ad5f93b78 100644 --- a/lib/Service/AccountService.php +++ b/lib/Service/AccountService.php @@ -49,12 +49,17 @@ class AccountService { /** @var Manager */ private $defaultAccountManager; + /** @var AliasesService */ + private $aliasesService; + public function __construct(MailAccountMapper $mapper, IL10N $l10n, - Manager $defaultAccountManager) { + Manager $defaultAccountManager, + AliasesService $aliasesService) { $this->mapper = $mapper; $this->l10n = $l10n; $this->defaultAccountManager = $defaultAccountManager; + $this->aliasesService = $aliasesService; } /** @@ -110,6 +115,8 @@ class AccountService { if ($accountId === Manager::ACCOUNT_ID) { return; } + $this->aliasesService->deleteAll($accountId, $currentUserId); + $mailAccount = $this->mapper->find($currentUserId, $accountId); $this->mapper->delete($mailAccount); } diff --git a/lib/Service/AliasesService.php b/lib/Service/AliasesService.php index 19062e22e..8c696556d 100644 --- a/lib/Service/AliasesService.php +++ b/lib/Service/AliasesService.php @@ -78,4 +78,12 @@ class AliasesService { return $alias; } + /** + * Deletes all aliases of an account. + * @param int $accountId the account which aliases will be deleted + * @param string $currentUserId the user whom the account belongs to + */ + public function deleteAll($accountId, $currentUserId) { + $this->mapper->deleteAll($accountId, $currentUserId); + } } -- cgit v1.2.3