diff --git a/extensions/amavis_quarantine/__init__.py b/extensions/amavis_quarantine/__init__.py index acd23be83..86bfd4560 100644 --- a/extensions/amavis_quarantine/__init__.py +++ b/extensions/amavis_quarantine/__init__.py @@ -94,3 +94,30 @@ def remove_user_record(mailbox): from models import Users Users.objects.get(email=mailbox.full_address).delete() + +@events.observe("TopNotifications") +def display_requests(user): + from models import Msgrcpt + from django.db.models import Q + from django.template import Template, Context + + if parameters.get_admin("USER_CAN_RELEASE") == "yes" \ + or user.group == "SimpleUsers": + return [] + + 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 [] diff --git a/extensions/amavis_quarantine/templatetags/amextras.py b/extensions/amavis_quarantine/templatetags/amextras.py index ff389733e..05c77b8b3 100644 --- a/extensions/amavis_quarantine/templatetags/amextras.py +++ b/extensions/amavis_quarantine/templatetags/amextras.py @@ -34,14 +34,14 @@ def viewm_menu(user, mail_id, rcpt): "modal" : True, "autowidth" : True}, {"name" : "release", - "img" : "icon-ok", + "img" : "icon-white icon-ok", "class" : "btn-success", "url" : reverse(amavis_quarantine.views.release, args=[mail_id]) \ + ("?rcpt=%s" % rcpt if rcpt else ""), "label" : _("Release")}, {"name" : "delete", "class" : "btn-danger", - "img" : "icon-trash", + "img" : "icon-white icon-trash", "url" : reverse(amavis_quarantine.views.delete, args=[mail_id]) \ + ("?rcpt=%s" % rcpt if rcpt else ""), "label" : _("Delete")}, @@ -75,15 +75,15 @@ def viewm_menu_simple(user, mail_id, rcpt, secret_id=""): {"entries" : entries}) @register.simple_tag -def quar_menu(user, nbrequests): +def quar_menu(user): entries = [ {"name" : "release-multi", "url" : reverse(amavis_quarantine.views.process), - "img" : "icon-ok", + "img" : "icon-white icon-ok", "class" : "btn-success", "label" : _("Release")}, {"name" : "delete-multi", - "img" : "icon-trash", + "img" : "icon-white icon-trash", "class" : "btn-danger", "url" : reverse(amavis_quarantine.views.process), "label" : _("Delete")}, @@ -116,12 +116,6 @@ def quar_menu(user, nbrequests): "extraopts" : extraopts }) - if nbrequests > 0: - tpl = Template('') - extracontent += tpl.render(Context(dict( - label=_("%d pending requests" % nbrequests) - ))) - return render_to_string('common/buttons_list.html', dict( entries=entries, extracontent=extracontent )) diff --git a/extensions/amavis_quarantine/views.py b/extensions/amavis_quarantine/views.py index d0ff5ef41..db4f63315 100644 --- a/extensions/amavis_quarantine/views.py +++ b/extensions/amavis_quarantine/views.py @@ -39,7 +39,6 @@ def _listing(request): flt = None rcptfilter = None msgs = None - nbrequests = -1 if not request.user.is_superuser and request.user.group != 'SimpleUsers': if not len(request.user.get_domains()): @@ -71,7 +70,6 @@ def _listing(request): q = Q(rs='p') else: q = ~Q(rs='D') - rq = Q(rs='p') if request.user.group == 'SimpleUsers': q &= Q(rid__email=request.user.email) else: @@ -80,13 +78,9 @@ def _listing(request): regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms)) doms_q = Q(rid__email__regex=regexp) q &= doms_q - rp &= doms_q if rcptfilter is not None: q &= Q(rid__email__contains=rcptfilter) - if parameters.get_admin("USER_CAN_RELEASE") == "no": - nbrequests = len(Msgrcpt.objects.filter(rq)) - msgs = Msgrcpt.objects.filter(q).values("mail_id") if request.GET.has_key("page"): @@ -108,7 +102,7 @@ def _listing(request): content = lst.fetch(request, page.id_start, page.id_stop) navbar = lst.render_navbar(page, "listing/?") ctx = getctx("ok", listing=content, navbar=navbar, - menu=quar_menu(request.user, nbrequests)) + menu=quar_menu(request.user)) return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") @login_required diff --git a/lib/events.py b/lib/events.py index bf0c975f1..37c7eca83 100644 --- a/lib/events.py +++ b/lib/events.py @@ -53,6 +53,7 @@ events = [ "GetAnnouncement", + "TopNotifications", "AdminFooterDisplay", ] diff --git a/lib/templatetags/libextras.py b/lib/templatetags/libextras.py index 40995dff6..fdc3696c7 100644 --- a/lib/templatetags/libextras.py +++ b/lib/templatetags/libextras.py @@ -66,6 +66,11 @@ def load_optionalmenu(user): return template.loader.render_to_string('common/menulist.html', {"entries" : menu, "user" : user}) +@register.simple_tag +def load_notifications(user): + content = events.raiseQueryEvent("TopNotifications", user) + return "".join(content) + @register.simple_tag def render_form(form, tpl=None): if tpl is not None: diff --git a/templates/nlayout.html b/templates/nlayout.html index a742e6a9b..d33c34197 100644 --- a/templates/nlayout.html +++ b/templates/nlayout.html @@ -37,6 +37,7 @@ +