]> _ Git - odl.git/commitdiff
wait #4876 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 18 Jan 2022 12:48:27 +0000 (13:48 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 18 Jan 2022 12:48:32 +0000 (13:48 +0100)
app/Http/Controllers/Admin/AssetsCrudController.php
app/Http/Controllers/Admin/Operations/ImportAssetsOperation.php [new file with mode: 0644]
app/Models/Asset.php
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php
resources/views/vendor/backpack/crud/buttons/assets/import.blade.php [new file with mode: 0644]

index 8388c5ebaf73ad8a6a7264838fde9bd55627bef3..8d2b9f6eb724a5c8570aa5ce8aee4ba9ca2a4013 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace App\Http\Controllers\Admin;
 
+use App\Http\Controllers\Admin\Operations\ImportAssetsOperation;
+
 class AssetsCrudController extends \Cubist\Backpack\Magic\Controllers\CubistMagicController
 {
     use \Cubist\Backpack\Magic\Operations\CreateOperation;
@@ -12,7 +14,7 @@ class AssetsCrudController extends \Cubist\Backpack\Magic\Controllers\CubistMagi
        use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
        use \Backpack\CRUD\app\Http\Controllers\Operations\BulkDeleteOperation;
        use \Cubist\Backpack\Http\Controllers\Operations\ReviseOperation;
-       
+
 
 
     /*
diff --git a/app/Http/Controllers/Admin/Operations/ImportAssetsOperation.php b/app/Http/Controllers/Admin/Operations/ImportAssetsOperation.php
new file mode 100644 (file)
index 0000000..b60e460
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+namespace App\Http\Controllers\Admin\Operations;
+
+
+use App\Models\Asset;
+use App\Models\Quiz;
+use App\Models\QuizTranslation;
+use Cubist\Util\Files\Files;
+use Illuminate\Support\Facades\Route;
+use Prologue\Alerts\Facades\Alert;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+use ZipArchive;
+
+trait ImportAssetsOperation
+{
+    protected function setupImportRoutes($segment, $routeName, $controller)
+    {
+        Route::match(['post'], $segment . '/import', $controller . '@import');
+    }
+
+    protected function setupImportDefaults()
+    {
+        $this->crud->addButtonFromView('top', 'import', 'assets.import', 'end');
+    }
+
+    protected function import()
+    {
+        /** @var UploadedFile[] $files */
+        $files = request()->files->get('file');
+
+
+        if (!count($files)) {
+            Alert::warning('Aucun fichier chargé')->flash();
+            return;
+        }
+
+        $exts = ['pdf', 'mp3', 'mp4'];
+
+        $j = 0;
+        foreach ($files as $i => $file) {
+            $name = $file->getClientOriginalName();
+            $e = explode('.', $name);
+            $ext = mb_strtolower(array_pop($e));
+            if (!in_array($ext, $exts)) {
+                continue;
+            }
+            $e = explode('-', $name, 2);
+            $assetId = trim($e[0]);
+            if (!preg_match("/\d+/", $assetId, $matches)) {
+                continue;
+            }
+            /** @var Asset $asset */
+            $asset = Asset::find($assetId);
+            if (null === $asset) {
+                continue;
+            }
+            $asset->replaceMediaInField('file_upload', $file);
+
+            $j++;
+        }
+
+
+        if ($j === 0) {
+            Alert::warning('Aucun fichier mis à jour')->flash();
+        } else {
+            Alert::success('<b>' . $j . ' fichiers</b> ont été mis à jour')->flash();
+        }
+        return redirect($this->crud->route);
+    }
+}
index 4aa5dbcf2184c0f43ec9e70f35dc6643f23173be..729b9337d6cd9f89f3ee6855c831104e3fc9c335 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Models;
 
+use App\Http\Controllers\Admin\Operations\ImportAssetsOperation;
 use Cubist\Backpack\Magic\Fields\Datetime;
 use Cubist\Backpack\Magic\Fields\Files;
 use Cubist\Backpack\Magic\Fields\Hidden;
@@ -22,6 +23,8 @@ class Asset extends CubistMagicAbstractModel
         'plural' => 'Médiathèque',
         'oneinstance' => false];
 
+    protected $_operations = [ImportAssetsOperation::class];
+
     /**
      * @throws \Exception
      */
@@ -48,7 +51,7 @@ class Asset extends CubistMagicAbstractModel
             ]);
         $this->addField('file_upload', Files::class, 'Fichier', ['maxFiles' => 100]);
         $this->addField('file_thumb', Files::class, 'Miniature', ['when' => ['type' => ['audio', 'video', 'pdf']], 'hint' => 'Image utilisée sur la page "Médiathèque" ou "Resources"']);
-        $this->addField('theme', SelectFromModel::class, 'Chapitres', ['when' => ['type' => ['audio', 'video']], 'optionsmodel' => AssetTheme::class, 'allows_null' => true, 'allows_multiple' => true,'hint' => 'Choisir un thème pour ajouter à la page "Médiathèque"']);
+        $this->addField('theme', SelectFromModel::class, 'Chapitres', ['when' => ['type' => ['audio', 'video']], 'optionsmodel' => AssetTheme::class, 'allows_null' => true, 'allows_multiple' => true, 'hint' => 'Choisir un thème pour ajouter à la page "Médiathèque"']);
         $this->addField('code', Integer::class, 'Code', ['when' => ['type' => ['audio', 'video']], 'column' => true]);
         $this->addField('keywords', Tags::class, 'Mots-clé', ['column' => true]);
     }
index f733708f153951145ee232104ec5695c7292c4f6..8af633ff48f84bc0a965dbabea3eb0321eeeedf3 100644 (file)
@@ -29,7 +29,7 @@
                             class='la la-book'></i>
                         <span>Ressources</span></a></li>
             @endcan
-            @can('settings')
+            @can('settings:read')
                 <li class='nav-item'><a class='nav-link' href='{{ backpack_url('settings') }}'><i
                             class='la la-cog'></i>
                         <span>Paramètres</span></a></li>
diff --git a/resources/views/vendor/backpack/crud/buttons/assets/import.blade.php b/resources/views/vendor/backpack/crud/buttons/assets/import.blade.php
new file mode 100644 (file)
index 0000000..af8f122
--- /dev/null
@@ -0,0 +1,25 @@
+<form method="post" enctype="multipart/form-data" action="{{$crud->route}}/import"
+      style="visibility:hidden;height:1px;position:absolute;top:0;" id="uploadimportform">
+    @csrf
+    <input type="file" name="file[]" multiple="multiple" id="uploadimport" accept="application/pdf,video/mp4,audio/mpeg">
+</form>
+<a class="btn btn-primary" href="#" data-toggle="tooltip" title="Import" id="uploadimportbutton"><i
+        class="la la-upload"></i> {{__('Mise à jour groupée')}}</a>
+
+
+@push('after_scripts')
+    <script>
+        (function ($) {
+            $(function () {
+                $(document).on('click', "#uploadimportbutton", function () {
+                    $("#uploadimport").click();
+                    return false;
+                });
+
+                $(document).on('change', '#uploadimportform', function () {
+                    $("#uploadimportform").submit();
+                })
+            });
+        })(jQuery);
+    </script>
+@endpush