Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/mail.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlexey Abel <dev@abelonline.de>2018-06-27 00:29:39 +0300
committerChristoph Wurst <christoph@winzerhof-wurst.at>2018-12-20 18:07:20 +0300
commite0ac55d88a2f16e58b65411799b04e0b5f7c1b3b (patch)
tree846bd24f74d98ecf2f3283b47647dfd08d3b9bd8 /lib
parentbb73652970182353512d0a44e320ae4e54797c62 (diff)
When deleting a mail account also delete all aliases
Diffstat (limited to 'lib')
-rw-r--r--lib/Db/AliasMapper.php22
-rw-r--r--lib/Service/AccountService.php9
-rw-r--r--lib/Service/AliasesService.php8
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);
+ }
}