MDL-51567 mod_scorm: Return warnings for invalid attempt numbers

In the external function get_scorm_sco_tracks
This commit is contained in:
Juan Leyva 2015-09-29 10:00:27 +02:00
parent 35d3e8b00b
commit 77496aa556
2 changed files with 29 additions and 6 deletions

View File

@ -550,15 +550,29 @@ class mod_scorm_external extends external_api {
$params['attempt'] = scorm_get_last_attempt($scorm->id, $user->id);
}
if ($scormtracks = scorm_get_tracks($sco->id, $user->id, $params['attempt'])) {
foreach ($scormtracks as $element => $value) {
$tracks[] = array(
'element' => $element,
'value' => $value,
);
$attempted = false;
if ($scormtracks = scorm_get_tracks($sco->id, $params['userid'], $params['attempt'])) {
// Check if attempted.
if ($scormtracks->status != '') {
$attempted = true;
foreach ($scormtracks as $element => $value) {
$tracks[] = array(
'element' => $element,
'value' => $value,
);
}
}
}
if (!$attempted) {
$warnings[] = array(
'item' => 'attempt',
'itemid' => $params['attempt'],
'warningcode' => 'notattempted',
'message' => get_string('notattempted', 'scorm')
);
}
$result = array();
$result['data']['attempt'] = $params['attempt'];
$result['data']['tracks'] = $tracks;

View File

@ -476,6 +476,7 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase {
// 7 default elements + 2 custom ones.
$this->assertCount(9, $result['data']['tracks']);
$this->assertEquals(1, $result['data']['attempt']);
$this->assertCount(0, $result['warnings']);
// Find our tracking data.
$found = 0;
foreach ($result['data']['tracks'] as $userdata) {
@ -488,6 +489,14 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase {
}
$this->assertEquals(2, $found);
// Try invalid attempt.
$result = mod_scorm_external::get_scorm_sco_tracks($sco->id, $student->id, 10);
$result = external_api::clean_returnvalue(mod_scorm_external::get_scorm_sco_tracks_returns(), $result);
$this->assertCount(0, $result['data']['tracks']);
$this->assertEquals(10, $result['data']['attempt']);
$this->assertCount(1, $result['warnings']);
$this->assertEquals('notattempted', $result['warnings'][0]['warningcode']);
// Capabilities check.
try {
mod_scorm_external::get_scorm_sco_tracks($sco->id, $otherstudent->id);