'upload-images.json', 'method' => 'POST', 'action' => function () { $kirby = kirby(); $request = $kirby->request(); $files = $request->files(); $data = $request->data(); $pageUri = $request->query()->get('pageUri'); if (!$pageUri) { return [ 'error' => 'Page non trouvée.' ]; } $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); $source = page('materials')->file($imageData['uuid']); try { $copiedFile = $source->copy($page); $updatedFile = $source->update([ 'description' => $imageData['description'], 'tags' => $imageData['tags'], ]); $allFiles[] = (string) $updatedFile->uuid(); } catch (Exception $e) { $alerts[$source->name()] = $e->getMessage(); } } } // 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'); } ];