From 42861dd986c415f847985794a1e452eb85f7596c Mon Sep 17 00:00:00 2001 From: David Sevilla Martin Date: Wed, 13 Nov 2019 19:43:16 -0500 Subject: [PATCH] Change implementation to add validation rules, of which 'required' is shown in the frontend --- .../core/js/src/admin/components/MailPage.js | 18 ++-- .../core/src/Forum/ForumServiceProvider.php | 2 + .../src/Forum/ValidateMailConfiguration.php | 91 +++++++++++++++++++ framework/core/src/Mail/DriverInterface.php | 5 - framework/core/src/Mail/LogDriver.php | 5 - .../core/src/Mail/MailServiceProvider.php | 14 +-- framework/core/src/Mail/MailgunDriver.php | 13 +-- framework/core/src/Mail/MandrillDriver.php | 7 +- framework/core/src/Mail/NullDriver.php | 5 - framework/core/src/Mail/SendmailDriver.php | 5 - framework/core/src/Mail/SesDriver.php | 11 +-- framework/core/src/Mail/SmtpDriver.php | 19 +--- 12 files changed, 116 insertions(+), 79 deletions(-) create mode 100644 framework/core/src/Forum/ValidateMailConfiguration.php diff --git a/framework/core/js/src/admin/components/MailPage.js b/framework/core/js/src/admin/components/MailPage.js index dcbbb8f13..5140240e0 100644 --- a/framework/core/js/src/admin/components/MailPage.js +++ b/framework/core/js/src/admin/components/MailPage.js @@ -6,6 +6,10 @@ import Select from '../../common/components/Select'; import LoadingIndicator from '../../common/components/LoadingIndicator'; import saveSettings from '../utils/saveSettings'; +// From https://www.30secondsofcode.org/snippet/deepFlatten +// Array.prototype.flatMap is not supported in IE or Edge +const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v))); + export default class MailPage extends Page { init() { super.init(); @@ -15,7 +19,6 @@ export default class MailPage extends Page { this.driverFields = {}; this.fields = ['mail_driver', 'mail_from']; - this.fieldsRequired = []; this.values = {}; const settings = app.data.settings; @@ -37,8 +40,6 @@ export default class MailPage extends Page { } } - this.fieldsRequired = response['data'].map(driver => driver['attributes']['fieldsRequired']).flat(); - this.loading = false; m.redraw(); }); @@ -56,6 +57,7 @@ export default class MailPage extends Page { } const fields = this.driverFields[this.values.mail_driver()]; + const fieldKeys = Object.keys(fields); return (
@@ -88,18 +90,18 @@ export default class MailPage extends Page { ] })} - {Object.keys(fields).length > 0 && FieldSet.component({ + {fieldKeys.length > 0 && FieldSet.component({ label: app.translator.trans(`core.admin.email.${this.values.mail_driver()}_heading`), className: 'MailPage-MailSettings', children: [ - fields.filter(field => this.fieldsRequired.includes(field) && !this.values[field]()).length > 0 && Alert.component({ + fieldKeys.filter(field => fields[field] && fields[field].indexOf('required') !== -1 && !this.values[field]()).length > 0 && Alert.component({ children: app.translator.trans('core.admin.email.incomplete_configuration_text'), dismissible: false, }),
- {Object.keys(fields).map(field => [ - , + {fieldKeys.map(field => [ + , this.renderField(field), ])}
@@ -125,7 +127,7 @@ export default class MailPage extends Page { const prop = this.values[name]; if (typeof field === 'string') { - return ; + return ; } else { return