From 2d89bb11eeda5cddbfaff4c3dc51a9418ed49f52 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 21 Jan 2013 22:59:23 +0100 Subject: [PATCH] New option to automaticaly remove accounts with mailboxes. Beware: activating this mode will make domain removal longer. fix #364 --- modoboa/admin/__init__.py | 4 ++++ modoboa/admin/models.py | 7 +++++-- modoboa/admin/static/admin/js/admin.js | 1 + modoboa/admin/views.py | 2 +- modoboa/static/js/confirmation.js | 17 +++++++++++++++-- 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/modoboa/admin/__init__.py b/modoboa/admin/__init__.py index b46cf5b8f..37e376411 100644 --- a/modoboa/admin/__init__.py +++ b/modoboa/admin/__init__.py @@ -23,6 +23,10 @@ parameters.register_admin("MAILBOX_TYPE", type="list", deflt="maildir", parameters.register_admin("MAILDIR_ROOT", type="string", deflt=".maildir", visible_if="MAILBOX_TYPE=maildir", help=ugettext_lazy("Sub-directory (inside the mailbox) where messages are stored when using the maildir format")) +parameters.register_admin( + "AUTO_ACCOUNT_REMOVAL", type="list_yesno", deflt="no", + help=ugettext_lazy("When a mailbox is removed, also remove the associated account") + ) parameters.register_admin( "PASSWORD_SCHEME", type="list", deflt="md5crypt", values=[("crypt", "crypt"), diff --git a/modoboa/admin/models.py b/modoboa/admin/models.py index bd7580013..cd34b6aa8 100644 --- a/modoboa/admin/models.py +++ b/modoboa/admin/models.py @@ -558,7 +558,7 @@ class Domain(DatesAware): self.name)) return True - def delete(self, keepdir=False): + def delete(self, fromuser, keepdir=False): from modoboa.lib.permissions import ungrant_access_to_object, ungrant_access_to_objects if self.domainalias_set.count(): @@ -570,6 +570,9 @@ class Domain(DatesAware): if self.alias_set.count(): events.raiseEvent("MailboxAliasDelete", self.alias_set.all()) ungrant_access_to_objects(self.alias_set.all()) + if parameters.get_admin("AUTO_ACCOUNT_REMOVAL") == "yes": + for account in User.objects.filter(mailbox__domain__name=self.name): + account.delete(fromuser, keepdir) events.raiseEvent("DeleteDomain", self) ungrant_access_to_object(self) super(Domain, self).delete() @@ -811,7 +814,7 @@ def mailbox_deleted_handler(sender, **kwargs): alias.mboxes.remove(mb) if alias.mboxes.count() == 0: alias.delete() - + class Alias(DatesAware): address = models.CharField( ugettext_lazy('address'), max_length=254, diff --git a/modoboa/admin/static/admin/js/admin.js b/modoboa/admin/static/admin/js/admin.js index 116e6fa77..ecaf72023 100644 --- a/modoboa/admin/static/admin/js/admin.js +++ b/modoboa/admin/static/admin/js/admin.js @@ -113,6 +113,7 @@ Domains.prototype = { $("a[name=deldomain]").confirm({ question: gettext("Delete this domain?"), + warning: gettext("This operation will remove ALL data associated to this domain."), checkboxes: {keepdir: gettext("Do not delete domain directory")}, success_cb: $.proxy(this.reload_listing, this) }); diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index 9c69d238b..f1c615a38 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -153,7 +153,7 @@ def deldomain(request): raise PermDeniedException if mb and mb.domain == dom: raise AdminError(_("You can't delete your own domain")) - dom.delete(keepdir=keepdir) + dom.delete(request.user, keepdir) msg = ungettext("Domain deleted", "Domains deleted", len(selection)) return ajax_simple_response({"status" : "ok", "respmsg" : msg}) diff --git a/modoboa/static/js/confirmation.js b/modoboa/static/js/confirmation.js index 2debf103d..0e919e1ca 100644 --- a/modoboa/static/js/confirmation.js +++ b/modoboa/static/js/confirmation.js @@ -38,8 +38,20 @@ }); box.append($('')); + + '

' + this.options.question + '

')); + var $container = $("
", {"class" : "container-fluid"}); + box.append($container); + if (this.options.warning) { + $container.append($("
", {"class" : "row-fluid"}) + .append($("
", { + "class": "alert alert-danger", + html: "

" + gettext("Warning") + "

" + this.options.warning + })) + ); + } + + $container.append('

' + this.buildcheckboxes() + '

'); + box.append("
"); var footer = $('