From e6402b54ad985d5114ae3cc28f04c573bbb0dcca Mon Sep 17 00:00:00 2001 From: Dan Marsden Date: Mon, 15 Aug 2011 13:50:06 +1200 Subject: [PATCH] MDL-28933 SCORM use a global function to check SCORM version to make sure all methods of storing SCORM version are checked. --- mod/scorm/api.php | 4 ++-- mod/scorm/datamodels/debug.js.php | 10 ++++---- mod/scorm/lib.php | 40 +++++++++++++++++++++++++++++++ mod/scorm/loadSCO.php | 4 ++-- mod/scorm/loaddatamodel.php | 2 +- mod/scorm/locallib.php | 13 +++++----- mod/scorm/report/basic/report.php | 2 +- mod/scorm/userreport.php | 2 +- 8 files changed, 58 insertions(+), 19 deletions(-) diff --git a/mod/scorm/api.php b/mod/scorm/api.php index 9972aafcafe..88875ced7ca 100644 --- a/mod/scorm/api.php +++ b/mod/scorm/api.php @@ -60,7 +60,7 @@ require_login($course->id, false, $cm); if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) { //according to SCORM 2004 spec(RTE V1, 4.2.8), only cmi.exit==suspend should allow previous datamodel elements on re-launch - if ($scorm->version != "SCORM_1.3" || (isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} == 'suspend'))) { + if (!scorm_version_check($scorm->version, SCORM_13) || (isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} == 'suspend'))) { foreach ($usertrack as $key => $value) { $userdata->$key = addslashes_js($value); } @@ -93,7 +93,7 @@ if ($scodatas = scorm_get_sco($scoid, SCO_DATA)) { if (!$sco = scorm_get_sco($scoid)) { print_error('cannotfindsco', 'scorm'); } -if ($scorm->version == "SCORM_1.3") { +if (scorm_version_check($scorm->version, SCORM_13)) { $userdata->{'cmi.scaled_passing_score'} = $DB->get_field('scorm_seq_objective', 'minnormalizedmeasure', array('scoid'=>$scoid)); } $scorm->version = strtolower(clean_param($scorm->version, PARAM_SAFEDIR)); // Just to be safe diff --git a/mod/scorm/datamodels/debug.js.php b/mod/scorm/datamodels/debug.js.php index 6ca2fd0e549..b84547a8991 100644 --- a/mod/scorm/datamodels/debug.js.php +++ b/mod/scorm/datamodels/debug.js.php @@ -85,11 +85,11 @@ var logRow = 0; var logPopUpWindow = "N"; var debugSCORMVersion = 'version; ?>'; version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'LMS' : ''; - $LMS_api = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'API' : 'API_1484_11'; + $LMS_prefix = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'LMS' : ''; + $LMS_api = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'API' : 'API_1484_11'; $LMS_elements = array(); - if ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) { + if (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) { $LMS_elements = array( 'cmi.core._children', 'cmi.core.student_id', 'cmi.core.student_name', @@ -653,8 +653,8 @@ function UpdateLog(s) { + ' id="commitButton"' + ' name="commitButton">' + ' ' + ' ' diff --git a/mod/scorm/lib.php b/mod/scorm/lib.php index 14690f25038..8e3dfb209ab 100644 --- a/mod/scorm/lib.php +++ b/mod/scorm/lib.php @@ -34,6 +34,11 @@ define('SCORM_TOC_HIDDEN', 1); define('SCORM_TOC_POPUP', 2); define('SCORM_TOC_DISABLED', 3); +//used to check what SCORM version is being used. +define('SCORM_12', 1); +define('SCORM_13', 2); +define('SCORM_AICC', 3); + /** * Given an object containing all the necessary data, * (defined by the form in mod_form.php) this function @@ -1084,3 +1089,38 @@ function scorm_page_type_list($pagetype, $parentcontext, $currentcontext) { $module_pagetype = array('mod-scorm-*'=>get_string('page-mod-scorm-x', 'scorm')); return $module_pagetype; } + +/** + * Returns the SCORM version used. + * @param string $scormversion comes from $scorm->version + * @param string $version one of the defined vars SCORM_12, SCORM_13, SCORM_AICC (or empty) + * @return Scorm version. + */ +function scorm_version_check($scormversion, $version='') { + $scormversion = trim(strtolower($scormversion)); + if (empty($version) || $version==SCORM_12) { + if ($scormversion == 'scorm_12' || $scormversion == 'scorm_1.2') { + return SCORM_12; + } + if (!empty($version)) { + return false; + } + } + if (empty($version) || $version == SCORM_13) { + if ($scormversion == 'scorm_13' || $scormversion == 'scorm_1.3') { + return SCORM_13; + } + if (!empty($version)) { + return false; + } + } + if (empty($version) || $version == SCORM_AICC) { + if (strpos($scormversion, 'aicc')) { + return SCORM_AICC; + } + if (!empty($version)) { + return false; + } + } + return false; +} \ No newline at end of file diff --git a/mod/scorm/loadSCO.php b/mod/scorm/loadSCO.php index 9a1d085b806..057ea84c721 100644 --- a/mod/scorm/loadSCO.php +++ b/mod/scorm/loadSCO.php @@ -86,7 +86,7 @@ if (!isset($sco)) { if ($sco->scormtype == 'asset') { $attempt = scorm_get_last_attempt($scorm->id, $USER->id); - $element = ($scorm->version == 'scorm_13' || $scorm->version == 'SCORM_1.3') ? 'cmi.completion_status':'cmi.core.lesson_status'; + $element = (scorm_version_check($scorm->version, SCORM_13)) ? 'cmi.completion_status':'cmi.core.lesson_status'; $value = 'completed'; $result = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value); } @@ -137,7 +137,7 @@ if (scorm_external_link($sco->launch)) { } // which API are we looking for -$LMS_api = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'API' : 'API_1484_11'; +$LMS_api = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'API' : 'API_1484_11'; ?> diff --git a/mod/scorm/loaddatamodel.php b/mod/scorm/loaddatamodel.php index eef51060105..fb6e2eb329a 100644 --- a/mod/scorm/loaddatamodel.php +++ b/mod/scorm/loaddatamodel.php @@ -61,7 +61,7 @@ $PAGE->set_url($url); require_login($course, false, $cm); if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) { - if ((isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} != 'time-out')) || ($scorm->version != "SCORM_1.3")) { + if ((isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} != 'time-out')) || (!scorm_version_check($scorm->version, SCORM_13))) { foreach ($usertrack as $key => $value) { $userdata->$key = addslashes_js($value); } diff --git a/mod/scorm/locallib.php b/mod/scorm/locallib.php index 51248fd1edb..3938ba33ea0 100644 --- a/mod/scorm/locallib.php +++ b/mod/scorm/locallib.php @@ -886,7 +886,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $ $count = 0; $count_sub = 0; $scormseperator = '_'; - if ($sversion == 'scorm_13') { //scorm 1.3 elements use a . instead of an _ + if (scorm_version_check($sversion, SCORM_13)) { //scorm 1.3 elements use a . instead of an _ $scormseperator = '.'; } // filter out the ones we want @@ -902,7 +902,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $ // generate JavaScript foreach ($element_list as $element => $value) { - if ($sversion == 'scorm_13') { + if (scorm_version_check($sversion, SCORM_13)) { $element = preg_replace('/\.(\d+)\./', ".N\$1.", $element); preg_match('/\.(N\d+)\./', $element, $matches); } else { @@ -929,7 +929,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $ } // now - flesh out the second level elements if there are any - if ($sversion == 'scorm_13') { + if (scorm_version_check($sversion, SCORM_13)) { $element = preg_replace('/(.*?\.N\d+\..*?)\.(\d+)\./', "\$1.N\$2.", $element); preg_match('/.*?\.N\d+\.(.*?)\.(N\d+)\./', $element, $matches); } else { @@ -1113,7 +1113,7 @@ function scorm_get_attempt_count($userid, $scorm, $attempts_only=false) { if ($scorm->grademethod == GRADESCOES) { $element = 'cmi.core.lesson_status'; } - if ($scorm->version == 'scorm_13' || $scorm->version == 'SCORM_1.3') { + if (scorm_version_check($scorm->version, SCORM_13)) { $element = 'cmi.score.raw'; } $attempts = $DB->get_records_select('scorm_scoes_track', "element=? AND userid=? AND scormid=?", array($element, $userid, $scorm->id), 'attempt', 'DISTINCT attempt AS attemptnumber'); @@ -1384,7 +1384,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco } $strsuspended = get_string('suspended','scorm'); $exitvar = 'cmi.core.exit'; - if ($scorm->version == 'SCORM_1.3') { + if (scorm_version_check($scorm->version, SCORM_13)) { $exitvar = 'cmi.exit'; } if ($incomplete && isset($usertrack->{$exitvar}) && ($usertrack->{$exitvar} == 'suspend')) { @@ -1410,8 +1410,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco $previd = $sco->id; } } - - if ($scorm->version == 'SCORM_1.3') { + if (scorm_version_check($scorm->version, SCORM_13)) { require_once($CFG->dirroot.'/mod/scorm/datamodels/sequencinglib.php'); $prereq = scorm_seq_evaluate($sco->id,$usertracks); } else { diff --git a/mod/scorm/report/basic/report.php b/mod/scorm/report/basic/report.php index 8a4c0b31060..700ea4f25f2 100644 --- a/mod/scorm/report/basic/report.php +++ b/mod/scorm/report/basic/report.php @@ -422,7 +422,7 @@ class scorm_basic_report extends scorm_default_report { if ($trackdata->score_raw != '') { $score = $trackdata->score_raw; // add max score if it exists - if ($scorm->version == 'SCORM_1.3') { + if (scorm_version_check($scorm->version, SCORM_13)) { $maxkey = 'cmi.score.max'; } else { $maxkey = 'cmi.core.score.max'; diff --git a/mod/scorm/userreport.php b/mod/scorm/userreport.php index 411001db370..b1a415ce763 100644 --- a/mod/scorm/userreport.php +++ b/mod/scorm/userreport.php @@ -180,7 +180,7 @@ if (!empty($b)) { $table->width = '100%'; $table->size = array('*', '*'); $existelements = false; - if ($scorm->version == 'SCORM_1.3') { + if (scorm_version_check($scorm->version, SCORM_13)) { $elements = array( 'raw' => 'cmi.score.raw', 'min' => 'cmi.score.min',