]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5093 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 14 Feb 2022 18:04:25 +0000 (19:04 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 14 Feb 2022 18:04:25 +0000 (19:04 +0100)
.idea/workspace.xml
app/Http/Controllers/Admin/Operations/Tools/FluidbookAssetsDownloader.php [new file with mode: 0644]
app/Http/Controllers/Admin/ToolsController.php
app/Jobs/Tools/FluidbookAssetsDownloader.php [new file with mode: 0644]
public/packages/fluidbook/toolbox/css/style.less
public/packages/fluidbook/toolbox/css/tools.css [new file with mode: 0644]
public/packages/fluidbook/toolbox/css/tools.css.map [new file with mode: 0644]
public/packages/fluidbook/toolbox/css/tools.less [new file with mode: 0644]
resources/views/tools/form.blade.php [new file with mode: 0644]
resources/views/tools/pdf2svg.blade.php
resources/views/tools/sidebar.blade.php

index d73e85cba9bc311a822d070ebca02d875a685552..2e1b619ec70df783dcb0d818536aa3a2aa17ffc4 100644 (file)
   </component>
   <component name="ChangeListManager">
     <list default="true" id="5d2ecd5e-a05a-4f96-a195-fa6372618165" name="Default Changelist" comment="wip #5041 @1">
+      <change afterPath="$PROJECT_DIR$/app/Http/Controllers/Admin/Operations/Tools/FluidbookAssetsDownloader.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/app/Jobs/Tools/FluidbookAssetsDownloader.php" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/public/packages/fluidbook/toolbox/css/tools.css" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/public/packages/fluidbook/toolbox/css/tools.css.map" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/public/packages/fluidbook/toolbox/css/tools.less" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/resources/views/tools/form.blade.php" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app/Services/ScormCloud.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Services/ScormCloud.php" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/resources/elearningmedia/js/app.js" beforeDir="false" afterPath="$PROJECT_DIR$/resources/elearningmedia/js/app.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/resources/elearningpackage/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/resources/elearningpackage/index.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/resources/elearningpackage/js/app.js" beforeDir="false" afterPath="$PROJECT_DIR$/resources/elearningpackage/js/app.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/Http/Controllers/Admin/ToolsController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/Admin/ToolsController.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/public/packages/fluidbook/toolbox/css/style.less" beforeDir="false" afterPath="$PROJECT_DIR$/public/packages/fluidbook/toolbox/css/style.less" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/resources/views/tools/pdf2svg.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/tools/pdf2svg.blade.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/resources/views/tools/sidebar.blade.php" beforeDir="false" afterPath="$PROJECT_DIR$/resources/views/tools/sidebar.blade.php" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
         <option value="Cubist Magic Model" />
         <option value="JQuery Plugin" />
         <option value="View Helper" />
-        <option value="Less File" />
         <option value="composer.json" />
         <option value="HTML File" />
         <option value="JavaScript File" />
+        <option value="Less File" />
       </list>
     </option>
   </component>
       <workItem from="1644425348765" duration="2270000" />
       <workItem from="1644508187200" duration="10853000" />
       <workItem from="1644582031422" duration="8556000" />
-      <workItem from="1644828785862" duration="8032000" />
-    </task>
-    <task id="LOCAL-00197" summary="wait #4877 @0.5">
-      <created>1636722382707</created>
-      <option name="number" value="00197" />
-      <option name="presentableId" value="LOCAL-00197" />
-      <option name="project" value="LOCAL" />
-      <updated>1636722382707</updated>
+      <workItem from="1644828785862" duration="9853000" />
+      <workItem from="1644851528057" duration="636000" />
+      <workItem from="1644852994411" duration="8772000" />
     </task>
     <task id="LOCAL-00198" summary="wip #4891 @0.5">
       <created>1637226155328</created>
       <option name="project" value="LOCAL" />
       <updated>1644836183703</updated>
     </task>
-    <option name="localTasksCounter" value="246" />
+    <task id="LOCAL-00246" summary="wip #5041 @1">
+      <created>1644845541532</created>
+      <option name="number" value="00246" />
+      <option name="presentableId" value="LOCAL-00246" />
+      <option name="project" value="LOCAL" />
+      <updated>1644845541532</updated>
+    </task>
+    <option name="localTasksCounter" value="247" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
diff --git a/app/Http/Controllers/Admin/Operations/Tools/FluidbookAssetsDownloader.php b/app/Http/Controllers/Admin/Operations/Tools/FluidbookAssetsDownloader.php
new file mode 100644 (file)
index 0000000..fd208a7
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations\Tools;
+
+use App\Fields\FluidbookID;
+use Cubist\Backpack\Magic\Fields\SelectFromArray;
+use Cubist\Backpack\Magic\Fields\Textarea;
+use Cubist\Backpack\Magic\Form;
+
+trait FluidbookAssetsDownloader
+{
+    public function fluidbookassetsdownloader()
+    {
+        $form = new Form(backpack_url('tools/fluidbookassetsdownloaderDownload'));
+        $form->setSubmitLabel(__('Télécharger'));
+        $form->setSubmitIcon('la-cloud-download-alt');
+        $form->setTitle(__('Téléchargement massif d\'assets dans un fluidbook'));
+        $form->addField(['name' => 'fluidbook',
+            'label' => __('Fluidbook de destination'),
+            'type' => FluidbookID::class]);
+        $form->addField('url', Textarea::class, __('Liste des urls à télécharger'), ['hint' => __('Une URL par ligne')]);
+        $form->addField('type', SelectFromArray::class, __('Méthode'), ['allows_null' => false, 'options' => ['download' => __('Télécharger les fichier'), 'unzip' => __('Télécharger et dézipper')], 'hint' => __('Dézipper ne conservera pas l\'arborescence des fichiers dans le zip')]);
+
+
+        return view('tools.form', ['form' => $form]);
+    }
+
+    public function fluidbookassetsdownloaderDownload()
+    {
+        $request = request();
+        \App\Jobs\Tools\FluidbookAssetsDownloader::dispatch($request->input('url'), $request->input('type'), $request->input('fluidbook'));
+        return redirect($request->input('http_referrer'));
+    }
+}
index 9751293db488a661908e282c0c6b92441d401ae4..6653539a3650d3fb85907d533be12da96f0476b2 100644 (file)
@@ -4,12 +4,14 @@
 namespace App\Http\Controllers\Admin;
 
 
+use App\Http\Controllers\Admin\Operations\Tools\FluidbookAssetsDownloader;
 use App\Http\Controllers\Admin\Operations\Tools\PDF2SVGOperation;
 use App\Http\Controllers\Controller;
 
 class ToolsController extends Controller
 {
     use PDF2SVGOperation;
+    use FluidbookAssetsDownloader;
 
     protected function index($tool, $args = '')
     {
diff --git a/app/Jobs/Tools/FluidbookAssetsDownloader.php b/app/Jobs/Tools/FluidbookAssetsDownloader.php
new file mode 100644 (file)
index 0000000..73e1c4f
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Jobs\Tools;
+
+use Cubist\Util\Files\Files;
+use Cubist\Util\Text;
+use Cubist\Util\Zip;
+use GuzzleHttp\Client;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class FluidbookAssetsDownloader implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+
+    public function __construct($url, $type, $fluidbook)
+    {
+        if (!$fluidbook) {
+            throw new \Exception('Fluidbook has not be set');
+        }
+        $dest = '/home/extranet/www/fluidbook/books/working/' . $fluidbook . '/';
+        $lines = Text::explodeNewLines($url);
+        foreach ($lines as $line) {
+            $this->_downloadFile($line, $dest);
+        }
+    }
+
+    protected function _downloadFile($url, $dest, $client = null)
+    {
+        $originalURL = $u = trim($url);
+        $hash = hash('sha256', $originalURL);
+
+        $tmp = Files::tempnam();
+        if (null === $client) {
+            $client = new Client(['cookies' => true]);
+        }
+
+        try {
+            $response = $client->get($u, ['sink' => $tmp]);
+        } catch (\Exception $e) {
+            dd($e);
+        }
+        if ($response->hasHeader('Content-Disposition')) {
+            if (preg_match('/filename="(.*)"/', $response->getHeader('Content-Disposition'), $matches)) {
+                $filename = $matches[1];
+            }
+        } else if ($response->hasHeader('Content-Type')) {
+
+            $ct = $response->getHeader('Content-Type')[0];
+            $e = explode(';', $ct);
+            $ct = $e[0];
+
+            if ($ct === 'text/html') {
+                if (preg_match('/https:\/\/bynder[^"]+/', file_get_contents($tmp), $matches)) {
+                    unlink($tmp);
+                    return $this->_downloadFile(html_entity_decode($matches[0]), $dest, $client);
+                }
+            }
+
+            $filename = $hash;
+            if ($ct !== 'application/octet-stream') {
+                $ext = Files::getExtensionByMimeType($ct);
+                if ($ext) {
+                    $filename .= '.' . $ext;
+                }
+            }
+        }
+        if ($type === 'download') {
+            rename($tmp, $dest . $filename);
+        } else if ($type === 'unzip') {
+            Zip::extract($tmp, $dest, true);
+            unlink($tmp);
+        }
+    }
+}
index 98831ab8785e9ef990e64f03cf622c4866787068..9788f4c1d7d73666e239cbfcc37f6fb57b1dcbe1 100644 (file)
@@ -423,3 +423,5 @@ body.embeded {
         }
     }
 }
+
+@import "tools";
diff --git a/public/packages/fluidbook/toolbox/css/tools.css b/public/packages/fluidbook/toolbox/css/tools.css
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/public/packages/fluidbook/toolbox/css/tools.css.map b/public/packages/fluidbook/toolbox/css/tools.css.map
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/public/packages/fluidbook/toolbox/css/tools.less b/public/packages/fluidbook/toolbox/css/tools.less
new file mode 100644 (file)
index 0000000..325d0f4
--- /dev/null
@@ -0,0 +1,7 @@
+#tool{
+    padding-top: 30px;
+
+    h2{
+        padding-bottom: 20px;
+    }
+}
diff --git a/resources/views/tools/form.blade.php b/resources/views/tools/form.blade.php
new file mode 100644 (file)
index 0000000..c4d20e5
--- /dev/null
@@ -0,0 +1,21 @@
+@php
+
+@endphp
+
+@extends(backpack_view('blank'))
+
+@section('content')
+    <div id="tool">
+        {!! $form !!}
+    </div>
+@endsection
+
+@push('after_scripts')
+    <script>
+        (function ($) {
+            $(function () {
+
+            })
+        })(jQuery);
+    </script>
+@endpush
index 1995c627274c1e1abf91a824315a2c19002a08f9..c6526c03cb60e987e70ecb68d189113bc157b84c 100644 (file)
@@ -1,13 +1,15 @@
 @extends(backpack_view('blank'))
 
 @section('content')
-    <h2>{{__('Convertir un fichier pdf en svg')}}</h2>
-    <form method="post" action="{{backpack_url("tools/convertpdf2svg")}}" enctype="multipart/form-data"
-          id="pdf2svg-form">
-        @csrf
-        <label>{{__('Charger un fichier pdf')}}<br><input type="file" id="pdf2svg-field" name="file"
-                                                          accept="application/pdf"></label>
-    </form>
+    <div id="tool">
+        <h2>{{__('Convertir un fichier pdf en svg')}}</h2>
+        <form method="post" action="{{backpack_url("tools/convertpdf2svg")}}" enctype="multipart/form-data"
+              id="pdf2svg-form">
+            @csrf
+            <label>{{__('Charger un fichier pdf')}}<br><input type="file" id="pdf2svg-field" name="file"
+                                                              accept="application/pdf"></label>
+        </form>
+    </div>
 @endsection
 
 @push('after_scripts')
index 40933f66ab141bb0300d343f94c03766102c29b9..f10d261f63dbb07cdbac2718b997f8e6cc494ecf 100644 (file)
@@ -5,6 +5,9 @@
             <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/pdf2svg') }}'><i
                         class='nav-icon la la-images'></i>
                     <span>{{__('PDF to SVG')}}</span></a></li>
+            <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/fluidbookassetsdownloader') }}'><i
+                        class='nav-icon las la-cloud-download-alt'></i>
+                    <span>{{__('Téléchargement massif d\'assets dans un fluidbook')}}</span></a></li>
 {{--            <li class='nav-item'><a class='nav-link' href='{{ backpack_url('tools/securehosting') }}'><i--}}
 {{--                        class='nav-icon la la-lock'></i>--}}
 {{--                    <span>{{__('Sécuriser hosting')}}</span></a></li>--}}