From 0843331f0195c31bc30919018b00840486c778f5 Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Fri, 14 Mar 2025 10:50:26 +0100 Subject: [PATCH] fix: file upload was broken on ckeditor fields --- app/Enums/Sections/PageSectionEnum.php | 2 +- app/Http/Controllers/Bo/UploadController.php | 14 ++++++++++---- app/Models/Section.php | 6 +++--- .../{CKUploadAdapter.js => ckUploadAdapter.js} | 16 ++++++++++------ resources/ts/bo/components/CkEditorComponent.vue | 14 ++++++++++++++ resources/ts/modules/route.ts | 2 -- .../views/bo/pages/testimonials/form.blade.php | 2 +- .../views/bo/partials/inputs/text-html.blade.php | 1 + resources/views/modules/script-routes.blade.php | 10 ++++++---- routes/web-bo.php | 2 +- 10 files changed, 47 insertions(+), 22 deletions(-) rename resources/js/{CKUploadAdapter.js => ckUploadAdapter.js} (76%) diff --git a/app/Enums/Sections/PageSectionEnum.php b/app/Enums/Sections/PageSectionEnum.php index 5e75372..15197e3 100644 --- a/app/Enums/Sections/PageSectionEnum.php +++ b/app/Enums/Sections/PageSectionEnum.php @@ -132,7 +132,7 @@ enum PageSectionEnum: int self::home_life, self::unveil_sites, self::unveil_history, - self::unveil_commitments => \App\Enums\CkEditorConfigName::base->label(), + self::unveil_commitments => \App\Enums\CkEditorConfigName::basic->label(), self::unveil_pole, self::unveil_missions, self::unveil_local, diff --git a/app/Http/Controllers/Bo/UploadController.php b/app/Http/Controllers/Bo/UploadController.php index cf59e4b..934f118 100644 --- a/app/Http/Controllers/Bo/UploadController.php +++ b/app/Http/Controllers/Bo/UploadController.php @@ -5,7 +5,6 @@ namespace App\Http\Controllers\Bo; use App\Http\Controllers\Controller; use App\Http\Requests\Bo\UploadFileRequest; use App\Lib\Helpers\FileStorageHelper; -use App\Models\Section; class UploadController extends Controller { @@ -18,10 +17,17 @@ class UploadController extends Controller */ public function uploadFile(UploadFileRequest $request) { - /** @var \Illuminate\Http\UploadedFile $image */ - $image = $request->upload; + $modelClass = "App\\Models\\$request->folder"; - $path = FileStorageHelper::storeFile(new Section(), $image, true); + if (!class_exists($modelClass)) { + return response()->json(['error' => 'Invalid model class'], 404); + } + $model = new $modelClass(); + + /** @var \Illuminate\Http\UploadedFile $image */ + $image = $request->file('upload'); + + $path = FileStorageHelper::storeFile($model, $image, true); return response()->json([ 'url' => "/{$path}" diff --git a/app/Models/Section.php b/app/Models/Section.php index 2ed3eb5..e651d1b 100644 --- a/app/Models/Section.php +++ b/app/Models/Section.php @@ -277,7 +277,7 @@ class Section extends Model array $data, string $name, string $value = '', - CkEditorConfigName $config = CkEditorConfigName::base, + CkEditorConfigName $config = CkEditorConfigName::basic, bool $required = false ): array { $data['bloc_' . Str::of($name)->snake()->ascii()->remove(['\'', '-']) . '_content'] = [ @@ -358,8 +358,8 @@ class Section extends Model $dataCount = $data->count(); $repetitionCount = 0; for ($i = 1; $i <= $dataCount; $i++) { - $indexKeys = $templateKeys->map(fn ($key) => str_replace('__index', strval($i), $key)); - if ($indexKeys->every(fn ($key) => $data->has($key))) { + $indexKeys = $templateKeys->map(fn($key) => str_replace('__index', strval($i), $key)); + if ($indexKeys->every(fn($key) => $data->has($key))) { $repetitionCount++; } } diff --git a/resources/js/CKUploadAdapter.js b/resources/js/ckUploadAdapter.js similarity index 76% rename from resources/js/CKUploadAdapter.js rename to resources/js/ckUploadAdapter.js index e972d53..b5e737e 100644 --- a/resources/js/CKUploadAdapter.js +++ b/resources/js/ckUploadAdapter.js @@ -1,10 +1,11 @@ import axios from "axios"; import route from "../ts/modules/route"; -class CKUploadAdapter { - constructor(loader) { +class ckUploadAdapter { + constructor(loader, folder) { // The file loader instance to use during the upload. this.loader = loader; + this.folder = folder; } // Starts the upload process. @@ -28,7 +29,7 @@ class CKUploadAdapter { // Initializes the XMLHttpRequest object using the URL passed to the constructor. _initRequest() { this.cancel = axios.CancelToken.source(); - this.route = route.methods.route("bo.upload"); + this.route = route.methods.route("bo.ckeditor.upload"); } // Prepares the data and sends the request. @@ -36,6 +37,7 @@ class CKUploadAdapter { // Prepare the form data. const data = new FormData(); data.append("upload", file); + data.append("folder", this.folder); axios .post(this.route, data, { headers: { @@ -53,15 +55,17 @@ class CKUploadAdapter { }) .catch((error) => { console.error(error); - reject("Le fichier à été marbré"); + reject( + "Le fichier n'a pas pu être téléchargé. Veuillez réessayer ultérieurement et contacter le support si le problème persiste.", + ); }); } } function CkUploadAdapterPlugin(editor) { editor.plugins.get("FileRepository").createUploadAdapter = (loader) => { - return new CKUploadAdapter(loader); + return new ckUploadAdapter(loader, editor.config._config.folder); }; } -export { CkUploadAdapterPlugin }; +export default CkUploadAdapterPlugin; diff --git a/resources/ts/bo/components/CkEditorComponent.vue b/resources/ts/bo/components/CkEditorComponent.vue index a8f8759..c853bdd 100644 --- a/resources/ts/bo/components/CkEditorComponent.vue +++ b/resources/ts/bo/components/CkEditorComponent.vue @@ -18,6 +18,8 @@ diff --git a/routes/web-bo.php b/routes/web-bo.php index 6e6c531..a76b43a 100644 --- a/routes/web-bo.php +++ b/routes/web-bo.php @@ -165,7 +165,7 @@ Route::prefix('bo') }); // * UPLOAD (USED FOR CKEDITOR) - Route::post('/upload', [UploadController::class, 'uploadFile'])->name('upload'); + Route::post('/upload', [UploadController::class, 'uploadFile'])->name('ckeditor.upload'); }); // * Others routes Route::post('theme/set', [Controller::class, 'setTheme'])->name('theme.set');