diff --git a/mod/scorm/classes/external.php b/mod/scorm/classes/external.php index 39cadcf3712..38502828a25 100644 --- a/mod/scorm/classes/external.php +++ b/mod/scorm/classes/external.php @@ -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; diff --git a/mod/scorm/tests/externallib_test.php b/mod/scorm/tests/externallib_test.php index 17baf3514d1..d034c0c1d9b 100644 --- a/mod/scorm/tests/externallib_test.php +++ b/mod/scorm/tests/externallib_test.php @@ -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);