def wrapper(request, instance_url_name, *args, **kwargs): instance = get_instance_or_404(url_name=instance_url_name) # Include the instance as both a request property and as an # view function argument for flexibility and to keep "template # only" requests simple. request.instance = instance request.instance_supports_ecobenefits = instance.has_itree_region() user = request.user if user.is_authenticated(): instance_user = user.get_instance_user(instance) request.instance_user = instance_user if instance.is_accessible_by(request.user): add_visited_instance(request, instance) return view_fn(request, instance, *args, **kwargs) else: if redirect: if request_is_embedded(request): return HttpResponseRedirect( reverse('instance_not_available') + '?embed=1') elif request.user.is_authenticated(): return HttpResponseRedirect( reverse('instance_not_available')) else: return login_redirect(request) else: return HttpResponse('Unauthorized', status=401)
def global_settings(request): last_instance = get_last_visited_instance(request) if hasattr(request, 'user') and request.user.is_authenticated(): last_effective_instance_user =\ request.user.get_effective_instance_user(last_instance) _update_last_seen(last_effective_instance_user) else: if hasattr(request, 'instance'): instance = request.instance default_role = instance.default_role last_effective_instance_user = InstanceUser( role=default_role, instance=instance) else: last_effective_instance_user = None if hasattr(request, 'instance') and request.instance.logo: logo_url = request.instance.logo.url else: logo_url = settings.STATIC_URL + "img/logo.png" try: comment_file_path = finders.find('version.txt') with open(comment_file_path, 'r') as f: header_comment = f.read() except: header_comment = "Version information not available\n" term = copy.copy(REPLACEABLE_TERMS) if hasattr(request, 'instance'): term.update(request.instance.config.get('terms', {})) # config.get('terms') above populates the term context variable with # model terminology provided it has been customized for the treemap # instance, but fails to populate it with the default terminology. The # for loop below ensures that term is populated with model terminology # whether it has been customized or not. # Convertible is the base class where the terminology class property is # defined, so its leaf subclasses are the ones with default terminology # we might care about. # leaf_models_of_class uses recursive descent through the # clz.__subclasses__ attributes, but it only iterates through a total # of around ten nodes at present, so it is unlikely to be a performance # problem. for clz in leaf_models_of_class(Convertible): term.update({ clz.__name__: clz.terminology(request.instance)}) ctx = { 'SITE_ROOT': settings.SITE_ROOT, 'settings': settings, 'last_instance': last_instance, 'last_effective_instance_user': last_effective_instance_user, 'logo_url': logo_url, 'header_comment': header_comment, 'term': term, 'embed': request_is_embedded(request), 'datepicker_start_date': datetime.min.replace(year=1900), } return ctx