From 172a8b4404ea4ef10801d4662a68c7503aef23e1 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 10 Feb 2026 23:47:05 +0000
Subject: [PATCH] =Minor changes to upload system for when a field's value is deleted, and replaced with a new item
---
inc/rest/routes/UploadRoutes.php | 62 ++++++++++++++++++++----------
1 files changed, 41 insertions(+), 21 deletions(-)
diff --git a/inc/rest/routes/UploadRoutes.php b/inc/rest/routes/UploadRoutes.php
index 39518ae..c12fa92 100644
--- a/inc/rest/routes/UploadRoutes.php
+++ b/inc/rest/routes/UploadRoutes.php
@@ -124,6 +124,15 @@
$args = [];
foreach ($data as $key => $value) {
switch ($key) {
+ case 'item_id':
+ if (is_numeric($value)) {
+ $args['item_id'] = absint($value);
+ // item_id IS the post/term being edited — use as post_id if not already set
+ if (!array_key_exists('post_id', $args)) {
+ $args['post_id'] = absint($value);
+ }
+ }
+ break;
// Post Type/Taxonomy
case 'content':
$key = str_replace('-', '_', $key);
@@ -143,7 +152,7 @@
case 'user':
if ($this->userCheck($value)) {
$args['user'] = (int) $value;
- if (!array_key_exists('post_id', $data) && !array_key_exists('term_id', $data)) {
+ if (!array_key_exists('post_id', $args) && !array_key_exists('term_id', $args) && !array_key_exists('item_id', $args)) {
$args['post_id'] = (int)get_user_meta((int) $value, BASE.'link', true);
}
}
@@ -1669,38 +1678,49 @@
return 'none';
}
+ private function getMetaManager(array $data): ?Meta
+ {
+ if (!empty($data['post_id'])) {
+ return Meta::forPost($data['post_id']);
+ }
+ if (!empty($data['term_id'])) {
+ return Meta::forTerm($data['term_id']);
+ }
+ if (!empty($data['user'])) {
+ $link = (int)get_user_meta($data['user'], BASE . 'link', true);
+ if ($link) {
+ return Meta::forPost($link);
+ }
+ }
+ return null;
+ }
/**
* Save attachment IDs to meta field
*/
- protected function saveToMeta(array $data, array $results): void
+ private function saveToMeta(array $data, array $results): void
{
if (empty($data['field_name'])) {
return;
}
- $attachment_ids = array_column($results, 'attachment_id');
-
- // Determine meta type
- if (!empty($data['post_id'])) {
- $meta = Meta::forPost($data['post_id']);
- } elseif (!empty($data['term_id'])) {
- $meta = Meta::forTerm($data['term_id']);
- } elseif (!empty($data['user'])) {
- $link = (int)get_user_meta($data['user'], BASE.'link', true);
- $meta = Meta::forPost($link);
- } else {
+ $attachmentIds = array_column($results, 'attachment_id');
+ $meta = $this->getMetaManager($data);
+ if (!$meta) {
return;
}
- // Get existing value
- $existing = $meta->get($data['field_name']);
- $existing_ids = !empty($existing) ? explode(',', $existing) : [];
+ $fieldType = $data['field_type'] ?? 'single';
- // Merge with new IDs
- $all_ids = array_unique(array_merge($existing_ids, $attachment_ids));
-
- // Update with comma-separated string
- $meta->set($data['field_name'], implode(',', $all_ids));
+ if ($fieldType === 'single') {
+ // Single field: replace with latest upload
+ $meta->set($data['field_name'], end($attachmentIds));
+ } else {
+ // Multi field: merge with existing
+ $existing = $meta->get($data['field_name']);
+ $existingIds = !empty($existing) ? explode(',', $existing) : [];
+ $allIds = array_unique(array_merge($existingIds, $attachmentIds));
+ $meta->set($data['field_name'], implode(',', $allIds));
+ }
}
/**
--
Gitblit v1.10.0