From 1d068ef404ae8c9cb7189abd7a58d2a57a2588eb Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 19 May 2011 11:06:16 +0200 Subject: [PATCH] Ability to download a filters set as a plain text file. see #139 --- .../templates/sievefilters/index.html | 11 ++++++++++- .../templatetags/sfilters_tags.py | 6 +++++- extensions/sievefilters/urls.py | 1 + extensions/sievefilters/views.py | 18 ++++++++++++++++++ static/pics/download.png | Bin 0 -> 663 bytes 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 static/pics/download.png 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 0000000000000000000000000000000000000000..2c5a80385cca2f80f829819f25e943bee4fbb759 GIT binary patch literal 663 zcmV;I0%-k-P)^@R5*>5 zQafl0i$fhnu!z>dT@ZRl2cb)*4pLDG zZG=odu7yxbG&DksLWh*3HCi!E@4f%ybBM&$q+$>J%i-gE|2f}bM1)ohPMBp7qUZ#M ziZjW3S}CJ#h!C}JK7mjILiv!2Lnsa|Jv>a^ZWC@70Kk}r+-e%0*oG^%;PEY-Ju=$y zQ(8wB42=DLU;tx~itk0BkqZ%lKmgIM0>;oi(;G18uk)G8m+}(D!pA`x$GW$IlKT-XC=du~Fhe@}W5cL!R;jp>uMpvSGepPcH4u{1 zFCV)GvtXJgHvG>pEgb<%Lm;Fh9zKRhs1Mm!vo0wl9h=v7T*0wCML#^(K9-8dDwfOPh0opXQOv3a5686BHXl{Qv0xety%&@%$fU@!t2&O}F$dq3~5 zSJ&non@{aHV_O3h#uf_mOTDqf@uT4c(+v&P(of1QI%OprzW-Sy$L2MXNX}+oxQB2O x2h<5XpL^yi`NwxFSmKUBf0KK`E>-@2`~s>b4Ju;H8xa5i002ovPDHLkV1l6R8=C+C literal 0 HcmV?d00001