diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 31 |
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))" % ( |
