SCORM MDL-27036 enable AICC HACP

This commit is contained in:
Dan Marsden 2011-11-05 15:21:19 +13:00
parent 735de1c276
commit ba0e91a281
11 changed files with 200 additions and 47 deletions

View File

@ -33,32 +33,47 @@ $command = required_param('command', PARAM_ALPHA);
$sessionid = required_param('session_id', PARAM_ALPHANUM);
$aiccdata = optional_param('aicc_data', '', PARAM_RAW);
$cfg_scorm = get_config('scorm');
$url = new moodle_url('/mod/scorm/aicc.php', array('command'=>$command, 'session_id'=>$sessionid));
if ($aiccdata !== 0) {
$url->param('aicc_data', $aiccdata);
}
$PAGE->set_url($url);
require_login();
if (empty($cfg_scorm->allowaicchacp)) {
require_login();
if (!confirm_sesskey($sessionid)) {
print_error('invalidsesskey');
}
$aiccuser = $USER;
$scormsession = $SESSION->scorm;
} else {
$scormsession = scorm_aicc_confirm_hacp_session($sessionid);
if (empty($scormsession)) {
print_error('invalidhacpsession', 'scorm');
}
$aiccuser = $DB->get_record('user', array('id'=>$scormsession->userid), 'id,username,lastname,firstname', MUST_EXIST);
}
if (!empty($command) && confirm_sesskey($sessionid)) {
if (!empty($command)) {
$command = strtolower($command);
if (isset($SESSION->scorm_scoid)) {
$scoid = $SESSION->scorm_scoid;
if (isset($scormsession->scoid)) {
$scoid = $scormsession->scoid;
} else {
print_error('cannotcallscript');
}
$mode = 'normal';
if (isset($SESSION->scorm_mode)) {
$mode = $SESSION->scorm_mode;
if (isset($scormsession->scormmode)) {
$mode = $scormsession->scormmode;
}
$status = 'Not Initialized';
if (isset($SESSION->scorm_status)) {
$status = $SESSION->scorm_status;
if (isset($scormsession->scormstatus)) {
$status = $scormsession->scormstatus;
}
if (isset($SESSION->scorm_attempt)) {
$attempt = $SESSION->scorm_attempt;
if (isset($scormsession->attempt)) {
$attempt = $scormsession->attempt;
} else {
$attempt = 1;
}
@ -84,20 +99,20 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
switch ($command) {
case 'getparam':
if ($status == 'Not Initialized') {
$SESSION->scorm_status = 'Running';
$scormsession->scormstatus = 'Running';
$status = 'Running';
}
if ($status != 'Running') {
echo "error=101\r\nerror_text=Terminated\r\n";
} else {
if ($usertrack=scorm_get_tracks($scoid, $USER->id, $attempt)) {
if ($usertrack=scorm_get_tracks($scoid, $aiccuser->id, $attempt)) {
$userdata = $usertrack;
} else {
$userdata->status = '';
$userdata->score_raw = '';
}
$userdata->student_id = $USER->username;
$userdata->student_name = $USER->lastname .', '. $USER->firstname;
$userdata->student_id = $aiccuser->username;
$userdata->student_name = $aiccuser->lastname .', '. $aiccuser->firstname;
$userdata->mode = $mode;
if ($userdata->mode == 'normal') {
$userdata->credit = 'credit';
@ -135,10 +150,10 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
}
if (isset($userdata->{'cmi.core.lesson_status'})) {
echo 'Lesson_Status='.$userdata->{'cmi.core.lesson_status'}.$userdata->entry."\r\n";
$SESSION->scorm_lessonstatus = $userdata->{'cmi.core.lesson_status'};
$scormsession->scorm_lessonstatus = $userdata->{'cmi.core.lesson_status'};
} else {
echo 'Lesson_Status=not attempted'.$userdata->entry."\r\n";
$SESSION->scorm_lessonstatus = 'not attempted';
$scormsession->scorm_lessonstatus = 'not attempted';
}
if (isset($userdata->{'cmi.core.score.raw'})) {
$max = '';
@ -183,8 +198,8 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
if (!empty($aiccdata) && has_capability('mod/scorm:savetrack', get_context_instance(CONTEXT_MODULE, $cm->id))) {
$initlessonstatus = 'not attempted';
$lessonstatus = 'not attempted';
if (isset($SESSION->scorm_lessonstatus)) {
$initlessonstatus = $SESSION->scorm_lessonstatus;
if (isset($scormsession->scorm_lessonstatus)) {
$initlessonstatus = $scormsession->scorm_lessonstatus;
}
$score = '';
$datamodel['lesson_location'] = 'cmi.core.lesson_location';
@ -203,7 +218,7 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
$element = $datamodel[$element];
switch ($element) {
case 'cmi.core.lesson_location':
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $element, $value);
break;
case 'cmi.core.lesson_status':
$statuses = array(
@ -239,13 +254,13 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
}
if (empty($value) || isset($exites[$value])) {
$subelement = 'cmi.core.exit';
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $subelement, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $subelement, $value);
}
$value = trim(strtolower($values[0]));
$value = $value[0];
if (isset($statuses[$value]) && ($mode == 'normal')) {
$value = $statuses[$value];
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $element, $value);
}
$lessonstatus = $value;
break;
@ -254,23 +269,23 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
if ((count($values) > 1) && ($values[1] >= $values[0]) && is_numeric($values[1])) {
$subelement = 'cmi.core.score.max';
$value = trim($values[1]);
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $subelement, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $subelement, $value);
if ((count($values) == 3) && ($values[2] <= $values[0]) && is_numeric($values[2])) {
$subelement = 'cmi.core.score.min';
$value = trim($values[2]);
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $subelement, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $subelement, $value);
}
}
$value = '';
if (is_numeric($values[0])) {
$value = trim($values[0]);
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $element, $value);
}
$score = $value;
break;
case 'cmi.core.session_time':
$SESSION->scorm_session_time = $value;
$scormsession->sessiontime = $value;
break;
}
}
@ -283,13 +298,13 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
next($datarows);
}
$value = rawurlencode($value);
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, $element, $value);
}
}
}
if (($mode == 'browse') && ($initlessonstatus == 'not attempted')) {
$lessonstatus = 'browsed';
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, 'cmi.core.lesson_status', 'browsed');
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, 'cmi.core.lesson_status', 'browsed');
}
if ($mode == 'normal') {
if ($sco = scorm_get_sco($scoid)) {
@ -302,7 +317,7 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
}
}
}
$id = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, 'cmi.core.lesson_status', $lessonstatus);
$id = scorm_insert_track($aiccuser->id, $scorm->id, $sco->id, $attempt, 'cmi.core.lesson_status', $lessonstatus);
}
}
}
@ -360,32 +375,32 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
break;
case 'exitau':
if ($status == 'Running') {
if (isset($SESSION->scorm_session_time) && ($SESSION->scorm_session_time != '')) {
if ($track = $DB->get_record('scorm_scoes_track', array("userid"=>$USER->id,
if (isset($scormsession->sessiontime) && ($scormsession->sessiontime != '')) {
if ($track = $DB->get_record('scorm_scoes_track', array("userid"=>$aiccuser->id,
"scormid"=>$scorm->id,
"scoid"=>$sco->id,
"attempt"=>$attempt,
"element"=>'cmi.core.total_time'))) {
// Add session_time to total_time
$value = scorm_add_time($track->value, $SESSION->scorm_session_time);
$value = scorm_add_time($track->value, $scormsession->sessiontime);
$track->value = $value;
$track->timemodified = time();
$DB->update_record('scorm_scoes_track', $track);
} else {
$track = new stdClass();
$track->userid = $USER->id;
$track->userid = $aiccuser->id;
$track->scormid = $scorm->id;
$track->scoid = $sco->id;
$track->element = 'cmi.core.total_time';
$track->value = $SESSION->scorm_session_time;
$track->value = $scormsession->sessiontime;
$track->attempt = $attempt;
$track->timemodified = time();
$id = $DB->insert_record('scorm_scoes_track', $track);
}
scorm_update_grades($scorm, $USER->id);
scorm_update_grades($scorm, $aiccuser->id);
}
$SESSION->scorm_status = 'Terminated';
$SESSION->scorm_session_time = '';
$scormsession->scormstatus = 'Terminated';
$scormsession->session_time = '';
echo "error=0\r\nerror_text=Successful\r\n";
} else if ($status == 'Terminated') {
echo "error=1\r\nerror_text=Terminated\r\n";
@ -405,6 +420,13 @@ if (!empty($command) && confirm_sesskey($sessionid)) {
echo "error=3\r\nerror_text=Invalid Session ID\r\n";
}
}
if (empty($cfg_scorm->allowaicchacp)) {
$SESSION->scorm = $scormsession;
} else {
$scormsession->timemodified = time();
$DB->update_record('scorm_aicc_session', $scormsession);
}
$aiccresponse = ob_get_contents();
scorm_debug_log_write("aicc", "HACP Response:\r\n$aiccresponse", $scoid);
ob_end_flush();

View File

@ -341,3 +341,51 @@ function scorm_parse_aicc($scorm) {
return true;
}
/**
* Given a scormid creates an AICC Session record to allow HACP
*
* @param int $scormid - id from scorm table
* @return string hacpsession
*/
function scorm_aicc_get_hacp_session($scormid) {
global $USER, $DB, $SESSION;
$cfg_scorm = get_config('scorm');
if (empty($cfg_scorm->allowaicchacp)) {
return false;
}
$now = time();
$hacpsession = $SESSION->scorm;
$hacpsession->scormid = $scormid;
$hacpsession->hacpsession = random_string(10);
$hacpsession->userid = $USER->id;
$hacpsession->timecreated = $now;
$hacpsession->timemodified = $now;
$DB->insert_record('scorm_aicc_session', $hacpsession);
return $hacpsession->hacpsession;
}
/**
* Check the hacp_session for whether it is valid.
*
* @param string $hacpsession The hacpsession value to check (optional). Normally leave this blank
* and this function will do required_param('sesskey', ...).
* @return mixed - false if invalid, otherwise returns record from scorm_aicc_session table.
*/
function scorm_aicc_confirm_hacp_session($hacpsession) {
global $DB;
$cfg_scorm = get_config('scorm');
if (empty($cfg_scorm->allowaicchacp)) {
return false;
}
$time = time()-($cfg_scorm->aicchacptimeout * 60);
$sql = "hacpsession = ? AND timemodified > ?";
$hacpsession = $DB->get_record_select('scorm_aicc_session', $sql, array($hacpsession, $time));
if (!empty($hacpsession)) { //update timemodified as this is still an active session - resets the timeout.
$hacpsession->timemodified = time();
$DB->update_record('scorm_aicc_session', $hacpsession);
}
return $hacpsession;
}

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="mod/scorm/db" VERSION="20110731" COMMENT="XMLDB file for Moodle mod/scorm"
<XMLDB PATH="mod/scorm/db" VERSION="20111105" COMMENT="XMLDB file for Moodle mod/scorm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
@ -179,7 +179,7 @@
<KEY NAME="scorm_rolluprule_scoid" TYPE="foreign" FIELDS="scoid" REFTABLE="scorm_scoes" REFFIELDS="id" COMMENT="The relative sco" PREVIOUS="scorm_rolluprule_uniq"/>
</KEYS>
</TABLE>
<TABLE NAME="scorm_seq_rolluprulecond" COMMENT="SCORM2004 sequencing rule" PREVIOUS="scorm_seq_rolluprule">
<TABLE NAME="scorm_seq_rolluprulecond" COMMENT="SCORM2004 sequencing rule" PREVIOUS="scorm_seq_rolluprule" NEXT="scorm_aicc_session">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="scoid"/>
<FIELD NAME="scoid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="id" NEXT="rollupruleid"/>
@ -194,5 +194,27 @@
<KEY NAME="scorm_rolluprulecond_rolluprule" TYPE="foreign" FIELDS="rollupruleid" REFTABLE="scorm_seq_rolluprule" REFFIELDS="id" COMMENT="The relative rolluprule" PREVIOUS="scorm_rolluprulecond_scoid"/>
</KEYS>
</TABLE>
<TABLE NAME="scorm_aicc_session" COMMENT="Used by AICC HACP to store session information" PREVIOUS="scorm_seq_rolluprulecond">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="userid"/>
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="id from user table" PREVIOUS="id" NEXT="scormid"/>
<FIELD NAME="scormid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="id from scorm table" PREVIOUS="userid" NEXT="hacpsession"/>
<FIELD NAME="hacpsession" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" COMMENT="sessionid used to authenticate AICC HACP communication" PREVIOUS="scormid" NEXT="scoid"/>
<FIELD NAME="scoid" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="id from scorm_scoes table" PREVIOUS="hacpsession" NEXT="scormmode"/>
<FIELD NAME="scormmode" TYPE="char" LENGTH="50" NOTNULL="false" SEQUENCE="false" PREVIOUS="scoid" NEXT="scormstatus"/>
<FIELD NAME="scormstatus" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" PREVIOUS="scormmode" NEXT="attempt"/>
<FIELD NAME="attempt" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" PREVIOUS="scormstatus" NEXT="lessonstatus"/>
<FIELD NAME="lessonstatus" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" PREVIOUS="attempt" NEXT="sessiontime"/>
<FIELD NAME="sessiontime" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" PREVIOUS="lessonstatus" NEXT="timecreated"/>
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="time this session was created" PREVIOUS="sessiontime" NEXT="timemodified"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="time this session was last used" PREVIOUS="timecreated"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="scormid"/>
<KEY NAME="scormid" TYPE="foreign" FIELDS="scormid" REFTABLE="scorm" REFFIELDS="id" PREVIOUS="primary" NEXT="userid"/>
<KEY NAME="userid" TYPE="foreign" FIELDS="userid" REFTABLE="user" REFFIELDS="id" PREVIOUS="scormid"/>
</KEYS>
</TABLE>
</TABLES>
</XMLDB>

View File

@ -571,6 +571,39 @@ function xmldb_scorm_upgrade($oldversion) {
upgrade_mod_savepoint(true, 2011080100, 'scorm');
}
if ($oldversion < 2011110502) {
// Define table scorm_aicc_session to be created
$table = new xmldb_table('scorm_aicc_session');
// Adding fields to table scorm_aicc_session
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0');
$table->add_field('scormid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0');
$table->add_field('hacpsession', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
$table->add_field('scoid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, '0');
$table->add_field('scormmode', XMLDB_TYPE_CHAR, '50', null, null, null, null);
$table->add_field('scormstatus', XMLDB_TYPE_CHAR, '255', null, null, null, null);
$table->add_field('attempt', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null);
$table->add_field('lessonstatus', XMLDB_TYPE_CHAR, '255', null, null, null, null);
$table->add_field('sessiontime', XMLDB_TYPE_CHAR, '255', null, null, null, null);
$table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0');
$table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0');
// Adding keys to table scorm_aicc_session
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
$table->add_key('scormid', XMLDB_KEY_FOREIGN, array('scormid'), 'scorm', array('id'));
$table->add_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
// Conditionally launch create table for scorm_aicc_session
if (!$dbman->table_exists($table)) {
$dbman->create_table($table);
}
// scorm savepoint reached
upgrade_mod_savepoint(true, 2011110502, 'scorm');
}
return true;
}

View File

@ -23,7 +23,10 @@
*/
$string['toc'] = 'TOC';
$string['navigation'] = 'Navigation';
$string['aicchacptimeout'] = 'AICC HACP Timeout';
$string['aicchacptimeout_desc'] = 'Length of time in minutes that an AICC HACP session can remain open';
$string['aicchacpkeepsessiondata'] = 'AICC HACP session data';
$string['aicchacpkeepsessiondata_desc'] = 'Length of time in days to keep the AICC HACP session data (a high setting will fill up the table with old data but may be useful when debugging)';
$string['activation'] = 'Activation';
$string['activityloading'] = 'You will be automatically redirected to the activity in';
$string['activitypleasewait'] = 'Activity loading, please wait ...';
@ -33,6 +36,8 @@ $string['allowapidebug'] = 'Activate API debug and tracing (set the capture mask
$string['allowtypeexternal'] = 'Enable external package type';
$string['allowtypeimsrepository'] = 'Enable IMS package type';
$string['allowtypelocalsync'] = 'Enable downloaded package type';
$string['allowtypeaicchacp'] = 'Enable AICC HACP';
$string['allowtypeaicchacp_desc'] = 'If enabled this allows AICC HACP external communication without requiring user login for post requests from the external AICC package';
$string['apidebugmask'] = 'API debug capture mask - use a simple regex on &lt;username&gt;:&lt;activityname&gt; e.g. admin:.* will debug for admin user only';
$string['areacontent'] = 'Content files';
$string['areapackage'] = 'Package file';
@ -161,6 +166,7 @@ $string['interactionstype'] = 'Type of question';
$string['interactionsweight'] = 'Weight assigned to the element';
$string['interactionslearnerresponse'] = 'Learner\'s Response';
$string['invalidactivity'] = 'Scorm activity is incorrect';
$string['invalidhacpsession'] = 'Invalid HACP Session';
$string['invalidmanifestresource'] = 'WARNING: The following resources were referenced in your manifest but couldn\'t be found:';
$string['last'] = 'Last accessed on';
$string['lastaccess'] = 'Last access';

View File

@ -504,6 +504,13 @@ function scorm_cron () {
foreach ($scormsupdate as $scormupdate) {
scorm_parse($scormupdate, true);
}
//now clear out AICC session table with old session data
$cfg_scorm = get_config('scorm');
if (!empty($cfg_scorm->allowaicchacp)) {
$expiretime = time() - ($cfg_scorm->aicchacpkeepsessiondata*24*60*60);
$DB->delete_records_select('scorm_aicc_session', 'WHERE timemodified < ?', array($expiretime));
}
}
return true;

View File

@ -108,11 +108,16 @@ if ((isset($sco->parameters) && (!empty($sco->parameters))) || ($version == 'AIC
}
if ($version == 'AICC') {
require_once("$CFG->dirroot/mod/scorm/datamodels/aicclib.php");
$aicc_sid = scorm_aicc_get_hacp_session($scorm->id);
if (empty($aicc_sid)) {
$aicc_sid = sesskey();
}
$sco_params = '';
if (isset($sco->parameters) && (!empty($sco->parameters))) {
$sco_params = '&'. $sco->parameters;
}
$launcher = $sco->launch.$connector.'aicc_sid='.sesskey().'&aicc_url='.$CFG->wwwroot.'/mod/scorm/aicc.php'.$sco_params;
$launcher = $sco->launch.$connector.'aicc_sid='.$aicc_sid.'&aicc_url='.$CFG->wwwroot.'/mod/scorm/aicc.php'.$sco_params;
} else {
if (isset($sco->parameters) && (!empty($sco->parameters))) {
$launcher = $sco->launch.$connector.$sco->parameters;

View File

@ -170,10 +170,10 @@ if ($mode == 'browse') {
}
$orgstr = '&currentorg='.$currentorg;
$SESSION->scorm_scoid = $sco->id;
$SESSION->scorm_status = 'Not Initialized';
$SESSION->scorm_mode = $mode;
$SESSION->scorm_attempt = $attempt;
$SESSION->scorm->scoid = $sco->id;
$SESSION->scorm->scormstatus = 'Not Initialized';
$SESSION->scorm->scormmode = $mode;
$SESSION->scorm->attempt = $attempt;
// Mark module viewed
$completion = new completion_info($course);

View File

@ -123,6 +123,16 @@ if ($ADMIN->fulltree) {
$settings->add(new admin_setting_configcheckbox('scorm/allowtypeimsrepository', get_string('allowtypeimsrepository', 'scorm'), '', 0));
$settings->add(new admin_setting_configcheckbox('scorm/allowaicchacp', get_string('allowtypeaicchacp', 'scorm'), get_string('allowtypeaicchacp_desc', 'scorm'), 0));
$settings->add(new admin_setting_configtext('scorm/aicchacptimeout',
get_string('aicchacptimeout', 'scorm'), get_string('aicchacptimeout_desc', 'scorm'),
30, PARAM_INT));
$settings->add(new admin_setting_configtext('scorm/aicchacpkeepsessiondata',
get_string('aicchacpkeepsessiondata', 'scorm'), get_string('aicchacpkeepsessiondata_desc', 'scorm'),
1, PARAM_INT));
$settings->add(new admin_setting_configcheckbox('scorm/forcejavascript', get_string('forcejavascript', 'scorm'), get_string('forcejavascript_desc', 'scorm'), 1));
$settings->add(new admin_setting_configcheckbox('scorm/allowapidebug', get_string('allowapidebug', 'scorm'), '', 0));

View File

@ -23,6 +23,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$module->version = 2011080100; // The (date) version of this module
$module->version = 2011110502; // The (date) version of this module
$module->requires = 2010080300; // The version of Moodle that is required
$module->cron = 300; // How often should cron check this module (seconds)?

View File

@ -60,8 +60,8 @@ require_login($course->id, false, $cm);
$context = get_context_instance(CONTEXT_COURSE, $course->id);
$contextmodule = get_context_instance(CONTEXT_MODULE, $cm->id);
if (isset($SESSION->scorm_scoid)) {
unset($SESSION->scorm_scoid);
if (isset($SESSION->scorm)) {
unset($SESSION->scorm);
}
$strscorms = get_string("modulenameplural", "scorm");