summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhaled Lela <eng.khaled.lela@gmail.com>2022-02-19 21:00:00 +0200
committerKhaled Lela <eng.khaled.lela@gmail.com>2022-02-19 21:00:00 +0200
commitf03f57dcbbbf34feb4eb03bba7ea73dfe9b182b3 (patch)
tree5673f3e3480f65e8193f9b7375ba356e8be4afe1
parent0064e98aaef85e8db7d42b009b250983534aff74 (diff)
feat(disk): add download scorm package zip.
-rw-r--r--composer.json3
-rw-r--r--src/Manager/ScormDisk.php16
-rw-r--r--src/Manager/ScormManager.php5
3 files changed, 23 insertions, 1 deletions
diff --git a/composer.json b/composer.json
index 7e69279..0b72267 100644
--- a/composer.json
+++ b/composer.json
@@ -14,7 +14,8 @@
"doctrine/common": "^3.1",
"nesbot/carbon": "^2.42",
"ext-zip": "*",
- "ext-dom": "*"
+ "ext-dom": "*",
+ "maennchen/zipstream-php": "^2.1"
},
"autoload": {
"psr-4": {
diff --git a/src/Manager/ScormDisk.php b/src/Manager/ScormDisk.php
index 249f027..9417ef3 100644
--- a/src/Manager/ScormDisk.php
+++ b/src/Manager/ScormDisk.php
@@ -4,8 +4,10 @@ namespace Peopleaps\Scorm\Manager;
use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
+use Peopleaps\Scorm\Entity\Scorm;
use Peopleaps\Scorm\Exception\StorageNotFoundException;
use ZipArchive;
+use ZipStream\ZipStream;
class ScormDisk
{
@@ -42,6 +44,20 @@ class ScormDisk
return true;
}
+ public function download(Scorm $scorm)
+ {
+ return response()->stream(function () use ($scorm) {
+ // enable output of HTTP headers
+ // $options = new ZipStream\Option\Archive();
+ // $options->setSendHttpHeaders(true);
+ $zip = new ZipStream($scorm->title . ".zip");
+ /** @var FilesystemAdapter $disk */
+ $disk = $this->getDisk();
+ $zip->addFileFromStream($scorm->title, $disk->readStream($scorm->uuid));
+ $zip->finish();
+ });
+ }
+
/**
* @param string $directory
* @return bool
diff --git a/src/Manager/ScormManager.php b/src/Manager/ScormManager.php
index 935bb2d..aedfae3 100644
--- a/src/Manager/ScormManager.php
+++ b/src/Manager/ScormManager.php
@@ -667,4 +667,9 @@ class ScormManager
return $formattedValue;
}
+
+
+ public function download(Scorm $scorm){
+ return $this->scormDisk->download($scorm);
+ }
}