diff --git a/extensions/amavis_quarantine/__init__.py b/extensions/amavis_quarantine/__init__.py index 3f7a5b842..f5358ce9d 100644 --- a/extensions/amavis_quarantine/__init__.py +++ b/extensions/amavis_quarantine/__init__.py @@ -41,6 +41,8 @@ def load(): parameters.register_admin("AM_PDP_SOCKET", type="string", deflt=_("/var/amavis/amavisd.sock"), help=_("Path to the PDP server socket (if unix mode)")) + parameters.register_admin("USER_CAN_RELEASE", type="list_yesno", deflt="no", + help=_("Allow users to directly release their messages")) parameters.register_user( "MESSAGES_PER_PAGE", type="int", deflt=40, diff --git a/extensions/amavis_quarantine/sql_listing.py b/extensions/amavis_quarantine/sql_listing.py index 414b04862..c960e1528 100644 --- a/extensions/amavis_quarantine/sql_listing.py +++ b/extensions/amavis_quarantine/sql_listing.py @@ -73,6 +73,8 @@ class SQLconnector(MBconnector): m["class"] = "unseen" elif rcpt.rs == 'R': m["img_rstatus"] = static_url("pics/release.png") + elif rcpt.rs == 'p': + m["class"] = "pending" emails.append(m) return emails diff --git a/extensions/amavis_quarantine/static/css/quarantine.css b/extensions/amavis_quarantine/static/css/quarantine.css index 3c46ce99b..3aac8ced5 100644 --- a/extensions/amavis_quarantine/static/css/quarantine.css +++ b/extensions/amavis_quarantine/static/css/quarantine.css @@ -27,3 +27,7 @@ thead tr { td.unseen { font-weight: bold; } + +td.pending { + font-style: italic; +} \ No newline at end of file diff --git a/extensions/amavis_quarantine/static/js/quarantine.js b/extensions/amavis_quarantine/static/js/quarantine.js index bfc349bf1..c7b2a4eee 100644 --- a/extensions/amavis_quarantine/static/js/quarantine.js +++ b/extensions/amavis_quarantine/static/js/quarantine.js @@ -24,7 +24,7 @@ Quarantine.prototype = { $("#searchfield").searchbar({navobj: this.navobj}); } if (data.navbar) { - $("#bottom-bar-in").html(data.navbar); + $("#bottom-bar-right").html(data.navbar); } if (data.listing != undefined) { $("#listing").html(data.listing); @@ -43,6 +43,8 @@ Quarantine.prototype = { $.proxy(this.release_selection, this)); $(document).on("click", "a[name=delete-multi]", $.proxy(this.delete_selection, this)); + $(document).on("click", "a[name=viewrequests]", + $.proxy(this.view_requests, this)); $(document).on("click", "#bottom-bar a", $.proxy(this.load_page, this)); $(document).on("click", "a[name=release]", $.proxy(this.release, this)); @@ -58,6 +60,11 @@ Quarantine.prototype = { this.navobj.from_string($link.attr("href")).update(); }, + view_requests: function(e) { + e.preventDefault(); + this.navobj.setparam("viewrequests", "1").update(); + }, + viewmail_loader: function(e) { e.preventDefault(); var $tr = $(e.target).parent(); diff --git a/extensions/amavis_quarantine/templates/amavis_quarantine/index.html b/extensions/amavis_quarantine/templates/amavis_quarantine/index.html index de5331cd7..8244b47e9 100644 --- a/extensions/amavis_quarantine/templates/amavis_quarantine/index.html +++ b/extensions/amavis_quarantine/templates/amavis_quarantine/index.html @@ -18,5 +18,3 @@ $(document).ready(function() {
{% endblock %} -{% block footer %} -{% endblock %} diff --git a/extensions/amavis_quarantine/templatetags/amextras.py b/extensions/amavis_quarantine/templatetags/amextras.py index c7bc2addc..1a2ce3342 100644 --- a/extensions/amavis_quarantine/templatetags/amextras.py +++ b/extensions/amavis_quarantine/templatetags/amextras.py @@ -1,5 +1,6 @@ from django import template from django.template.loader import render_to_string +from django.template import Template, Context from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse from django.conf import settings @@ -9,7 +10,7 @@ from modoboa.extensions import amavis_quarantine register = template.Library() @register.simple_tag -def viewm_menu(selection, backurl, mail_id, rcpt, perms): +def viewm_menu(user, mail_id, rcpt): options_menu = [ {"name" : "viewmode", "label" : _("View as plain text"), @@ -35,12 +36,12 @@ def viewm_menu(selection, backurl, mail_id, rcpt, perms): {"name" : "release", "img" : "icon-ok", "url" : reverse(amavis_quarantine.views.release, args=[mail_id]) \ - + "?rcpt=%s" % rcpt, + + ("?rcpt=%s" % rcpt if rcpt else ""), "label" : _("Release")}, {"name" : "delete", "img" : "icon-remove", "url" : reverse(amavis_quarantine.views.delete, args=[mail_id]) \ - + "?rcpt=%s" % rcpt, + + ("?rcpt=%s" % rcpt if rcpt else ""), "label" : _("Delete")}, {"name" : "options", "label" : _("Options"), @@ -49,11 +50,10 @@ def viewm_menu(selection, backurl, mail_id, rcpt, perms): ] return render_to_string('common/buttons_list.html', - {"selection" : selection, "entries" : entries, - "perms" : perms}) + {"entries" : entries}) @register.simple_tag -def quar_menu(selection, user): +def quar_menu(user, nbrequests): entries = [ {"name" : "release-multi", "url" : reverse(amavis_quarantine.views.process), @@ -89,11 +89,17 @@ def quar_menu(selection, user): extraopts = [{"name" : "to", "label" : _("To")}] else: extraopts = [] - searchbar = render_to_string('common/email_searchbar.html', { + extracontent = render_to_string('common/email_searchbar.html', { "MEDIA_URL" : settings.MEDIA_URL, "extraopts" : extraopts }) + + if nbrequests != -1: + tpl = Template('') + extracontent += tpl.render(Context(dict( + label=_("%d pending requests" % nbrequests) + ))) return render_to_string('common/buttons_list.html', dict( - selection=selection, entries=entries, extracontent=searchbar + entries=entries, extracontent=extracontent )) diff --git a/extensions/amavis_quarantine/views.py b/extensions/amavis_quarantine/views.py index 1bdd586d0..621d07442 100644 --- a/extensions/amavis_quarantine/views.py +++ b/extensions/amavis_quarantine/views.py @@ -30,7 +30,7 @@ def __get_current_url(request): def empty_quarantine(request): content = "