mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Don't display preferences of extensions that require a mailbox.
see #198
This commit is contained in:
@@ -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"))
|
||||
|
||||
@@ -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
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user