From f892015a19943254ab40e23a62ca47cf1cdbbddb Mon Sep 17 00:00:00 2001 From: ccheng Date: Thu, 20 Feb 2025 07:07:14 +0100 Subject: [PATCH] fix(Addressbook/js): improve mailinglist email validation --- tine20/Addressbook/js/ListEditDialog.js | 13 +++++++++---- tine20/Addressbook/js/MailinglistPanel.js | 2 ++ tine20/Admin/js/GroupEditDialog.js | 23 ++++++++++++++++------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/tine20/Addressbook/js/ListEditDialog.js b/tine20/Addressbook/js/ListEditDialog.js index 1e3a3491e93..75fa3a3ea22 100644 --- a/tine20/Addressbook/js/ListEditDialog.js +++ b/tine20/Addressbook/js/ListEditDialog.js @@ -92,18 +92,23 @@ Tine.Addressbook.ListEditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, { fieldLabel: this.app.i18n._('E-Mail'), name: 'email', maxLength: 255, - allowBlank: true, + allowBlank: false, checkState: function (editDialog, field) { if (editDialog?.mailingListPanel) { const checked = editDialog.mailingListPanel.isMailinglistCheckbox.checked; const field = editDialog.getForm().findField('email'); - field.setVisible(checked); - field.validate(); + field[checked ? 'show' : 'hide'](); editDialog.doLayout(); + field.validate(); } }, validator: function (value) { - return Tine.Tinebase.common.checkEmailDomain(value); + const editDialog = this.findParentBy((c) => {return c instanceof Tine.widgets.dialog.EditDialog}) + if (editDialog?.mailingListPanel?.isMailinglistCheckbox?.checked) { + if (!value) return false; + return Tine.Tinebase.common.checkEmailDomain(value); + } + return true; }, disabled: ! Tine.Tinebase.common.hasRight('manage_list_email_options', 'Addressbook'), }], [new Tine.Tinebase.widgets.keyfield.ComboBox({ diff --git a/tine20/Addressbook/js/MailinglistPanel.js b/tine20/Addressbook/js/MailinglistPanel.js index 8a8e5cb42de..b2098ea5dd5 100644 --- a/tine20/Addressbook/js/MailinglistPanel.js +++ b/tine20/Addressbook/js/MailinglistPanel.js @@ -50,6 +50,8 @@ Tine.Addressbook.MailinglistPanel = Ext.extend(Ext.Panel, { name: 'email', maxLength: 128, disabled: ! Tine.Tinebase.common.hasRight('manage_list_email_options', 'Addressbook'), + allowBlank: false, + hidden: true, checkState: function (editDialog, record) { this.validate(); }, diff --git a/tine20/Admin/js/GroupEditDialog.js b/tine20/Admin/js/GroupEditDialog.js index b0d47da8cc1..63bcba3f105 100644 --- a/tine20/Admin/js/GroupEditDialog.js +++ b/tine20/Admin/js/GroupEditDialog.js @@ -109,7 +109,7 @@ Tine.Admin.Groups.EditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, { disabled: this.record.get('visibility') === 'hidden' }], [{ columnWidth: 0.5, - xtype: 'textfield', + xtype: 'mirrortextfield', fieldLabel: this.app.i18n._('E-mail'), name: 'email', anchor: '100%', @@ -117,10 +117,19 @@ Tine.Admin.Groups.EditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, { maxLength: 255, allowBlank: true, checkState: function (editDialog, field) { - const checked = editDialog.record.data.xprops?.useAsMailinglist; - field = editDialog.getForm().findField('email'); - field.setVisible(checked); - editDialog.doLayout(); + const checked = editDialog.record.data.xprops?.useAsMailinglist; + field = editDialog.getForm().findField('email'); + field[checked ? 'show' : 'hide'](); + editDialog.doLayout(); + field.validate(); + }, + validator: function (value) { + const editDialog = this.findParentBy((c) => {return c instanceof Tine.widgets.dialog.EditDialog}) + if (editDialog?.record?.data?.xprops?.useAsMailinglist) { + if (!value) return false; + return Tine.Tinebase.common.checkEmailDomain(value); + } + return true; }, }, { columnWidth: 0.5, @@ -151,10 +160,10 @@ Tine.Admin.Groups.EditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, { Tine.Tinebase.registry.get('manageSmtpEmailUser') && adb.featureEnabled('featureMailinglist') ) { - var mailingListPanel = new Tine.Addressbook.MailinglistPanel({ + this.mailingListPanel = new Tine.Addressbook.MailinglistPanel({ editDialog: this }); - tabpanelItems.push(mailingListPanel); + tabpanelItems.push(this.mailingListPanel); } if (this.app.featureEnabled('xpropsEditor')) {