diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Entity/ScoTracking.php | 4 | ||||
-rw-r--r-- | src/Manager/ScormManager.php | 17 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/Entity/ScoTracking.php b/src/Entity/ScoTracking.php index c0b001d..aa58fe5 100644 --- a/src/Entity/ScoTracking.php +++ b/src/Entity/ScoTracking.php @@ -13,8 +13,8 @@ class ScoTracking public $scoreMax; public $progression = 0; public $scoreScaled; - public $lessonStatus; - public $completionStatus; + public $lessonStatus = 'unknown'; + public $completionStatus = 'unknown'; public $sessionTime; public $totalTimeInt; public $totalTimeString; diff --git a/src/Manager/ScormManager.php b/src/Manager/ScormManager.php index 1dfbc05..055d3be 100644 --- a/src/Manager/ScormManager.php +++ b/src/Manager/ScormManager.php @@ -287,7 +287,7 @@ class ScormManager $scoTracking->setDetails($storeTracking->details); $scoTracking->setLatestDate($storeTracking->latest_date); - return $storeTracking; + return $scoTracking; } public function updateScoTracking($scoUuid, $userId, $data) @@ -309,10 +309,14 @@ class ScormManager switch ($scorm->version) { case Scorm::SCORM_12: + if (isset($data['cmi.suspend_data']) && !empty($data['cmi.suspend_data'])) { + $tracking->setSuspendData($data['cmi.suspend_data']); + } + $scoreRaw = isset($data['cmi.core.score.raw']) ? intval($data['cmi.core.score.raw']) : null; $scoreMin = isset($data['cmi.core.score.min']) ? intval($data['cmi.core.score.min']) : null; $scoreMax = isset($data['cmi.core.score.max']) ? intval($data['cmi.core.score.max']) : null; - $lessonStatus = isset($data['cmi.core.lesson_status']) ? $data['cmi.core.lesson_status'] : null; + $lessonStatus = isset($data['cmi.core.lesson_status']) ? $data['cmi.core.lesson_status'] : 'unknown'; $sessionTime = isset($data['cmi.core.session_time']) ? $data['cmi.core.session_time'] : null; $sessionTimeInHundredth = $this->convertTimeInHundredth($sessionTime); $progression = isset($data['cmi.progress_measure']) ? floatval($data['cmi.progress_measure']) : 0; @@ -322,7 +326,6 @@ class ScormManager $tracking->setExitMode($data['cmi.core.exit']); $tracking->setLessonLocation($data['cmi.core.lesson_location']); $tracking->setSessionTime($sessionTimeInHundredth); - $tracking->setSuspendData($data['cmi.suspend_data']); // Compute total time $totalTimeInHundredth = $this->convertTimeInHundredth($data['cmi.core.total_time']); @@ -340,6 +343,12 @@ class ScormManager $bestScore = $scoreRaw; } + if (empty($bestScore) || (!is_null($scoreRaw) && $scoreRaw > $bestScore)) { + $tracking->setScoreRaw($scoreRaw); + $tracking->setScoreMin($scoreMin); + $tracking->setScoreMax($scoreMax); + } + if (empty($bestStatus) || ($lessonStatus !== $bestStatus && $statusPriority[$lessonStatus] > $statusPriority[$bestStatus])) { $tracking->setLessonStatus($lessonStatus); $bestStatus = $lessonStatus; @@ -358,7 +367,7 @@ class ScormManager case Scorm::SCORM_2004: $tracking->setDetails($data); - if (isset($data['cmi.suspend_data'])) { + if (isset($data['cmi.suspend_data']) && !empty($data['cmi.suspend_data'])) { $tracking->setSuspendData($data['cmi.suspend_data']); } |