summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevian <devianleong@gmail.com>2021-04-23 11:16:15 +0800
committerDevian <devianleong@gmail.com>2021-04-23 11:16:15 +0800
commit26e4f3a8b28b3f7531042e2ae62f943dcac9ba15 (patch)
tree8c75cac3410c9f17d717d60fe1c25f9b72ea6633
parenta87039295406bd2b312c44be9df90448ef3734f9 (diff)
Update
-rw-r--r--src/Entity/ScoTracking.php4
-rw-r--r--src/Manager/ScormManager.php17
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']);
}