diff --git a/admin/models.py b/admin/models.py
index 797df04a9..9055bd63a 100644
--- a/admin/models.py
+++ b/admin/models.py
@@ -295,15 +295,14 @@ class DatesAware(models.Model):
ObjectDates.set_for_object(self)
super(DatesAware, self).save(*args, **kwargs)
- def __creation(self):
+ @property
+ def creation(self):
return self.dates.creation
- def __last_modification(self):
+ @property
+ def last_modification(self):
return self.dates.last_modification
- creation = property(__creation)
- last_modification = property(__last_modification)
-
class Domain(DatesAware):
name = models.CharField(ugettext_noop('name'), max_length=100, unique=True,
help_text=ugettext_noop("The domain name"))
@@ -317,14 +316,14 @@ class Domain(DatesAware):
("view_domain", "View domain"),
("view_domains", "View domains"),
)
-
- def __domainalias_count(self):
+
+ @property
+ def domainalias_count(self):
return len(self.domainalias_set.all())
- domainalias_count = property(__domainalias_count)
- def __mailbox_count(self):
+ @property
+ def mailbox_count(self):
return len(self.mailbox_set.all())
- mailbox_count = property(__mailbox_count)
def create_dir(self):
if parameters.get_admin("CREATE_DIRECTORIES") == "yes":
@@ -407,25 +406,25 @@ class Mailbox(DatesAware):
self.mdirroot += '/'
def __str__(self):
- return self.full_address()
+ return self.full_address
@property
def full_address(self):
return "%s@%s" % (self.address, self.domain.name)
- def __enabled(self):
+ @property
+ def enabled(self):
return self.user.is_active
- enabled = property(__enabled)
- def __full_path(self):
+ @property
+ def full_path(self):
path = os.path.join(parameters.get_admin("STORAGE_PATH"),
self.domain.name, self.address)
return os.path.abspath(path)
- full_path = property(__full_path)
- def __alias_count(self):
+ @property
+ def alias_count(self):
return len(self.alias_set.all())
- alias_count = property(__alias_count)
def create_dir(self):
if parameters.get_admin("CREATE_DIRECTORIES") == "yes":
@@ -607,15 +606,15 @@ class Alias(DatesAware):
("view_aliases", "View aliases"),
)
- def __full_address(self):
+ @property
+ def full_address(self):
return "%s@%s" % (self.address, self.domain.name)
- full_address = property(__full_address)
- def __targets(self):
+ @property
+ def targets(self):
ret = "
".join(map(lambda m: str(m), self.mboxes.all()))
ret += "
" + self.repr_extmboxes()
return ret
- targets = property(__targets)
def save(self, int_targets, ext_targets, *args, **kwargs):
if len(ext_targets):
diff --git a/admin/views.py b/admin/views.py
index c6b2be947..9d4720718 100644
--- a/admin/views.py
+++ b/admin/views.py
@@ -70,7 +70,7 @@ def _validate_domain(request, form, successmsg, commonctx,
@permission_required("admin.add_domain")
@transaction.commit_on_success
def newdomain(request, tplname="admin/adminform.html"):
- events.raiseEvent("CanCreateDomain", request.user)
+ events.raiseEvent("CanCreate", request.user, "domains")
def newdomain_cb(user, domain):
grant_access_to_object(user, domain, is_owner=True)
events.raiseEvent("CreateDomain", user, domain)
@@ -152,7 +152,7 @@ def domaliases(request):
@permission_required("admin.add_domainalias")
@transaction.commit_on_success
def newdomalias(request, tplname="admin/adminform.html"):
- events.raiseEvent("CanCreateDomainAlias", request.user)
+ events.raiseEvent("CanCreate", request.user, "domain_aliases")
commonctx = {"title" : _("New domain alias"),
"submit_label" : _("Create"),
"action" : reverse(newdomalias),
@@ -275,7 +275,7 @@ def mailboxes_search(request):
@permission_required("admin.add_mailbox")
@transaction.commit_on_success
def newmailbox(request, tplname="admin/adminform.html"):
- events.raiseEvent("CanCreateMailbox", request.user)
+ events.raiseEvent("CanCreate", request.user, "mailboxes")
commonctx = {"title" : _("New mailbox"),
"submit_label" : _("Create"),
"action" : reverse(newmailbox),
@@ -423,7 +423,7 @@ def _validate_mbalias(request, form, successmsg, tplname, commonctx, callback=No
@permission_required("admin.add_alias")
@transaction.commit_on_success
def newmbalias(request, tplname="admin/mbaliasform.html"):
- events.raiseEvent("CanCreateMailboxAlias", request.user)
+ events.raiseEvent("CanCreate", request.user, "mailbox_aliases")
commonctx = {"title" : _("New mailbox alias"),
"submit_label" : _("Create"),
"action" : reverse(newmbalias),
@@ -496,7 +496,7 @@ def permissions(request, tplname='admin/permissions.html'):
permtables += [
{"id" : "domain_admins",
"title" : _("Domain administrators"),
- "rel" : "350 250",
+ "rel" : "350 100",
"content" : DomainAdminsPerms().get(request)}
]
@@ -515,6 +515,7 @@ def add_permission(request):
else:
pobj = pclass()
if request.method == "GET":
+ events.raiseEvent("CanCreate", request.user, role)
return pobj.get_add_form(request)
status, data = pobj.add(request)
if not status:
diff --git a/extensions/limits/controls.py b/extensions/limits/controls.py
index 130050f58..bf947de48 100644
--- a/extensions/limits/controls.py
+++ b/extensions/limits/controls.py
@@ -40,9 +40,6 @@ def dec_limit(user, lname):
except LimitsPool.DoesNotExist:
pass
-@events.observe('CanCreateDomain')
-def check_domains_limit(user):
- check_limit(user, 'domains_limit')
@events.observe('CreateDomain')
def inc_nb_domains(user, domain):
@@ -59,10 +56,6 @@ def dec_nb_domains(domain):
for mbalias in domain.alias_set.all():
dec_nb_mbaliases(mbalias)
-@events.observe('CanCreateDomainAlias')
-def check_domaliases_limit(user):
- check_limit(user, 'domain_aliases_limit')
-
@events.observe('DomainAliasCreated')
def inc_nb_domaliases(user, domalias):
inc_limit(user, 'domain_aliases_limit')
@@ -72,10 +65,6 @@ def dec_nb_domaliases(domainalias):
owner = get_object_owner(domainalias)
dec_limit(owner, 'domain_aliases_limit')
-@events.observe('CanCreateMailbox')
-def check_mboxes_limit(user):
- check_limit(user, 'mailboxes_limit')
-
@events.observe('CreateMailbox')
def inc_nb_mailboxes(user, mailbox):
inc_limit(user, 'mailboxes_limit')
@@ -85,10 +74,6 @@ def dec_nb_mailboxes(mailbox):
owner = get_object_owner(mailbox)
dec_limit(owner, 'mailboxes_limit')
-@events.observe('CanCreateMailboxAlias')
-def check_mbaliases_limit(user):
- check_limit(user, 'mailbox_aliases_limit')
-
@events.observe('MailboxAliasCreated')
def inc_nb_mbaliases(user, mailboxalias):
inc_limit(user, 'mailbox_aliases_limit')
@@ -98,12 +83,23 @@ def dec_nb_mbaliases(mailboxalias):
owner = get_object_owner(mailboxalias)
dec_limit(owner, 'mailbox_aliases_limit')
+@events.observe('CanCreate')
+def can_create_new_object(user, objtype):
+ check_limit(user, '%s_limit' % objtype)
+
@events.observe("DomainAdminCreated")
def create_pool(user):
+ owner = get_object_owner(user)
+ inc_limit(owner, 'domain_admins_limit')
p = LimitsPool(user=user)
p.save()
p.create_limits()
+@events.observe("DomainAdminDeleted")
+def create_pool(da):
+ owner = get_object_owner(da)
+ dec_limit(owner, 'domain_admins_limit')
+
@events.observe("DomainAdminDeleted", "SuperAdminPromotion")
def move_pool_resource(user):
owner = get_object_owner(user)
diff --git a/extensions/limits/forms.py b/extensions/limits/forms.py
index 77d0e742e..50554d91c 100644
--- a/extensions/limits/forms.py
+++ b/extensions/limits/forms.py
@@ -30,6 +30,10 @@ class ResellerWithPasswordForm(ResellerForm, UserWithPasswordForm):
pass
class ResellerPoolForm(forms.Form):
+ domain_admins_limit = forms.IntegerField(
+ ugettext_noop("Max domain admins"),
+ help_text=ugettext_noop("Maximum number of domain administrators that can be created by this user")
+ )
domains_limit = forms.IntegerField(ugettext_noop("Max domains"),
help_text=ugettext_noop("Maximum number of domains that can be created by this user"))
domain_aliases_limit = forms.IntegerField(ugettext_noop("Max domain aliases"),
diff --git a/extensions/limits/models.py b/extensions/limits/models.py
index 9c26ac570..90694e592 100644
--- a/extensions/limits/models.py
+++ b/extensions/limits/models.py
@@ -6,6 +6,7 @@ from django.utils.translation import ugettext as _, ugettext_noop
from modoboa.admin.models import User
reseller_limits_tpl = [
+ "domain_admins_limit",
"domains_limit",
"domain_aliases_limit",
"mailboxes_limit",
diff --git a/extensions/limits/templatetags/limits_tags.py b/extensions/limits/templatetags/limits_tags.py
index e61597397..37310b0d2 100644
--- a/extensions/limits/templatetags/limits_tags.py
+++ b/extensions/limits/templatetags/limits_tags.py
@@ -39,6 +39,6 @@ def reseller_actions(user, resid):
"img" : static_url("pics/settings.png"),
"title" : _("Edit limits allocated to this reseller"),
"class" : "boxed",
- "rel" : "{handler:'iframe',size:{x:330,y:280}}"},
+ "rel" : "{handler:'iframe',size:{x:330,y:310}}"},
]
return render_actions(actions)
diff --git a/lib/events.py b/lib/events.py
index 260bca306..82adfb485 100644
--- a/lib/events.py
+++ b/lib/events.py
@@ -15,20 +15,18 @@ import re
events = [
"SuperAdminPromotion",
- "CanCreateDomain",
+ "CanCreate",
+
"CreateDomain",
"DeleteDomain",
- "CanCreateDomainAlias",
"DomainAliasCreated",
"DomainAliasDeleted",
- "CanCreateMailbox",
"CreateMailbox",
"DeleteMailbox",
"ModifyMailbox",
- "CanCreateMailboxAlias",
"MailboxAliasCreated",
"MailboxAliasDeleted",
diff --git a/templates/admin/add_domain_admin.html b/templates/admin/add_domain_admin.html
index df5304d0c..1c4dd537c 100644
--- a/templates/admin/add_domain_admin.html
+++ b/templates/admin/add_domain_admin.html
@@ -23,6 +23,7 @@ $("createfrom").addEvent("change", function(evt) {
url = "{% url admin.views.domain_admin_promotion %}";
styles = {height: 200};
}
+ var size = {y: styles.height};
new Request.JSON.mdb({
url: url,
onSuccess: function(response) {
@@ -37,6 +38,7 @@ $("createfrom").addEvent("change", function(evt) {
});
}
$(parent.document).getElement('iframe').setStyles(styles);
+ parent.SqueezeBox.resize(size);
}
}).get();
});