From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 64BEF1FF138 for ; Mon, 29 Jun 2026 15:08:54 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id C245421414; Mon, 29 Jun 2026 15:08:53 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Subject: [PATCH proxmox-backup v2] ui: always use arrays for 'delete' property Date: Mon, 29 Jun 2026 15:07:24 +0200 Message-ID: <20260629130818.1369588-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.049 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: NFXXQRWRHU2645JQWDFVZ6UJ7DF6SGEA X-Message-ID-Hash: NFXXQRWRHU2645JQWDFVZ6UJ7DF6SGEA X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: In PBS we always expect an array for deletable properties, never a comma-separated string. The code that does this was carried over from PVE where we often use those. Instead of working around in every place where we use delete_if_default, simply use a different implementation. Our input panel should always generate an array when having multiple 'delete' properties anyway (see 'assemble_field_data' in Utils.js) so this could only happen if 'delete_if_default' is called when exactly one field itself sent a 'delete: field-name' value. Signed-off-by: Dominik Csapak Reviewed-by: Christian Ebner Tested-by: Christian Ebner --- changes from v1/rfc: * include christians r-b and t-b * include his suggestion to reverse the condition and only write the push once www/Utils.js | 7 +++---- www/window/NotifyOptions.js | 4 ---- www/window/PruneJobEdit.js | 5 ----- www/window/S3ClientEdit.js | 3 --- www/window/SyncJobEdit.js | 3 --- www/window/TrafficControlEdit.js | 3 --- 6 files changed, 3 insertions(+), 22 deletions(-) diff --git a/www/Utils.js b/www/Utils.js index ed3806bfc..d6bfd459e 100644 --- a/www/Utils.js +++ b/www/Utils.js @@ -114,11 +114,10 @@ Ext.define('PBS.Utils', { if (values[fieldname] === '' || values[fieldname] === default_val) { if (!create) { if (values.delete) { - if (Ext.isArray(values.delete)) { - values.delete.push(fieldname); - } else { - values.delete += ',' + fieldname; + if (!Ext.isArray(values.delete)) { + values.delete = [values.delete]; } + values.delete.push(fieldname); } else { values.delete = [fieldname]; } diff --git a/www/window/NotifyOptions.js b/www/window/NotifyOptions.js index fc43de656..13e2bc40d 100644 --- a/www/window/NotifyOptions.js +++ b/www/window/NotifyOptions.js @@ -64,10 +64,6 @@ Ext.define('PBS.window.NotifyOptions', { } values.notify = PBS.Utils.printPropertyString(notify); - if (values.delete && !Ext.isArray(values.delete)) { - values.delete = values.delete.split(','); - } - PBS.Utils.delete_if_default(values, 'notify', ''); PBS.Utils.delete_if_default(values, 'notify-user', ''); diff --git a/www/window/PruneJobEdit.js b/www/window/PruneJobEdit.js index 9fdfb9884..a3dafde21 100644 --- a/www/window/PruneJobEdit.js +++ b/www/window/PruneJobEdit.js @@ -51,11 +51,6 @@ Ext.define('PBS.window.PruneJobEdit', { if (!values.id && me.up('pbsPruneJobEdit').isCreate) { values.id = 's-' + Ext.data.identifier.Uuid.Global.generate().slice(0, 13); } - if (!me.isCreate) { - if (typeof values.delete === 'string') { - values.delete = values.delete.split(','); - } - } values.disable = !values.enable; delete values.enable; diff --git a/www/window/S3ClientEdit.js b/www/window/S3ClientEdit.js index c7e8ade1f..5a114037b 100644 --- a/www/window/S3ClientEdit.js +++ b/www/window/S3ClientEdit.js @@ -179,9 +179,6 @@ Ext.define('PBS.window.S3ClientEdit', { let me = this; let values = me.callParent(arguments); - if (values.delete && !Ext.isArray(values.delete)) { - values.delete = values.delete.split(','); - } PBS.Utils.delete_if_default(values, 'path-style', false, me.isCreate); PBS.Utils.delete_if_default(values, 'rate-in', undefined, me.isCreate); PBS.Utils.delete_if_default(values, 'burst-in', undefined, me.isCreate); diff --git a/www/window/SyncJobEdit.js b/www/window/SyncJobEdit.js index 216653d17..961ce2951 100644 --- a/www/window/SyncJobEdit.js +++ b/www/window/SyncJobEdit.js @@ -129,9 +129,6 @@ Ext.define('PBS.window.SyncJobEdit', { PBS.Utils.delete_if_default(values, 'rate-in'); PBS.Utils.delete_if_default(values, 'rate-out'); PBS.Utils.delete_if_default(values, 'remote'); - if (typeof values.delete === 'string') { - values.delete = values.delete.split(','); - } } return values; }, diff --git a/www/window/TrafficControlEdit.js b/www/window/TrafficControlEdit.js index 60b3f42ad..f41b4fe89 100644 --- a/www/window/TrafficControlEdit.js +++ b/www/window/TrafficControlEdit.js @@ -216,9 +216,6 @@ Ext.define('PBS.window.TrafficControlEdit', { PBS.Utils.delete_if_default(values, 'burst-in'); PBS.Utils.delete_if_default(values, 'burst-out'); PBS.Utils.delete_if_default(values, 'users'); - if (typeof values.delete === 'string') { - values.delete = values.delete.split(','); - } } return values; -- 2.47.3