diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 78a78f32a7a..54adce03e3b 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -2133,9 +2133,10 @@ class assign { * This means the submission modification time is more recent than the * grading modification time and the status is SUBMITTED. * + * @param mixed $currentgroup int|null the group for counting (if null the function will determine it) * @return int number of matching submissions */ - public function count_submissions_need_grading() { + public function count_submissions_need_grading($currentgroup = null) { global $DB; if ($this->get_instance()->teamsubmission) { @@ -2143,7 +2144,9 @@ class assign { return 0; } - $currentgroup = groups_get_activity_group($this->get_course_module(), true); + if ($currentgroup === null) { + $currentgroup = groups_get_activity_group($this->get_course_module(), true); + } list($esql, $params) = get_enrolled_sql($this->get_context(), 'mod/assign:submit', $currentgroup, true); $params['assignid'] = $this->get_instance()->id; @@ -2250,12 +2253,15 @@ class assign { * Load a count of submissions with a specified status. * * @param string $status The submission status - should match one of the constants + * @param mixed $currentgroup int|null the group for counting (if null the function will determine it) * @return int number of matching submissions */ - public function count_submissions_with_status($status) { + public function count_submissions_with_status($status, $currentgroup = null) { global $DB; - $currentgroup = groups_get_activity_group($this->get_course_module(), true); + if ($currentgroup === null) { + $currentgroup = groups_get_activity_group($this->get_course_module(), true); + } list($esql, $params) = get_enrolled_sql($this->get_context(), 'mod/assign:submit', $currentgroup, true); $params['assignid'] = $this->get_instance()->id; @@ -5322,13 +5328,13 @@ class assign { $summary = new assign_grading_summary($this->count_teams($activitygroup), $instance->submissiondrafts, - $this->count_submissions_with_status($draft), + $this->count_submissions_with_status($draft, $activitygroup), $this->is_any_submission_plugin_enabled(), - $this->count_submissions_with_status($submitted), + $this->count_submissions_with_status($submitted, $activitygroup), $instance->cutoffdate, $instance->duedate, $this->get_course_module()->id, - $this->count_submissions_need_grading(), + $this->count_submissions_need_grading($activitygroup), $instance->teamsubmission, $warnofungroupedusers, $this->can_grade()); @@ -5337,13 +5343,13 @@ class assign { $countparticipants = $this->count_participants($activitygroup); $summary = new assign_grading_summary($countparticipants, $instance->submissiondrafts, - $this->count_submissions_with_status($draft), + $this->count_submissions_with_status($draft, $activitygroup), $this->is_any_submission_plugin_enabled(), - $this->count_submissions_with_status($submitted), + $this->count_submissions_with_status($submitted, $activitygroup), $instance->cutoffdate, $instance->duedate, $this->get_course_module()->id, - $this->count_submissions_need_grading(), + $this->count_submissions_need_grading($activitygroup), $instance->teamsubmission, false, $this->can_grade()); diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index 8f6b82021ce..1e9923eb367 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -2021,8 +2021,9 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertEquals(1, $result['gradingsummary']['participantcount']); $this->assertEquals(0, $result['gradingsummary']['submissiondraftscount']); $this->assertEquals(1, $result['gradingsummary']['submissionsenabled']); - $this->assertEquals(1, $result['gradingsummary']['submissionssubmittedcount']); - $this->assertEquals(1, $result['gradingsummary']['submissionsneedgradingcount']); + $this->assertEquals(0, $result['gradingsummary']['submissiondraftscount']); + $this->assertEquals(1, $result['gradingsummary']['submissionssubmittedcount']); // One student from G1 submitted. + $this->assertEquals(1, $result['gradingsummary']['submissionsneedgradingcount']); // One student from G1 submitted. $this->assertFalse($result['gradingsummary']['warnofungroupedusers']); // Second group. @@ -2030,12 +2031,28 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_assign_external::get_submission_status_returns(), $result); $this->assertCount(0, $result['warnings']); $this->assertEquals(1, $result['gradingsummary']['participantcount']); + $this->assertEquals(0, $result['gradingsummary']['submissionssubmittedcount']); // G2 students didn't submit yet. + $this->assertEquals(0, $result['gradingsummary']['submissionsneedgradingcount']); // G2 students didn't submit yet. // Should return also 1 participant if we allow the function to auto-select the group. $result = mod_assign_external::get_submission_status($assign->get_instance()->id); $result = external_api::clean_returnvalue(mod_assign_external::get_submission_status_returns(), $result); $this->assertCount(0, $result['warnings']); $this->assertEquals(1, $result['gradingsummary']['participantcount']); + $this->assertEquals(0, $result['gradingsummary']['submissiondraftscount']); + $this->assertEquals(1, $result['gradingsummary']['submissionssubmittedcount']); // One student from G1 submitted. + $this->assertEquals(1, $result['gradingsummary']['submissionsneedgradingcount']); // One student from G1 submitted. + + // Now check draft submissions. + list($assign, $instance, $student1, $student2, $teacher, $g1, $g2) = $this->create_submission_for_testing_status(false); + $this->setUser($teacher); + $result = mod_assign_external::get_submission_status($assign->get_instance()->id, 0, $g1->id); + $result = external_api::clean_returnvalue(mod_assign_external::get_submission_status_returns(), $result); + $this->assertCount(0, $result['warnings']); + $this->assertEquals(1, $result['gradingsummary']['participantcount']); + $this->assertEquals(1, $result['gradingsummary']['submissiondraftscount']); // We have a draft submission. + $this->assertEquals(0, $result['gradingsummary']['submissionssubmittedcount']); // We have only draft submissions. + $this->assertEquals(0, $result['gradingsummary']['submissionsneedgradingcount']); // We have only draft submissions. } /** diff --git a/mod/assign/upgrade.txt b/mod/assign/upgrade.txt index e29849006b3..2a12439b11a 100644 --- a/mod/assign/upgrade.txt +++ b/mod/assign/upgrade.txt @@ -1,8 +1,8 @@ This files describes API changes in the assign code. === 3.5 === -* Functions assign:get_assign_grading_summary_renderable, assign:can_view_submission and mod_assign_external::get_submission_status - now admit an additional group parameter. +* Functions assign:get_assign_grading_summary_renderable, assign:can_view_submission, assign:count_submissions_with_status, + assign:count_submissions_need_grading and mod_assign_external::get_submission_status now admit an additional group parameter. This parameter can be used to force those functions to retrieve data only for the given group. === 3.4 ===