diff --git a/modoboa/admin/__init__.py b/modoboa/admin/__init__.py index d331e303b..b46cf5b8f 100644 --- a/modoboa/admin/__init__.py +++ b/modoboa/admin/__init__.py @@ -21,6 +21,7 @@ parameters.register_admin("MAILBOX_TYPE", type="list", deflt="maildir", values=[("maildir", "maildir"), ("mbox", "mbox")], help=ugettext_lazy("Mailboxes storage format")) parameters.register_admin("MAILDIR_ROOT", type="string", deflt=".maildir", + visible_if="MAILBOX_TYPE=maildir", help=ugettext_lazy("Sub-directory (inside the mailbox) where messages are stored when using the maildir format")) parameters.register_admin( "PASSWORD_SCHEME", type="list", deflt="md5crypt", diff --git a/modoboa/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py index 115821911..a5ac79aec 100644 --- a/modoboa/admin/templatetags/admin_extras.py +++ b/modoboa/admin/templatetags/admin_extras.py @@ -49,15 +49,15 @@ def settings_menu(selection, user): "url" : "extensions/", "label" : _("Extensions"), "img" : ""}, + {"name" : "info", + "class" : "ajaxlink", + "url" : "info/", + "label" : _("Information")}, {"name" : "parameters", "class" : "ajaxlink", "url" : "parameters/", "img" : "", "label" : _("Parameters")}, - {"name" : "info", - "class" : "ajaxlink", - "url" : "info/", - "label" : _("Information")} ] return render_to_string('common/menu.html', { "entries" : entries, @@ -201,10 +201,16 @@ def param(app, definition): value = definition.has_key("value") \ and definition["value"] or definition["deflt"] - result = """
+ extratags = "" + if "visible_if" in definition: + vfield, vvalue = definition["visible_if"].split("=") + extratags = "data-visibility-field='%s.%s' data-visibility-value='%s'" \ + % (app, vfield, vvalue) + + result = """
""" \ - % (name, definition.has_key("label") and _(definition["label"]) + % (extratags, name, definition.has_key("label") and _(definition["label"]) or definition["name"]) if definition["type"] in ["string", "int"]: result += """ diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index fef28f6e7..706d9367e 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -493,8 +493,9 @@ def viewparameters(request, tplname='admin/parameters.html'): "help" : param_def["help"], "default" : param_def["deflt"], "type" : param_def["type"]} - if "values" in param_def.keys(): - newdef["values"] = param_def["values"] + for k in ["values", "visible_if"]: + if k in param_def.keys(): + newdef[k] = param_def[k] tmp["params"] += [newdef] gparams += [tmp] diff --git a/modoboa/extensions/amavis/__init__.py b/modoboa/extensions/amavis/__init__.py index 2140863af..48de7c7ef 100644 --- a/modoboa/extensions/amavis/__init__.py +++ b/modoboa/extensions/amavis/__init__.py @@ -54,12 +54,15 @@ class Amavis(ModoExtension): help=ugettext_lazy("Mode used to access the PDP server")) parameters.register_admin("AM_PDP_HOST", type="string", deflt="localhost", + visible_if="AM_PDP_MODE=inet", help=ugettext_lazy("PDP server address (if inet mode)")) parameters.register_admin("AM_PDP_PORT", type="int", deflt=9998, + visible_if="AM_PDP_MODE=inet", help=ugettext_lazy("PDP server port (if inet mode)")) parameters.register_admin("AM_PDP_SOCKET", type="string", deflt="/var/amavis/amavisd.sock", + visible_if="AM_PDP_MODE=unix", help=ugettext_lazy("Path to the PDP server socket (if unix mode)")) parameters.register_admin("CHECK_REQUESTS_INTERVAL", type="int", deflt=30, diff --git a/modoboa/static/js/twocols_nav.js b/modoboa/static/js/twocols_nav.js index 64e17b1b2..f15c487a6 100644 --- a/modoboa/static/js/twocols_nav.js +++ b/modoboa/static/js/twocols_nav.js @@ -37,7 +37,22 @@ TwocolsNav.prototype = { if (data.onload_cb) { eval(data.onload_cb + '()'); } + $('#' + this.options.divid + ' select').change($.proxy(this.select_change, this)); $(".help").popover().click(function(e) {e.preventDefault();}); + $('#' + this.options.divid + ' select').change(); + }, + + select_change: function(e) { + var $target = $(e.target); + + $('div[data-visibility-field="' + $target.attr("id") + '"]').each(function(idx) { + var $this = $(this); + if ($this.attr("data-visibility-value") == $target.attr("value")) { + $this.show(); + } else { + $this.hide(); + } + }); }, save_cb: function(data) {