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))" % (  | 
