diff --git a/modoboa/limits/constants.py b/modoboa/limits/constants.py index 7d076a2c8..947adbe62 100644 --- a/modoboa/limits/constants.py +++ b/modoboa/limits/constants.py @@ -9,7 +9,7 @@ DEFAULT_LIMITS = collections.OrderedDict(( ("domains", { "content_type": "admin.domain", "label": _("Domains"), "help": _("Maximum number of domains this user can create"), - "required_role": "Reselles"}), + "required_role": "Resellers"}), ("domain_aliases", { "content_type": "admin.domainalias", "label": _("Domain aliases"), "help": _("Maximum number of domain aliases this user can create"), diff --git a/modoboa/limits/forms.py b/modoboa/limits/forms.py index 22cc07390..8d3285cf2 100644 --- a/modoboa/limits/forms.py +++ b/modoboa/limits/forms.py @@ -35,29 +35,22 @@ class ResourcePoolForm(forms.Form): if hasattr(self, "account"): self.load_from_user(self.account) - def check_limit_value(self, lname): - fieldname = "{}_limit".format(lname) - if self.cleaned_data[fieldname] < -1: - raise forms.ValidationError(_("Invalid limit")) - return self.cleaned_data[fieldname] - def clean(self): + """Ensure limit values are correct.""" cleaned_data = super(ResourcePoolForm, self).clean() + if self.errors: + return cleaned_data for lname in self.fields.keys(): - if lname not in self._errors and cleaned_data[lname] < -1: + if cleaned_data[lname] < -1: self.add_error(lname, _("Invalid limit")) return cleaned_data def load_from_user(self, user): + """Load limit values from given user.""" for fieldname in self.fields.keys(): lname = fieldname.replace("_limit", "") self.fields[fieldname].initial = ( user.objectlimit_set.get(name=lname).max_value) - # The following lines will become useless in a near - # future. - if self.fields[fieldname].initial == -2: - self.fields[fieldname].initial = parameters.get_admin( - "DEFLT_{}_LIMIT".format(lname.upper())) def allocate_from_user(self, limit, user): """Allocate resource using an existing user. @@ -68,8 +61,6 @@ class ResourcePoolForm(forms.Form): pool. """ ol = user.objectlimit_set.get(name=limit.name) - if ol.max_value == -2: - raise BadLimitValue(_("Your resources are not initialized yet")) fieldname = "{}_limit".format(limit.name) newvalue = self.cleaned_data[fieldname] if newvalue == -1 and ol.max_value != -1: diff --git a/modoboa/limits/models.py b/modoboa/limits/models.py index 7f3cf4412..c97deadff 100644 --- a/modoboa/limits/models.py +++ b/modoboa/limits/models.py @@ -4,12 +4,15 @@ from django.conf import settings from django.db import models +from django.utils.encoding import python_2_unicode_compatible +from django.utils.translation import ugettext as _ from modoboa.core import models as core_models from . import utils +@python_2_unicode_compatible class ObjectLimit(models.Model): """Per-user limits on object creation.""" @@ -49,7 +52,7 @@ class ObjectLimit(models.Model): if self.max_value < 0: return -1 if self.max_value == 0: - return 0 + return 100 return int(float(self.current_value) / self.max_value * 100) @property @@ -60,3 +63,11 @@ class ObjectLimit(models.Model): def is_exceeded(self, count=1): """Check if limit will be reached if we add count object(s).""" return self.current_value + 1 > self.max_value + + def __str__(self): + """Display current usage.""" + if self.max_value == -2: + return _("undefined") + if self.max_value == -1: + return _("unlimited") + return "{}%".format(self.usage) diff --git a/modoboa/limits/tests.py b/modoboa/limits/tests.py index 253c48880..40af6cc93 100644 --- a/modoboa/limits/tests.py +++ b/modoboa/limits/tests.py @@ -188,6 +188,9 @@ class ResellerTestCase(ResourceTestCase): self.client.login(username='reseller', password='toto') def test_domains_limit(self): + response = self.client.get(reverse("admin:domain_list")) + self.assertContains(response, "Domains (0%)") + self.assertContains(response, "Domain aliases (0%)") self._create_domain('domain1.tld') self._check_limit('domains', 1, 2) self._create_domain('domain2.tld') @@ -216,6 +219,11 @@ class ResellerTestCase(ResourceTestCase): self._check_limit('domain_aliases', 1, 2) def test_domain_admins_limit(self): + response = self.client.get(reverse("admin:identity_list")) + self.assertContains(response, "Domain admins (0%)") + self.assertContains(response, "Mailboxes (0%)") + self.assertContains(response, "Mailbox aliases (0%)") + self._create_domain('domain.tld') self._create_account('admin1@domain.tld', role='DomainAdmins') self._check_limit('domain_admins', 1, 2) diff --git a/modoboa/limits/urls.py b/modoboa/limits/urls.py deleted file mode 100644 index 7bcb7fec0..000000000 --- a/modoboa/limits/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.conf.urls import patterns - -urlpatterns = patterns( - 'modoboa.limits.views', - -)