diff --git a/extensions/amavis_quarantine/__init__.py b/extensions/amavis_quarantine/__init__.py index 86bfd4560..29a71dba1 100644 --- a/extensions/amavis_quarantine/__init__.py +++ b/extensions/amavis_quarantine/__init__.py @@ -6,6 +6,7 @@ Amavis quarantine manager (SQL based) """ from django.utils.translation import ugettext_noop as _, ugettext from django.core.urlresolvers import reverse +from django.template import Template, Context from modoboa.lib import events, parameters baseurl = "quarantine" @@ -95,29 +96,45 @@ def remove_user_record(mailbox): Users.objects.get(email=mailbox.full_address).delete() +@events.observe("GetStaticContent") +def extra_static_content(): + tpl = Template("""""") + url = reverse("modoboa.extensions.amavis_quarantine.views.nbrequests") + return [tpl.render(Context(dict(url=url)))] + @events.observe("TopNotifications") def display_requests(user): - from models import Msgrcpt - from django.db.models import Q - from django.template import Template, Context + from lib import get_nb_requests if parameters.get_admin("USER_CAN_RELEASE") == "yes" \ or user.group == "SimpleUsers": return [] + nbrequests = get_nb_requests(user) - rq = Q(rs='p') - if not user.is_superuser: - doms = user.get_domains() - regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms)) - doms_q = Q(rid__email__regex=regexp) - rp &= doms_q - - nbrequests = len(Msgrcpt.objects.filter(rq)) - if nbrequests > 0: - url = reverse("modoboa.extensions.amavis_quarantine.views.index") - url += "#listing/?viewrequests=1" - tpl = Template('
') - return [tpl.render(Context(dict( - label=_("%d pending requests" % nbrequests), url=url - )))] - return [] + url = reverse("modoboa.extensions.amavis_quarantine.views.index") + url += "#listing/?viewrequests=1" + tpl = Template('') + css = "hidden" if nbrequests == 0 else "" + return [tpl.render(Context(dict( + label=_("%d pending requests" % nbrequests), url=url, css=css + )))] diff --git a/extensions/amavis_quarantine/lib.py b/extensions/amavis_quarantine/lib.py index 211ca0f24..20ec94177 100644 --- a/extensions/amavis_quarantine/lib.py +++ b/extensions/amavis_quarantine/lib.py @@ -5,7 +5,9 @@ import struct import string from functools import wraps from django.core.urlresolvers import reverse +from django.db.models import Q from modoboa.lib import parameters +from models import Msgrcpt def selfservice(ssfunc=None): """Decorator used to expose views to the 'self-service' feature @@ -30,6 +32,19 @@ def selfservice(ssfunc=None): return wrapped_f return decorator +def get_nb_requests(user): + """Return the number of current pending requests + + :param user: a ``User`` instance + """ + rq = Q(rs='p') + if not user.is_superuser: + doms = user.get_domains() + regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms)) + doms_q = Q(rid__email__regex=regexp) + rp &= doms_q + return len(Msgrcpt.objects.filter(rq)) + class AMrelease(object): def __init__(self): mode = parameters.get_admin("AM_PDP_MODE") diff --git a/extensions/amavis_quarantine/urls.py b/extensions/amavis_quarantine/urls.py index 80ef0138c..ad9bd0a7a 100644 --- a/extensions/amavis_quarantine/urls.py +++ b/extensions/amavis_quarantine/urls.py @@ -6,6 +6,7 @@ urlpatterns = patterns( (r'^listing/$', '_listing'), (r'^getmailcontent/(?P