mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
@@ -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',
|
||||
|
||||
@@ -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'),
|
||||
)
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user