From bf2a7643ef1d2a11b7d5af9e8932090835b2df8c Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Thu, 17 Jun 2021 17:43:36 +0100 Subject: [PATCH] MDL-71945 mod_assign: Remove unneccesary call to assign_update_grades() The update_grade() call achieves the same thing with additional checks. --- mod/assign/locallib.php | 10 +- .../bulk_release_anon_submissions.feature | 156 ++++++++++++++++++ 2 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 mod/assign/tests/behat/bulk_release_anon_submissions.feature diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 037b2692f04..0340384af32 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -8255,12 +8255,20 @@ class assign { if (!$gradingdisabled && $this->update_user_flags($flags)) { // Update Gradebook. $grade = $this->get_user_grade($userid, true); + // Fetch any feedback for this student. + $gradebookplugin = $this->get_admin_config()->feedback_plugin_for_gradebook; + $gradebookplugin = str_replace('assignfeedback_', '', $gradebookplugin); + $plugin = $this->get_feedback_plugin_by_type($gradebookplugin); + if ($plugin && $plugin->is_enabled() && $plugin->is_visible()) { + $grade->feedbacktext = $plugin->text_for_gradebook($grade); + $grade->feedbackformat = $plugin->format_for_gradebook($grade); + $grade->feedbackfiles = $plugin->files_for_gradebook($grade); + } $this->update_grade($grade); $assign = clone $this->get_instance(); $assign->cmidnumber = $this->get_course_module()->idnumber; // Set assign gradebook feedback plugin status. $assign->gradefeedbackenabled = $this->is_gradebook_feedback_enabled(); - assign_update_grades($assign, $userid); $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST); \mod_assign\event\workflow_state_updated::create_from_user($this, $user, $state)->trigger(); diff --git a/mod/assign/tests/behat/bulk_release_anon_submissions.feature b/mod/assign/tests/behat/bulk_release_anon_submissions.feature new file mode 100644 index 00000000000..cd0812bb490 --- /dev/null +++ b/mod/assign/tests/behat/bulk_release_anon_submissions.feature @@ -0,0 +1,156 @@ +@mod @mod_assign +Feature: Bulk released grades should not be sent to gradebook while submissions are anonymous. + In order to preserve student anonymity until identities are explicitly revealed + As a teacher + I should be able to bulk release grades for anonymous submissions via + marking workflow without the grades being pushed to the gradebook. + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + | student2 | Student | 2 | student2@example.com | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + | student2 | C1 | student | + # Add the assignment. + And I log in as "teacher1" + And I am on "Course 1" course homepage with editing mode on + And I add a "Assignment" to section "1" and I fill the form with: + | Assignment name | Test assignment name | + | Description | Test assignment description | + | Online text | 1 | + | File submissions | 0 | + | Use marking workflow | Yes | + | Anonymous submissions | Yes | + And I log out + # Add a submission. + And I log in as "student1" + And I am on "Course 1" course homepage + When I follow "Test assignment name" + Then I should not see "Feedback" + And I should see "Not marked" in the "Grading status" "table_row" + And I press "Add submission" + And I set the following fields to these values: + | Online text | I'm student1's submission | + And I press "Save changes" + And I log out + # Add another submission. + And I log in as "student2" + And I am on "Course 1" course homepage + When I follow "Test assignment name" + Then I should not see "Feedback" + And I should see "Not marked" in the "Grading status" "table_row" + And I press "Add submission" + And I set the following fields to these values: + | Online text | I'm student2's submission | + And I press "Save changes" + And I log out + # Mark the submissions. + And I log in as "teacher1" + And I am on "Course 1" course homepage + And I follow "Test assignment name" + And I navigate to "View all submissions" in current page administration + Then I should see "Not marked" in the "I'm student1's submission" "table_row" + And I click on "Grade" "link" in the "I'm student1's submission" "table_row" + And I set the field "Grade out of 100" to "50" + And I set the field "Marking workflow state" to "In review" + And I set the field "Feedback comments" to "Great job!" + And I set the field "Notify students" to "0" + And I press "Save changes" + And I follow "Test assignment name" + And I navigate to "View all submissions" in current page administration + Then I should see "Not marked" in the "I'm student2's submission" "table_row" + And I click on "Grade" "link" in the "I'm student2's submission" "table_row" + And I set the field "Grade out of 100" to "50" + And I set the field "Marking workflow state" to "In review" + And I set the field "Feedback comments" to "Great job!" + And I set the field "Notify students" to "0" + And I press "Save changes" + And I follow "Test assignment name" + And I navigate to "View all submissions" in current page administration + Then I should see "In review" in the "I'm student1's submission" "table_row" + And I should see "In review" in the "I'm student2's submission" "table_row" + + @javascript @_alert + Scenario: Grades are released in bulk before student identities are revealed. + When I set the field "selectall" to "1" + And I set the field "operation" to "Set marking workflow state" + And I click on "Go" "button" confirming the dialogue + Then I should not see "Student 1 (student1@example.com)" + And I should not see "Student 2 (student2@example.com)" + And I set the field "Marking workflow state" to "Released" + And I set the field "Notify students" to "No" + And I press "Save changes" + And I follow "Test assignment name" + And I navigate to "View all submissions" in current page administration + Then I should see "Released" in the "I'm student1's submission" "table_row" + And I should see "Released" in the "I'm student2's submission" "table_row" + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + And I navigate to "User report" in the course gradebook + Then I should not see "50" + And I should not see "Great job!" + And I log out + And I log in as "student2" + And I am on "Course 1" course homepage + And I navigate to "User report" in the course gradebook + Then I should not see "50" + And I should not see "Great job!" + And I log out + And I log in as "teacher1" + And I am on "Course 1" course homepage + And I follow "Test assignment name" + And I navigate to "View all submissions" in current page administration + And I set the field "Grading action" to "Reveal student identities" + And I press "Continue" + Then I should see "Released" in the "Student 1" "table_row" + And I should see "Released" in the "Student 2" "table_row" + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + And I navigate to "User report" in the course gradebook + Then I should see "50" + And I should see "Great job!" + And I log out + And I log in as "student2" + And I am on "Course 1" course homepage + And I navigate to "User report" in the course gradebook + Then I should see "50" + And I should see "Great job!" + + @javascript @_alert + Scenario: Grades are released in bulk after student identities are revealed. + When I set the field "Grading action" to "Reveal student identities" + And I press "Continue" + When I set the field "selectall" to "1" + And I set the field "operation" to "Set marking workflow state" + And I click on "Go" "button" confirming the dialogue + Then I should see "Student 1 (student1@example.com)" + And I should see "Student 2 (student2@example.com)" + And I set the field "Marking workflow state" to "Released" + And I set the field "Notify students" to "No" + And I press "Save changes" + And I follow "Test assignment name" + And I navigate to "View all submissions" in current page administration + Then I should see "Released" in the "Student 1" "table_row" + And I should see "Released" in the "Student 2" "table_row" + And I log out + And I log in as "student1" + And I am on "Course 1" course homepage + And I navigate to "User report" in the course gradebook + Then I should see "50" + And I should see "Great job!" + And I log out + And I log in as "student2" + And I am on "Course 1" course homepage + And I navigate to "User report" in the course gradebook + Then I should see "50" + And I should see "Great job!"