diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index 5f4c100aa3b..58e957f6930 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -2688,6 +2688,7 @@ class mod_assign_external extends external_api { $userdetails['submitted'] = $record->submitted; $userdetails['requiregrading'] = $record->requiregrading; $userdetails['grantedextension'] = $record->grantedextension; + $userdetails['submissionstatus'] = $record->submissionstatus; if (!empty($record->groupid)) { $userdetails['groupid'] = $record->groupid; } @@ -2765,6 +2766,8 @@ class mod_assign_external extends external_api { 'submitted' => new external_value(PARAM_BOOL, 'have they submitted their assignment'), 'requiregrading' => new external_value(PARAM_BOOL, 'is their submission waiting for grading'), 'grantedextension' => new external_value(PARAM_BOOL, 'have they been granted an extension'), + 'submissionstatus' => new external_value(PARAM_ALPHA, 'The submission status (new, draft, reopened or submitted). + Empty when not submitted.', VALUE_OPTIONAL), 'groupid' => new external_value(PARAM_INT, 'for group assignments this is the group id', VALUE_OPTIONAL), 'groupname' => new external_value(PARAM_NOTAGS, 'for group assignments this is the group name', VALUE_OPTIONAL), ]; @@ -2831,6 +2834,7 @@ class mod_assign_external extends external_api { 'submitted' => $participant->submitted, 'requiregrading' => $participant->requiregrading, 'grantedextension' => $participant->grantedextension, + 'submissionstatus' => $participant->submissionstatus, 'blindmarking' => $assign->is_blind_marking(), 'allowsubmissionsfromdate' => $assign->get_instance($userid)->allowsubmissionsfromdate, 'duedate' => $assign->get_instance($userid)->duedate, @@ -2880,6 +2884,8 @@ class mod_assign_external extends external_api { 'duedatestr' => new external_value(PARAM_TEXT, 'duedate for the user'), 'groupid' => new external_value(PARAM_INT, 'for group assignments this is the group id', VALUE_OPTIONAL), 'groupname' => new external_value(PARAM_NOTAGS, 'for group assignments this is the group name', VALUE_OPTIONAL), + 'submissionstatus' => new external_value(PARAM_ALPHA, 'The submission status (new, draft, reopened or submitted). + Empty when not submitted.', VALUE_OPTIONAL), 'user' => $userdescription, )); } diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 74459605667..b6276676a77 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -2058,6 +2058,7 @@ class assign { $participants[$userid]->submitted = false; $participants[$userid]->requiregrading = false; $participants[$userid]->grantedextension = false; + $participants[$userid]->submissionstatus = ''; } foreach ($records as $userid => $submissioninfo) { @@ -2065,6 +2066,7 @@ class assign { $submitted = false; $requiregrading = false; $grantedextension = false; + $submissionstatus = !empty($submissioninfo->status) ? $submissioninfo->status : ''; if (!empty($submissioninfo->stime) && $submissioninfo->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED) { $submitted = true; @@ -2083,6 +2085,7 @@ class assign { $participants[$userid]->submitted = $submitted; $participants[$userid]->requiregrading = $requiregrading; $participants[$userid]->grantedextension = $grantedextension; + $participants[$userid]->submissionstatus = $submissionstatus; if ($this->get_instance()->teamsubmission) { $group = $this->get_submission_group($userid); if ($group) { diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index 1042ecc4bc7..29636b3f17c 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -2475,6 +2475,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertFalse($result['submitted']); $this->assertFalse($result['requiregrading']); $this->assertFalse($result['grantedextension']); + $this->assertEquals('', $result['submissionstatus']); $this->assertTrue($result['blindmarking']); // Make sure we don't get any additional info. $this->assertArrayNotHasKey('user', $result); @@ -2529,6 +2530,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertTrue($result['submitted']); $this->assertTrue($result['requiregrading']); $this->assertFalse($result['grantedextension']); + $this->assertEquals(ASSIGN_SUBMISSION_STATUS_SUBMITTED, $result['submissionstatus']); $this->assertFalse($result['blindmarking']); // Make sure we don't get any additional info. $this->assertArrayNotHasKey('user', $result); @@ -2714,6 +2716,7 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertEquals($student->phone2, $participant['phone2']); $this->assertEquals($student->department, $participant['department']); $this->assertEquals($student->institution, $participant['institution']); + $this->assertEquals('', $participant['submissionstatus']); $this->assertArrayHasKey('enrolledcourses', $participant); $participants = mod_assign_external::list_participants($assignment->id, 0, '', 0, 0, false, false, true); diff --git a/mod/assign/upgrade.txt b/mod/assign/upgrade.txt index 4a703e6a509..d5b4cfbb962 100644 --- a/mod/assign/upgrade.txt +++ b/mod/assign/upgrade.txt @@ -4,6 +4,8 @@ This files describes API changes in the assign code. * Renderer (renderer.php) has been moved from mod root to classes/output/ to be more PSR compliant. * Class assign_header has been moved from renderable.php to classes/ouput/assign_header.php * Class assign_submion_status has been moved from renderable.php to classes/ouput/assign_submion_status.php +* The external functions mod_assign_external::list_participants and mod_assign_external::get_participant now return a new field + "submissionstatus" indicating the submission status (new, draft, reopened or submitted). Empty when not submitted. === 3.9 ===