diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index 64e6b1152..143def45b 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -110,7 +110,8 @@ WHERE quarantine.mail_id='%s' return _render(request, 'amavis_quarantine/viewmail.html', { "headers" : msg, "alert" : msg.get("X-Amavis-Alert"), - "body" : body, "pre" : pre, "mail_id" : mail_id + "body" : body, "pre" : pre, "mail_id" : mail_id, + "page_id" : request.GET["page"] }) @login_required @@ -129,11 +130,67 @@ WHERE quarantine.mail_id='%s' "headers" : msg.items() }) +def _redirect_to_index(request, message, count): + request.user.message_set.create(message=message) + if count > 1: + return + page = request.GET.has_key("page") and request.GET["page"] or "1" + return HttpResponseRedirect(reverse(index) + "?page=%s" % page) + +@login_required +def delete(request, mail_id, count=1): + conn = db.getconnection("amavis_quarantine") + if count == 1: + mail_id = "'%s'" % mail_id + status, error = db.execute(conn, + "DELETE FROM msgs WHERE mail_id IN (%s)" % mail_id) + if status: + message = _("%d message%s deleted successfully" \ + % (count, count > 1 and "s" or "")) + else: + message = error + return _redirect_to_index(request, message, count) + +@login_required +def release(request, mail_id, count=1): + conn = db.getconnection("amavis_quarantine") + if count == 1: + mail_id = "'%s'" % mail_id + status, cursor = db.execute(conn, """ +SELECT msgs.mail_id,secret_id,quar_type,maddr.email FROM msgs, maddr, msgrcpt +WHERE msgrcpt.mail_id=msgs.mail_id AND msgrcpt.rid=maddr.id AND msgs.mail_id IN (%s) +""" % (mail_id)) + emails = {} + for row in cursor.fetchall(): + if not emails.has_key(row[0]): + emails[row[0]] = {} + emails[row[0]]["rcpts"] = [] + emails[row[0]]["secret"] = row[1] + emails[row[0]]["rcpts"] += [row[3]] + count = 0 + error = None + for k, values in emails.iteritems(): + cmd = "/tmp/amavisd-release " + cmd += "%s %s" % (k, values["secret"]) + for rcpt in values["rcpts"]: + cmd += " %s" % rcpt + cmd += "\n" + result = os.system(cmd) +# if re.search("250 [^\s]+ Ok", result): + if not result: + count += 1 + else: + error = result + break + if not error: + message = _("%d message%s released successfully" \ + % (count, count > 1 and "s" or "")) + else: + message = error + _redirect_to_index(request, message, count) + @login_required def process(request): - print request - if request.POST.has_key("deleteall"): - return ids = "" count = len(request.POST.getlist("selection")) for id in request.POST.getlist("selection"): @@ -142,42 +199,12 @@ def process(request): ids += "'%s'" % id if ids == "": return HttpResponseRedirect(reverse(index)) - conn = db.getconnection("amavis_quarantine") if request.POST.has_key("release"): - status, cursor = db.execute(conn, """ -SELECT msgs.mail_id,secret_id,quar_type,maddr.email FROM msgs, maddr, msgrcpt -WHERE msgrcpt.mail_id=msgs.mail_id AND msgrcpt.rid=maddr.id AND msgs.mail_id IN (%s) -""" % (ids)) - emails = {} - for row in cursor.fetchall(): - if not emails.has_key(row[0]): - emails[row[0]] = {} - emails[row[0]]["rcpts"] = [] - emails[row[0]]["secret"] = row[1] - emails[row[0]]["rcpts"] += [row[3]] - count = 0 - for k, values in emails.iteritems(): - cmd = "/tmp/amavisd-release " - cmd += "%s %s" % (k, values["secret"]) - for rcpt in values["rcpts"]: - cmd += " %s" % rcpt - cmd += "\n" - result = os.system(cmd) -# if re.search("250 [^\s]+ Ok", result): - if not result: - count += 1 - message = _("%d message%s released successfully" \ - % (count, count > 1 and "s" or "")) + release(request, ids, count) if request.POST.has_key("delete"): - status, error = db.execute(conn, - "DELETE FROM msgs WHERE mail_id IN (%s)" % ids) - if status: - message = _("%d message%s deleted successfully" \ - % (count, count > 1 and "s" or "")) - else: - message = error - request.user.message_set.create(message=message) + delete(request, ids, count) + try: pagenum = int(request.POST.get('pagenum', '1')) except ValueError: diff --git a/extensions/amavis_quarantine/templates/index.html b/extensions/amavis_quarantine/templates/index.html index a34ea4344..091d74902 100644 --- a/extensions/amavis_quarantine/templates/index.html +++ b/extensions/amavis_quarantine/templates/index.html @@ -58,12 +58,44 @@ window.addEvent("domready", function() { $("quarlistingform").send(); } + checkSelection = function(text) { + var getout = $$("input[name=selection]").every(function(item, index) { + return item.checked == false; + }); + if (getout) { + return false; + } + return confirm(text); + } + + toggleSelection = function(value) { + $$("input[name=selection]").each(function(obj) { + obj.checked = value; + }); + } + $$("a[name=delete]").addEvent("click", function(event) { + if (!checkSelection("{% trans "Delete this selection?" %}")) { + event.stop(); + return; + } mysubmit(event, "delete"); }); $$("a[name=release]").addEvent("click", function(event) { + if (!checkSelection("{% trans "Release this selection?" %}")) { + event.stop(); + return; + } mysubmit(event, "release"); }); + + $("selectall").addEvent("click", function(event) { + if ($("selectall").checked) { + toggleSelection(true); + } else { + toggleSelection(false); + } + }); }); {% endblock %} @@ -115,7 +147,7 @@ window.addEvent("domready", function() { - + @@ -128,7 +160,7 @@ window.addEvent("domready", function() { {% url extensions.amavis_quarantine.main.viewmail m.mailid as view_url %} - + {% endfor %} diff --git a/extensions/amavis_quarantine/templates/viewmail.html b/extensions/amavis_quarantine/templates/viewmail.html index 72578be4c..27d78bb0a 100644 --- a/extensions/amavis_quarantine/templates/viewmail.html +++ b/extensions/amavis_quarantine/templates/viewmail.html @@ -38,7 +38,7 @@ td.left { {% block content %}
{% trans "Type" %} {% trans "From" %} {% trans "Subject" %}{{ m.type }} {{ m.from }}{{ m.subject }}{{ m.subject }} {{ m.time }}
diff --git a/extensions/amavis_quarantine/templatetags/amextras.py b/extensions/amavis_quarantine/templatetags/amextras.py index 5d7895653..dcf94fda9 100644 --- a/extensions/amavis_quarantine/templatetags/amextras.py +++ b/extensions/amavis_quarantine/templatetags/amextras.py @@ -7,10 +7,10 @@ from mailng.extensions import amavis_quarantine register = template.Library() @register.simple_tag -def viewm_menu(selection, mail_id, perms): +def viewm_menu(selection, mail_id, page_id, perms): entries = [ {"name" : "back", - "url" : reverse(amavis_quarantine.main.index), + "url" : reverse(amavis_quarantine.main.index) + "?page=%s" % page_id, "img" : "/static/pics/back.png", "label" : _("Back to list")}, {"name" : "headers", @@ -20,13 +20,17 @@ def viewm_menu(selection, mail_id, perms): "class" : "boxed", "rel" : "{handler:'iframe',size:{x:600,y:500}}"}, {"name" : "release", - "url" : "", + "url" : reverse(amavis_quarantine.main.release, args=[mail_id]) + + "?page=%s" % page_id, "img" : "/static/pics/release.png", - "label" : _("Release")}, + "label" : _("Release"), + "confirm" : _("Release this message?")}, {"name" : "delete", - "url" : "", + "url" : reverse(amavis_quarantine.main.delete, args=[mail_id]) + + "?page=%s" % page_id, "img" : "/static/pics/remove.png", - "label" : _("Delete")} + "label" : _("Delete"), + "confirm" : _("Delete this message?")} ] return render_to_string('main/menu.html', @@ -44,11 +48,6 @@ def quar_menu(selection, perms): "url" : "", "img" : "/static/pics/remove.png", "label" : _("Delete")}, - {"name" : "deleteall", - "url" : "", - "img" : "/static/pics/remove.png", - "label" : _("Delete all")}, - ] return render_to_string('main/menu.html', diff --git a/extensions/amavis_quarantine/urls.py b/extensions/amavis_quarantine/urls.py index 4dcc50e9c..b5959bb63 100644 --- a/extensions/amavis_quarantine/urls.py +++ b/extensions/amavis_quarantine/urls.py @@ -4,5 +4,7 @@ urlpatterns = patterns('mailng.extensions.amavis_quarantine.main', (r'^$', 'index'), (r'^viewmail/(?P[\w\-\+]+)/$', 'viewmail'), (r'^viewheaders/(?P[\w\-\+]+)/$', 'viewheaders'), - (r'^process/$', 'process') + (r'^process/$', 'process'), + (r'^delete/(?P[\w\-\+]+)/$', 'delete'), + (r'^release/(?P[\w\-\+]+)/$', 'release'), ) diff --git a/templates/main/menu.html b/templates/main/menu.html index 71047f12f..542ecbbf6 100644 --- a/templates/main/menu.html +++ b/templates/main/menu.html @@ -4,7 +4,8 @@
  • + {% if entry.rel %}rel={{ entry.rel }}{% endif %} + {% if entry.confirm %} onclick="return confirm('{{ entry.confirm }}')"{% endif %}> {{ entry.label }}