From a6984540892ef2072200ac7cbd3774c4f11f5041 Mon Sep 17 00:00:00 2001 From: Simon Coggins Date: Wed, 1 Aug 2012 11:08:50 +1200 Subject: [PATCH] MDL-34644 SCORM fix completion when only completion on view is selected. --- mod/scorm/lib.php | 58 +++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/mod/scorm/lib.php b/mod/scorm/lib.php index 822d3e2e95004..c587b68af8599 100644 --- a/mod/scorm/lib.php +++ b/mod/scorm/lib.php @@ -1183,33 +1183,37 @@ function scorm_get_completion_state($course, $cm, $userid, $type) { if (!$scorm = $DB->get_record('scorm', array('id' => $cm->instance))) { print_error('cannotfindscorm'); } - - // Get user's tracks data - $tracks = $DB->get_records_sql( - " - SELECT - id, - element, - value - FROM - {scorm_scoes_track} - WHERE - scormid = ? - AND userid = ? - AND element IN - ( - 'cmi.core.lesson_status', - 'cmi.completion_status', - 'cmi.success_status', - 'cmi.core.score.raw', - 'cmi.score.raw' - ) - ", - array($scorm->id, $userid) - ); - - if (!$tracks) { - return completion_info::aggregate_completion_states($type, $result, false); + // Only check for existence of tracks and return false if completionstatusrequired or completionscorerequired + // this means that if only view is required we don't end up with a false state. + if ($scorm->completionstatusrequired !== null || + $scorm->completionscorerequired !== null) { + // Get user's tracks data. + $tracks = $DB->get_records_sql( + " + SELECT + id, + element, + value + FROM + {scorm_scoes_track} + WHERE + scormid = ? + AND userid = ? + AND element IN + ( + 'cmi.core.lesson_status', + 'cmi.completion_status', + 'cmi.success_status', + 'cmi.core.score.raw', + 'cmi.score.raw' + ) + ", + array($scorm->id, $userid) + ); + + if (!$tracks) { + return completion_info::aggregate_completion_states($type, $result, false); + } } // Check for status