Пример #1
0
    def post(self, request, *args, **kwargs):
        survey = kwargs.get("survey")
        if survey.need_logged_user and not request.user.is_authenticated:
            return redirect("%s?next=%s" % (settings.LOGIN_URL, request.path))

        form = ResponseForm(request.POST,
                            survey=survey,
                            user=request.user,
                            step=kwargs.get("step", 0))
        categories = form.current_categories()

        if not survey.editable_answers and form.response is not None:
            LOGGER.info(
                "Redirects to survey list after trying to edit non editable answer."
            )
            return redirect(reverse("survey-list"))
        context = {
            "response_form": form,
            "survey": survey,
            "categories": categories
        }
        if form.is_valid():
            if form.clean_choices(survey):
                return self.treat_valid_form(form, kwargs, request, survey)
        return self.handle_invalid_form(context, form, request, survey)
Пример #2
0
 def treat_valid_form(self, form, kwargs, request, survey):
     session_key = "survey_%s" % (kwargs["id"], )
     if session_key not in request.session:
         request.session[session_key] = {}
     for key, value in list(form.cleaned_data.items()):
         request.session[session_key][key] = value
         request.session.modified = True
     next_url = form.next_step_url()
     response = None
     if survey.display_by_question:
         # when it's the last step
         if not form.has_next_step():
             save_form = ResponseForm(request.session[session_key],
                                      survey=survey,
                                      user=request.user)
             if save_form.is_valid():
                 response = save_form.save()
             else:
                 LOGGER.warning(
                     "A step of the multipage form failed but should have been discovered before."
                 )
     else:
         response = form.save()
     # if there is a next step
     if next_url is not None:
         return redirect(next_url)
     del request.session[session_key]
     if response is None:
         return redirect(reverse("survey-list"))
     next_ = request.session.get("next", None)
     if next_ is not None:
         if "next" in request.session:
             del request.session["next"]
         return redirect(next_)
     return redirect("survey-confirmation", uuid=response.interview_uuid)
Пример #3
0
    def post(self, request, *args, **kwargs):
        survey = get_object_or_404(Survey, is_published=True, id=kwargs['id'])
        if survey.need_logged_user and not request.user.is_authenticated:
            return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
        categories = Category.objects.filter(survey=survey).order_by('order')
        video = get_object_or_404(Video, id=request.POST.get("videoID"))
        form = ResponseForm(request.POST,
                            survey=survey,
                            video=video,
                            user=request.user,
                            step=kwargs.get('step', 0))
        context = {
            'response_form': form,
            'survey': survey,
            'categories': categories,
            'video': video
        }
        if form.is_valid():
            session_key = 'survey_%s' % (kwargs['id'], )
            if session_key not in request.session:
                request.session[session_key] = {}
            for key, value in list(form.cleaned_data.items()):
                request.session[session_key][key] = value
                request.session.modified = True

            next_url = form.next_step_url()
            response = None
            if survey.display_by_question:
                if not form.has_next_step():
                    save_form = ResponseForm(request.session[session_key],
                                             video=video,
                                             survey=survey,
                                             user=request.user)
                    response = save_form.save()
            else:
                response = form.save()

            if next_url is not None:
                return redirect(next_url)
            else:
                del request.session[session_key]
                if response is None:
                    return redirect('/')
                else:
                    next_ = request.session.get('next', None)
                    if next_ is not None:
                        if 'next' in request.session:
                            del request.session['next']
                        return redirect(next_)
                    else:
                        return redirect('survey-confirmation',
                                        uuid=response.interview_uuid)
        if survey.template is not None and len(survey.template) > 4:
            template_name = survey.template
        else:
            if survey.display_by_question:
                template_name = 'survey/survey.html'
            else:
                template_name = 'survey/one_page_survey.html'
        return render(request, template_name, context)
Пример #4
0
    def post(self, request, *args, **kwargs):
        # @todo dedup, this is just copy/pasted from SurveyDetail
        question = get_object_or_404(Question, id=kwargs["id"])
        survey = question.survey
        if survey.need_logged_user and not request.user.is_authenticated:
            return redirect("%s?next=%s" % (settings.LOGIN_URL, request.path))
        categories = Category.objects.filter(survey=survey).order_by("order")
        form = ResponseForm(request.POST,
                            survey=survey,
                            user=request.user,
                            step=kwargs.get("step", 0))
        context = {
            "response_form": form,
            "survey": survey,
            "categories": categories
        }
        if form.is_valid():
            session_key = "survey_%s" % (kwargs["id"], )
            if session_key not in request.session:
                request.session[session_key] = {}
            for key, value in list(form.cleaned_data.items()):
                request.session[session_key][key] = value
                request.session.modified = True

            # pass the question id so other questions are not updated
            form.poll_question_id = question.id

            next_url = form.next_step_url()
            response = None
            if survey.display_by_question:
                if not form.has_next_step():
                    save_form = ResponseForm(request.session[session_key],
                                             survey=survey,
                                             user=request.user)
                    response = save_form.save()
            else:
                response = form.save()

            messages.success(
                self.request,
                _('Your answer has been saved, thank you for the feedback!'))

            if next_url is not None:
                return redirect(next_url)
            else:
                del request.session[session_key]
                if response is None:
                    return redirect("/")
                else:
                    next_ = request.session.get("next", None)
                    if next_ is not None:
                        if "next" in request.session:
                            del request.session["next"]
                        return redirect(next_)
                    else:
                        return redirect("dashboard")

        raise Exception('Error')
Пример #5
0
    def post(self, request, *args, **kwargs):
        survey = get_object_or_404(Survey, is_published=True, id=kwargs['id'])
        if survey.need_logged_user and not request.user.is_authenticated():
            return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
        categories = Category.objects.filter(survey=survey).order_by('order')
        form = ResponseForm(request.POST, survey=survey, user=request.user,
                            step=kwargs.get('step', 0))
        context = {'response_form': form, 'survey': survey,
                   'categories': categories}
        if form.is_valid():
            session_key = 'survey_%s' % (kwargs['id'],)
            if session_key not in request.session:
                request.session[session_key] = {}
            for key, value in form.cleaned_data.items():
                request.session[session_key][key] = value
                request.session.modified = True

            next_url = form.next_step_url()
            response = None
            if survey.display_by_question:
                form.has_next_step()
                if not form.has_next_step():
                    response = form.save()
                    '''
                    save_form = ResponseForm(request.session[session_key],
                                             survey=survey, user=request.user)
                    response = save_form.save()
                    '''
                else:
                    response = form.save()
            else:
                response = form.save()

            if next_url is not None:
                return redirect(next_url)
            else:
                del request.session[session_key]
                if response is None:
                    return redirect('/')
                else:
                    next_ = request.session.get('next', None)
                    if next_ is not None:
                        if 'next' in request.session:
                            del request.session['next']
                        return redirect(next_)
                    else:
                        return redirect('survey-confirmation',
                                        uuid=response.interview_uuid)

        if survey.template is not None and len(survey.template) > 4:
            template_name = survey.template
        else:
            if survey.display_by_question:
                template_name = 'survey/survey.html'
            else:
                template_name = 'survey/one_page_survey.html'
        return render(request, template_name, context)
Пример #6
0
    def post(self, request, *args, **kwargs):
        survey = get_object_or_404(Survey, is_published=True, id=kwargs["id"])
        if survey.need_logged_user and not request.user.is_authenticated:
            return redirect("%s?next=%s" % (settings.LOGIN_URL, request.path))
        categories = Category.objects.filter(survey=survey).order_by("order")
        form = ResponseForm(request.POST,
                            survey=survey,
                            user=request.user,
                            step=kwargs.get("step", 0))
        context = {
            "response_form": form,
            "survey": survey,
            "categories": categories
        }
        if form.is_valid():
            session_key = "survey_%s" % (kwargs["id"], )
            if session_key not in request.session:
                request.session[session_key] = {}
            for key, value in list(form.cleaned_data.items()):
                request.session[session_key][key] = value
                request.session.modified = True

            next_url = form.next_step_url()
            response = None
            if survey.display_by_question:
                if not form.has_next_step():
                    save_form = ResponseForm(request.session[session_key],
                                             survey=survey,
                                             user=request.user)
                    response = save_form.save()
            else:
                response = form.save()

            if next_url is not None:
                return redirect(next_url)
            else:
                del request.session[session_key]
                if response is None:
                    return redirect("/")
                else:
                    next_ = request.session.get("next", None)
                    if next_ is not None:
                        if "next" in request.session:
                            del request.session["next"]
                        return redirect(next_)
                    else:
                        return redirect("survey-confirmation",
                                        uuid=response.interview_uuid)
        if survey.template is not None and len(survey.template) > 4:
            template_name = survey.template
        else:
            if survey.display_by_question:
                template_name = "survey/survey.html"
            else:
                template_name = "survey/one_page_survey.html"
        return render(request, template_name, context)
 def post(self, request, *args, **kwargs):
     survey = get_object_or_404(Survey, is_published=True, id=kwargs["id"])
     if survey.need_logged_user and not request.user.is_authenticated:
         return redirect("%s?next=%s" % (settings.LOGIN_URL, request.path))
     categories = Category.objects.filter(survey=survey).order_by("order")
     form = ResponseForm(request.POST, survey=survey, user=request.user, step=kwargs.get("step", 0))
     if not survey.editable_answers and form.response is not None:
         LOGGER.info("Redirects to survey list after trying to edit non editable answer.")
         return redirect(reverse("survey-list"))
     context = {"response_form": form, "survey": survey, "categories": categories}
     if form.is_valid():
         return self.treat_valid_form(form, kwargs, request, survey)
     return self.handle_invalid_form(context, form, request, survey)
Пример #8
0
def survey_detail(request, p_id):
    survey = Survey.objects.get(id=p_id)
    category_items = Category.objects.filter(survey=survey)
    categories = [c.name for c in category_items]
    print "categories for this survey:"
    print categories
    if request.method == "POST":
        form = ResponseForm(request.POST, survey=survey)
        if form.is_valid():
            response = form.save()
            return HttpResponseRedirect("/confirm/%s" % response.interview_uuid)
    else:
        form = ResponseForm(survey=survey)
        print form
        # TODO sort by category
    return render(request, "survey.html", {"response_form": form, "survey": survey, "categories": categories})
Пример #9
0
    def treat_valid_form(self, form, kwargs, request, survey):
        session_key = "survey_%s" % (kwargs["slug"],)
        if session_key not in request.session:
            request.session[session_key] = {}
        for key, value in list(form.cleaned_data.items()):
            request.session[session_key][key] = value
            request.session.modified = True
        next_url = form.next_step_url()
        response = None
        query_params = urllib.parse.parse_qs(request.GET.urlencode())
        # logger.info(query_params)
        if "custom_user" in query_params.keys():
            custom_user = query_params["custom_user"][0]
            query_params["custom_user"] = custom_user
        else:
            custom_user = ""

        if survey.is_all_in_one_page():
            response = form.save()
        else:
            # when it's the last step
            if not form.has_next_step():
                save_form = ResponseForm(
                    request.session[session_key], survey=survey, user=request.user, custom_user=custom_user
                )
                if save_form.is_valid():
                    response = save_form.save()
                else:
                    LOGGER.warning("A step of the multipage form failed but should have been discovered before.")
        # if there is a next step
        if next_url is not None:
            return redirect(next_url)
        del request.session[session_key]
        if response is None:
            return redirect(reverse("survey-list"))
        next_ = request.session.get("next", None)
        if next_ is not None:
            if "next" in request.session:
                del request.session["next"]
            return redirect(next_)
        return redirect("survey:survey-confirmation", uuid=response.interview_uuid)
Пример #10
0
    def post(self, request, *args, **kwargs):
        survey = kwargs.get("survey")
        if survey.need_logged_user and not request.user.is_authenticated:
            return redirect("%s?next=%s" % (settings.LOGIN_URL, request.path))

        query_params = urllib.parse.parse_qs(request.GET.urlencode())
        if "custom_user" in query_params.keys():
            custom_user = query_params["custom_user"][0]
            query_params["custom_user"] = custom_user
        else:
            custom_user = ""

        form = ResponseForm(
            request.POST, survey=survey, user=request.user, step=kwargs.get("step", 0), custom_user=custom_user
        )
        categories = form.current_categories()

        if not survey.editable_answers and form.response is not None:
            LOGGER.info("Redirects to survey list after trying to edit non editable answer.")
            return redirect(reverse("survey-list"))
        context = {"response_form": form, "survey": survey, "categories": categories}
        if form.is_valid():
            return self.treat_valid_form(form, kwargs, request, survey)
        return self.handle_invalid_form(context, form, request, survey)
    def post(self, request, *args, **kwargs):
        survey = get_object_or_404(Survey, is_published=True, id=kwargs["id"])
        if survey.need_logged_user and not request.user.is_authenticated:
            return redirect("%s?next=%s" % (settings.LOGIN_URL, request.path))
        categories = Category.objects.filter(survey=survey).order_by("order")
        form = ResponseForm(
            request.POST, survey=survey, user=request.user, step=kwargs.get("step", 0)
        )
        if not survey.editable_answers and form.response is not None:
            LOGGER.info(
                "Redirects to survey list after trying to edit non editable answer."
            )
            return redirect(reverse("survey-list"))
        context = {"response_form": form, "survey": survey, "categories": categories}
        if form.is_valid():
            session_key = "survey_%s" % (kwargs["id"],)
            if session_key not in request.session:
                request.session[session_key] = {}
            for key, value in list(form.cleaned_data.items()):
                request.session[session_key][key] = value
                request.session.modified = True

            next_url = form.next_step_url()
            response = None
            if survey.display_by_question:
                # when it's the last step
                if not form.has_next_step():
                    save_form = ResponseForm(
                        request.session[session_key], survey=survey, user=request.user
                    )
                    if save_form.is_valid():
                        response = save_form.save()
                    else:
                        LOGGER.warning(
                            "A step of the multipage form failed \
                            but should have been discovered before."
                        )
            else:
                response = form.save()

            # if there is a next step
            if next_url is not None:
                return redirect(next_url)
            else:
                del request.session[session_key]
                if response is None:
                    return redirect(reverse("survey-list"))
                else:
                    next_ = request.session.get("next", None)
                    if next_ is not None:
                        if "next" in request.session:
                            del request.session["next"]
                        return redirect(next_)
                    else:
                        return redirect(
                            "survey-confirmation", uuid=response.interview_uuid
                        )
        else:
            LOGGER.info("Non valid form: <%s>", form)
        if survey.template is not None and len(survey.template) > 4:
            template_name = survey.template
        else:
            if survey.display_by_question:
                template_name = "survey/survey.html"
            else:
                template_name = "survey/one_page_survey.html"
        return render(request, template_name, context)