summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Light <sam@lightscale.co.uk>2025-12-11 19:53:16 +0000
committerSam Light <sam@lightscale.co.uk>2025-12-11 22:37:50 +0000
commit0d3656ef43d46216c1a2d45873f8e2eb2bc56b3b (patch)
treed1007a8e3ad2011f4a6c701bf7811bec3204a4e7
parent3a61e767044e60baee05199823f6a775e4fb29d9 (diff)
Make models configurableHEADmain
-rw-r--r--config/scorm.php11
-rw-r--r--src/Manager/ScormManager.php50
-rw-r--r--src/Model/ScormModel.php2
-rw-r--r--src/Model/ScormScoModel.php6
-rw-r--r--src/Model/ScormScoTrackingModel.php2
5 files changed, 47 insertions, 24 deletions
diff --git a/config/scorm.php b/config/scorm.php
index d228bcc..95e47f0 100644
--- a/config/scorm.php
+++ b/config/scorm.php
@@ -1,5 +1,9 @@
<?php
+use Peopleaps\Scorm\Model\ScormModel;
+use Peopleaps\Scorm\Model\ScormScoModel;
+use Peopleaps\Scorm\Model\ScormScoTrackingModel;
+
return [
'table_names' => [
@@ -9,6 +13,13 @@ return [
'scorm_sco_table' => 'scorm_sco',
'scorm_sco_tracking_table' => 'scorm_sco_tracking',
],
+
+ 'models' => [
+ 'scorm' => ScormModel::class,
+ 'scorm_sco' => ScormScoModel::class,
+ 'scorm_sco_tracking' => ScormScoTrackingModel::class,
+ ],
+
/**
* Scorm directory. You may create a custom path in file system
* Define Scorm disk under @see config/filesystems.php
diff --git a/src/Manager/ScormManager.php b/src/Manager/ScormManager.php
index bf3c5e1..5059fa8 100644
--- a/src/Manager/ScormManager.php
+++ b/src/Manager/ScormManager.php
@@ -8,15 +8,12 @@ use DOMDocument;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\UploadedFile;
+use Peopleaps\Scorm\Entity\Sco;
use Peopleaps\Scorm\Entity\Scorm;
use Peopleaps\Scorm\Entity\ScoTracking;
use Peopleaps\Scorm\Exception\InvalidScormArchiveException;
use Peopleaps\Scorm\Library\ScormLib;
-use Peopleaps\Scorm\Model\ScormModel;
-use Peopleaps\Scorm\Model\ScormScoModel;
-use Peopleaps\Scorm\Model\ScormScoTrackingModel;
use Illuminate\Support\Str;
-use Peopleaps\Scorm\Entity\Sco;
class ScormManager
{
@@ -39,6 +36,21 @@ class ScormManager
$this->scormDisk = new ScormDisk();
}
+ protected function getScormModel(): string
+ {
+ return config('scorm.models.scorm');
+ }
+
+ protected function getScormScoModel(): string
+ {
+ return config('scorm.models.scorm_sco');
+ }
+
+ protected function getScormScoTrackingModel(): string
+ {
+ return config('scorm.models.scorm_sco_tracking');
+ }
+
public function uploadScormFromUri($file, $uuid = null)
{
// $uuid is meant for user to update scorm content. Hence, if user want to update content should parse in existing uuid
@@ -130,11 +142,11 @@ class ScormManager
**/
// $scorm = ScormModel::whereOriginFile($filename);
// Uuid indicator is better than filename for update content or add new content.
- $scorm = ScormModel::where('uuid', $this->uuid);
+ $scorm = $this->getScormModel()::whereUuid($this->uuid);
// Check if scom package already exists to drop old one.
if (!$scorm->exists()) {
- $scorm = new ScormModel();
+ $scorm = new ($this->getScormModel())();
} else {
$scorm = $scorm->first();
$this->deleteScormData($scorm);
@@ -171,7 +183,7 @@ class ScormManager
*/
private function saveScormScos($scorm_id, $scoData, $sco_parent_id = null)
{
- $sco = new ScormScoModel();
+ $sco = new ($this->getScormScoModel())();
$sco->scorm_id = $scorm_id;
$sco->uuid = $scoData->uuid;
$sco->sco_parent_id = $sco_parent_id;
@@ -319,7 +331,7 @@ class ScormManager
*/
public function getScos($scormId)
{
- $scos = ScormScoModel::with([
+ $scos = $this->getScormScoModel()::with([
'scorm'
])->where('scorm_id', $scormId)
->get();
@@ -334,7 +346,7 @@ class ScormManager
*/
public function getScoByUuid($scoUuid)
{
- $sco = ScormScoModel::with(['scorm'])
+ $sco = $this->getScormScoModel()::with(['scorm'])
->where('uuid', $scoUuid)
->firstOrFail();
@@ -343,12 +355,12 @@ class ScormManager
public function getUserResult($scoId, $userId)
{
- return ScormScoTrackingModel::where('sco_id', $scoId)->where('user_id', $userId)->first();
+ return $this->getScormScoTrackingModel()::where('sco_id', $scoId)->where('user_id', $userId)->first();
}
public function createScoTracking($scoUuid, $userId = null, $userName = null)
{
- $sco = ScormScoModel::where('uuid', $scoUuid)->firstOrFail();
+ $sco = $this->getScormScoModel()::where('uuid', $scoUuid)->firstOrFail();
$version = $sco->scorm->version;
$scoTracking = new ScoTracking();
@@ -397,7 +409,7 @@ class ScormManager
$scoTracking->setDetails($cmi);
// Create a new tracking model
- $storeTracking = ScormScoTrackingModel::firstOrCreate([
+ $storeTracking = $this->getScormScoTrackingModel()::firstOrCreate([
'user_id' => $userId,
'sco_id' => $sco->id
], [
@@ -451,7 +463,7 @@ class ScormManager
public function findScoTrackingId($scoUuid, $scoTrackingUuid)
{
- return ScormScoTrackingModel::with([
+ return $this->getScormScoTrackingModel()::with([
'sco'
])->whereHas('sco', function (Builder $query) use ($scoUuid) {
$query->where('uuid', $scoUuid);
@@ -463,10 +475,10 @@ class ScormManager
{
$completedSco = [];
- $scos = ScormScoModel::where('scorm_id', $scormId)->get();
+ $scos = $this->getScormScoModel()::where('scorm_id', $scormId)->get();
foreach ($scos as $sco) {
- $scoTracking = ScormScoTrackingModel::where('sco_id', $sco->id)->where('user_id', $userId)->first();
+ $scoTracking = $this->getScormScoTrackingModel()::where('sco_id', $sco->id)->where('user_id', $userId)->first();
if ($scoTracking && ($scoTracking->lesson_status == 'passed' || $scoTracking->lesson_status == 'completed')) {
$completedSco[] = true;
@@ -485,7 +497,7 @@ class ScormManager
$tracking = $this->createScoTracking($scoUuid, $userId);
$tracking->setLatestDate(Carbon::now());
$sco = $tracking->getSco();
- $scorm = ScormModel::where('id', $sco['scorm_id'])->firstOrFail();
+ $scorm = $this->getScormModel()::where('id', $sco['scorm_id'])->firstOrFail();
$statusPriority = [
'unknown' => 0,
@@ -621,7 +633,7 @@ class ScormManager
break;
}
- $updateResult = ScormScoTrackingModel::where('user_id', $tracking->getUserId())
+ $updateResult = $this->getScormScoTrackingModel()::where('user_id', $tracking->getUserId())
->where('sco_id', $sco['id'])
->firstOrFail();
@@ -652,10 +664,10 @@ class ScormManager
public function resetUserData($scormId, $userId)
{
- $scos = ScormScoModel::where('scorm_id', $scormId)->get();
+ $scos = $this->getScormScoModel()::where('scorm_id', $scormId)->get();
foreach ($scos as $sco) {
- $scoTracking = ScormScoTrackingModel::where('sco_id', $sco->id)->where('user_id', $userId)->delete();
+ $this->getScormScoTrackingModel()::where('sco_id', $sco->id)->where('user_id', $userId)->delete();
}
}
diff --git a/src/Model/ScormModel.php b/src/Model/ScormModel.php
index c9992f3..7c26074 100644
--- a/src/Model/ScormModel.php
+++ b/src/Model/ScormModel.php
@@ -51,6 +51,6 @@ class ScormModel extends Model
public function scos()
{
- return $this->hasMany(ScormScoModel::class, 'scorm_id', 'id');
+ return $this->hasMany(config('scorm.models.scorm_sco'), 'scorm_id', 'id');
}
}
diff --git a/src/Model/ScormScoModel.php b/src/Model/ScormScoModel.php
index d606d32..c2116fd 100644
--- a/src/Model/ScormScoModel.php
+++ b/src/Model/ScormScoModel.php
@@ -15,16 +15,16 @@ class ScormScoModel extends Model
public function scorm()
{
- return $this->belongsTo(ScormModel::class, 'scorm_id', 'id');
+ return $this->belongsTo(config('scorm.models.scorm'), 'scorm_id', 'id');
}
public function scoTrackings()
{
- return $this->hasMany(ScormScoTrackingModel::class, 'sco_id', 'id');
+ return $this->hasMany(config('scorm.models.scorm_sco_tracking'), 'sco_id', 'id');
}
public function children()
{
- return $this->hasMany(ScormScoModel::class, 'sco_parent_id', 'id');
+ return $this->hasMany(config('scorm.models.scorm_sco'), 'sco_parent_id', 'id');
}
}
diff --git a/src/Model/ScormScoTrackingModel.php b/src/Model/ScormScoTrackingModel.php
index 407e2da..81e4465 100644
--- a/src/Model/ScormScoTrackingModel.php
+++ b/src/Model/ScormScoTrackingModel.php
@@ -46,6 +46,6 @@ class ScormScoTrackingModel extends Model
public function sco()
{
- return $this->belongsTo(ScormScoModel::class, 'sco_id', 'id');
+ return $this->belongsTo(config('scorm.models.scorm_sco'), 'sco_id', 'id');
}
}