From 49705079afb6ff93f23fdb297f3be4a5c3515f35 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Sat, 27 Apr 2013 11:28:08 +0200 Subject: [PATCH] Quotas page improvements: * Possibility to filter mailboxes using a search pattern * Possibility to edit a mailbox fixes #391 --- modoboa/admin/models.py | 20 ++++++++++++++++---- modoboa/admin/templates/admin/quotas.html | 4 ++-- modoboa/admin/templatetags/admin_extras.py | 3 ++- modoboa/admin/views.py | 6 +++++- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/modoboa/admin/models.py b/modoboa/admin/models.py index c3f544507..e754d0239 100644 --- a/modoboa/admin/models.py +++ b/modoboa/admin/models.py @@ -317,21 +317,33 @@ class User(DUser): domaliases += dom.domainalias_set.all() return domaliases - def get_mailboxes(self): + def get_mailboxes(self, squery=None): """Return the mailboxes that belong to this user The result will contain the mailboxes defined for each domain that user can see. + :param string squery: a search query :return: a list of ``Mailbox`` objects """ from modoboa.lib.permissions import get_content_type - if self.is_superuser: - return Mailbox.objects.all() + qf = None + if squery is not None: + if '@' in squery: + parts = squery.split('@') + addrfilter = '@'.join(parts[:-1]) + domfilter = parts[-1] + qf = Q(address__contains=addrfilter) & Q(domain__name__contains=domfilter) + else: + qf = Q(address__contains=squery) | Q(domain__name__contains=squery) ids = self.objectaccess_set.filter(content_type=get_content_type(Mailbox)) \ .values_list('object_id', flat=True) - return Mailbox.objects.filter(pk__in=ids) + if qf is not None: + qf = Q(pk__in=ids) & qf + else: + qf = Q(pk__in=ids) + return Mailbox.objects.filter(qf) def get_mbaliases(self): """Return the mailbox aliases that belong to this user diff --git a/modoboa/admin/templates/admin/quotas.html b/modoboa/admin/templates/admin/quotas.html index 132960a44..6bfa2dd3e 100644 --- a/modoboa/admin/templates/admin/quotas.html +++ b/modoboa/admin/templates/admin/quotas.html @@ -1,4 +1,4 @@ -{% load i18n libextras %} +{% load i18n libextras admin_extras %} @@ -10,7 +10,7 @@ {% for mbox in mboxes %} - +
{{ mbox.full_address }}{% identity_modify_link mbox.user "mail" %} {{ mbox.get_quota }}M {{ mbox.quota }}M diff --git a/modoboa/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py index 8cb8c7207..1f0ecb3dc 100644 --- a/modoboa/admin/templatetags/admin_extras.py +++ b/modoboa/admin/templatetags/admin_extras.py @@ -212,10 +212,11 @@ def identity_actions(user, ident): return render_actions(actions) @register.simple_tag -def identity_modify_link(identity): +def identity_modify_link(identity, active_tab='default'): linkdef = {"label" : identity.identity, "modal" : True} if identity.__class__.__name__ == "User": linkdef["url"] = reverse("modoboa.admin.views.editaccount", args=[identity.id]) + linkdef["url"] += "?active_tab=%s" % active_tab linkdef["modalcb"] = "admin.editaccount_cb" else: linkdef["url"] = reverse("modoboa.admin.views.editalias_dispatcher", args=[identity.id]) diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index 4eacd94b3..f2f205ff9 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -345,7 +345,8 @@ def mboxes_list(request): @permission_required("admin.add_mailbox") def list_quotas(request, tplname="admin/quotas.html"): sort_order = request.GET.get("sort_order", "address") - mboxes = request.user.get_mailboxes() + mboxes = request.user.get_mailboxes(request.GET.get("searchquery", None)) + mboxes = mboxes.exclude(quota=0) if sort_order.startswith("-"): sort_dir = "-" sort_order = sort_order[1:] @@ -475,6 +476,9 @@ def editaccount(request, accountid, tplname="common/tabforms.html"): return ajax_response(request, status="ko", template=tplname, **ctx) ctx["tabs"] = AccountForm(request.user, instances=instances) + active_tab_id = request.GET.get("active_tab", "default") + if active_tab_id != "default": + ctx["tabs"].active_id = active_tab_id return render(request, tplname, ctx) @login_required