From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id C6002628DF for ; Tue, 27 Oct 2020 12:41:46 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id BC2D3176A5 for ; Tue, 27 Oct 2020 12:41:46 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id D0E6F1769B for ; Tue, 27 Oct 2020 12:41:45 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 990AB45BF0 for ; Tue, 27 Oct 2020 12:41:45 +0100 (CET) To: Proxmox Backup Server development discussion , Dylan Whyte References: <20201027105546.759-1-d.whyte@proxmox.com> From: Thomas Lamprecht Message-ID: Date: Tue, 27 Oct 2020 12:41:44 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:83.0) Gecko/20100101 Thunderbird/83.0 MIME-Version: 1.0 In-Reply-To: <20201027105546.759-1-d.whyte@proxmox.com> Content-Type: text/plain; charset=UTF-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-SPAM-LEVEL: Spam detection results: 0 AWL 0.961 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment NICE_REPLY_A -2.167 Looks like a legit reply (A) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [parentnode.id, rec.data, mozilla.org] Subject: Re: [pbs-devel] [PATCH proxmox-backup] gui: Add button for changing backup group owner X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Oct 2020 11:41:46 -0000 On 27.10.20 11:55, Dylan Whyte wrote: > Extension of fix #2847 >=20 > Adds an action button to the datastore content view, > to change the owner of a backup. >=20 > Signed-off-by: Dylan Whyte > --- > www/BackupGroupChangeOwner.js | 88 +++++++++++++++++++++++++++++++++++= > www/DataStoreContent.js | 26 ++++++++++- > www/Makefile | 1 + > 3 files changed, 114 insertions(+), 1 deletion(-) > create mode 100644 www/BackupGroupChangeOwner.js >=20 the whitespace/indentation is quite off, as you noticed yourself, so just= for the record. > diff --git a/www/BackupGroupChangeOwner.js b/www/BackupGroupChangeOwner= =2Ejs > new file mode 100644 > index 00000000..5db7d115 > --- /dev/null > +++ b/www/BackupGroupChangeOwner.js > @@ -0,0 +1,88 @@ > +Ext.define('PBS.ChangeOwnerInputPanel', { > + extend: 'Proxmox.panel.InputPanel', > + alias: 'widget.pbsChangeOwnerInputPanel', > + mixins: ['Proxmox.Mixin.CBind'], > + > + onGetValues: function(values) { > + var me =3D this; we try to avoid "var" nowadays for new additions, it's "always function v= isible" scope is often unexpected, rather use "let" or "const". > + > + values["backup-type"] =3D me.backup_type; > + values["backup-id"] =3D me.backup_id; > + return values; > + }, > + > + controller: { > + xclass: 'Ext.app.ViewController', > + > + init: function(view) { > + if (!view.url) { > + throw "no url specified"; > + } > + if (!view.backup_type) { > + throw "no backup_type specified"; > + } > + if (!view.backup_id) { > + throw "no backup_id specified"; > + } > + > + this.reload(); a POST request on initialization, what is reload responsible for? Data should not be submitted this way, the edit window is responsible for= that. > + }, > + > + reload: function() { > + var view =3D this.getView(); > + > + let params =3D view.getValues(); > + > + Proxmox.Utils.API2Request({ > + url: view.url, > + method: "POST", > + params: params, > + }); > + }, > + }, > + > + column1: [ > + { > + xtype: 'textfield', > + name: 'new-owner', > + fieldLabel: gettext('Userid'), > + minLength: 8, > + allowBlank: false, > + }, > + ], > + > +}); > + > +Ext.define('PBS.BackupGroupChangeOwner', { > + extend: 'Proxmox.window.Edit', > + > + method: 'POST', > + submitText: "Change Owner", > + > + initComponent: function() { > + var me =3D this; > + > + if (!me.datastore) { > + throw "no datastore specified"; > + } > + if (!me.backup_type) { > + throw "no backup_type specified"; > + } > + if (!me.backup_id) { > + throw "no backup_id specified"; > + } > + > + Ext.apply(me, { > + url: '/api2/extjs/admin/datastore/' + me.datastore + "/cha= nge-owner", try to not mix single quote and double quote in the same concatenation. You can use Template literals (Template strings)[0]: url: `/api2/extjs/admin/datastore/${me.datastore}/change-owner`, [0]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Te= mplate_literals > + title: "Change Owner", > + items: [{ > + xtype: "pbsChangeOwnerInputPanel", > + url: '/api2/extjs/admin/datastore/' + me.datastore + "= /change-owner", same here > + backup_type: me.backup_type, > + backup_id: me.backup_id, > + }], > + }); > + > + me.callParent(); > + }, > +}); > diff --git a/www/DataStoreContent.js b/www/DataStoreContent.js > index 28dfd743..594b1540 100644 > --- a/www/DataStoreContent.js > +++ b/www/DataStoreContent.js > @@ -267,6 +267,24 @@ Ext.define('PBS.DataStoreContent', { > } > }, > =20 > + onChangeOwner: function(view, rI, cI, item, e, rec) { > + view =3D this.getView(); why re-assign view? > + > + if (!(rec && rec.data)) return; try to also put a single line if in braces: if (cond) { return; } > + let data =3D rec.data; > + if (rec.parentNode.id !=3D=3D 'root') return; > + > + if (!view.datastore) return; why not combine those returns if (!rec || !rec.data || rec.parentNode.id !=3D=3D 'root' || !view.datast= ore) { return; } > + > + let win =3D Ext.create('PBS.BackupGroupChangeOwner', { > + datastore: view.datastore, > + backup_type: data.backup_type, > + backup_id: data.backup_id, > + }); > + win.on('destroy', this.reload, this); > + win.show(); can be fine, albeit I prefer to use `autoShow: true,` when defining the w= indow. > + }, > + > onPrune: function(view, rI, cI, item, e, rec) { > view =3D this.getView(); > =20 > @@ -505,7 +523,13 @@ Ext.define('PBS.DataStoreContent', { > tooltip: gettext('Verify'), > getClass: (v, m, rec) =3D> rec.data.leaf ? 'pmx-hidden' : 'fa fa= -search', > isDisabled: (v, r, c, i, rec) =3D> !!rec.data.leaf, > - }, > + }, > + { > + handler: 'onChangeOwner', > + tooltip: gettext('Change Owner'), > + getClass: (v, m, rec) =3D> rec.parentNode.id =3D=3D=3D'root' ? '= fa fa-user' : 'pmx-hidden', > + isDisabled: (v, r, c, i, rec) =3D> rec.parentNode.id !=3D=3D'roo= t', > + }, > { > handler: 'onPrune', > tooltip: gettext('Prune'), > diff --git a/www/Makefile b/www/Makefile > index e04af930..b84fdf5d 100644 > --- a/www/Makefile > +++ b/www/Makefile > @@ -40,6 +40,7 @@ JSSRC=3D \ > VersionInfo.js \ > SystemConfiguration.js \ > Subscription.js \ > + BackupGroupChangeOwner.js \ > DataStorePrune.js \ > DataStoreStatistic.js \ > DataStoreContent.js \ >=20