From 44e276d9e548551f485f4a3706064fb9ff78f787 Mon Sep 17 00:00:00 2001 From: tonio Date: Fri, 3 Jul 2009 18:01:00 +0200 Subject: [PATCH] Some work about the quarantine plugin. --- extensions/amavis_quarantine/main.py | 39 +++++-- .../amavis_quarantine/templates/index.html | 108 +++++++++++++----- .../templates/viewheader.html | 43 +++++++ .../amavis_quarantine/templates/viewmail.html | 30 +++-- .../templatetags/__init__.py | 0 .../templatetags/amextras.py | 56 +++++++++ extensions/amavis_quarantine/urls.py | 3 +- static/pics/back.png | Bin 0 -> 655 bytes static/pics/first.png | Bin 0 -> 666 bytes static/pics/last.png | Bin 0 -> 685 bytes static/pics/next.png | Bin 0 -> 676 bytes static/pics/release.png | Bin 0 -> 650 bytes templates/main/menu.html | 2 +- 13 files changed, 234 insertions(+), 47 deletions(-) create mode 100644 extensions/amavis_quarantine/templates/viewheader.html create mode 100644 extensions/amavis_quarantine/templatetags/__init__.py create mode 100644 extensions/amavis_quarantine/templatetags/amextras.py create mode 100644 static/pics/back.png create mode 100644 static/pics/first.png create mode 100644 static/pics/last.png create mode 100644 static/pics/next.png create mode 100644 static/pics/release.png diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index a6d17292d..64e6b1152 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -2,10 +2,11 @@ """ """ -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import get_object_or_404, render_to_response from django.template.loader import render_to_string from django.template import Template +from django.utils import simplejson from django.conf.urls.defaults import * from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse @@ -69,7 +70,8 @@ ORDER BY msgs.time_num DESC pagenum = 1 page = paginator.page(pagenum) return _render(request, 'amavis_quarantine/index.html', { - "count" : len(rows), "emails" : page + "count" : len(rows), "emails" : page, + "current_page" : pagenum, "last_page" : paginator._get_num_pages() }) @login_required @@ -106,15 +108,30 @@ WHERE quarantine.mail_id='%s' body = decode(text_body) pre = True - return _render(request, 'amavis_quarantine/viewmail.html', { - "headers" : msg.items(), - "body" : body, - "pre" : pre + "headers" : msg, "alert" : msg.get("X-Amavis-Alert"), + "body" : body, "pre" : pre, "mail_id" : mail_id + }) + +@login_required +def viewheaders(request, mail_id): + conn = db.getconnection("amavis_quarantine") + status, cursor = db.execute(conn, """ +SELECT mail_text +FROM quarantine +WHERE quarantine.mail_id='%s' +""" % mail_id) + content = "" + for part in cursor.fetchall(): + content += part[0] + msg = email.message_from_string(content) + return _render(request, 'amavis_quarantine/viewheader.html', { + "headers" : msg.items() }) @login_required def process(request): + print request if request.POST.has_key("deleteall"): return ids = "" @@ -124,7 +141,7 @@ def process(request): ids += "," ids += "'%s'" % id if ids == "": - return + return HttpResponseRedirect(reverse(index)) conn = db.getconnection("amavis_quarantine") if request.POST.has_key("release"): status, cursor = db.execute(conn, """ @@ -161,4 +178,10 @@ WHERE msgrcpt.mail_id=msgs.mail_id AND msgrcpt.rid=maddr.id AND msgs.mail_id IN else: message = error request.user.message_set.create(message=message) - return HttpResponseRedirect(reverse(index)) + try: + pagenum = int(request.POST.get('pagenum', '1')) + except ValueError: + pagenum = 1 + ctx = _ctx_ok(reverse(index) + "?page=%s" % pagenum) + return HttpResponse(simplejson.dumps(ctx), + mimetype="application/json") diff --git a/extensions/amavis_quarantine/templates/index.html b/extensions/amavis_quarantine/templates/index.html index 1c508073e..a34ea4344 100644 --- a/extensions/amavis_quarantine/templates/index.html +++ b/extensions/amavis_quarantine/templates/index.html @@ -1,27 +1,39 @@ {% extends "layout.html" %} {% load i18n %} +{% load amextras %} {% block html_head %} -{% endblock %} -{% block content %} + +{% endblock %} + +{% block content %}

{% trans "Quarantine" %}

{% if messages %} @@ -41,27 +80,40 @@ td { {% endif %}
+ + {% url extensions.amavis_quarantine.main.process as actionurl %} -
+ + +
- Il y a {{ count }} messages dans la quarantaine. -
-
- - - -
- -
- +
+
+ Messages {{ emails.start_index }} à {{ emails.end_index }} sur {{ count }} +
+ +
+ +
@@ -74,7 +126,7 @@ td { - {% if user.is_superuser %}{% endif %} + {% url extensions.amavis_quarantine.main.viewmail m.mailid as view_url %} diff --git a/extensions/amavis_quarantine/templates/viewheader.html b/extensions/amavis_quarantine/templates/viewheader.html new file mode 100644 index 000000000..8b187503f --- /dev/null +++ b/extensions/amavis_quarantine/templates/viewheader.html @@ -0,0 +1,43 @@ +{% extends "layout_simple.html" %} +{% load i18n %} +{% block html_head %} + +{% endblock %} + +{% block content %} +
{% trans "Type" %} {{ m.type }}{{ m.to }}{{ m.from }}{{ m.subject }} {{ m.time }}
+ +{% for k, v in headers %} + + + +{% endfor %} +
{% trans "Message headers" %}
{{ k }}{{ v }}
+{% endblock %} \ No newline at end of file diff --git a/extensions/amavis_quarantine/templates/viewmail.html b/extensions/amavis_quarantine/templates/viewmail.html index df9a274d9..72578be4c 100644 --- a/extensions/amavis_quarantine/templates/viewmail.html +++ b/extensions/amavis_quarantine/templates/viewmail.html @@ -10,7 +10,11 @@ window.addEvent("domready", function() { {% else %} doc.write("{{ body }}"); {% endif %} - doc.close(); + doc.close(); + + SqueezeBox.assign($$('a.boxed'), { + parse: 'rel' + }); }); @@ -32,16 +36,24 @@ td.left { {% endblock %} {% block content %} + + + + + + + + + + + +
{% trans "Message" %}
X-Amavis-Alert{{ alert }}
From{{ headers.from }}
To{{ headers.to }}
Date{{ headers.date }}
Subject{{ headers.subject }}
+ - - -{% for k, v in headers %} - - - -{% endfor %} -
{% trans "Message headers" %}
{{ k }}{{ v }}
{% endblock %} \ No newline at end of file diff --git a/extensions/amavis_quarantine/templatetags/__init__.py b/extensions/amavis_quarantine/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/extensions/amavis_quarantine/templatetags/amextras.py b/extensions/amavis_quarantine/templatetags/amextras.py new file mode 100644 index 000000000..5d7895653 --- /dev/null +++ b/extensions/amavis_quarantine/templatetags/amextras.py @@ -0,0 +1,56 @@ +from django import template +from django.template.loader import render_to_string +from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +from mailng.extensions import amavis_quarantine + +register = template.Library() + +@register.simple_tag +def viewm_menu(selection, mail_id, perms): + entries = [ + {"name" : "back", + "url" : reverse(amavis_quarantine.main.index), + "img" : "/static/pics/back.png", + "label" : _("Back to list")}, + {"name" : "headers", + "url" : reverse(amavis_quarantine.main.viewheaders, args=[mail_id]), + "img" : "/static/pics/add.png", + "label" : _("View full headers"), + "class" : "boxed", + "rel" : "{handler:'iframe',size:{x:600,y:500}}"}, + {"name" : "release", + "url" : "", + "img" : "/static/pics/release.png", + "label" : _("Release")}, + {"name" : "delete", + "url" : "", + "img" : "/static/pics/remove.png", + "label" : _("Delete")} + ] + + return render_to_string('main/menu.html', + {"selection" : selection, "entries" : entries, + "perms" : perms}) + +@register.simple_tag +def quar_menu(selection, perms): + entries = [ + {"name" : "release", + "url" : "", + "img" : "/static/pics/release.png", + "label" : _("Release")}, + {"name" : "delete", + "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', + {"selection" : selection, "entries" : entries, + "perms" : perms}) diff --git a/extensions/amavis_quarantine/urls.py b/extensions/amavis_quarantine/urls.py index e1afbff33..4dcc50e9c 100644 --- a/extensions/amavis_quarantine/urls.py +++ b/extensions/amavis_quarantine/urls.py @@ -2,6 +2,7 @@ from django.conf.urls.defaults import * urlpatterns = patterns('mailng.extensions.amavis_quarantine.main', (r'^$', 'index'), - (r'^view/(?P[\w\-\+]+)/$', 'viewmail'), + (r'^viewmail/(?P[\w\-\+]+)/$', 'viewmail'), + (r'^viewheaders/(?P[\w\-\+]+)/$', 'viewheaders'), (r'^process/$', 'process') ) diff --git a/static/pics/back.png b/static/pics/back.png new file mode 100644 index 0000000000000000000000000000000000000000..659cd90d7f80488a8a6a2c12f6f9e5ad98720461 GIT binary patch literal 655 zcmV;A0&x9_P)_fWZPlDqB9?#%D^>oA$FjP8SXdVl!5?|TnYO4RbBH?=GA zTUy2|reO<?=@r%h} zW6#cJQfPC~s>mwxzQ}>D!BbZalds_8_h}r7_JCAa@f4F))r6lUrCf(hQ;9=;jU5L& z+1FnmP_XjQREAhnABYqX00}@!0U-tMq%XJx@e~^h8rvWApSa|&uWz9Di?6_?1E%N@ zl4EB68Hfl3f`qGnd$iXb;n;2VsHt)P`R?O`My|Agci-NCF&}hI2Ui3vQGjU{P_$N1 zwo6b*g`Wk{x;wF^0p~U>`wvX#H%c-OZ~=##s0b5Wa!4-09SO%4;Ep?Tu9$V#I5TQr z&Mtkq{`h6ugzb~9dlQg)8A30C1pt3Qg&t7B3bbY+H`>YWThbX9oF#2!=nK7F-=6arTX3U&+XWy2~<%(BYwFX|c pI#R>7P%^)q3wROKeC1m2{1hqp0JED290h! zVU0NBR?cr`p~-QQ_EsWfBH@EQ`Nc0GKMZR^J`BSAxf26@WBs>$$pHKvI7xf7HPn_K z?i~+>+atsnZ|Jg4VBK;@=p(qz`$(+u}xd3d6n3+*N?MDJ7VE8(JO(EzhB^&{0eRn zE*?mNaRLBn_0NHlrd}YI5_3+{j?R9X$}BA9ySqF4x2)2Bd@j8KF~Xg@H(lYH;N~^f z^&poLB>)3X(jI*{c`tpTvp3}I9wGn`t_kK+f;Jb)x5~Mcm=MA{nSJ@R@P7JTO$g5q z)>vRYlF^9H&d+2YJejC8!ZrPk8zPM`j$uE{Us}u$`^<2oGynhq07*qoM6N<$f}(68 A0{{R3 literal 0 HcmV?d00001 diff --git a/static/pics/last.png b/static/pics/last.png new file mode 100644 index 0000000000000000000000000000000000000000..6e904efd06236206721c6a662ec8ecfe74e971c5 GIT binary patch literal 685 zcmV;e0#f~nP)5 zlTApJQ51%s``vp#$I+r-vIvbVCs0U1TC~hLW^i)Pz0@_MiE-%s!hV+qFhuE z1Zm_VBKtFl7NgQ1VznuPg3$S4O4HHl`{uj1g=uPI)C+fW&f$UkzUK&QElXA3suR|5 zJ<;J``J?$u(U`UXPO+vn)Kyk&?u@qR+tHXVUkqlzip{BLi%w!$yRaxEd1FmzWb`T3ks8r@G#>8hztmaZq7PV0 zbE3nanxCyZt880y97jl`qmV)&9f_2Z=U?uj9L4I=^=w>K!{FN|e&4{&F>6dCFan?e zj0t%B{u)}App{FB8^U#6l+*|z$>u-tJ)Ndz>rP!+QC-#j=G5`zmT}-uUontb9=r!a)e|uV|)6#W_-^(UF2DL6`zGMn!p-|9fRGGizh?e=&U5++$Mxhv T)(+xx00000NkvXXu0mjfgrPr^ literal 0 HcmV?d00001 diff --git a/static/pics/next.png b/static/pics/next.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef8de76e0f5bf01c09da24a07c61cfe558d7a4b GIT binary patch literal 676 zcmV;V0$crwP)5 zl1oTbVI0MO-{a21M#B_R#9l-oXcPp6(?)2~B7y{4Mu9@O$#RS~LMu0okc%jC6BNCq zMPfd15iMrWDWnuP(IPA}ow0!)<9P4f`?UyPGZWN-v-$pq!}*{8hcSkHhP!mEu~WAd zo8?nd1jeIrclCk3aF;a@j#!~$nl%(P0Jzf98$5aR>}dqE;fU4n-v&x*nhu}wwKrd{ z4f;b9;fU2%OeY#6`YVQ=TOJkJo9%;vsn26nmF>ePxAA!V*2;(ZnPFo%AB#FaHw-$p z>A83xDHKX5gpddX0EtgSc(|1Lcd)Cxp7`{*Gd4M}fH9|HQD+7~1Grv}*vDrmsZm0K z5C{Q60m5V1o+G_9&%wGQR!!BO+NWc8C&Ce{BNlb~H9*c=C7oHocC*-S7Ns<$C1sQZ zLijB|M!48sj(1C=)P(9pYjao0(5pv%$FEw)G{Dl2Io>Bnm(2P=eF~WywGEfv2*dEE+1BNH1p0gO_(!va6Ym6#!ZeU0XL$ zmOyFA$XqYlC#eqYr*8WRCf~&E#M}5+`DMhod1o}n6nu_w#4?v#yZPlMNv2Zf#pvLQ?bsc$8%}?|wxEMGI60fdRAO~{ zc52bv6uF?Yza^+BugrY=o*FhT7dA)!rvyS0Urwj)#iE6g^YI%&-U+mBcICDJ0000< KMNUMnLSTZVNH5j^ literal 0 HcmV?d00001 diff --git a/static/pics/release.png b/static/pics/release.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0fef9a8319452009247864c41e033694859278 GIT binary patch literal 650 zcmV;50(Jd~P)kSC&LBJ zfVRcM$?V1P3B6PcAX~#mZX7Dr0E-up6>u&Ai1M4+$6px*d6g)50zul{6fOZfD5 zx^(<(+NuITAZTdtF*`7sbB~Mx0Ae$D>fg&k;5u>{h0Ft(%sL2>YF!TkK|`BOGW-0q z$<55rD9F$#2!Mm7ygZedyZydz;2gN<0Fly!zty-=mBaVpcsEVu>hcW{d1#Z{npnGY zBY*fjmK0%?8^t(;YR@+XG=oH^Fxc%lEVS$r0NiT$nf{@pT|4*Ae2zV-96O_3`)`13 k>$j#pJbyuT?P=Bf1qBx3B`dxp6aWAK07*qoM6N<$g68)pi~s-t literal 0 HcmV?d00001 diff --git a/templates/main/menu.html b/templates/main/menu.html index 775b07501..71047f12f 100644 --- a/templates/main/menu.html +++ b/templates/main/menu.html @@ -2,7 +2,7 @@
    {% for entry in entries %}
  • -