Don't display preferences of extensions that require a mailbox.

see #198
This commit is contained in:
Antoine Nguyen
2012-02-01 10:56:15 +01:00
parent 8e432d344e
commit 1c3fddb849
4 changed files with 72 additions and 14 deletions
+2
View File
@@ -8,6 +8,8 @@ from sievelib.managesieve import SUPPORTED_AUTH_MECHS
baseurl = "sfilters"
def load():
parameters.register_app(uparams_opts=dict(needs_mailbox=True))
parameters.register_admin("SERVER", type="string",
deflt="127.0.0.1",
help=_("Address of your MANAGESIEVE server"))
+2 -1
View File
@@ -5,6 +5,8 @@ from modoboa.lib import events, parameters
from modoboa.lib.webutils import static_url
def load():
parameters.register_app(uparams_opts=dict(needs_mailbox=True))
parameters.register_admin("IMAP_SERVER", type="string",
deflt="127.0.0.1",
help=_("Address of your IMAP server"))
@@ -30,7 +32,6 @@ def load():
parameters.register_admin("MAX_ATTACHMENT_SIZE", type="int", deflt=2048,
help=_("Maximum attachment size in bytes (or KB, MB, GB if specified)"))
parameters.register_user("MESSAGES_PER_PAGE", type="int", deflt=40,
label=_("Number of displayed emails per page"),
help=_("Sets the maximum number of messages displayed in a page"))
+64 -13
View File
@@ -27,6 +27,49 @@ class NotDefined(Exception):
return "Application '%s' and/or parameter '%s' not defined" \
% (self.app, self.name)
def register_app(app=None, aparams_opts=None, uparams_opts=None):
"""Manually register an application
You don't need to call this function unless you want to provide
specific options for your application parameters.
For example, you can indicate that user-level parameters are only
accessible for users that own a mailbox.
:param app: the application's name
:param aparams_opts: a dict containing options applicable to admin-level params
:param uparams_opts: a dict containing options applicable to user-level params
"""
if app is None:
app = __guess_extension()
if _params.has_key(app):
return
_params[app] = {}
_params[app]['options'] = {}
_params_order[app] = {}
for lvl in _levels.keys():
_params[app][lvl] = {}
_params_order[app][lvl] = []
if aparams_opts:
_params[app]['options']['A'] = aparams_opts
if uparams_opts:
_params[app]['options']['U'] = uparams_opts
def unregister_app(app):
"""Unregister an application
All parameters associated to this application will also be
removed.
:param app: the application's name (string)
"""
if not _params.has_key(app):
return False
del _params[app]
return True
def __is_defined(app, level, name):
if not level in _levels.keys() \
or not app in _params.keys() \
@@ -44,11 +87,8 @@ def __register(app, level, name, **kwargs):
:param name: the parameter's name
"""
if not app in _params.keys():
_params[app] = {}
_params_order[app] = {}
for lvl in _levels.keys():
_params[app][lvl] = {}
_params_order[app][lvl] = []
register_app(app)
if not level in _levels.keys():
return
if _params[app][level].has_key(name):
@@ -113,6 +153,10 @@ def update_admin(name, **kwargs):
return __update(app, 'A', name, **kwargs)
def register_user(name, **kwargs):
"""Register a new user-level parameter
:param name: the parameter's name
"""
if kwargs.has_key("app"):
app = kwargs["app"]
del kwargs["app"]
@@ -120,12 +164,6 @@ def register_user(name, **kwargs):
app = __guess_extension()
return __register(app, 'U', name, **kwargs)
def unregister_app(app):
if not _params.has_key(app):
return False
del _params[app]
return True
def save_admin(name, value, app=None):
from models import Parameter
@@ -157,7 +195,7 @@ def save_user(user, name, value, app=None):
p.user = user
p.name = fullname
if p.value != value:
p.value = str(value).encode("string_escape").strip()
p.value = value.encode("unicode_escape").strip()
p.save()
return True
@@ -183,4 +221,17 @@ def get_user(user, name, app=None):
p = UserParameter.objects.get(user=user, name="%s.%s" % (app, name))
except UserParameter.DoesNotExist:
return _params[app]["U"][name]["deflt"]
return p.value.decode("string_escape")
try:
dvalue = p.value.decode("string_escape")
except ValueError:
dvalue = p.value
return dvalue
def get_app_option(lvl, name, dflt, app=None):
if app is None:
app = __guess_extension()
if not lvl in _params[app]['options']:
return dflt
if not _params[app]['options'][lvl].has_key(name):
return dflt
return _params[app]['options'][lvl][name]
+4
View File
@@ -95,6 +95,10 @@ def preferences(request):
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]