fix: file upload was broken on ckeditor fields
This commit is contained in:
parent
993dc6ed88
commit
0843331f01
10 changed files with 47 additions and 22 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
])
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
@endif
|
||||
@php
|
||||
$data = [
|
||||
'modelName' => class_basename($model),
|
||||
'name' => $name,
|
||||
'text' => old($name, $model->{$name} ?? ($value ?? '')),
|
||||
'placeholder' => $placeholder ?? __('Un text riche'),
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue