diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index 706d9367e..e1a25e869 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -481,28 +481,10 @@ def viewsettings(request, tplname='admin/settings_header.html'): @login_required @user_passes_test(lambda u: u.is_superuser) def viewparameters(request, tplname='admin/parameters.html'): - apps = sorted(parameters._params.keys()) - gparams = [] - for app in apps: - tmp = {"name" : app, "params" : []} - for p in parameters._params_order[app]['A']: - - param_def = parameters._params[app]['A'][p] - newdef = {"name" : p, - "value" : parameters.get_admin(p, app=app), - "help" : param_def["help"], - "default" : param_def["deflt"], - "type" : param_def["type"]} - for k in ["values", "visible_if"]: - if k in param_def.keys(): - newdef[k] = param_def[k] - tmp["params"] += [newdef] - gparams += [tmp] - return ajax_simple_response({ "status" : "ok", "left_selection" : "parameters", - "content" : render_to_string(tplname, {"gparams" : gparams}) + "content" : render_to_string(tplname, {"gparams" : parameters.get_all_admin_parameters()}) }) @login_required diff --git a/modoboa/lib/parameters.py b/modoboa/lib/parameters.py index 93af32cbf..2dc3680a9 100644 --- a/modoboa/lib/parameters.py +++ b/modoboa/lib/parameters.py @@ -1,8 +1,9 @@ -# -*- coding: utf-8 -*- +# coding: utf-8 import string import inspect import re +import copy """ This interface provides a simple way to declare and store parameters @@ -211,6 +212,24 @@ def get_admin(name, app=None): return _params[app]["A"][name]["deflt"] return p.value.decode("unicode_escape") +def get_all_admin_parameters(): + """Retrieve all administrative parameters + + Returned parameters are sorted by application + + :return: a list of dictionaries + """ + result = [] + for app in sorted(_params.keys()): + tmp = {"name" : app, "params" : []} + for p in _params_order[app]['A']: + newdef = copy.deepcopy(_params[app]['A'][p]) + newdef["name"] = p + newdef["value"] = get_admin(p, app=app) + tmp["params"] += [newdef] + result += [tmp] + return result + def get_user(user, name, app=None): from models import UserParameter @@ -223,7 +242,42 @@ def get_user(user, name, app=None): return _params[app]["U"][name]["deflt"] return p.value.decode("unicode_escape") +def get_all_user_params(user): + """Retrieve all the parameters of the given user + + Returned parameters are sorted by application. + + :param user: a ``User`` object + :return: a list of dictionaries + """ + result = [] + for app in sorted(_params.keys()): + if not len(_params[app]['U']): + continue + if get_app_option('U', 'needs_mailbox', False, app=app) \ + and not user.has_mailbox: + continue + tmp = {"name" : app, "params" : []} + for p in _params_order[app]['U']: + param_def = _params[app]['U'][p] + newdef = copy.deepcopy(param_def) + newdef["name"] = p + newdef["value"] = get_user(user, p, app=app) + tmp["params"] += [newdef] + result += [tmp] + return result + def get_app_option(lvl, name, dflt, app=None): + """Retrieve a specific option for a given application + + If the option is not found, a default value is returned. + + :param lvl: the option's level (U or A) + :param name: the option's name + :param dflt: the default value to return + :param app: the application name + :return: the option's value + """ if app is None: app = __guess_extension() if not lvl in _params[app]['options']: diff --git a/modoboa/userprefs/views.py b/modoboa/userprefs/views.py index 3cdc9229b..6a44f95b8 100644 --- a/modoboa/userprefs/views.py +++ b/modoboa/userprefs/views.py @@ -1,5 +1,4 @@ # coding: utf-8 -import copy from django.shortcuts import render from django.template.loader import render_to_string from django.core.urlresolvers import reverse @@ -118,27 +117,9 @@ def preferences(request): status="ok", respmsg=_("Preferences saved") )) - apps = sorted(parameters._params.keys()) - gparams = [] - for app in apps: - if not len(parameters._params[app]['U']): - continue - if parameters.get_app_option('U', 'needs_mailbox', False, app=app) \ - and not request.user.has_mailbox: - continue - - tmp = {"name" : app, "params" : []} - for p in parameters._params_order[app]['U']: - param_def = parameters._params[app]['U'][p] - newdef = copy.deepcopy(param_def) - newdef["name"] = p - newdef["value"] = parameters.get_user(request.user, p, app=app) - tmp["params"] += [newdef] - gparams += [tmp] - return ajax_simple_response({ "status" : "ok", "content" : render_to_string("userprefs/preferences.html", { - "gparams" : gparams + "gparams" : parameters.get_all_user_params(request.user) }) })