コード例 #1
0
class SectionHandler:
    def __init__(self, schema, questionnaire_store, section_id, list_item_id,
                 language):
        self._schema = schema
        self._questionnaire_store = questionnaire_store
        self._section_id = section_id
        self._list_item_id = list_item_id
        self._language = language
        self._router = Router(
            schema,
            questionnaire_store.answer_store,
            questionnaire_store.list_store,
            questionnaire_store.progress_store,
            questionnaire_store.metadata,
        )
        if not self._is_valid_location():
            raise InvalidLocationException(
                f"location {self._section_id} is not valid")

        self.current_location = Location(
            section_id=self._section_id,
            list_name=self._schema.get_repeating_list_for_section(
                self._section_id),
            list_item_id=self._list_item_id,
        )

        self._routing_path = self._router.routing_path(
            section_id=self._section_id, list_item_id=self._list_item_id)

    def context(self):
        section_summary_context = SectionSummaryContext(
            self._language,
            self._schema,
            self._questionnaire_store.answer_store,
            self._questionnaire_store.list_store,
            self._questionnaire_store.progress_store,
            self._questionnaire_store.metadata,
        )
        return section_summary_context(self.current_location)

    def get_next_location_url(self):
        if self._schema.is_hub_enabled():
            return url_for(".get_questionnaire")
        return self._router.get_first_incomplete_location_in_survey_url()

    def get_previous_location_url(self):
        return self._router.get_last_location_in_section(
            self._routing_path).url()

    def get_resume_url(self):
        return self._router.get_section_resume_url(self._routing_path)

    def can_display_summary(self):
        return self._router.can_display_section_summary(
            self._section_id, self._list_item_id)

    def _is_valid_location(self):
        return self._section_id in self._router.enabled_section_ids
コード例 #2
0
def get_questionnaire(schema, questionnaire_store):
    router = Router(
        schema,
        questionnaire_store.answer_store,
        questionnaire_store.list_store,
        questionnaire_store.progress_store,
        questionnaire_store.metadata,
    )

    if not router.can_access_hub():
        redirect_location_url = router.get_first_incomplete_location_in_survey_url(
        )
        return redirect(redirect_location_url)

    if request.method == "POST":
        if router.is_survey_complete():
            submission_handler = SubmissionHandler(schema, questionnaire_store,
                                                   router.full_routing_path())
            submission_handler.submit_questionnaire()
            return redirect(url_for("post_submission.get_thank_you"))
        return redirect(router.get_first_incomplete_location_in_survey_url())

    language_code = get_session_store().session_data.language_code

    hub = HubContext(
        language=language_code,
        schema=schema,
        answer_store=questionnaire_store.answer_store,
        list_store=questionnaire_store.list_store,
        progress_store=questionnaire_store.progress_store,
        metadata=questionnaire_store.metadata,
    )

    hub_context = hub.get_context(router.is_survey_complete(),
                                  router.enabled_section_ids)

    return render_template("hub",
                           content=hub_context,
                           page_title=hub_context["title"])