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(); });