From 26e4f3a8b28b3f7531042e2ae62f943dcac9ba15 Mon Sep 17 00:00:00 2001
From: Devian <devianleong@gmail.com>
Date: Fri, 23 Apr 2021 11:16:15 +0800
Subject: Update

---
 src/Manager/ScormManager.php | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

(limited to 'src/Manager')

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']);
                 }
 
-- 
cgit v1.2.3