diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index f1d2d9b84db..5c2100559c7 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -8064,14 +8064,14 @@ class assign { // Will not apply update if user does not have permission to assign this workflow state. if (!$gradingdisabled && $this->update_user_flags($flags)) { - if ($state == ASSIGN_MARKING_WORKFLOW_STATE_RELEASED) { - // Update Gradebook. - $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); - } + // Update Gradebook. + $grade = $this->get_user_grade($userid, true); + $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/events_test.php b/mod/assign/tests/events_test.php index 9b6eb99fdb3..305763947f7 100644 --- a/mod/assign/tests/events_test.php +++ b/mod/assign/tests/events_test.php @@ -426,24 +426,34 @@ class assign_events_testcase extends advanced_testcase { $assign->testable_process_set_batch_marking_workflow_state($student->id, ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW); $events = $sink->get_events(); - $this->assertCount(1, $events); - $event = reset($events); - $this->assertInstanceOf('\mod_assign\event\workflow_state_updated', $event); - $this->assertEquals($assign->get_context(), $event->get_context()); - $this->assertEquals($assign->get_instance()->id, $event->objectid); - $this->assertEquals($student->id, $event->relateduserid); - $this->assertEquals($teacher->id, $event->userid); - $this->assertEquals(ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW, $event->other['newstate']); - $expected = array( - $assign->get_course()->id, - 'assign', - 'set marking workflow state', - 'view.php?id=' . $assign->get_course_module()->id, - get_string('setmarkingworkflowstateforlog', 'assign', array('id' => $student->id, - 'fullname' => fullname($student), 'state' => ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW)), - $assign->get_course_module()->id - ); - $this->assertEventLegacyLogData($expected, $event); + $eventcount = 0; + foreach ($events as $event) { + if ($event instanceof \mod_assign\event\submission_graded) { + $eventcount++; + $this->assertInstanceOf('\mod_assign\event\submission_graded', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + } + if ($event instanceof \mod_assign\event\workflow_state_updated) { + $eventcount++; + $this->assertInstanceOf('\mod_assign\event\workflow_state_updated', $event); + $this->assertEquals($assign->get_context(), $event->get_context()); + $this->assertEquals($assign->get_instance()->id, $event->objectid); + $this->assertEquals($student->id, $event->relateduserid); + $this->assertEquals($teacher->id, $event->userid); + $this->assertEquals(ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW, $event->other['newstate']); + $expected = array( + $assign->get_course()->id, + 'assign', + 'set marking workflow state', + 'view.php?id=' . $assign->get_course_module()->id, + get_string('setmarkingworkflowstateforlog', 'assign', array('id' => $student->id, + 'fullname' => fullname($student), 'state' => ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW)), + $assign->get_course_module()->id + ); + $this->assertEventLegacyLogData($expected, $event); + } + } + $this->assertEquals(2, $eventcount); $sink->close(); // Test setting workflow state in apply_grade_to_user.