diff --git a/public/content/materials/black-1984277_1280.jpg.txt b/public/content/materials/black-1984277_1280.jpg.txt index 0d99cd6..0157be2 100644 --- a/public/content/materials/black-1984277_1280.jpg.txt +++ b/public/content/materials/black-1984277_1280.jpg.txt @@ -1,15 +1,15 @@ +Description: test + +---- + +Tags: bouton poussoir + +---- + Sort: 7 ---- -Description: - ----- - -Tags: - ----- - Uuid: MXGiJkPHmzL0pTOk ---- diff --git a/public/site/config/routes/upload-images.php b/public/site/config/routes/upload-images.php index 042fda1..2d24342 100644 --- a/public/site/config/routes/upload-images.php +++ b/public/site/config/routes/upload-images.php @@ -7,81 +7,115 @@ return [ $kirby = kirby(); $request = $kirby->request(); - + $files = $request->files(); $data = $request->data(); $pageUri = $request->query()->get('pageUri'); - $page = page($pageUri); - - if ($uploads = $request->files()) { - - $existingFiles = $page->files(); - $allFiles = $page->clientBriefImages()->toFiles()->pluck('uuid', ','); - - $existingFileMap = []; - foreach ($existingFiles as $file) { - $pos = strpos($file->filename(), '_'); - $originalSafename = substr($file->filename(), $pos + 1); - $existingFileMap[$originalSafename . '|' . $file->mime() . '|' . $file->size()] = $file->uuid(); - } - - $alerts = []; - $newFiles = []; + if (!$pageUri) { + return [ + 'error' => 'Page non trouvée.' + ]; + } - foreach ($uploads->get('images') as $upload) { - $key = F::safeName($upload['name']) . '|' . $upload['type'] . '|' . $upload['size']; + + $page = page($pageUri); + $allFiles = $page->clientBriefImages()->isNotEmpty() ? $page->clientBriefImages()->toFiles()->pluck('uuid', ',') : []; + $alerts = []; + $success = []; + + // Copy images selected from site banks with incoming properties + if (!empty($data['imageUris'])) { + foreach ($data['imageUris'] as $imageUri) { + $imageData = json_decode($imageUri, true); - if (isset($existingFileMap[$key])) { - $duplicateUUID = $existingFileMap[$key]; - if (!in_array($duplicateUUID, $allFiles)) { - $allFiles[] = $duplicateUUID; - $alerts[$upload['name']] = "The file already exists, added to the field."; - } - } else { + if ($file = page('materials')->file($imageData['uuid'])) { + try { - $name = crc32($upload['name'] . microtime()) . '_' . $upload['name']; - $newFile = $page->createFile([ - 'source' => $upload['tmp_name'], - 'filename' => $name, - 'template' => 'image', - 'content' => [ - 'date' => date('Y-m-d H:i:s') - ] + $copiedFile = $file->copy($page); + $updatedFile = $file->update([ + 'description' => $imageData['description'], + 'tags' => $imageData['tags'], ]); - $newFiles[] = $newFile; - - $success = 'Your file upload was successful'; - - $allFiles[] = (string) $newFile->uuid(); + $allFiles[] = (string) $updatedFile->uuid(); } catch (Exception $e) { - $alerts[$upload['name']] = $e->getMessage(); + $alerts[$file->name()] = $e->getMessage(); } } } - - $newPage = $page->update([ - 'clientBriefImages' => $allFiles - ]); - - $images = []; - - foreach ($newPage->clientBriefImages()->toFiles() as $image) { - $images[] = [ - 'url' => $image->url(), - 'uuid' => (string) $image->uuid(), - 'tags' => $image->tags()->split(), - 'name' => $image->filename(), - 'description' => $image->description()->value(), - ]; - } - - return compact('images', 'alerts'); } - return [ - 'error' => 'Aucun fichier reçu.', - ]; + // Upload new images + // if ($uploads = $files->get('images')) { + // $existingFiles = $page->files(); + // $existingFileMap = []; + // foreach ($existingFiles as $file) { + // $pos = strpos($file->filename(), '_'); + // $originalSafename = substr($file->filename(), $pos + 1); + // $existingFileMap[$originalSafename . '|' . $file->mime() . '|' . $file->size()] = $file->uuid(); + // } + + // foreach ($uploads as $upload) { + // // check for duplicate + // $files = page('storage')->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) { + // $correspondingFile = $duplicates->first(); + // $newFile = $correspondingFile->update([ + // 'description' => $upload['description'], + // 'tags' => $upload['tags'] + // ]); + // $allFiles[] = $newFile->uuid(); + // $success[$newFile->name()] = 'Successfully updated.'; + // continue; + // } else { + // try { + // $name = crc32($upload['name'].microtime()). '_' . $upload['name']; + // $newFile = $page->createFile([ + // 'source' => $upload['name'], + // 'filename' => $name, + // 'template' => 'image', + // 'content' => [ + // 'date' => date('Y-m-d h:m'), + // 'description' => $upload['description'], + // 'tags' => $upload['tags'], + // ] + // ]); + // $allFiles[] = $newFile->uuid(); + // $success[$newFile->name()] = 'Successfully added.'; + // } catch (Exception $e) { + // $alerts[$upload['name']] = $e->getMessage(); + // } + // } + // } + // } + + + + $page = $page->update([ + 'clientBriefImages' => $allFiles + ]); + + $images = []; + // foreach ($page->clientBriefImages()->toFiles() as $image) { + // $images[] = [ + // 'url' => $image->url(), + // 'uuid' => (string) $image->uuid(), + // 'tags' => $image->tags()->split(), + // 'name' => $image->filename(), + // 'description' => $image->description()->value(), + // ]; + // } + return compact('images', 'alerts', 'success'); } ]; diff --git a/src/components/project/client-brief/add-images-modal/ImagesEditPanel.vue b/src/components/project/client-brief/add-images-modal/ImagesEditPanel.vue index 5b20626..bf31164 100644 --- a/src/components/project/client-brief/add-images-modal/ImagesEditPanel.vue +++ b/src/components/project/client-brief/add-images-modal/ImagesEditPanel.vue @@ -8,7 +8,7 @@ style="--row-gap: var(--space-8)" > { + return activeTab.value.selectedImages; +}); + // function saveTags(image) { // const headers = { // method: "POST", @@ -164,15 +169,15 @@ const { activeTab } = storeToRefs(useAddImagesModalStore()); function addImagesToBrief() { const formData = new FormData(); - const blobPromises = images.map((item) => { + const blobPromises = images.value.map((item) => { if (item.url.startsWith("blob:")) { return fetch(item.url) .then((response) => response.blob()) .then((blob) => { - formData.append("images[]", blob, item.name); + formData.append("images[]", blob, JSON.stringify(item)); }); } else { - formData.append("imageUris[]", item.url); + formData.append("imageUris[]", JSON.stringify(item)); return Promise.resolve(); } }); @@ -183,7 +188,10 @@ function addImagesToBrief() { body: formData, }) .then((res) => res.json()) - .then((json) => (page.value.images = json.images)) + .then((json) => { + page.value.images = json.images; + console.log(json); + }) .catch((error) => console.error("Error:", error)); }); } diff --git a/src/components/project/client-brief/add-images-modal/ImagesResources.vue b/src/components/project/client-brief/add-images-modal/ImagesResources.vue index 015e95e..8d6b7a3 100644 --- a/src/components/project/client-brief/add-images-modal/ImagesResources.vue +++ b/src/components/project/client-brief/add-images-modal/ImagesResources.vue @@ -21,6 +21,4 @@ const { tabs } = storeToRefs(useAddImagesModalStore()); const tab = computed(() => { return tabs.value.find((tab) => tab.id === "materials"); }); - -console.log(ArrayUtils);