Exemple #1
0
    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)
Exemple #2
0
    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