summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Manager/ScormDisk.php53
-rw-r--r--src/Manager/ScormManager.php37
2 files changed, 60 insertions, 30 deletions
diff --git a/src/Manager/ScormDisk.php b/src/Manager/ScormDisk.php
index 99988af..41de387 100644
--- a/src/Manager/ScormDisk.php
+++ b/src/Manager/ScormDisk.php
@@ -47,17 +47,36 @@ class ScormDisk
public function readScormArchive($file, callable $fn)
{
try {
+ $archiveDisk = $this->getArchiveDisk();
+
+ // Log the file path being processed for debugging
+ Log::info('Processing SCORM archive file: ' . $file);
+
+ // Check if file exists on archive disk
+ if (!$archiveDisk->exists($file)) {
+ Log::error('File not found on archive disk: ' . $file);
+ throw new StorageNotFoundException('scorm_archive_not_found_on_archive_disk: ' . $file);
+ }
+
+ // Get the stream from archive disk
+ $stream = $archiveDisk->readStream($file);
+ if (!is_resource($stream)) {
+ Log::error('Failed to read stream from archive disk for file: ' . $file . '. Stream type: ' . gettype($stream));
+ throw new StorageNotFoundException('failed_to_read_scorm_archive_stream: ' . $file);
+ }
+
if (Storage::exists($file)) {
Storage::delete($file);
}
- Storage::writeStream($file, $this->getArchiveDisk()->readStream($file));
+
+ Storage::writeStream($file, $stream);
$path = Storage::path($file);
call_user_func($fn, $path);
// Clean local resources
$this->clean($file);
} catch (Exception $ex) {
- Log::error($ex->getMessage());
- throw new StorageNotFoundException('scorm_archive_not_found');
+ Log::error('Error in readScormArchive: ' . $ex->getMessage() . ' for file: ' . $file);
+ throw $ex;
}
}
@@ -132,10 +151,18 @@ class ScormDisk
*/
private function getDisk()
{
- if (!config()->has('filesystems.disks.' . config('scorm.disk'))) {
- throw new StorageNotFoundException('scorm_disk_not_define');
+ $diskName = config('scorm.disk');
+ if (empty($diskName)) {
+ throw new StorageNotFoundException('scorm_disk_not_configured');
}
- return Storage::disk(config('scorm.disk'));
+
+ if (!config()->has('filesystems.disks.' . $diskName)) {
+ throw new StorageNotFoundException('scorm_disk_not_define: ' . $diskName);
+ }
+
+ $disk = Storage::disk($diskName);
+
+ return $disk;
}
/**
@@ -143,9 +170,17 @@ class ScormDisk
*/
private function getArchiveDisk()
{
- if (!config()->has('filesystems.disks.' . config('scorm.archive'))) {
- throw new StorageNotFoundException('scorm_archive_disk_not_define');
+ $archiveDiskName = config('scorm.archive');
+ if (empty($archiveDiskName)) {
+ throw new StorageNotFoundException('scorm_archive_disk_not_configured');
}
- return Storage::disk(config('scorm.archive'));
+
+ if (!config()->has('filesystems.disks.' . $archiveDiskName)) {
+ throw new StorageNotFoundException('scorm_archive_disk_not_define: ' . $archiveDiskName);
+ }
+
+ $disk = Storage::disk($archiveDiskName);
+
+ return $disk;
}
}
diff --git a/src/Manager/ScormManager.php b/src/Manager/ScormManager.php
index d403d1e..abf1e26 100644
--- a/src/Manager/ScormManager.php
+++ b/src/Manager/ScormManager.php
@@ -42,15 +42,15 @@ class ScormManager
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
- if (!empty($uuid))
- {
- $this->uuid = $uuid;
- }
- else
- {
- $this->uuid = Str::uuid();
+ $this->uuid = $uuid ?? Str::uuid()->toString();
+
+ // Validate that the file parameter is not empty
+ if (empty($file)) {
+ throw new InvalidScormArchiveException('file_parameter_empty');
}
+ // Log the file being processed for debugging
+ \Log::info('Uploading SCORM from URI: ' . $file);
$scorm = null;
$this->scormDisk->readScormArchive($file, function ($path) use (&$scorm, $file, $uuid) {
@@ -69,14 +69,7 @@ class ScormManager
public function uploadScormArchive(UploadedFile $file, $uuid = null)
{
// $uuid is meant for user to update scorm content. Hence, if user want to update content should parse in existing uuid
- if (!empty($uuid))
- {
- $this->uuid = $uuid;
- }
- else
- {
- $this->uuid = Str::uuid();
- }
+ $this->uuid = $uuid ?? Str::uuid()->toString();
return $this->saveScorm($file, $file->getClientOriginalName(), $uuid);
}
@@ -117,8 +110,7 @@ class ScormManager
}
// This uuid is use when the admin wants to edit existing scorm file.
- if (!empty($uuid))
- {
+ if (!empty($uuid)) {
$this->uuid = $uuid; // Overwrite system generated uuid
}
@@ -136,8 +128,9 @@ class ScormManager
* Handle dynamic method calls into the method.
* return $this->dynamicWhere($method, $parameters);
**/
+ // $scorm = ScormModel::whereOriginFile($filename);
// Uuid indicator is better than filename for update content or add new content.
- $scorm = ScormModel::whereUuid($this->uuid);
+ $scorm = ScormModel::where('uuid', $this->uuid);
// Check if scom package already exists to drop old one.
if (!$scorm->exists()) {
@@ -408,7 +401,7 @@ class ScormManager
'user_id' => $userId,
'sco_id' => $sco->id
], [
- 'uuid' => Str::uuid(),
+ 'uuid' => Str::uuid()->toString(),
'progression' => $scoTracking->getProgression(),
'score_raw' => $scoTracking->getScoreRaw(),
'score_min' => $scoTracking->getScoreMin(),
@@ -608,7 +601,8 @@ class ScormManager
$tracking->setLessonStatus($lessonStatus);
$bestStatus = $lessonStatus;
- if (empty($tracking->getCompletionStatus())
+ if (
+ empty($tracking->getCompletionStatus())
|| ($completionStatus !== $tracking->getCompletionStatus() && $statusPriority[$completionStatus] > $statusPriority[$tracking->getCompletionStatus()])
) {
// This is no longer needed as completionStatus and successStatus are merged together
@@ -656,7 +650,8 @@ class ScormManager
return $updateResult;
}
- public function resetUserData($scormId, $userId) {
+ public function resetUserData($scormId, $userId)
+ {
$scos = ScormScoModel::where('scorm_id', $scormId)->get();
foreach ($scos as $sco) {