diff --git a/admin/models.py b/admin/models.py index 708f6d284..e7cdb1a24 100644 --- a/admin/models.py +++ b/admin/models.py @@ -387,6 +387,10 @@ class Domain(DatesAware): def mailbox_count(self): return len(self.mailbox_set.all()) + @property + def mbalias_count(self): + return len(self.alias_set.all()) + def create_dir(self): if parameters.get_admin("CREATE_DIRECTORIES") == "yes": path = "%s/%s" % (parameters.get_admin("STORAGE_PATH"), self.name) diff --git a/admin/tables.py b/admin/tables.py index 0e8d48000..39b1c2660 100644 --- a/admin/tables.py +++ b/admin/tables.py @@ -16,7 +16,7 @@ class DomainsTable(tables.Table): width="100px", align="center") mboxes = tables.Column("mailbox_count", label=ugettext_noop("Mailboxes"), width="100px", align="center") - mbaliases = tables.Column("mbalias_counter", label=ugettext_noop("Mailbox aliases"), + mbaliases = tables.Column("mbalias_count", label=ugettext_noop("Mailbox aliases"), width="100px", align="center") quota = tables.Column("quota", label=ugettext_noop("Quota"), width="50px", align="center") diff --git a/admin/views.py b/admin/views.py index a20c905c1..6cd819801 100644 --- a/admin/views.py +++ b/admin/views.py @@ -30,11 +30,11 @@ def domains(request): return HttpResponseRedirect(reverse(userprefs.views.preferences)) domains = request.user.get_domains() - for dom in domains: - dom.mbalias_counter = len(Alias.objects.filter(domain=dom.id)) - return render_listing(request, "domains", - "admin/domains.html", - objects=domains) + squery = request.GET.get("searchquery", None) + if squery is not None: + domains = domains.filter(name__contains=squery) + return render_listing(request, "domains", "admin/domains.html", + objects=domains, squery=squery) @login_required @permission_required("auth.add_user") @@ -250,14 +250,28 @@ def deldlist(request): @user_passes_test(lambda u: u.has_perm("auth.add_user") or u.has_perm("admin.add_alias")) def identities(request, tplname='admin/identities.html'): accounts_list = [] - for account in User.objects.all(): + squery = request.GET.get("searchquery", None) + if squery: + accounts = User.objects.filter(username__contains=squery) + if squery.find('@') != -1: + local_part, domname = split_mailbox(squery) + mbaliases = Alias.objects.filter(address__contains=local_part, + domain__name__contains=domname) + else: + mbaliases = Alias.objects.filter(address__contains=squery) + else: + accounts = User.objects.all() + mbaliases = Alias.objects.all() + + for account in accounts: if request.user.can_access(account) or \ account.has_mailbox and request.user.can_access(account.mailbox_set.all()[0].domain): accounts_list += [account] - for mbalias in Alias.objects.all(): + for mbalias in mbaliases: if len(mbalias.get_recipients()) >= 2: accounts_list += [mbalias] - return render_listing(request, "identities", tplname, objects=accounts_list) + return render_listing(request, "identities", tplname, + objects=accounts_list, squery=squery) @login_required @permission_required("auth.add_user") diff --git a/templates/admin/domains.html b/templates/admin/domains.html index 44d82a12c..9e49e9f21 100644 --- a/templates/admin/domains.html +++ b/templates/admin/domains.html @@ -8,7 +8,16 @@ question: gettext("Delete this domain?"), checkboxes: {keepdir: gettext("Do not delete domain directory")} }); + $("#searchquery").focus(function() { + $(this).attr("value", ""); + }).blur(function() { + var $this = $(this); + if ($this.attr("value") == "") { + $this.attr("value", gettext("Search")); + } + }); }); {% endblock %} -{% block leftcol %}{% endblock %} +{% block leftcol %}{% endblock %} diff --git a/templates/admin/header.html b/templates/admin/header.html index 626eaf225..fb6191142 100644 --- a/templates/admin/header.html +++ b/templates/admin/header.html @@ -1,4 +1,5 @@ {% extends "twocols.html" %} {% block html_head %} + {% endblock %} diff --git a/templates/admin/identities.html b/templates/admin/identities.html index 006920bea..f42b67528 100644 --- a/templates/admin/identities.html +++ b/templates/admin/identities.html @@ -31,4 +31,5 @@ $(document).ready(function() { }); {% endblock %} -{% block leftcol %}{% endblock %} +{% block leftcol %}{% endblock %} diff --git a/templates/admin/listing.html b/templates/admin/listing.html index e1b6135cc..52ff52c0c 100644 --- a/templates/admin/listing.html +++ b/templates/admin/listing.html @@ -3,6 +3,18 @@ {% block html_head %} {{ block.super }} + {% endblock %} {% block apparea %} {{ table|safe }} diff --git a/templates/admin/searchform.html b/templates/admin/searchform.html new file mode 100644 index 000000000..8bb8d7f95 --- /dev/null +++ b/templates/admin/searchform.html @@ -0,0 +1,6 @@ +{% load i18n %} +