diff --git a/modoboa/extensions/limits/__init__.py b/modoboa/extensions/limits/__init__.py index 2601c97e1..41759d58a 100644 --- a/modoboa/extensions/limits/__init__.py +++ b/modoboa/extensions/limits/__init__.py @@ -10,6 +10,7 @@ from django.db import IntegrityError from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext_lazy from modoboa.lib import events, parameters +from modoboa.lib.permissions import add_permissions_to_group from modoboa.core.extensions import ModoExtension, exts_pool levents = [ @@ -38,10 +39,12 @@ class Limits(ModoExtension): grp.permissions.add(*dagrp.permissions.all()) ct = ContentType.objects.get_for_model(Domain) - for pname in ["view_domains", "add_domain", "change_domain", "delete_domain"]: - perm = Permission.objects.get(content_type=ct, codename=pname) - grp.permissions.add(perm) - grp.save() + add_permissions_to_group( + "Resellers", [("admin", "view_domains"), + ("admin", "add_domain"), + ("admin", "change_domain"), + ("admin", "delete_domain")] + ) for user in User.objects.filter(groups__name='DomainAdmins'): try: diff --git a/modoboa/extensions/radicale/__init__.py b/modoboa/extensions/radicale/__init__.py index 99f30c228..80fd42225 100644 --- a/modoboa/extensions/radicale/__init__.py +++ b/modoboa/extensions/radicale/__init__.py @@ -11,6 +11,21 @@ from modoboa.lib.permissions import add_permissions_to_group from modoboa.core.extensions import ModoExtension, exts_pool +def init_limits_dependant_features(): + """Custom initialization if the limits extension activated. + + We mainly define extra permissions. + """ + add_permissions_to_group( + "Resellers", [("radicale", "add_usercalendar"), + ("radicale", "change_usercalendar"), + ("radicale", "delete_usercalendar"), + ("radicale", "add_sharedcalendar"), + ("radicale", "change_sharedcalendar"), + ("radicale", "delete_sharedcalendar")] + ) + + class Radicale(ModoExtension): """ """ @@ -32,6 +47,8 @@ class Radicale(ModoExtension): ("radicale", "change_sharedcalendar"), ("radicale", "delete_sharedcalendar")] ) + if exts_pool.is_extension_enabled('limits'): + init_limits_dependant_features() def load(self): """Plugin loading. diff --git a/modoboa/extensions/radicale/general_callbacks.py b/modoboa/extensions/radicale/general_callbacks.py index 86b5e70c0..486c0fb92 100644 --- a/modoboa/extensions/radicale/general_callbacks.py +++ b/modoboa/extensions/radicale/general_callbacks.py @@ -13,3 +13,20 @@ def top_menu(target, user): "url": reverse('modoboa.extensions.radicale.views.index')} ] return [] + + +@events.observe('ExtEnabled') +def extension_enabled(extension): + """ExtEnabled event listener. + + Usefull when *limits* extension is activated after *radicale*. + + :param extension: enabled extension + + """ + if extension.name == 'limits': + from modoboa.extensions.radicale import ( + init_limits_dependant_features + ) + + init_limits_dependant_features()