diff --git a/public/site/config/config.php b/public/site/config/config.php index 37c5f58..291b3c9 100644 --- a/public/site/config/config.php +++ b/public/site/config/config.php @@ -21,6 +21,7 @@ return [ 'routes' => [ require(__DIR__ . '/routes/logout.php'), require(__DIR__ . '/routes/toggle-favorite.php'), + require(__DIR__ . '/routes/upload.php') ], 'hooks' => [ 'page.create:after' => require_once(__DIR__ . '/hooks/create-steps.php'), diff --git a/public/site/config/routes/upload.php b/public/site/config/routes/upload.php new file mode 100644 index 0000000..a589695 --- /dev/null +++ b/public/site/config/routes/upload.php @@ -0,0 +1,53 @@ + 'upload.json', + 'method' => 'POST', + 'action' => function () { + if ($uploads = kirby()->request()->files()) { + $pageUri = kirby()->request()->query()->get('pageUri'); + $page = page($pageUri); + + $alerts = []; + $success = ''; + foreach ($uploads->get('images') as $upload) { + // check for duplicate + $files = $page->files(); + $duplicates = $files->filter(function ($file) use ($upload) { + // get original safename without prefix + $pos = strpos($file->filename(), '_'); + $originalSafename = substr($file->filename(), $pos + 1); + + return $originalSafename === F::safeName($upload['name']) && + $file->mime() === $upload['type'] && + $file->size() === $upload['size']; + }); + + if ($duplicates->count() > 0) { + $alerts[$upload['name']] = "The file already exists"; + continue; + } + + try { + $name = crc32($upload['name'].microtime()). '_' . $upload['name']; + $file = $page->createFile([ + 'source' => $upload['tmp_name'], + 'filename' => $name, + 'template' => 'default', + 'content' => [ + 'date' => date('Y-m-d h:m') + ] + ]); + $success = 'Your file upload was successful'; + } catch (Exception $e) { + $alerts[$upload['name']] = $e->getMessage(); + } + } + return compact('alerts', 'success'); + } + + return [ + 'error' => 'Aucun fichier reçu.', + ]; + } +]; diff --git a/src/components/project/ClientBrief/AddImages.vue b/src/components/project/ClientBrief/AddImages.vue index d08ddf9..c7ba531 100644 --- a/src/components/project/ClientBrief/AddImages.vue +++ b/src/components/project/ClientBrief/AddImages.vue @@ -37,24 +37,38 @@ -->
-
+ @@ -103,15 +117,52 @@ import Toast from "primevue/toast"; import FileUpload from "primevue/fileupload"; import { useToast } from "primevue/usetoast"; +import { usePageStore } from "../../../stores/page"; +const { page } = usePageStore(); const toast = useToast(); -const onAdvancedUpload = () => { - toast.add({ - severity: "info", - summary: "Success", - detail: "File Uploaded", - life: 3000, - }); +const beforeSend = (event) => { + const formData = event.formData; + formData.append( + "pageUri", + "projects/miss-dior-blooming-bouquet/client-brief" + ); +}; + +const onAdvancedUpload = (event) => { + if (event.xhr.status === 200) { + toast.add({ + severity: "success", + summary: "Upload réussi", + detail: event.xhr.response.success, + life: 3000, + }); + console.log(JSON.parse(event.xhr.response)); + } else { + toast.add({ + severity: "error", + summary: "Échec de l'upload", + detail: event.xhr.response.error, + life: 3000, + }); + console.error(JSON.parse(event.xhr.response)); + } }; + diff --git a/src/views/ClientBrief.vue b/src/views/ClientBrief.vue index e8edc9d..901fc89 100644 --- a/src/views/ClientBrief.vue +++ b/src/views/ClientBrief.vue @@ -17,7 +17,7 @@ const stepsComponents = { AddImages, }; -const currentStep = ref("Intro"); +const currentStep = ref("AddImages"); function changeStep(stepName) { currentStep.value = stepName; diff --git a/src/views/Project.vue b/src/views/Project.vue index 088cb58..50fff01 100644 --- a/src/views/Project.vue +++ b/src/views/Project.vue @@ -185,10 +185,6 @@ function setStepStatus(stepName) { right: calc(-0.75rem); } -button[data-icon="upload"] { - padding: 6.875rem 4.875rem; -} - /* Masonry */ .masonry > * { margin-bottom: var(--space-16);