summaryrefslogtreecommitdiff
path: root/src/Manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/Manager')
-rw-r--r--src/Manager/ScormDisk.php67
-rw-r--r--src/Manager/ScormManager.php20
2 files changed, 69 insertions, 18 deletions
diff --git a/src/Manager/ScormDisk.php b/src/Manager/ScormDisk.php
index 99988af..47fd3eb 100644
--- a/src/Manager/ScormDisk.php
+++ b/src/Manager/ScormDisk.php
@@ -47,16 +47,35 @@ 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());
+ Log::error('Error in readScormArchive: ' . $ex->getMessage() . ' for file: ' . $file);
throw new StorageNotFoundException('scorm_archive_not_found');
}
}
@@ -132,10 +151,26 @@ 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);
+
+ // Test if the disk is accessible
+ try {
+ $disk->exists('test');
+ } catch (Exception $ex) {
+ Log::error('SCORM disk not accessible: ' . $ex->getMessage());
+ throw new StorageNotFoundException('scorm_disk_not_accessible: ' . $diskName);
+ }
+
+ return $disk;
}
/**
@@ -143,9 +178,25 @@ 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');
+ }
+
+ if (!config()->has('filesystems.disks.' . $archiveDiskName)) {
+ throw new StorageNotFoundException('scorm_archive_disk_not_define: ' . $archiveDiskName);
+ }
+
+ $disk = Storage::disk($archiveDiskName);
+
+ // Test if the disk is accessible
+ try {
+ $disk->exists('test');
+ } catch (Exception $ex) {
+ Log::error('Archive disk not accessible: ' . $ex->getMessage());
+ throw new StorageNotFoundException('scorm_archive_disk_not_accessible: ' . $archiveDiskName);
}
- return Storage::disk(config('scorm.archive'));
+
+ return $disk;
}
}
diff --git a/src/Manager/ScormManager.php b/src/Manager/ScormManager.php
index 2dcaa5e..abf1e26 100644
--- a/src/Manager/ScormManager.php
+++ b/src/Manager/ScormManager.php
@@ -42,12 +42,16 @@ 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) {
$filename = basename($file);
@@ -65,11 +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);
}
@@ -401,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(),