team-3/src/c3nav/mapdata/inclusion.py
2017-05-10 21:31:54 +02:00

63 lines
1.9 KiB
Python

from collections import OrderedDict
from django.utils.translation import ugettext_lazy as _
def get_default_include_avoid():
include = set()
avoid = set()
locations = list(AreaLocation.objects.exclude(routing_inclusion='default'))
for location in locations:
if location.routing_inclusion != 'allow_avoid':
avoid.add(location.location_id)
return include, avoid
# Todo: add cache
def get_includables_avoidables(request):
includables = []
avoidables = []
locations = list(AreaLocation.objects.exclude(routing_inclusion='default'))
if request.c3nav_full_access:
includables.append((':nonpublic', _('non-public areas')))
avoidables.append((':public', _('public areas')))
for location in locations:
item = (location.location_id, location.title)
if location.location_id not in request.c3nav_access_list and not request.c3nav_full_access:
if location.routing_inclusion == 'needs_permission':
continue
if location.routing_inclusion == 'allow_avoid':
avoidables.append(item)
else:
includables.append(item)
return OrderedDict(includables), OrderedDict(avoidables)
def get_maybe_invisible_areas():
return AreaLocation.objects.exclude(routing_inclusion='default')
def get_maybe_invisible_areas_names():
return tuple(area.name for area in get_maybe_invisible_areas())
def parse_include_avoid(request, include_input, avoid_input):
includable, avoidable = get_includables_avoidables(request)
include_input = set(include_input) & set(includable)
avoid_input = set(avoid_input) & set(avoidable)
default_include, default_avoid = get_default_include_avoid()
include = set(default_include) | include_input
avoid = set(default_avoid) - include_input | avoid_input
return ':nonpublic' in includable, include, avoid