diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/chimere/models.py b/chimere/models.py index cd2996d..d5b3f1b 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -1397,8 +1397,17 @@ class Map(models.Model, SimpleArea): ordering = ('order', 'name') verbose_name = _("Map") + def can_write(self, user=None): + return bool(self.getAvailable(user=user, urn=self.urn, single=True, + edit=True)) + + def can_propose(self, user=None): + return bool(self.getAvailable(user=user, urn=self.urn, single=True, + propose=True)) + @classmethod - def getAvailable(cls, user=None, urn=None, single=False, edit=False): + def getAvailable(cls, user=None, urn=None, single=False, edit=False, + propose=False): '''Get available maps ''' map_filter = {'available':True} @@ -1406,19 +1415,38 @@ class Map(models.Model, SimpleArea): map_filter['urn'] = urn elif single: map_filter['default'] = True - filters = [{'public_write':True}, - {'public_propose':True}, - ] if edit else [ - {'public_read':True}] + filters = [] + if not propose and not edit: + filters = [{'public_write':True}, + {'public_propose':True}, + {'public_read':True}] + elif propose: + filters = [{'public_write':True}, + {'public_propose':True}] + elif edit: + filters = [{'public_write':True}] if user and user.is_authenticated(): - filters += [ + if not propose and not edit: + filters += [ + {'mapusers__user':user, 'mapusers__read':True}, {'mapusers__user':user, 'mapusers__write':True}, {'mapusers__user':user, 'mapusers__propose':True}, + {'mapgroups__group__user':user, 'mapgroups__read':True}, {'mapgroups__group__user':user, 'mapgroups__write':True}, - {'mapgroups__group__user':user, 'mapgroups__propose':True}, - ] if edit else [ - {'mapusers__user':user, 'mapusers__read':True}, - {'mapgroups__group__user':user, 'mapgroups__read':True},] + {'mapgroups__group__user':user, 'mapgroups__propose':True} + ] + elif propose: + filters += [ + {'mapusers__user':user, 'mapusers__write':True}, + {'mapusers__user':user, 'mapusers__propose':True}, + {'mapgroups__group__user':user, 'mapgroups__write':True}, + {'mapgroups__group__user':user, 'mapgroups__propose':True} + ] + elif edit: + filters += [ + {'mapusers__user':user, 'mapusers__write':True}, + {'mapgroups__group__user':user, 'mapgroups__write':True}, + ] query = None for fltr in filters: fltr.update(map_filter) |
