fix: file upload was broken on ckeditor fields

This commit is contained in:
Noah Lancien 2025-03-14 10:50:26 +01:00
parent 993dc6ed88
commit 0843331f01
10 changed files with 47 additions and 22 deletions

View file

@ -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,

View file

@ -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}"

View file

@ -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++;
}
}

View file

@ -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;

View file

@ -18,6 +18,8 @@
<script lang="ts" setup>
import { computed, defineOptions, onMounted, ref, useAttrs, type PropType } from "vue";
// @ts-ignore
import CkUploadAdapterPlugin from "./../../../js/ckUploadAdapter";
import "../../../js/vendor/ckeditor";
import parseLaravelErrorMessages from "../../modules/parseLaravelErrorMessages";
import trans from "../../modules/trans";
@ -70,6 +72,10 @@ const props = defineProps({
type: String,
default: "basic"
},
modelName: {
type: String,
default: ""
},
});
// * DATA
@ -80,6 +86,7 @@ const placeholder = ref<string>(props.placeholder);
const required = ref<boolean>(props.required);
const allErrors = ref<LaravelValidationErrors>(props.errors);
const editorConfig = ref<string>(props.editorConfig);
const modelName = ref<string>(props.modelName);
// * COMPUTED
const isUsedWithProps = computed<boolean>(() => attrs.json === undefined);
@ -93,6 +100,7 @@ onMounted(() => {
name.value = String(data.name);
text.value = String(data.text);
placeholder.value = String(data.placeholder ?? trans.methods.__("Votre texte ici."));
modelName.value = String(data.modelName);
allErrors.value = data.errors;
(data.required) ? required.value = Boolean(data.required) : "";
editorConfig.value = String(data.editorConfig);
@ -187,6 +195,7 @@ onMounted(() => {
// * Differents CkEditor configs.
const minimalConfig = {
extraPlugins: [],
wordCount: ckEditorGlobals.wordCount,
ui: ckEditorGlobals.ui,
placeholder: placeholder.value,
@ -227,9 +236,13 @@ onMounted(() => {
},
width: "auto",
language: "fr",
folder: ""
};
const basicConfig = {
extraPlugins: [
CkUploadAdapterPlugin,
],
placeholder: placeholder.value,
wordCount: ckEditorGlobals.wordCount,
ui: ckEditorGlobals.ui,
@ -284,6 +297,7 @@ onMounted(() => {
},
width: "auto",
language: "fr",
folder: modelName.value,
image: {
toolbar: [
"toggleImageCaption",

View file

@ -21,8 +21,6 @@ const route = {
keepActualQueries: boolean = false,
keepActualHashes: boolean = false
): string | null {
const boUrl = window.location.origin + "/bo/upload";
window.__SYSTEM._routes = {"bo.upload" : boUrl};
const routes = route.flattenProperties(window.__SYSTEM._routes);
const routeUrl =
Object.keys(routes).indexOf(routeName) !== -1

View file

@ -99,7 +99,7 @@
]),
'name' => 'content',
'model' => $testimonialModel ?? null,
'editorConfig' => \App\Enums\CkEditorConfigName::base->name(),
'editorConfig' => \App\Enums\CkEditorConfigName::basic->name(),
'required' => true,
'helper' => __('crud.minicrud.text_warning'),
])

View file

@ -17,6 +17,7 @@
@endif
@php
$data = [
'modelName' => class_basename($model),
'name' => $name,
'text' => old($name, $model->{$name} ?? ($value ?? '')),
'placeholder' => $placeholder ?? __('Un text riche'),

View file

@ -1,6 +1,8 @@
@include('modules.script-constants')
<script @if(isset($nonce)) nonce="{{ $nonce }}" @endif>
if (!window.__SYSTEM._routes) {
window.__SYSTEM._routes = {};
}
<script nonce="{{ $nonce ?? '' }}">
if (!window.__SYSTEM._routes) {
window.__SYSTEM._routes = {};
}
// BO
window.__SYSTEM._routes['bo.ckeditor.upload'] = '{{ route('bo.ckeditor.upload') }}';
</script>

View file

@ -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');