mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
* New top zone to display notifications
* Number of pending release requets now appears in that new zone fixes #226
This commit is contained in:
@@ -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
|
||||
))
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user