diff options
author | Alexey Abel <dev@abelonline.de> | 2018-06-27 00:29:39 +0300 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2018-12-20 18:07:20 +0300 |
commit | e0ac55d88a2f16e58b65411799b04e0b5f7c1b3b (patch) | |
tree | 846bd24f74d98ecf2f3283b47647dfd08d3b9bd8 /lib | |
parent | bb73652970182353512d0a44e320ae4e54797c62 (diff) |
When deleting a mail account also delete all aliases
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Db/AliasMapper.php | 22 | ||||
-rw-r--r-- | lib/Service/AccountService.php | 9 | ||||
-rw-r--r-- | lib/Service/AliasesService.php | 8 |
3 files changed, 38 insertions, 1 deletions
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); + } } |