mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +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
|
||||
|
||||
@@ -53,6 +53,7 @@ events = [
|
||||
|
||||
"GetAnnouncement",
|
||||
|
||||
"TopNotifications",
|
||||
"AdminFooterDisplay",
|
||||
]
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
<ul class="nav pull-right">
|
||||
{% user_menu user %}
|
||||
</ul>
|
||||
<div class="pull-right">{% load_notifications user %}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user