diff --git a/extensions/sievefilters/templates/sievefilters/index.html b/extensions/sievefilters/templates/sievefilters/index.html index c20f5eda6..494e7f148 100644 --- a/extensions/sievefilters/templates/sievefilters/index.html +++ b/extensions/sievefilters/templates/sievefilters/index.html @@ -27,7 +27,7 @@ function check_prereqs(evt, msg) { if (!curscript) { return false; } - if (!confirm(msg)) { + if ($defined(msg) && !confirm(msg)) { return false; } return true; @@ -88,11 +88,20 @@ function activatescript(evt) { send_command("{% url extensions.sievefilters.views.activate_filters_set %}"); } +function downloadscript(evt) { + if (!curscript) { + evt.stop(); + return; + } + this.set("href", this.get("href") + "?name=" + curscript); +} + $(document).addEvent("domready", function() { $$("a[name=loadscript]").addEvent("click", loadscript); $$("a[name=savescript]").addEvent("click", savescript); $$("a[name=deletescript]").addEvent("click", deletescript); $$("a[name=activatescript]").addEvent("click", activatescript); + $$("a[name=downloadscript]").addEvent("click", downloadscript); }); {% endblock %} diff --git a/extensions/sievefilters/templatetags/sfilters_tags.py b/extensions/sievefilters/templatetags/sfilters_tags.py index ecfeee1bf..cdc9bcbeb 100644 --- a/extensions/sievefilters/templatetags/sfilters_tags.py +++ b/extensions/sievefilters/templatetags/sfilters_tags.py @@ -29,7 +29,11 @@ def sfilters_menu(user): {"name" : "deletescript", "img" : static_url("pics/remove.png"), "label" : _("Remove filters set"), - "url" : reverse(views.delete_filters_set),} + "url" : reverse(views.delete_filters_set),}, + {"name" : "downloadscript", + "img" : static_url("pics/download.png"), + "label" : _("Download"), + "url" : reverse(views.download_filters_set)} ] return render_to_string('common/menulist.html', diff --git a/extensions/sievefilters/urls.py b/extensions/sievefilters/urls.py index 6c1e8c40e..273d9d871 100644 --- a/extensions/sievefilters/urls.py +++ b/extensions/sievefilters/urls.py @@ -7,4 +7,5 @@ urlpatterns = patterns('modoboa.extensions.sievefilters.views', (r'^newfs/$', 'new_filters_set'), (r'^deletefs/$', 'delete_filters_set'), (r'^activatefs/$', 'activate_filters_set'), + (r'^downloadfs/$', 'download_filters_set'), ) diff --git a/extensions/sievefilters/views.py b/extensions/sievefilters/views.py index f5e9e3e7f..15ea26a5b 100644 --- a/extensions/sievefilters/views.py +++ b/extensions/sievefilters/views.py @@ -101,3 +101,21 @@ def activate_filters_set(request): except SieveClientError, e: return ajax_response(request, "ko", respmsg=str(e)) return ajax_response(request, respmsg=_("Filters set activated")) + +@login_required +def download_filters_set(request): + if not request.GET.has_key("name") or \ + request.GET["name"] == "": + return + sc = SieveClient(user=request.user.username, + password=request.session["password"]) + try: + script = sc.getscript(request.GET["name"]) + except SieveClientError, e: + return ajax_response(request, "ko", respmsg=str(e)) + + resp = HttpResponse(script) + resp["Content-Type"] = "text/plain" + resp["Content-Length"] = len(script) + resp["Content-Disposition"] = "attachment; filename=%s.txt" % request.GET["name"] + return resp diff --git a/static/pics/download.png b/static/pics/download.png new file mode 100644 index 000000000..2c5a80385 Binary files /dev/null and b/static/pics/download.png differ