]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6186 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 22 Sep 2023 07:21:54 +0000 (09:21 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 22 Sep 2023 07:21:54 +0000 (09:21 +0200)
app/Console/Commands/ScormCloudTesting.php [new file with mode: 0644]
app/Fluidbook/Packager/Download.php
app/Services/ScormCloud.php

diff --git a/app/Console/Commands/ScormCloudTesting.php b/app/Console/Commands/ScormCloudTesting.php
new file mode 100644 (file)
index 0000000..295dd7d
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Console\Commands\Base\ToolboxCommand;
+use App\Services\ScormCloud;
+
+class ScormCloudTesting extends ToolboxCommand
+{
+    protected $signature = 'scormcloudtesting {arg}';
+
+    public function handle()
+    {
+        ScormCloud::deleteOldVersions($this->argument('arg'));
+    }
+}
index 917532055187fd45c1375e9529873bf0c28ebd83..ff91d6ccc4689f9b62e490a1acd7ff2aaf39a266 100644 (file)
@@ -97,7 +97,7 @@ class Download extends DownloadBase
 
                 if ($this->action === 'scormcloud') {
                     try {
-                        $scormURL = ScormCloud::send($url, 'toolbox_' . $this->type . '_' . $this->_id());
+                        $scormURL = ScormCloud::send($url, env('SCORM_CLOUD_PREFIX', 'toolbox_') . $this->type . '_' . $this->_id());
                         $actions[__('Tester sur SCORM Cloud')] = $scormURL;
                     } catch (\Exception $e) {
 
index 3a3327776895026b8f17b105aebc681e743a71d8..c5b4a7246840ecd9fd895423a92bd4cbf64c3e98 100644 (file)
@@ -4,26 +4,42 @@ namespace App\Services;
 
 use RusticiSoftware\Cloud\V2;
 use InvalidArgumentException;
+use RusticiSoftware\Cloud\V2\ApiException;
 
 class ScormCloud
 {
-    public static function send($url, $courseId, $delete = false)
-    {
-        $config = new V2\Configuration();
-        $appId = env('SCORM_CLOUD_APP_ID');
-        $config->setUsername($appId);
-        $config->setPassword(env('SCORM_CLOUD_SECRET_KEY'));
-        V2\Configuration::setDefaultConfiguration($config);
+    /** @var V2\Api\CourseApi */
+    protected static $_api = null;
 
-        $courseAPI = new V2\Api\CourseApi();
 
-        if ($delete) {
-            try {
-                $courseAPI->deleteCourse($courseId);
-            } catch (\Exception $e) {
+    protected static function getAppID()
+    {
+        return env('SCORM_CLOUD_APP_ID');
+    }
 
-            }
+    /**
+     * @return V2\Api\CourseApi
+     */
+    protected static function _getApi()
+    {
+        if (static::$_api === null) {
+            $config = new V2\Configuration();
+            $appId = static::getAppID();
+            $config->setUsername($appId);
+            $config->setPassword(env('SCORM_CLOUD_SECRET_KEY'));
+            V2\Configuration::setDefaultConfiguration($config);
+
+            static::$_api = new V2\Api\CourseApi();
         }
+        return static::$_api;
+    }
+
+    /**
+     * @throws ApiException
+     */
+    public static function send($url, $courseId, $delete = true)
+    {
+        $courseAPI = static::_getApi();
 
         $request = new V2\Model\ImportFetchRequestSchema(['url' => $url, 'content_type' => 'application/zip']);
         $promise = $courseAPI->createFetchAndImportCourseJobAsync($courseId, $request, true);
@@ -46,6 +62,36 @@ class ScormCloud
             throw new InvalidArgumentException('Course is not properly formatted: ' . $jobResult->getMessage());
         }
 
-        return 'https://cloud.scorm.com/sc/user/Course?appId=' . $appId . '&courseId=' . $courseId;
+
+        if ($delete) {
+            static::deleteOldVersions($courseId);
+        }
+
+        return 'https://cloud.scorm.com/sc/user/Course?appId=' . self::getAppID() . '&courseId=' . $courseId;
+    }
+
+    /**
+     * @throws ApiException
+     */
+    public static function deleteOldVersions($courseId)
+    {
+        $api = static::_getApi();
+
+        $versions = $api->getCourseVersions($courseId);
+        if (count($versions->getCourses()) <= 1) {
+            return;
+        }
+
+        $max = -1;
+        foreach ($versions->getCourses() as $version) {
+            $max = max($max, $version->getVersion());
+        }
+        foreach ($versions->getCourses() as $version) {
+            $v = $version->getVersion();
+            if ($v != $max) {
+                $api->deleteCourseVersion($courseId, $v);
+            }
+        }
+
     }
 }