summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py48
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)