diff --git a/mod/scorm/report/objectives/classes/report.php b/mod/scorm/report/objectives/classes/report.php index 231b97380880a..c53244e34d0bc 100644 --- a/mod/scorm/report/objectives/classes/report.php +++ b/mod/scorm/report/objectives/classes/report.php @@ -491,17 +491,25 @@ public function display($scorm, $cm, $course, $download) { $row[] = $score; } // Iterate over tracks and match objective id against values. - $keywords = array("cmi.objectives_", ".id"); + $scorm2004 = false; + if (scorm_version_check($scorm->version, SCORM_13)) { + $scorm2004 = true; + $objectiveprefix = "cmi.objectives."; + } else { + $objectiveprefix = "cmi.objectives_"; + } + + $keywords = array(".id", $objectiveprefix); $objectivestatus = array(); $objectivescore = array(); foreach ($trackdata as $name => $value) { - if (strpos($name, 'cmi.objectives_') === 0 && strrpos($name, '.id') !== false) { + if (strpos($name, $objectiveprefix) === 0 && strrpos($name, '.id') !== false) { $num = trim(str_ireplace($keywords, '', $name)); if (is_numeric($num)) { - if (scorm_version_check($scorm->version, SCORM_13)) { - $element = 'cmi.objectives_'.$num.'.completion_status'; + if ($scorm2004) { + $element = $objectiveprefix.$num.'.completion_status'; } else { - $element = 'cmi.objectives_'.$num.'.status'; + $element = $objectiveprefix.$num.'.status'; } if (isset($trackdata->$element)) { $objectivestatus[$value] = $trackdata->$element; @@ -509,7 +517,7 @@ public function display($scorm, $cm, $course, $download) { $objectivestatus[$value] = ''; } if ($displayoptions['objectivescore']) { - $element = 'cmi.objectives_'.$num.'.score.raw'; + $element = $objectiveprefix.$num.'.score.raw'; if (isset($trackdata->$element)) { $objectivescore[$value] = $trackdata->$element; } else { @@ -648,8 +656,9 @@ function get_scorm_objectives($scormid) { $select = "scormid = ? AND "; $select .= $DB->sql_like("element", "?", false); $params[] = $scormid; - $params[] = "cmi.objectives_%.id"; - $rs = $DB->get_recordset_select("scorm_scoes_track", $select, $params, 'value', 'DISTINCT value, scoid'); + $params[] = "cmi.objectives%.id"; + $value = $DB->sql_compare_text('value'); + $rs = $DB->get_recordset_select("scorm_scoes_track", $select, $params, $value, "DISTINCT $value, scoid"); if ($rs->valid()) { foreach ($rs as $record) { $objectives[$record->scoid][] = $record->value;