summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDevian <devianleong@gmail.com>2021-05-04 11:24:04 +0800
committerDevian <devianleong@gmail.com>2021-05-04 11:24:04 +0800
commitd0774ab8ab8d01f4b3af84f9c5a01e79a1d2efe1 (patch)
tree5cb7331ed5ad4882a4caebecf2be6d9a7dd7bde1 /src
parent60b400a2a3e4b9838d52fb91a427b905932dcb2a (diff)
Added delete1.0.8
Diffstat (limited to 'src')
-rw-r--r--src/Manager/ScormManager.php38
-rw-r--r--src/Model/ScormScoModel.php4
2 files changed, 41 insertions, 1 deletions
diff --git a/src/Manager/ScormManager.php b/src/Manager/ScormManager.php
index af737d1..4ee9710 100644
--- a/src/Manager/ScormManager.php
+++ b/src/Manager/ScormManager.php
@@ -45,6 +45,7 @@ class ScormManager
$scormData = null;
$zip = new ZipArchive();
$openValue = $zip->open($file);
+ $oldModel = null;
$isScormArchive = (true === $openValue) && $zip->getStream('imsmanifest.xml');
@@ -56,8 +57,11 @@ class ScormManager
$scormData = $this->generateScorm($file);
}
+ $oldModel = $model; // get old scorm data for deletion (If success to store new)
+
// save to db
if ($scormData && is_array($scormData)) {
+
$scorm = new ScormModel();
$scorm->version = $scormData['version'];
$scorm->hash_name = $scormData['hashName'];
@@ -95,6 +99,10 @@ class ScormManager
$sco->save();
}
}
+
+ if ($oldModel) {
+ $this->deleteScormData($oldModel);
+ }
}
return $scormData;
@@ -148,6 +156,35 @@ class ScormManager
return $data;
}
+ public function deleteScormData(Model $model) {
+ // Delete after the previous item is stored
+ if ($model) {
+
+ $oldScos = $model->scos()->get();
+
+ // Delete all tracking associate with sco
+ foreach ($oldScos as $oldSco) {
+ $oldSco->scoTrackings->delete();
+ }
+
+ $model->scos()->delete(); // delete scos
+ $model->delete(); // delete scorm
+
+ // Delete folder from server
+ $this->deleteScormFolder($model->hash_name);
+ }
+ }
+ /**
+ * @param $folderHashedName
+ * @return bool
+ */
+ protected function deleteScormFolder($folderHashedName) {
+
+ $response = Storage::disk('scorm')->deleteDirectory($folderHashedName);
+
+ return $response;
+ }
+
/**
* Unzip a given ZIP file into the web resources directory.
*
@@ -162,7 +199,6 @@ class ScormManager
throw new StorageNotFoundException();
}
-
$rootFolder = config('filesystems.disks.'.config('scorm.disk').'.root');
if (substr($rootFolder, -1) != '/') {
diff --git a/src/Model/ScormScoModel.php b/src/Model/ScormScoModel.php
index 6577514..de50741 100644
--- a/src/Model/ScormScoModel.php
+++ b/src/Model/ScormScoModel.php
@@ -16,4 +16,8 @@ class ScormScoModel extends Model
public function scorm() {
return $this->belongsTo(ScormModel::class, 'scorm_id', 'id');
}
+
+ public function scoTrackings() {
+ return $this->hasMany(ScormScoTrackingModel::class, 'sco_id', 'id');
+ }
}