def get_context(self, request, **kwargs):
     slug = ''
     context = super(ResourceCollections, self).get_context(request)
     context = get_data(request,
                        data=context,
                        slug=slug,
                        path_components=kwargs.get('path_components', []))
     return base_context(context, self)
    def get_context(self, request):
        context = super(ResourcePage, self).get_context(request)

        if (request.META.get('HTTP_REFERER')
                and request.session.get('results_page')):
            context['back'] = request.session.pop('results_page')

        if 'ldmw_session' in request.COOKIES:
            cookie = request.COOKIES['ldmw_session']
            try:
                context['liked_value'] = Likes.objects\
                    .get(resource_id=self.id, user_hash=cookie)\
                    .like_value
            except:
                context['liked_value'] = 0
        else:
            cookie = ''
            context['liked_value'] = 0

        if 'ldmw_location_latlong' in request.COOKIES:
            try:
                location = request.COOKIES['ldmw_location_latlong']
                [user_lat, user_long] = location.split(",")
                context['is_near'] = any(
                    filter(
                        lambda e: haversine_distance(float(
                            user_lat), float(user_long), float(
                                e.latitude), float(e.longitude)) / 1.6 < 1000,
                        self.latlong.all()))
                # less than 1 mile
            except:
                print("Failed to get location")
                context['is_near'] = False
        else:
            context['is_near'] = False

        Home = apps.get_model('resources', 'home')

        combine_tags = create_tag_combiner(None)
        landing_pages = Home.objects.filter(~Q(slug="home")).live()

        context['landing_pages'] = landing_pages
        context['tags'] = combine_tags(self).specific.tags
        context['number_of_likes'] = Likes.objects\
            .filter(resource_id=self.id, like_value=1)\
            .count()
        context['number_of_dislikes'] = Likes.objects\
            .filter(resource_id=self.id, like_value=-1)\
            .count()
        context['badges'] = ResourcePageBadges.objects\
            .filter(page_id=self.page_ptr_id)
        context['buttons'] = ResourcePageButtons.objects\
            .filter(page_id=self.page_ptr_id)

        return base_context(context, self)
 def collection_results(self, request, **kwargs):
     try:
         collection_slug = request.path.split('/')[2]
     except:
         collection_slug = ''
     context = super(CollectionsIndexPage, self).get_context(request)
     context = get_data(request,
                        data=context,
                        collection_slug=collection_slug,
                        path_components=kwargs.get('path_components', []))
     template = loader.get_template(
         f"resources/collections_index_page.html")
     return HttpResponse(
         template.render(context=base_context(context, self),
                         request=request))
    def topic_results(self, request, **kwargs):
        try:
            slug = request.path.split('/')[2]
        except:
            slug = ''

        context = super(Results, self).get_context(request)
        context = get_data(request,
                           data=context,
                           slug=slug,
                           path_components=kwargs.get('path_components', []))
        context['topic'] = slug
        template = loader.get_template(f"resources/results.html")
        return HttpResponse(
            template.render(context=base_context(context, self),
                            request=request))
    def get_context(self, request):
        context = super(StaticPage, self).get_context(request)

        Home = apps.get_model('resources', 'home')

        for all_menu in Home.objects.all():
            for sub_menu in all_menu.sub_menu.all():
                if sub_menu:
                    if sub_menu.submenu_pagelink:
                        if sub_menu.submenu_pagelink.url == request.path:
                            context['matched_submenu'] = Home.objects.filter(
                                Q(slug=all_menu.slug))
                    else:
                        context['matched_submenu'] = Home.objects.filter(
                            Q(slug='anxious'))

        context['current_path'] = request.path
        return base_context(context, self)
def assessment_summary_controller(request, **kwargs):
    template = loader.get_template(
        "resources/assessment/assessment-summary.html")

    traversal_id = request.POST.get("traversal_id")
    member_id = request.POST.get("member_id")

    context = requests.get(f"{e24_url}/Summary/" +
                           f"{traversal_id}/{member_id}?callback=raw").json()

    context["member_id"] = member_id
    context["traversal_id"] = traversal_id
    context["node_id"] = request.POST.get("node_id")
    context["algo_id"] = request.POST.get("algo_id")
    context["parent"] = request.POST.get("parent")
    context["slug"] = request.POST.get("slug")

    return HttpResponse(
        template.render(context=base_context(context, self), request=request))
def assessment_controller(self, request, **kwargs):
    ResourcePage = apps.get_model('resources', 'resourcepage')
    params = request.POST

    answers = filter(lambda p: p[:2] == "Q_", params)

    prms = {}

    for a in answers:
        if len(a.split("_")) == 3:
            prms[a.split("_")[2]] = params.get(a)
        else:
            prms[params.get(a)] = ""

    if not (params.get("member_id") and params.get("traversal_id")):
        r = requests.get(f"{e24_url}/Member?callback=raw&@usertype=300")

        response = r.json()
        member_id = response["Table"][0]["MemberID"]
        traversal_id = response["Table"][0]["TraversalID"]
    else:
        member_id = params.get("member_id")
        traversal_id = params.get("traversal_id")

    algo_id = self.algorithm_id
    node_id = 0

    node_type_id = None
    asset_id = None

    if params.get("node_id"):
        node_id = params.get("node_id")

    if params.get("algo_id"):
        algo_id = params.get("algo_id")

    if params.get("previous"):
        direction = params.get("previous")
    elif params.get("q_info"):
        direction = "Rerender"
        node_type_id = 32
        asset_id = params.get("q_info")
    elif params.get("a_info"):
        direction = "Rerender"
        node_type_id = 64
        asset_id = params.get("a_info")
    elif params.get("return_summary"):
        direction = params.get("return_summary")
    else:
        direction = "Next"

    url = f"{e24_url}/" \
        + f"{direction}/{traversal_id}/{member_id}/" \
        + f"{algo_id}/{node_id}?callback=raw"

    for p in prms:
        url += f"&{p}={prms[p]}"

    r2 = requests.get(url)

    template = loader.get_template(
        "resources/assessment/server-assessment.html")

    context = r2.json()

    try:
        tags = context["Report"]["DispositionProperties"]["Tags"]
        resources = ResourcePage.objects.filter(
            hidden_tags__name__in=tags).filter(
                topic_tags__name__in=self.topic_tags.names())
    except:
        resources = []

    context["member_id"] = member_id
    context["traversal_id"] = traversal_id
    context["first_question"] = (node_id == 0)

    context["node_type_id"] = node_type_id
    context["asset_id"] = asset_id

    try:
        context['parent'] = self.get_parent().slug
        context['slug'] = self.slug
    except:
        context['parent'] = None
        context['slug'] = None

    context['resource_text'] = self.resource_text
    context['resources'] = resources
    context['heading'] = self.heading
    context['body'] = self.body
    context['finish_destination'] = "/"

    page = {}
    page['hero_image'] = self.hero_image
    page['header'] = self.title
    page['body'] = self.heading

    context['page'] = page

    if (self.seo_title):
        context['page_title'] = (self.seo_title + " | " +
                                 self.get_site().site_name)
    else:
        context['page_title'] = self.get_site().site_name

    if params.get("q_info") or params.get("a_info"):
        context["info"] = requests.get(
            f"{e24_url}/Info/" +
            f"{traversal_id}/{member_id}?callback=raw&@NodeTypeID=" +
            f"{node_type_id}&@AssetID={asset_id}").json()

    return HttpResponse(
        template.render(context=base_context(context, self), request=request))
    def serve(self, request, *args, **kwargs):
        if request.method == 'POST':
            form = self.get_form(request.POST, page=self, user=request.user)

            if form.is_valid():
                self.process_form_submission(form)

                # render the landing_page
                # TODO: It is much better to redirect to it
                return render(request, self.get_landing_page_template(request),
                              self.get_context(request))
        else:
            form = self.get_form(page=self, user=request.user)

        # custom
        custom_form = []

        vals = FormField.objects.all().filter(page_id=form.page.id)

        for val in vals:
            dict = {}
            dict['before_input'] = val.before_input
            dict['after_input'] = val.after_input
            dict['field_type'] = val.field_type
            dict['default_value'] = val.default_value
            dict['label'] = val.label

            # TODO: look at a nicer way to fetch errors and submitted_val

            request_dict = parse_qs(request.body.decode('utf-8'))

            if val.field_type == 'radio':
                choices_list = []
                choices = val.choices.split(",")
                for choice in choices:
                    try:
                        submitted_val = request_dict[val.label][0]
                    except:
                        submitted_val = False
                    checked = 'checked' if choice == submitted_val else ''
                    choices_list.append({'val': choice, 'checked': checked})
                dict['choices'] = choices_list
            else:
                try:
                    dict['submitted_val'] = request_dict[val.label][0]
                except:
                    dict['submitted_val'] = ''

            dict['required'] = 'required' if val.required else ''

            if form.errors:
                try:
                    dict['errors'] = form.errors.as_data()[val.label][0]
                except:
                    pass

            custom_form.append(dict)

        context = self.get_context(request)
        context['form'] = form
        context['custom_form'] = custom_form  # custom

        return render(request, self.get_template(request),
                      base_context(context, self))
    def get_context(self, request):
        context = super(Assessment, self).get_context(request)

        return base_context(context, self)
Exemple #10
0
def custom_serve(self, request, *args, **kwargs):
    response = {}

    try:
        request_dict = parse_qs(request.body.decode('utf-8'))
    except:
        request_dict = request.POST.dict()

        if (request_dict.get('feedback') == ''
                or request_dict.get('suggestion') == ''):
            error = True
        else:
            error = False

        response['error'] = error

        if request_dict.get('id'):
            id = request_dict['id']
            response['id'] = id

            try:
                cookie = request.COOKIES['ldmw_session']
            except:
                cookie = uid.hex

            resource = get_resource(id, cookie)

            if request_dict.get('short_resource') == "true":
                template = 'resources/short_resource.html'
            else:
                template = 'resources/resource.html'

            csrf = request.POST.get('csrfmiddlewaretoken')

            response['result'] = render_to_string(
                template, {
                    'page': resource,
                    'like_feedback_submitted': True,
                    'error': error,
                    'csrf_token': csrf
                })

            response['visited_result'] = render_to_string(
                'resources/single_visited.html', {
                    'v': resource,
                    'like_feedback_submitted': True,
                    'error': error,
                    'csrf_token': csrf
                })

        self.process_form_submission(request_dict)

        return JsonResponse(response)

    if request.method == 'POST':
        form = self.get_form(request.POST, page=self, user=request.user)
        if form.is_valid():
            self.process_form_submission(request_dict)

            if valid_request(request_dict):
                return handle_request(request, request_dict,
                                      HttpResponseRedirect, messages)

    else:
        form = self.get_form(page=self, user=request.user)

    if str(self.__class__.__name__) == 'Main':
        form_fields = MainFormField.objects.all().filter(page_id=form.page.id)
    elif str(self.__class__.__name__) == 'Home':
        form_fields = FormField.objects.all().filter(page_id=form.page.id)
    else:
        form_fields = None

    project_info_block = ProjectInfoBlock.objects.all()

    path_components = kwargs.get('path_components', [])

    path_components = list(
        map(lambda x: " ".join(x.split("-")), path_components))

    context = self.get_context(request, path_components=path_components)
    context['form'] = form
    context['project_info_block'] = project_info_block

    like_feedback_submitted = False
    for m in messages.get_messages(request):
        if m.__str__()[:14] == 'like_feedback_':
            like_feedback_submitted = True

    context['like_feedback_submitted'] = like_feedback_submitted
    context['custom_form'] = generate_custom_form(
        form_fields, request_dict, messages.get_messages(request))  # custom

    return render(request, self.get_template(request),
                  base_context(context, self))