From 77496aa556a29153bd424c31a998a982662895d1 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Tue, 29 Sep 2015 10:00:27 +0200 Subject: [PATCH] MDL-51567 mod_scorm: Return warnings for invalid attempt numbers In the external function get_scorm_sco_tracks --- mod/scorm/classes/external.php | 26 ++++++++++++++++++++------ mod/scorm/tests/externallib_test.php | 9 +++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/mod/scorm/classes/external.php b/mod/scorm/classes/external.php index 2457ac3c35c..96f887eda11 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 6f59c8b536a..694aeaeee60 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);