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)
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)
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)
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')
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)
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)
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})
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)
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)