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;
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\BulkDeleteOperation;
use \Cubist\Backpack\Http\Controllers\Operations\ReviseOperation;
-
+
/*
--- /dev/null
+<?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);
+ }
+}
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;
'plural' => 'Médiathèque',
'oneinstance' => false];
+ protected $_operations = [ImportAssetsOperation::class];
+
/**
* @throws \Exception
*/
]);
$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]);
}
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>
--- /dev/null
+<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