示例#1
0
文件: views.py 项目: e-valuation/EvaP
def render_vote_page(request,
                     evaluation,
                     preview,
                     for_rendering_in_modal=False):
    form_groups = get_vote_page_form_groups(request, evaluation, preview)

    assert preview or not all(form.is_valid()
                              for form_group in form_groups.values()
                              for form in form_group)

    evaluation_form_group = form_groups.pop(evaluation.general_contribution,
                                            default=[])

    contributor_form_groups = [(
        contribution.contributor,
        contribution.label,
        form_group,
        any(form.errors for form in form_group),
        textanswers_visible_to(contribution),
    ) for contribution, form_group in form_groups.items()]
    evaluation_form_group_top = [
        questions_form for questions_form in evaluation_form_group
        if questions_form.questionnaire.is_above_contributors
    ]
    evaluation_form_group_bottom = [
        questions_form for questions_form in evaluation_form_group
        if questions_form.questionnaire.is_below_contributors
    ]
    if not contributor_form_groups:
        evaluation_form_group_top += evaluation_form_group_bottom
        evaluation_form_group_bottom = []

    template_data = dict(
        errors_exist=any(
            any(form.errors for form in form_group) for form_group in [
                *(form_groups.values()), evaluation_form_group_top,
                evaluation_form_group_bottom
            ]),
        evaluation_form_group_top=evaluation_form_group_top,
        evaluation_form_group_bottom=evaluation_form_group_bottom,
        contributor_form_groups=contributor_form_groups,
        evaluation=evaluation,
        small_evaluation_size_warning=evaluation.num_participants <=
        settings.SMALL_COURSE_SIZE,
        preview=preview,
        success_magic_string=SUCCESS_MAGIC_STRING,
        success_redirect_url=reverse("student:index"),
        for_rendering_in_modal=for_rendering_in_modal,
        general_contribution_textanswers_visible_to=textanswers_visible_to(
            evaluation.general_contribution),
        text_answer_warnings=TextAnswerWarning.objects.all(),
    )
    return render(request, "student_vote.html", template_data)
示例#2
0
    def test_correct_contributors_and_delegate_count_are_shown_in_textanswer_visibility_info(self):
        textanswers = [
            self.general_contribution_textanswer, self.responsible1_textanswer, self.responsible2_textanswer,
            self.contributor_own_textanswer, self.contributor_general_textanswer
        ]
        visible_to = [textanswers_visible_to(textanswer.contribution) for textanswer in textanswers]
        users_seeing_contribution = [(set(), set()) for _ in range(len(textanswers))]

        for user in UserProfile.objects.all():
            represented_users = [user] + list(user.represented_users.all())
            for i in range(len(textanswers)):
                if can_textanswer_be_seen_by(user, represented_users, textanswers[i], 'full'):
                    if can_textanswer_be_seen_by(user, [user], textanswers[i], 'full'):
                        users_seeing_contribution[i][0].add(user)
                    else:
                        users_seeing_contribution[i][1].add(user)

        for i in range(len(textanswers)):
            self.assertCountEqual(visible_to[i][0], users_seeing_contribution[i][0])

        expected_delegate_counts = [
            2,  # delegate1, delegate2
            2,  # delegate1, contributor_general
            0,
            1,  # delegate1
            1,  # delegate2
        ]

        for i in range(len(textanswers)):
            self.assertTrue(visible_to[i][1] == len(users_seeing_contribution[i][1]) == expected_delegate_counts[i])
示例#3
0
    def test_contributors_and_delegate_count_in_textanswer_visibility_info(self):
        textanswers = [
            self.general_contribution_textanswer, self.responsible1_textanswer, self.responsible2_textanswer,
            self.contributor_own_textanswer, self.contributor_general_textanswer
        ]
        visible_to = [textanswers_visible_to(textanswer.contribution) for textanswer in textanswers]
        users_seeing_contribution = [(set(), set()) for _ in range(len(textanswers))]

        for user in UserProfile.objects.all():
            represented_users = [user] + list(user.represented_users.all())
            for i, textanswer in enumerate(textanswers):
                if can_textanswer_be_seen_by(user, represented_users, textanswer, 'full'):
                    if can_textanswer_be_seen_by(user, [user], textanswer, 'full'):
                        users_seeing_contribution[i][0].add(user)
                    else:
                        users_seeing_contribution[i][1].add(user)

        for i in range(len(textanswers)):
            self.assertCountEqual(visible_to[i][0], users_seeing_contribution[i][0])

        expected_delegate_counts = [
            2,  # delegate1, delegate2
            2,  # delegate1, contributor_general
            0,
            1,  # delegate1
            1,  # delegate2
        ]

        for i in range(len(textanswers)):
            self.assertTrue(visible_to[i][1] == len(users_seeing_contribution[i][1]) == expected_delegate_counts[i])
示例#4
0
文件: views.py 项目: fsr-itse/EvaP
def get_valid_form_groups_or_render_vote_page(request, evaluation, preview, for_rendering_in_modal=False):
    contributions_to_vote_on = evaluation.contributions.all()
    # prevent a user from voting on themselves
    if not preview:
        contributions_to_vote_on = contributions_to_vote_on.exclude(contributor=request.user)

    form_groups = OrderedDict()
    for contribution in contributions_to_vote_on:
        questionnaires = contribution.questionnaires.all()
        if not questionnaires.exists():
            continue
        form_groups[contribution] = [QuestionnaireVotingForm(request.POST or None, contribution=contribution, questionnaire=questionnaire) for questionnaire in questionnaires]

    if all(all(form.is_valid() for form in form_group) for form_group in form_groups.values()):
        assert not preview
        return form_groups, None

    evaluation_form_group = form_groups.pop(evaluation.general_contribution)

    contributor_form_groups = [(contribution.contributor, contribution.label, form_group, any(form.errors for form in form_group), textanswers_visible_to(contribution)) for contribution, form_group in form_groups.items()]
    evaluation_form_group_top = [questions_form for questions_form in evaluation_form_group if questions_form.questionnaire.is_above_contributors]
    evaluation_form_group_bottom = [questions_form for questions_form in evaluation_form_group if questions_form.questionnaire.is_below_contributors]
    if not contributor_form_groups:
        evaluation_form_group_top += evaluation_form_group_bottom
        evaluation_form_group_bottom = []

    template_data = dict(
        errors_exist=any(any(form.errors for form in form_group) for form_group in form_groups.values()),
        evaluation_form_group_top=evaluation_form_group_top,
        evaluation_form_group_bottom=evaluation_form_group_bottom,
        contributor_form_groups=contributor_form_groups,
        evaluation=evaluation,
        small_evaluation_size_warning=evaluation.num_participants <= settings.SMALL_COURSE_SIZE,
        preview=preview,
        vote_end_datetime=evaluation.vote_end_datetime,
        hours_left_for_evaluation=evaluation.time_left_for_evaluation.seconds // 3600,
        minutes_left_for_evaluation=(evaluation.time_left_for_evaluation.seconds // 60) % 60,
        success_magic_string=SUCCESS_MAGIC_STRING,
        success_redirect_url=reverse('student:index'),
        evaluation_ends_soon=evaluation.evaluation_ends_soon(),
        for_rendering_in_modal=for_rendering_in_modal,
        general_contribution_textanswers_visible_to=textanswers_visible_to(evaluation.general_contribution),
    )
    return None, render(request, "student_vote.html", template_data)
示例#5
0
文件: views.py 项目: bissssss1/EvapP
def get_valid_form_groups_or_render_vote_page(request, evaluation, preview, for_rendering_in_modal=False):
    contributions_to_vote_on = evaluation.contributions.all()
    # prevent a user from voting on themselves
    if not preview:
        contributions_to_vote_on = contributions_to_vote_on.exclude(contributor=request.user)

    form_groups = OrderedDict()
    for contribution in contributions_to_vote_on:
        questionnaires = contribution.questionnaires.all()
        if not questionnaires.exists():
            continue
        form_groups[contribution] = [QuestionnaireVotingForm(request.POST or None, contribution=contribution, questionnaire=questionnaire) for questionnaire in questionnaires]

    if all(all(form.is_valid() for form in form_group) for form_group in form_groups.values()):
        assert not preview
        return form_groups, None

    evaluation_form_group = form_groups.pop(evaluation.general_contribution)

    contributor_form_groups = [(contribution.contributor, contribution.label, form_group, any(form.errors for form in form_group), textanswers_visible_to(contribution)) for contribution, form_group in form_groups.items()]
    evaluation_form_group_top = [questions_form for questions_form in evaluation_form_group if questions_form.questionnaire.is_above_contributors]
    evaluation_form_group_bottom = [questions_form for questions_form in evaluation_form_group if questions_form.questionnaire.is_below_contributors]
    if not contributor_form_groups:
        evaluation_form_group_top += evaluation_form_group_bottom
        evaluation_form_group_bottom = []

    template_data = dict(
        errors_exist=any(any(form.errors for form in form_group) for form_group in [*(form_groups.values()), evaluation_form_group_top, evaluation_form_group_bottom]),
        evaluation_form_group_top=evaluation_form_group_top,
        evaluation_form_group_bottom=evaluation_form_group_bottom,
        contributor_form_groups=contributor_form_groups,
        evaluation=evaluation,
        small_evaluation_size_warning=evaluation.num_participants <= settings.SMALL_COURSE_SIZE,
        preview=preview,
        success_magic_string=SUCCESS_MAGIC_STRING,
        success_redirect_url=reverse('student:index'),
        for_rendering_in_modal=for_rendering_in_modal,
        general_contribution_textanswers_visible_to=textanswers_visible_to(evaluation.general_contribution),
        text_answer_warnings=TextAnswerWarning.objects.all(),
    )
    return None, render(request, "student_vote.html", template_data)
示例#6
0
 def test_text_answer_visible_to_non_contributing_responsible(self):
     self.assertIn(
         self.responsible_without_contribution,
         textanswers_visible_to(
             self.general_contribution_textanswer.contribution)[0],
     )
示例#7
0
 def test_text_answer_visible_to_non_contributing_responsible(self):
     self.assertIn(self.responsible_without_contribution, textanswers_visible_to(self.general_contribution_textanswer.contribution)[0])