diff --git a/extensions/sievefilters/forms.py b/extensions/sievefilters/forms.py index eae16948d..7c0916bdc 100644 --- a/extensions/sievefilters/forms.py +++ b/extensions/sievefilters/forms.py @@ -16,9 +16,9 @@ header_operators = [("contains", _("contains"), "string"), class FilterForm(forms.Form): name = forms.CharField(label=_("Name")) - match_type = forms.ChoiceField(choices=[("allof", _("Match all of the following")), - ("anyof", _("Match any of the following")), - ("all", _("Match all messages"))], + match_type = forms.ChoiceField(choices=[("allof", _("All of the following")), + ("anyof", _("Any of the following")), + ("all", _("All messages"))], initial="anyof", widget=forms.RadioSelect) @@ -158,19 +158,20 @@ def build_filter_form_from_qdict(request): qdict["match_type"] = request.POST["match_type"] cpt = 0 i = 0 - while True: - if cpt == int(request.POST["conds"]): - break - if request.POST.has_key("cond_target_%d" % i): - qdict["cond_target_%d" % cpt] = request.POST["cond_target_%d" % i] - qdict["cond_operator_%d" % cpt] = request.POST["cond_operator_%d" % i] - qdict["cond_value_%d" % cpt] = request.POST["cond_value_%d" % i] - condtarget = request.POST["cond_target_%d" % i] - condop = request.POST["cond_operator_%d" % i] - condvalue = request.POST["cond_value_%d" % i] - conditions += [(condtarget, condop, condvalue)] - cpt += 1 - i += 1 + if qdict["match_type"] != "all": + while True: + if cpt == int(request.POST["conds"]): + break + if request.POST.has_key("cond_target_%d" % i): + qdict["cond_target_%d" % cpt] = request.POST["cond_target_%d" % i] + qdict["cond_operator_%d" % cpt] = request.POST["cond_operator_%d" % i] + qdict["cond_value_%d" % cpt] = request.POST["cond_value_%d" % i] + condtarget = request.POST["cond_target_%d" % i] + condop = request.POST["cond_operator_%d" % i] + condvalue = request.POST["cond_value_%d" % i] + conditions += [(condtarget, condop, condvalue)] + cpt += 1 + i += 1 cpt = 0 i = 0 while True: @@ -197,12 +198,16 @@ def build_filter_form_from_qdict(request): return FilterForm(conditions, actions, request, qdict) def build_filter_form_from_filter(request, name, fobj): - from sievelib.commands import SizeCommand + from sievelib.commands import SizeCommand, TrueCommand match_type = fobj["test"].name conditions = [] for t in fobj["test"]["tests"]: - if isinstance(t, SizeCommand): + if isinstance(t, TrueCommand): + match_type = "all" + conditions += [("Subject", "contains", "")] + break + elif isinstance(t, SizeCommand): conditions += [("size", t["comparator"][1:], t["limit"])] else: conditions += [(t["header-names"].strip('"'), diff --git a/extensions/sievefilters/lib.py b/extensions/sievefilters/lib.py index 7c39448af..d67d34852 100644 --- a/extensions/sievefilters/lib.py +++ b/extensions/sievefilters/lib.py @@ -26,7 +26,9 @@ class SieveClient(object): authmech = parameters.get_admin("AUTHENTICATION_MECH") if authmech == "AUTO": authmech = None - if not self.msc.connect(user, password, use_starttls, authmech): + try: + ret = self.msc.connect(user, password, use_starttls, authmech) + except Error, e: return False, _("Connection to MANAGESIEVE server failed, check your configuration") return True, None @@ -37,7 +39,10 @@ class SieveClient(object): pass else: return - ret, msg = self.login(user, password) + try: + ret, msg = self.login(user, password) + except Error, e: + raise ConnectionError(e) if not ret: raise ConnectionError(msg) @@ -52,6 +57,7 @@ class SieveClient(object): return content p = Parser() if not p.parse(content): + print "Parse error????" return None fs = FiltersSet(name) fs.from_parser_result(p) diff --git a/extensions/sievefilters/static/css/style.css b/extensions/sievefilters/static/css/style.css index 298dcf4f3..cf487b3f2 100644 --- a/extensions/sievefilters/static/css/style.css +++ b/extensions/sievefilters/static/css/style.css @@ -102,7 +102,8 @@ #actionlist { border: 1px solid #CCC; - padding-top: 10px; + padding: 5px; + padding-top: 15px; } #condlist ul { @@ -120,6 +121,8 @@ #matchtype { margin-bottom: 10px; + margin-left: 7px; + font-size: 0.9em; } #submit { @@ -129,6 +132,11 @@ div.item { margin-bottom: 10px; margin-left: 5px; + overflow: auto; +} + +div.item input[type=text], div.item select { + width: 190px; } div.item input, div.item select { @@ -149,7 +157,8 @@ ul.errors { .errors li { color: red; - font-style: bold; + font-weight: bold; + font-size: 0.9em; display: inline; } @@ -191,4 +200,16 @@ ul.errors { .leftbox img { float: left; margin-right: 5px; +} + +a.green { + text-decoration: none; + font-weight: bold; + color: green; +} + +a.red { + text-decoration: none; + font-weight: bold; + color: red; } \ No newline at end of file diff --git a/extensions/sievefilters/static/js/lib.js b/extensions/sievefilters/static/js/lib.js index b498ac05c..d8688f475 100644 --- a/extensions/sievefilters/static/js/lib.js +++ b/extensions/sievefilters/static/js/lib.js @@ -181,7 +181,9 @@ function toggle_filter_state(event) { url: this.get("href"), onSuccess: function(response) { if (response.status == "ok") { - this.set("html", response.respmsg); + this.set("html", response.label); + this.set("class", ""); + this.addClass(response.color); } else { infobox.error(respmsg.respmsg); } diff --git a/extensions/sievefilters/templates/sievefilters/filter.html b/extensions/sievefilters/templates/sievefilters/filter.html index bff9438a8..234583c10 100644 --- a/extensions/sievefilters/templates/sievefilters/filter.html +++ b/extensions/sievefilters/templates/sievefilters/filter.html @@ -13,12 +13,22 @@ var action_templates = null; var da = null; var dc = null; +function matchtype_cb(event) { + if (this.get("value") == "all") { + $$("#condlist div[class=item]").slide("out"); + } else { + $("hide").setStyle("display", "block"); + $$("#condlist div[class=item]").slide("in"); + } +} + function initform() { var clist = $$("select[name*=cond_target_]"); var alist = $$("select[name*=action_name_]"); dc = new DynamicCondition(clist, { - templates: cond_templates + templates: cond_templates, + parentContainer: $("condlist") }); da = new DynamicAction(alist, { templates: action_templates, @@ -27,6 +37,8 @@ function initform() { clist.addEvent("change", dc.onTargetChange.bind(dc)); alist.addEvent("change", da.onNameChange.bind(da)); + + $$("input[name=match_type]").addEvent("click", matchtype_cb); } $(document).addEvent("domready", function() { @@ -60,13 +72,16 @@ $(document).addEvent("domready", function() {

{% trans "Conditions" %}

+ {{ form.match_type }}{% display_errors form.match_type.errors %}
+ {% if hideconds %}{% endif %}

{% trans "Actions" %}

diff --git a/extensions/sievefilters/templates/sievefilters/filters.html b/extensions/sievefilters/templates/sievefilters/filters.html index 85f42bb7a..94404b21e 100644 --- a/extensions/sievefilters/templates/sievefilters/filters.html +++ b/extensions/sievefilters/templates/sievefilters/filters.html @@ -14,6 +14,7 @@ {{ filter.name }} {{ filter.enabled|yesno }} diff --git a/extensions/sievefilters/templates/sievefilters/index.html b/extensions/sievefilters/templates/sievefilters/index.html index e9e112b87..3a85e91b6 100644 --- a/extensions/sievefilters/templates/sievefilters/index.html +++ b/extensions/sievefilters/templates/sievefilters/index.html @@ -5,7 +5,7 @@