Tickets #12 and #15

This commit is contained in:
tonio
2009-09-18 11:03:58 +02:00
parent 35b2028ed0
commit 4a87601976
6 changed files with 114 additions and 53 deletions
+64 -37
View File
@@ -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:
@@ -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);
}
});
});
</script>
{% endblock %}
@@ -115,7 +147,7 @@ window.addEvent("domready", function() {
<table>
<tr>
<th></th>
<th><input type="checkbox" name="selectall" id="selectall" /></th>
<th>{% trans "Type" %}</th>
<th width="150px">{% trans "From" %}</th>
<th>{% trans "Subject" %}</th>
@@ -128,7 +160,7 @@ window.addEvent("domready", function() {
<td>{{ m.type }}</td>
<td>{{ m.from }}</td>
{% url extensions.amavis_quarantine.main.viewmail m.mailid as view_url %}
<td><a href="{{ view_url }}">{{ m.subject }}</a></td>
<td><a href="{{ view_url }}?page={{ current_page }}">{{ m.subject }}</a></td>
<td>{{ m.time }}</td>
</tr>
{% endfor %}
@@ -38,7 +38,7 @@ td.left {
{% block content %}
<div class="menu2">
{% load amextras %}
{% viewm_menu "headers" mail_id perms %}
{% viewm_menu "headers" mail_id page_id perms %}
</div>
<table border="0">
@@ -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',
+3 -1
View File
@@ -4,5 +4,7 @@ urlpatterns = patterns('mailng.extensions.amavis_quarantine.main',
(r'^$', 'index'),
(r'^viewmail/(?P<mail_id>[\w\-\+]+)/$', 'viewmail'),
(r'^viewheaders/(?P<mail_id>[\w\-\+]+)/$', 'viewheaders'),
(r'^process/$', 'process')
(r'^process/$', 'process'),
(r'^delete/(?P<mail_id>[\w\-\+]+)/$', 'delete'),
(r'^release/(?P<mail_id>[\w\-\+]+)/$', 'release'),
)
+2 -1
View File
@@ -4,7 +4,8 @@
<li {% ifequal selection entry.name %}class="selected"{% endifequal %}>
<a href="{{ entry.url }}" name="{{ entry.name }}"
{% if entry.class %}class={{ entry.class }}{% endif %}
{% if entry.rel %}rel={{ entry.rel }}{% endif %}>
{% if entry.rel %}rel={{ entry.rel }}{% endif %}
{% if entry.confirm %} onclick="return confirm('{{ entry.confirm }}')"{% endif %}>
<img src="{{ entry.img }}" border="0" />
{{ entry.label }}
</a>