* New top zone to display notifications

* Number of pending release requets now appears in that new zone

fixes #226
This commit is contained in:
Antoine Nguyen
2012-04-07 15:59:55 +02:00
parent a82be58dc4
commit 2ad7b0a039
6 changed files with 40 additions and 18 deletions
+27
View File
@@ -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('<div class="btn-group"><a href="{{ url }}" class="btn btn-danger">{{ label }}</a></div>')
return [tpl.render(Context(dict(
label=_("%d pending requests" % nbrequests), url=url
)))]
return []
@@ -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('<div class="btn-group"><a name="viewrequests" href="#" class="btn btn-danger">{{ label }}</a></div>')
extracontent += tpl.render(Context(dict(
label=_("%d pending requests" % nbrequests)
)))
return render_to_string('common/buttons_list.html', dict(
entries=entries, extracontent=extracontent
))
+1 -7
View File
@@ -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
+1
View File
@@ -53,6 +53,7 @@ events = [
"GetAnnouncement",
"TopNotifications",
"AdminFooterDisplay",
]
+5
View File
@@ -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:
+1
View File
@@ -37,6 +37,7 @@
<ul class="nav pull-right">
{% user_menu user %}
</ul>
<div class="pull-right">{% load_notifications user %}</div>
</div>
</div>
</div>