From ecf1a221dca013b5943fc66eb160e8410876f148 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Thu, 29 Aug 2019 19:46:48 +0100 Subject: [PATCH] MDL-66554 mod_scorm: Set module viewed in WS --- mod/scorm/classes/external.php | 8 +++++++- mod/scorm/tests/externallib_test.php | 20 +++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/mod/scorm/classes/external.php b/mod/scorm/classes/external.php index fa84cd67a2f..aa0313916ae 100644 --- a/mod/scorm/classes/external.php +++ b/mod/scorm/classes/external.php @@ -859,7 +859,9 @@ class mod_scorm_external extends external_api { * @throws moodle_exception */ public static function launch_sco($scormid, $scoid = 0) { - global $DB; + global $DB, $CFG; + + require_once($CFG->libdir . '/completionlib.php'); $params = self::validate_parameters(self::launch_sco_parameters(), array( @@ -882,6 +884,10 @@ class mod_scorm_external extends external_api { throw new moodle_exception('cannotfindsco', 'scorm'); } + // Mark module viewed. + $completion = new completion_info($course); + $completion->set_module_viewed($cm); + list($sco, $scolaunchurl) = scorm_get_sco_and_launch_url($scorm, $params['scoid'], $context); // Trigger the SCO launched event. scorm_launch_sco($scorm, $sco, $cm, $context, $scolaunchurl); diff --git a/mod/scorm/tests/externallib_test.php b/mod/scorm/tests/externallib_test.php index 59782979304..b6ac0fddf75 100644 --- a/mod/scorm/tests/externallib_test.php +++ b/mod/scorm/tests/externallib_test.php @@ -46,13 +46,15 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase { * Set up for every test */ public function setUp() { - global $DB; + global $DB, $CFG; $this->resetAfterTest(); $this->setAdminUser(); + $CFG->enablecompletion = 1; // Setup test data. - $this->course = $this->getDataGenerator()->create_course(); - $this->scorm = $this->getDataGenerator()->create_module('scorm', array('course' => $this->course->id)); + $this->course = $this->getDataGenerator()->create_course(array('enablecompletion' => 1)); + $this->scorm = $this->getDataGenerator()->create_module('scorm', array('course' => $this->course->id), + array('completion' => 2, 'completionview' => 1)); $this->context = context_module::instance($this->scorm->cmid); $this->cm = get_coursemodule_from_instance('scorm', $this->scorm->id); @@ -849,8 +851,8 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_scorm_external::launch_sco_returns(), $result); $events = $sink->get_events(); - $this->assertCount(1, $events); - $event = array_shift($events); + $this->assertCount(3, $events); + $event = array_pop($events); // Checking that the event contains the expected values. $this->assertInstanceOf('\mod_scorm\event\sco_launched', $event); @@ -860,6 +862,14 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase { $this->assertEventContextNotUsed($event); $this->assertNotEmpty($event->get_name()); + $event = array_shift($events); + $this->assertInstanceOf('\core\event\course_module_completion_updated', $event); + + // Check completion status. + $completion = new completion_info($this->course); + $completiondata = $completion->get_data($this->cm); + $this->assertEquals(COMPLETION_VIEWED, $completiondata->completionstate); + // Invalid SCO. try { mod_scorm_external::launch_sco($this->scorm->id, -1);