Display parameter forms always in the same order.

Don't try to apply settings before the forms are loaded.

fixes #392
This commit is contained in:
Antoine Nguyen
2013-05-04 10:41:14 +02:00
parent 72c2aea721
commit a7be6b10e8
2 changed files with 22 additions and 7 deletions
+20 -6
View File
@@ -145,9 +145,8 @@ def register(formclass, label):
``UserParametersForm``.
:param formclass: a form class
:param label:
:param string label: the label to display in parameters or settings pages
"""
from models import Parameter
from modoboa.lib.formutils import SeparatorField
if issubclass(formclass, AdminParametersForm):
@@ -285,18 +284,33 @@ def get_user(user, name, app=None):
return p.value.decode("unicode_escape")
def get_sorted_apps(level, first="admin"):
sorted_apps = [first]
sorted_apps += sorted(
[app for app in _params[level].keys() if app != first],
key=lambda app: _params[level][app]["label"]
)
return sorted_apps
def get_admin_forms(*args, **kwargs):
for formdef in _params['A'].values():
yield {"label": formdef["label"], "form": formdef["form"](*args, **kwargs)}
for app in get_sorted_apps('A'):
formdef = _params['A'][app]
yield {"label": formdef["label"],
"form": formdef["form"](*args, **kwargs)}
def get_user_forms(user, *args, **kwargs):
kwargs["user"] = user
sorted_apps = get_sorted_apps('U', first="general")
def realfunc():
for formdef in _params['U'].values():
for app in sorted_apps:
formdef = _params['U'][app]
if not formdef["form"].has_access(user):
continue
yield {"label": formdef["label"], "form": formdef["form"](*args, **kwargs)}
yield {"label": formdef["label"],
"form": formdef["form"](*args, **kwargs)}
return realfunc
+2 -1
View File
@@ -3,7 +3,6 @@ from django.conf import settings
from modoboa.extensions import *
from modoboa.lib import parameters
parameters.apply_to_django_settings()
urlpatterns = patterns('',
(r'^$', 'modoboa.lib.webutils.topredirection'),
@@ -14,6 +13,8 @@ urlpatterns = patterns('',
*exts_pool.load_all()
)
parameters.apply_to_django_settings()
if 'modoboa.demo' in settings.INSTALLED_APPS:
urlpatterns += patterns('',
(r'^demo/', include('modoboa.demo.urls'))