From: Vincent Vanwaelscappel Date: Tue, 7 Dec 2021 13:04:22 +0000 (+0100) Subject: wait #4928 @2 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=2498ea14384fd57472c415e67af7b9ae8d6edd68;p=fluidbook-toolbox.git wait #4928 @2 --- diff --git a/app/Http/Controllers/Admin/Operations/FluidbookCollection/DownloadOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookCollection/DownloadOperation.php index eb3469ef6..789e8b87e 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookCollection/DownloadOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookCollection/DownloadOperation.php @@ -11,7 +11,7 @@ trait DownloadOperation { protected function setupDownloadRoutes($segment, $routeName, $controller) { - Route::match(['get'], $segment . '/{id}/download', $controller . '@download'); + Route::match(['get'], $segment . '/{id}/download/{action}', $controller . '@download'); } protected function setupDownloadDefaults() @@ -19,9 +19,9 @@ trait DownloadOperation $this->crud->addButtonFromView('line', 'download', 'fluidbook_collection.download', 'end'); } - protected function download($id) + protected function download($id, $action) { - FluidbookCollectionDownload::dispatch(FluidbookCollection::find($id), backpack_user()); + FluidbookCollectionDownload::dispatch(FluidbookCollection::find($id), $action, backpack_user()); Alert::add('success', __('La compilation a été placée en file d\'attente. Vous recevrez un email lorsqu\'elle sera terminée.'))->flash(); return redirect(backpack_url('fluidbook-collection')); } diff --git a/app/Jobs/FluidbookCollectionDownload.php b/app/Jobs/FluidbookCollectionDownload.php index 761010351..1d73b1909 100644 --- a/app/Jobs/FluidbookCollectionDownload.php +++ b/app/Jobs/FluidbookCollectionDownload.php @@ -15,6 +15,9 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Mail; +use InvalidArgumentException; +use RusticiSoftware\Cloud\V2 as ScormCloud; + class FluidbookCollectionDownload implements ShouldQueue { @@ -30,13 +33,20 @@ class FluidbookCollectionDownload implements ShouldQueue */ protected $user; + + /** + * @var string + */ + protected $action; + /** * @param $collection FluidbookCollection * @param $user User */ - public function __construct($collection, $user) + public function __construct($collection, $action, $user) { $this->collection = $collection; + $this->action = $action; $this->user = $user; } @@ -63,6 +73,14 @@ class FluidbookCollectionDownload implements ShouldQueue $subject = __('Collection :nb prête au téléchargement', ['nb' => $this->collection->id]); $body = __('Le fichier est disponible à l\'adresse suivante : :url', ['url' => $url]); + + if ($this->action === 'scormcloud') { + $scormURL = $this->sendToSCORMCloud($url); + $body .= "\n\n"; + $body .= __('La collection peut être testée sur SCORM Cloud : :url', ['url' => $scormURL]); + } + + } catch (\Exception $e) { $subject = __('Erreur lors de la compilation de la collection :nb', ['nb' => $this->collection->id]); $body = __('Détails de l\'erreur :message', ['message' => $e->getMessage() . ' at line ' . $e->getLine() . ' of ' . $e->getFile()]); @@ -243,4 +261,45 @@ window.location='./' + locale + '/index.html'; } } } + + public function sendToSCORMCloud($url) + { + $config = new ScormCloud\Configuration(); + $appId = env('SCORM_CLOUD_APP_ID'); + $config->setUsername($appId); + $config->setPassword(env('SCORM_CLOUD_SECRET_KEY')); + ScormCloud\Configuration::setDefaultConfiguration($config); + + + $courseId = 'toolbox_collection_' . $this->collection->getKey(); + $courseAPI = new ScormCloud\Api\CourseApi(); + $request = new ScormCloud\Model\ImportFetchRequestSchema(['url' => $url, 'content_type' => 'application/zip', 'media_file_metadata' => ['title' => $this->collection->title]]); + while (true) { + try { + $jobId = $courseAPI->createFetchAndImportCourseJob($courseId, $request, true); + break; + } catch (\Exception $e) { + sleep(1); + } + } + + while (true) { + try { + $jobResult = $courseAPI->getImportJobStatus($jobId->getResult()); + + if ($jobResult->getStatus() == ScormCloud\Model\ImportJobResultSchema::STATUS_RUNNING) { + sleep(1); + } else { + break; + } + } catch (\Exception $e) { + sleep(1); + } + } + + if ($jobResult->getStatus() == ScormCloud\Model\ImportJobResultSchema::STATUS_ERROR) + throw new InvalidArgumentException('Course is not properly formatted: ' . $jobResult->getMessage()); + + return 'https://cloud.scorm.com/sc/user/Course?appId=' . $appId . '&courseId=' . $courseId; + } } diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_collection/download.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_collection/download.blade.php index 7507f6516..5e94a06e0 100644 --- a/resources/views/vendor/backpack/crud/buttons/fluidbook_collection/download.blade.php +++ b/resources/views/vendor/backpack/crud/buttons/fluidbook_collection/download.blade.php @@ -1,2 +1,54 @@ - {{__('Télécharger')}} +@once +@php +$showjs=false; +if($crud->getValue('seenExportJS')===null){ +$showjs =true; +$crud->setValue('seenExportJS',true); +} +@endphp +@if($showjs) + + +@endif +@endonce + + {{__('Exporter')}} + + +