diff --git a/mod/scorm/locallib.php b/mod/scorm/locallib.php index c48c4670d08..505905afe3a 100644 --- a/mod/scorm/locallib.php +++ b/mod/scorm/locallib.php @@ -450,6 +450,7 @@ function scorm_get_tracks($scoid, $userid, $attempt='') { // Defined in order to unify scorm1.2 and scorm2004 $usertrack->score_raw = ''; $usertrack->status = ''; + $usertrack->progress = ''; $usertrack->total_time = '00:00:00'; $usertrack->session_time = '00:00:00'; $usertrack->timemodified = 0; @@ -463,19 +464,35 @@ function scorm_get_tracks($scoid, $userid, $attempt='') { $track->value = 'notattempted'; } $usertrack->status = $track->value; - break; + break; + case 'cmi.success_status': + $usertrack->progress = $track->value; + break; + case 'cmi.progress_measure': + if (!empty($track->value) && (empty($usertrack->progress) || $usertrack->progress == 'unknown') ) { + $usertrack->progress = $track->value; + } + break; case 'cmi.core.score.raw': case 'cmi.score.raw': $usertrack->score_raw = (float) sprintf('%2.2f', $track->value); - break; + break; + case 'cmi.core.score.max': + case 'cmi.score.max': + $usertrack->score_max = (float) sprintf('%2.2f', $track->value); + break; + case 'cmi.core.score.min': + case 'cmi.score.min': + $usertrack->score_min = (float) sprintf('%2.2f', $track->value); + break; case 'cmi.core.session_time': case 'cmi.session_time': $usertrack->session_time = $track->value; - break; + break; case 'cmi.core.total_time': case 'cmi.total_time': $usertrack->total_time = $track->value; - break; + break; } if (isset($track->timemodified) && ($track->timemodified > $usertrack->timemodified)) { $usertrack->timemodified = $track->timemodified; diff --git a/mod/scorm/report/graphs/graph.php b/mod/scorm/report/graphs/graph.php index 2891739b4b7..1a294dcdf57 100644 --- a/mod/scorm/report/graphs/graph.php +++ b/mod/scorm/report/graphs/graph.php @@ -66,16 +66,6 @@ $params = array(); list($usql, $params) = $DB->get_in_or_equal($allowedlist); $params[] = $scoid; -// Determine Sco keys to be used -if (scorm_version_check($scorm->version, SCORM_13)) { - $maxkey = 'cmi.score.max'; - $minkey = 'cmi.score.min'; - $scorekey = 'cmi.score.raw'; -} else { - $maxkey = 'cmi.core.score.max'; - $minkey = 'cmi.core.score.min'; - $scorekey = 'cmi.core.score.raw'; -} $bands = 11; $bandwidth = 10; @@ -99,16 +89,16 @@ if(!$nostudents) { foreach ($attempts as $attempt) { if ($trackdata = scorm_get_tracks($scoid, $attempt->userid, $attempt->attempt)) { if (isset($trackdata->$scorekey)) { - $score = $trackdata->$scorekey; - if (!isset($trackdata->$minkey) || empty($trackdata->$minkey)) { + $score = $trackdata->score_raw; + if (empty($trackdata->score_min)) { $minmark = 0; } else { - $minmark = $trackdata->$minkey; + $minmark = $trackdata->score_min; } - if (!isset($trackdata->$maxkey) || empty($trackdata->$maxkey)) { + if (empty($trackdata->score_max)) { $maxmark = 100; } else { - $maxmark = $trackdata->$maxkey; + $maxmark = $trackdata->score_max; } $range = ($maxmark - $minmark); if (empty($range)) { diff --git a/mod/scorm/report/interactions/report.php b/mod/scorm/report/interactions/report.php index 99204d167df..5cc36de3bd4 100644 --- a/mod/scorm/report/interactions/report.php +++ b/mod/scorm/report/interactions/report.php @@ -456,13 +456,8 @@ class scorm_interactions_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') { - $maxkey = 'cmi.score.max'; - } else { - $maxkey = 'cmi.core.score.max'; - } - if (isset($trackdata->$maxkey)) { - $score .= '/'.$trackdata->$maxkey; + if (isset($trackdata->score_max)) { + $score .= '/'.$trackdata->score_max; } // else print out status } else { diff --git a/mod/scorm/userreport.php b/mod/scorm/userreport.php index 3633b0411c0..daf83913251 100644 --- a/mod/scorm/userreport.php +++ b/mod/scorm/userreport.php @@ -127,11 +127,16 @@ if ($scoes = $DB->get_records_select('scorm_scoes', "scorm=? ORDER BY id", array $score = $trackdata->score_raw; } if ($trackdata->status == '') { - $trackdata->status = 'notattempted'; + if (!empty($trackdata->progress)) { + $trackdata->status = $trackdata->progress; + } else { + $trackdata->status = 'notattempted'; + } } $detailslink = ''.get_string('details', 'scorm').''; } else { + $trackdata = new stdClass(); $trackdata->status = 'notattempted'; $trackdata->total_time = ' '; $detailslink = ' '; @@ -180,21 +185,12 @@ if (!empty($b)) { $table->width = '100%'; $table->size = array('*', '*'); $existelements = false; - if (scorm_version_check($scorm->version, SCORM_13)) { - $elements = array( - 'raw' => 'cmi.score.raw', - 'min' => 'cmi.score.min', - 'max' => 'cmi.score.max', - 'status' => 'cmi.completion_status', - 'time' => 'cmi.total_time'); - } else { - $elements = array( - 'raw' => 'cmi.core.score.raw', - 'min' => 'cmi.core.score.min', - 'max' => 'cmi.core.score.max', - 'status' => 'cmi.core.lesson_status', - 'time' => 'cmi.core.total_time'); - } + $elements = array( + 'min' => 'score_min', + 'raw' => 'score_raw', + 'max' => 'score_max', + 'status' => 'status', + 'time' => 'total_time'); $printedelements = array(); foreach ($elements as $key => $element) { if (isset($trackdata->$element)) { @@ -281,11 +277,26 @@ if (!empty($b)) { while (isset($trackdata->$objectiveid)) { $existobjective = true; $printedelements[]=$objectiveid; + + // Merge 2004 and 1.2 SCORM formats + if (scorm_version_check($scorm->version, SCORM_13)) { + $sucstatuskey = 'cmi.objectives.'.$i.'.success_status'; + $progstatuskey = 'cmi.objectives.'.$i.'.progress_measure'; + $compstatuskey = 'cmi.objectives.'.$i.'.completion_status'; + $statuskey = 'cmi.objectives.'.$i.'.status'; + if (isset($trackdata->$sucstatuskey)) { + $trackdata->$statuskey = $trackdata->$sucstatuskey; + } elseif (isset($trackdata->$progstatuskey)) { + $trackdata->$statuskey = $trackdata->$progstatuskey; + } elseif (isset($trackdata->$compstatuskey)) { + $trackdata->$statuskey = $trackdata->$compstatuskey; + } + } $elements = array( $objectiveid, 'cmi.objectives.'.$i.'.status', - 'cmi.objectives.'.$i.'.score.raw', 'cmi.objectives.'.$i.'.score.min', + 'cmi.objectives.'.$i.'.score.raw', 'cmi.objectives.'.$i.'.score.max'); $row = array(); foreach ($elements as $element) {