From 3cd76cbecc0c456ed96692a5541372948b533102 Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Thu, 7 Dec 2017 17:54:10 +1300 Subject: [PATCH] MDL-2051 mod_choice: Show info how choice results will be published --- mod/choice/lang/en/choice.php | 5 + mod/choice/tests/behat/publish_info.feature | 104 ++++++++++++++++++++ mod/choice/view.php | 36 ++++++- 3 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 mod/choice/tests/behat/publish_info.feature diff --git a/mod/choice/lang/en/choice.php b/mod/choice/lang/en/choice.php index 914256188cf..3a732cb4053 100644 --- a/mod/choice/lang/en/choice.php +++ b/mod/choice/lang/en/choice.php @@ -114,6 +114,11 @@ $string['publishafteranswer'] = 'Show results to students after they answer'; $string['publishafterclose'] = 'Show results to students only after the choice is closed'; $string['publishalways'] = 'Always show results to students'; $string['publishanonymous'] = 'Publish anonymous results, do not show student names'; +$string['publishinfoanonafter'] = 'Anonymous results will be published after you answer.'; +$string['publishinfoanonclose'] = 'Anonymous results will be published after the activity is closed.'; +$string['publishinfofullafter'] = 'Full results, showing everyone\'s choices, will be published after you answer.'; +$string['publishinfofullclose'] = 'Full results, showing everyone\'s choices, will be published after the activity is closed.'; +$string['publishinfonever'] = 'The results of this activity will not be published after you answer.'; $string['publishnames'] = 'Publish full results, showing names and their choices'; $string['publishnot'] = 'Do not publish results to students'; $string['removemychoice'] = 'Remove my choice'; diff --git a/mod/choice/tests/behat/publish_info.feature b/mod/choice/tests/behat/publish_info.feature new file mode 100644 index 00000000000..db815c03e35 --- /dev/null +++ b/mod/choice/tests/behat/publish_info.feature @@ -0,0 +1,104 @@ +@mod @mod_choice +Feature: A student can see how the results of the choice activity will be published + In order to put my mind at ease when it comes to answering a choice + As a student + I need to learn how my choice will be handled and published to the other course participants. + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And I log in as "teacher1" + And I am on "Course 1" course homepage with editing mode on + + Scenario: Results will not be published to the students + Given I add a "Choice" to section "1" and I fill the form with: + | Choice name | Choice 1 | + | Description | Choice Description | + | Publish results | Do not publish results to students | + | option[0] | Option 1 | + | option[1] | Option 2 | + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Choice 1" + Then I should see "The results of this activity will not be published after you answer." + + Scenario: Full results will be shown to the students after they answer + Given I add a "Choice" to section "1" and I fill the form with: + | Choice name | Choice 1 | + | Description | Choice Description | + | option[0] | Option 1 | + | option[1] | Option 2 | + | Publish results | Show results to students after they answer | + | Privacy of results | Publish full results, showing names and their choices | + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Choice 1" + Then I should see "Full results, showing everyone's choices, will be published after you answer." + + Scenario: Anonymous results will be shown to students after they answer + Given I add a "Choice" to section "1" and I fill the form with: + | Choice name | Choice 1 | + | Description | Choice Description | + | option[0] | Option 1 | + | option[1] | Option 2 | + | Publish results | Show results to students after they answer | + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Choice 1" + Then I should see "Anonymous results will be published after you answer." + + Scenario: Full results will be shown to students only after the choice is closed + Given I add a "Choice" to section "1" and I fill the form with: + | Choice name | Choice 1 | + | Description | Choice Description | + | Publish results | Show results to students only after the choice is closed | + | Privacy of results | Publish full results, showing names and their choices | + | option[0] | Option 1 | + | option[1] | Option 2 | + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Choice 1" + Then I should see "Full results, showing everyone's choices, will be published after the activity is closed." + + Scenario: Anonymous results will be shown to students only after the choice is closed + Given I add a "Choice" to section "1" and I fill the form with: + | Choice name | Choice 1 | + | Description | Choice Description | + | Publish results | Show results to students only after the choice is closed | + | option[0] | Option 1 | + | option[1] | Option 2 | + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Choice 1" + Then I should see "Anonymous results will be published after the activity is closed." + + Scenario: Results will always be shown to students + Given I add a "Choice" to section "1" and I fill the form with: + | Choice name | Choice 1 | + | Description | Choice Description | + | option[0] | Option 1 | + | option[1] | Option 2 | + | Publish results | Always show results to students | + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Choice 1" + Then I should not see "Full results, showing everyone's choices, will be published after you answer." + And I should not see "Full results, showing everyone's choices, will be published after the activity is closed." + And I should not see "Anonymous results will be published after you answer." + And I should not see "Anonymous results will be published after the activity is closed." + And I should not see "The results of this activity will not be published after you answer." diff --git a/mod/choice/view.php b/mod/choice/view.php index 332de9d5382..2d02d14ec46 100644 --- a/mod/choice/view.php +++ b/mod/choice/view.php @@ -164,8 +164,42 @@ if ((!empty($choice->timeopen)) && ($choice->timeopen > $timenow)) { } if ( (!$current or $choice->allowupdate) and $choiceopen and is_enrolled($context, NULL, 'mod/choice:choose')) { -// They haven't made their choice yet or updates allowed and choice is open + // Show information on how the results will be published to students. + $publishinfo = null; + switch ($choice->showresults) { + case CHOICE_SHOWRESULTS_NOT: + $publishinfo = get_string('publishinfonever', 'choice'); + break; + + case CHOICE_SHOWRESULTS_AFTER_ANSWER: + if ($choice->publish == CHOICE_PUBLISH_ANONYMOUS) { + $publishinfo = get_string('publishinfoanonafter', 'choice'); + } else { + $publishinfo = get_string('publishinfofullafter', 'choice'); + } + break; + + case CHOICE_SHOWRESULTS_AFTER_CLOSE: + if ($choice->publish == CHOICE_PUBLISH_ANONYMOUS) { + $publishinfo = get_string('publishinfoanonclose', 'choice'); + } else { + $publishinfo = get_string('publishinfofullclose', 'choice'); + } + break; + + default: + // No need to inform the user in the case of CHOICE_SHOWRESULTS_ALWAYS since it's already obvious that the results are + // being published. + break; + } + + // Show info if necessary. + if (!empty($publishinfo)) { + echo $OUTPUT->notification($publishinfo, 'info'); + } + + // They haven't made their choice yet or updates allowed and choice is open. $options = choice_prepare_options($choice, $USER, $cm, $allresponses); $renderer = $PAGE->get_renderer('mod_choice'); echo $renderer->display_options($options, $cm->id, $choice->display, $choice->allowmultiple);