示例#1
0
        $result = dirname($scorm->reference) . '/' . $launcher;
    } else {
        if ($scorm->scormtype === SCORM_TYPE_LOCAL && strtolower($scorm->reference) == 'imsmanifest.xml') {
            // This SCORM content sits in a repository that allows relative links.
            $result = "{$CFG->wwwroot}/pluginfile.php/{$context->id}/mod_scorm/imsmanifest/{$scorm->revision}/{$launcher}";
        } else {
            if ($scorm->scormtype === SCORM_TYPE_LOCAL or $scorm->scormtype === SCORM_TYPE_LOCALSYNC) {
                // Note: do not convert this to use get_file_url() or moodle_url()
                // SCORM does not work without slasharguments and moodle_url() encodes querystring vars.
                $result = "{$CFG->wwwroot}/pluginfile.php/{$context->id}/mod_scorm/content/{$scorm->revision}/{$launcher}";
            }
        }
    }
}
// Trigger a Sco launched event.
$event = \mod_scorm\event\sco_launched::create(array('objectid' => $sco->id, 'context' => $context, 'other' => array('instanceid' => $scorm->id, 'loadedcontent' => $result)));
$event->add_record_snapshot('course_modules', $cm);
$event->add_record_snapshot('scorm', $scorm);
$event->add_record_snapshot('scorm_scoes', $sco);
$event->trigger();
header('Content-Type: text/html; charset=UTF-8');
if ($sco->scormtype == 'asset') {
    // HTTP 302 Found => Moved Temporarily.
    header('Location: ' . $result);
    // Provide a short feedback in case of slow network connection.
    echo html_writer::start_tag('html');
    echo html_writer::tag('body', html_writer::tag('p', get_string('activitypleasewait', 'scorm')));
    echo html_writer::end_tag('html');
    exit;
}
// We expect a SCO: select which API are we looking for.
示例#2
0
 /** Tests for sco launched event.
  *
  * There is no api involved so the best we can do is test legacy data and validations by triggering event manually.
  */
 public function test_sco_launched_event()
 {
     $this->resetAfterTest();
     $event = \mod_scorm\event\sco_launched::create(array('objectid' => 2, 'context' => context_module::instance($this->eventcm->id), 'courseid' => $this->eventcourse->id, 'other' => array('loadedcontent' => 'url_to_content_that_was_laoded.php')));
     // Trigger and capture the event.
     $sink = $this->redirectEvents();
     $event->trigger();
     $events = $sink->get_events();
     $event = reset($events);
     // Check that the legacy log data is valid.
     $expected = array($this->eventcourse->id, 'scorm', 'launch', 'view.php?id=' . $this->eventcm->id, 'url_to_content_that_was_laoded.php', $this->eventcm->id);
     $this->assertEventLegacyLogData($expected, $event);
     $this->assertEventContextNotUsed($event);
     // Test validations.
     $this->setExpectedException('coding_exception');
     \mod_scorm\event\sco_launched::create(array('objectid' => $this->eventscorm->id, 'context' => context_module::instance($this->eventcm->id), 'courseid' => $this->eventcourse->id));
     $this->fail('Event \\mod_scorm\\event\\sco_launched is not validating "loadedcontent" properly');
 }
示例#3
0
/**
 * Trigger the scorm_launched event.
 *
 * @param  stdClass $scorm   scorm object
 * @param  stdClass $sco     sco object
 * @param  stdClass $cm      course module object
 * @param  stdClass $context context object
 * @param  string $scourl    SCO URL
 * @since Moodle 3.1
 */
function scorm_launch_sco($scorm, $sco, $cm, $context, $scourl) {

    $event = \mod_scorm\event\sco_launched::create(array(
        'objectid' => $sco->id,
        'context' => $context,
        'other' => array('instanceid' => $scorm->id, 'loadedcontent' => $scourl)
    ));
    $event->add_record_snapshot('course_modules', $cm);
    $event->add_record_snapshot('scorm', $scorm);
    $event->add_record_snapshot('scorm_scoes', $sco);
    $event->trigger();
}