summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py31
1 files changed, 29 insertions, 2 deletions
diff --git a/chimere/models.py b/chimere/models.py
index b791a8b..f851b9c 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -1398,10 +1398,37 @@ class Map(models.Model, SimpleArea):
verbose_name = _("Map")
@classmethod
- def getAvailable(cls):
+ def getAvailable(cls, user=None, urn=None, single=False, edit=False):
'''Get available maps
'''
- return cls.objects.filter(available=True)
+ map_filter = {'available':True}
+ if urn:
+ map_filter['urn'] = urn
+ elif single:
+ map_filter['default'] = True
+ filters = [{'public_write':True},
+ {'public_propose':True},
+ ] if edit else [
+ {'public_read':True}]
+ if user and user.is_authenticated():
+ filters += [{'mapusers__user':user, 'mapusers__write':True},
+ {'mapusers__user':user, 'mapusers__propose':True},
+ ] if edit else [
+ {'mapusers__user':user, 'mapusers__read':True},]
+ query = None
+ for fltr in filters:
+ fltr.update(map_filter)
+ if not query:
+ query = Q(**fltr)
+ else:
+ query = query | Q(**fltr)
+ maps = cls.objects.filter(query)
+ if single:
+ if not maps.count():
+ return
+ return maps.all()[0]
+ else:
+ return maps.all()
def getWkt(self):
return "SRID=%d;POLYGON((%f %f,%f %f,%f %f,%f %f, %f %f))" % (