1
0
mirror of https://github.com/flarum/core.git synced 2025-08-06 08:27:42 +02:00

feat: notification unsubscribe & email overhaul with HTML multipart (#3872)

This commit is contained in:
IanM
2023-09-29 16:34:54 +01:00
committed by GitHub
parent ec5cb98c77
commit 412cfafb3a
56 changed files with 927 additions and 155 deletions

View File

@@ -8,6 +8,7 @@ import type { IPageAttrs } from '../../common/components/Page';
import type { AlertIdentifier } from '../../common/states/AlertManagerState';
import type Mithril from 'mithril';
import type { SaveSubmitEvent } from './AdminPage';
import ItemList from '../../common/utils/ItemList';
export interface MailSettings {
data: {
@@ -65,16 +66,58 @@ export default class MailPage<CustomAttrs extends IPageAttrs = IPageAttrs> exten
return <LoadingIndicator />;
}
const fields = this.driverFields![this.setting('mail_driver')()];
const fieldKeys = Object.keys(fields);
const mailSettings = this.mailSettingItems().toArray();
return (
<div className="Form">
{this.buildSettingComponent({
type: 'text',
setting: 'mail_from',
label: app.translator.trans('core.admin.email.addresses_heading'),
})}
{mailSettings.map((settingComponent) => settingComponent)}
{this.submitButton()}
<FieldSet label={app.translator.trans('core.admin.email.send_test_mail_heading')} className="MailPage-MailSettings">
<div className="helpText">{app.translator.trans('core.admin.email.send_test_mail_text', { email: app.session.user!.email() })}</div>
<Button className="Button Button--primary" disabled={this.sendingTest || this.isChanged()} onclick={() => this.sendTestEmail()}>
{app.translator.trans('core.admin.email.send_test_mail_button')}
</Button>
</FieldSet>
</div>
);
}
mailSettingItems(): ItemList<Mithril.Children> {
const items = new ItemList<Mithril.Children>();
const fields = this.driverFields![this.setting('mail_driver')()];
const fieldKeys = Object.keys(fields);
items.add(
'mail_from',
this.buildSettingComponent({
type: 'text',
setting: 'mail_from',
label: app.translator.trans('core.admin.email.addresses_heading'),
}),
80
);
items.add(
'mail_format',
this.buildSettingComponent({
type: 'select',
setting: 'mail_format',
options: {
multipart: app.translator.trans('core.admin.email.format.multipart_option'),
plain: app.translator.trans('core.admin.email.format.plain_option'),
html: app.translator.trans('core.admin.email.format.html_option'),
},
label: app.translator.trans('core.admin.email.format_heading'),
help: app.translator.trans('core.admin.email.format_help'),
}),
70
);
items.add(
'mail_driver',
<div>
{this.buildSettingComponent({
type: 'select',
setting: 'mail_driver',
@@ -104,16 +147,11 @@ export default class MailPage<CustomAttrs extends IPageAttrs = IPageAttrs> exten
</div>
</FieldSet>
)}
{this.submitButton()}
<FieldSet label={app.translator.trans('core.admin.email.send_test_mail_heading')} className="MailPage-MailSettings">
<div className="helpText">{app.translator.trans('core.admin.email.send_test_mail_text', { email: app.session.user!.email() })}</div>
<Button className="Button Button--primary" disabled={this.sendingTest || this.isChanged()} onclick={() => this.sendTestEmail()}>
{app.translator.trans('core.admin.email.send_test_mail_button')}
</Button>
</FieldSet>
</div>
</div>,
60
);
return items;
}
sendTestEmail() {