Superseded-by: https://lore.proxmox.com/all/20250624120032.153539-1-l.wag...@proxmox.com/T/#t
On 2025-06-17 10:44, Lukas Wagner wrote: > The notification settings in the 'General' tab were unfortunately a > source of regular confusion for many people. This was primarily due to > the behavior of the 'notification mode'. The notification mode can > one of the following: > - notification-system: Emit a notification event to the global > notification system, where it can be matched on by notification > matchers and then sent to one or more targets. > - legacy-sendmail: Old-style notifications, where one can directly > enter some email address. The system uses 'sendmail' to > send the notification to the specified address, circumventing > the regular notification stack. > - auto: Use legacy-sendmail if an email is entered and the > notification system if not > > The 'auto' mode was originally intended to ease migration between the > old and the new system. From a user's perspective however, 'auto' is > quite surprising and unintuitive. The UI preselected 'auto' as a > default, which would, as explained above, favor the new notification > stack with the 'mailto' field empty. However, the UI would still invite > the user to enter their email address, which would then entail the > 'legacy-sendmail' mode. Some users were led to believe that this email > address would then be used for a configured email target of the new > notification stack. As a consequence, 'auto' is now completely hidden in > the UI. > > In the new 'Notifications' tab one can now choose between > ( ) Use global notification settings > (x) Use sendmail to send an email > Recipients: [ ] > When: [Always/On Error] > > 'Recipients' and 'When' are disabled if the first radio box is selected. > > The new tab can later also be used to house other controls. For example, > we could display all matchers that could potentially match this backup > job, or maybe even allow to create a new matcher with a pre-populated > match-field rule. > > The term 'Notification System' is altogether from the UI. It is not > necessarily clear to a user that this refers to the settings in > Datacenter > Notifications. > > Signed-off-by: Lukas Wagner <l.wag...@proxmox.com> > Tested-by: Michael Köppl <m.koe...@proxmox.com> > Reviewed-by: Michael Köppl <m.koe...@proxmox.com> > --- > > Notes: > Changelog: > > v2: > - Use gettext for the radiogroup box labels > - Include '(legacy)' in the legacy-sendmail options > (While we are not going to remove the option in the near future, > I still want to gently nudge users to use the new stack) > - Clarified in rephrased parts of the commit message > > www/manager6/Makefile | 1 + > www/manager6/dc/Backup.js | 65 ++--------- > .../panel/BackupNotificationOptions.js | 103 ++++++++++++++++++ > 3 files changed, 111 insertions(+), 58 deletions(-) > create mode 100644 www/manager6/panel/BackupNotificationOptions.js > > diff --git a/www/manager6/Makefile b/www/manager6/Makefile > index fdf0e816..5eb17edb 100644 > --- a/www/manager6/Makefile > +++ b/www/manager6/Makefile > @@ -100,6 +100,7 @@ JSSRC= > \ > grid/ResourceGrid.js \ > panel/ConfigPanel.js \ > panel/BackupAdvancedOptions.js \ > + panel/BackupNotificationOptions.js \ > panel/BackupJobPrune.js \ > panel/HealthWidget.js \ > panel/IPSet.js \ > diff --git a/www/manager6/dc/Backup.js b/www/manager6/dc/Backup.js > index 381402ca..f861ed3d 100644 > --- a/www/manager6/dc/Backup.js > +++ b/www/manager6/dc/Backup.js > @@ -224,24 +224,12 @@ Ext.define('PVE.dc.BackupEdit', { > viewModel: { > data: { > selMode: 'include', > - notificationMode: '__default__', > - mailto: '', > - mailNotification: 'always', > }, > > formulas: { > poolMode: (get) => get('selMode') === 'pool', > disableVMSelection: (get) => get('selMode') !== 'include' && > get('selMode') !== 'exclude', > - showMailtoFields: (get) => > - ['auto', 'legacy-sendmail', > '__default__'].includes(get('notificationMode')), > - enableMailnotificationField: (get) => { > - let mode = get('notificationMode'); > - let mailto = get('mailto'); > - > - return (['auto', '__default__'].includes(mode) && mailto) || > - mode === 'legacy-sendmail'; > - }, > }, > }, > > @@ -331,52 +319,6 @@ Ext.define('PVE.dc.BackupEdit', { > }, > ], > column2: [ > - { > - xtype: 'proxmoxKVComboBox', > - comboItems: [ > - [ > - '__default__', > - Ext.String.format( > - gettext('{0} (Auto)'), > Proxmox.Utils.defaultText, > - ), > - ], > - ['auto', gettext('Auto')], > - ['legacy-sendmail', gettext('Email > (legacy)')], > - ['notification-system', > gettext('Notification system')], > - ], > - fieldLabel: gettext('Notification mode'), > - name: 'notification-mode', > - value: '__default__', > - cbind: { > - deleteEmpty: '{!isCreate}', > - }, > - bind: { > - value: '{notificationMode}', > - }, > - }, > - { > - xtype: 'textfield', > - fieldLabel: gettext('Send email to'), > - name: 'mailto', > - bind: { > - hidden: '{!showMailtoFields}', > - value: '{mailto}', > - }, > - }, > - { > - xtype: 'pveEmailNotificationSelector', > - fieldLabel: gettext('Send email'), > - name: 'mailnotification', > - cbind: { > - value: (get) => get('isCreate') ? > 'always' : '', > - deleteEmpty: '{!isCreate}', > - }, > - bind: { > - hidden: '{!showMailtoFields}', > - disabled: > '{!enableMailnotificationField}', > - value: '{mailNotification}', > - }, > - }, > { > xtype: 'pveBackupCompressionSelector', > reference: 'compressionSelector', > @@ -439,6 +381,13 @@ Ext.define('PVE.dc.BackupEdit', { > }, > ], > }, > + { > + xtype: 'pveBackupNotificationOptionsPanel', > + title: gettext('Notifications'), > + cbind: { > + isCreate: '{isCreate}', > + }, > + }, > { > xtype: 'pveBackupJobPrunePanel', > title: gettext('Retention'), > diff --git a/www/manager6/panel/BackupNotificationOptions.js > b/www/manager6/panel/BackupNotificationOptions.js > new file mode 100644 > index 00000000..f745a074 > --- /dev/null > +++ b/www/manager6/panel/BackupNotificationOptions.js > @@ -0,0 +1,103 @@ > +/* > + * Input panel for notification options of backup jobs. > + */ > +Ext.define('PVE.panel.BackupNotificationOptions', { > + extend: 'Proxmox.panel.InputPanel', > + xtype: 'pveBackupNotificationOptionsPanel', > + mixins: ['Proxmox.Mixin.CBind'], > + > + onlineHelp: 'chapter_notifications', > + > + cbindData: function() { > + let me = this; > + me.isCreate = !!me.isCreate; > + return {}; > + }, > + > + viewModel: { > + data: { > + notificationMode: undefined, > + }, > + formulas: { > + showMailtoFields: (get) => { > + let mode = get('notificationMode'); > + return mode['notification-mode'] === 'legacy-sendmail'; > + }, > + }, > + }, > + > + onSetValues: function(values) { > + let me = this; > + > + let mode = values['notification-mode'] ?? 'auto'; > + let mailto = values.mailto; > + > + let mappedMode = 'legacy-sendmail'; > + > + // The 'auto' mode is a bit annoying and confusing, so we try > + // to map it to the equivalent behavior. > + if ((mode === 'auto' && !mailto) || mode === 'notification-system') { > + mappedMode = 'notification-system'; > + } > + > + me.getViewModel().set('notificationMode', { 'notification-mode': > mappedMode }); > + > + values['notification-mode'] = mappedMode; > + return values; > + }, > + > + items: [ > + { > + xtype: 'radiogroup', > + height: '15px', > + layout: { > + type: 'vbox', > + }, > + bind: { > + value: '{notificationMode}', > + }, > + items: [ > + { > + xtype: 'radiofield', > + name: 'notification-mode', > + inputValue: 'notification-system', > + boxLabel: gettext('Use global notification settings'), > + cbind: { > + checked: '{isCreate}', > + }, > + }, > + { > + xtype: 'radiofield', > + name: 'notification-mode', > + inputValue: 'legacy-sendmail', > + boxLabel: gettext('Use sendmail to send an email (legacy)'), > + }, > + ], > + }, > + { > + xtype: 'textfield', > + fieldLabel: gettext('Recipients'), > + emptyText: 't...@example.com, ...', > + name: 'mailto', > + padding: '0 0 0 50', > + disabled: true, > + bind: { > + disabled: '{!showMailtoFields}', > + }, > + }, > + { > + xtype: 'pveEmailNotificationSelector', > + fieldLabel: gettext('When'), > + name: 'mailnotification', > + padding: '0 0 0 50', > + disabled: true, > + value: 'always', > + cbind: { > + deleteEmpty: '{!isCreate}', > + }, > + bind: { > + disabled: '{!showMailtoFields}', > + }, > + }, > + ], > +}); -- - Lukas _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel