diff options
| author | Sam Light <sam@lightscale.co.uk> | 2025-12-11 19:53:16 +0000 |
|---|---|---|
| committer | Sam Light <sam@lightscale.co.uk> | 2025-12-11 22:37:50 +0000 |
| commit | 0d3656ef43d46216c1a2d45873f8e2eb2bc56b3b (patch) | |
| tree | d1007a8e3ad2011f4a6c701bf7811bec3204a4e7 | |
| parent | 3a61e767044e60baee05199823f6a775e4fb29d9 (diff) | |
| -rw-r--r-- | config/scorm.php | 11 | ||||
| -rw-r--r-- | src/Manager/ScormManager.php | 50 | ||||
| -rw-r--r-- | src/Model/ScormModel.php | 2 | ||||
| -rw-r--r-- | src/Model/ScormScoModel.php | 6 | ||||
| -rw-r--r-- | src/Model/ScormScoTrackingModel.php | 2 |
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'); } } |
