From 5b0525f25762f8a0e772c70b0e828dc47bd7c0bb Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Sat, 16 Apr 2016 15:40:41 +0200 Subject: [PATCH] Add flag to enable/disable per-domain limits. see #799 --- modoboa/limits/app_settings.py | 14 +++++++++++++- modoboa/limits/general_callbacks.py | 6 +++++- modoboa/limits/handlers.py | 2 ++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/modoboa/limits/app_settings.py b/modoboa/limits/app_settings.py index 0c4f1f98a..42aaf5068 100644 --- a/modoboa/limits/app_settings.py +++ b/modoboa/limits/app_settings.py @@ -3,7 +3,7 @@ from django import forms from django.utils.translation import ugettext_lazy as _ -from modoboa.lib.form_utils import SeparatorField +from modoboa.lib.form_utils import SeparatorField, YesNoField from modoboa.lib.parameters import AdminParametersForm @@ -67,6 +67,12 @@ class ParametersForm(AdminParametersForm): domain_limits_sep = SeparatorField(label=_("Default per-domain limits")) + enable_domain_limits = YesNoField( + label=_("Enable per-domain limits"), + initial="no", + help_text=_("Enable or disable per-domain limits") + ) + # deflt_domain_domain_admins_limit = forms.IntegerField( # label=_("Domain admins"), # initial=0, @@ -110,6 +116,12 @@ class ParametersForm(AdminParametersForm): attrs={"class": "col-md-1 form-control"}) ) + visibility_rules = { + "deflt_domain_mailboxes_limit": "enable_domain_limits=yes", + "deflt_domain_mailbox_aliases_limit": "enable_domain_limits=yes", + "deflt_domain_domain_aliases_limit": "enable_domain_limits=yes", + } + def __init__(self, *args, **kwargs): super(AdminParametersForm, self).__init__(*args, **kwargs) self._load_extra_parameters('A') diff --git a/modoboa/limits/general_callbacks.py b/modoboa/limits/general_callbacks.py index 92d6aded6..068b9abd9 100644 --- a/modoboa/limits/general_callbacks.py +++ b/modoboa/limits/general_callbacks.py @@ -2,7 +2,7 @@ from django.utils.translation import ugettext as _ -from modoboa.lib import events +from modoboa.lib import events, parameters from . import forms from . import utils @@ -53,6 +53,8 @@ def extra_account_form(user, account=None): @events.observe("ExtraDomainForm") def extra_domain_form(user, domain): """Include domain limits form.""" + if parameters.get_admin("ENABLE_DOMAIN_LIMITS") == "no": + return [] if not user.has_perm("admin.change_domain"): return [] return [{ @@ -64,6 +66,8 @@ def extra_domain_form(user, domain): @events.observe("FillDomainInstances") def fill_domain_instances(user, domain, instances): """Set domain instance for resources form.""" + if parameters.get_admin("ENABLE_DOMAIN_LIMITS") == "no": + return if not user.has_perm("admin.change_domain"): return instances["resources"] = domain diff --git a/modoboa/limits/handlers.py b/modoboa/limits/handlers.py index 27dd1a19c..427d48f1e 100644 --- a/modoboa/limits/handlers.py +++ b/modoboa/limits/handlers.py @@ -24,6 +24,8 @@ def check_object_limit(sender, context, object_type, **kwargs): return True limit = context.userobjectlimit_set.get(name=object_type) elif context.__class__.__name__ == "Domain": + if parameters.get_admin("ENABLE_DOMAIN_LIMITS") == "no": + return limit = context.domainobjectlimit_set.get(name=object_type) else: raise NotImplementedError