mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-19 08:31:43 +03:00
da49dc4922
refs https://github.com/TryGhost/Team/issues/496 reqs https://github.com/TryGhost/Ghost/pull/12925 The publish menu was meant to default to matching post visibility but that wasn't working consistently and didn't make sense for sites which don't email every post to their members. A "Default newsletter recipients" option has been added to the "Email newsletter" settings screen and the publish menu updated to reflect the option. The free/paid toggles in the publish menu have also been swapped out for a multi-select style component that will cater to more complex member segmentation.
84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
import Controller from '@ember/controller';
|
|
import {action} from '@ember/object';
|
|
import {inject as service} from '@ember/service';
|
|
import {task} from 'ember-concurrency-decorators';
|
|
import {tracked} from '@glimmer/tracking';
|
|
|
|
export default class MembersEmailController extends Controller {
|
|
@service config;
|
|
@service session;
|
|
@service settings;
|
|
|
|
queryParams = ['emailRecipientsOpen']
|
|
|
|
// from/supportAddress are set here so that they can be reset to saved values on save
|
|
// to avoid it looking like they've been saved when they have a separate update process
|
|
@tracked fromAddress = '';
|
|
@tracked supportAddress = '';
|
|
|
|
@tracked emailRecipientsOpen = false;
|
|
@tracked showLeaveSettingsModal = false;
|
|
|
|
@action
|
|
setEmailAddress(property, email) {
|
|
this[property] = email;
|
|
}
|
|
|
|
@action
|
|
toggleEmailRecipientsOpen() {
|
|
this.emailRecipientsOpen = !this.emailRecipientsOpen;
|
|
}
|
|
|
|
leaveRoute(transition) {
|
|
if (this.settings.get('hasDirtyAttributes')) {
|
|
transition.abort();
|
|
this.leaveSettingsTransition = transition;
|
|
this.showLeaveSettingsModal = true;
|
|
}
|
|
}
|
|
|
|
@action
|
|
async confirmLeave() {
|
|
this.settings.rollbackAttributes();
|
|
this.showLeaveSettingsModal = false;
|
|
this.leaveSettingsTransition.retry();
|
|
}
|
|
|
|
@action
|
|
cancelLeave() {
|
|
this.showLeaveSettingsModal = false;
|
|
this.leaveSettingsTransition = null;
|
|
}
|
|
|
|
get blogDomain() {
|
|
let blogDomain = this.config.blogDomain || '';
|
|
const domainExp = blogDomain.replace('https://', '').replace('http://', '').match(new RegExp('^([^/:?#]+)(?:[/:?#]|$)', 'i'));
|
|
const domain = (domainExp && domainExp[1]) || '';
|
|
if (domain.startsWith('www.')) {
|
|
return domain.replace(/^(www)\.(?=[^/]*\..{2,5})/, '');
|
|
}
|
|
return domain;
|
|
}
|
|
|
|
parseEmailAddress(address) {
|
|
const emailAddress = address || 'noreply';
|
|
// Adds default domain as site domain
|
|
if (emailAddress.indexOf('@') < 0 && this.blogDomain) {
|
|
return `${emailAddress}@${this.blogDomain}`;
|
|
}
|
|
return emailAddress;
|
|
}
|
|
|
|
resetEmailAddresses() {
|
|
this.fromAddress = this.parseEmailAddress(this.settings.get('membersFromAddress'));
|
|
this.supportAddress = this.parseEmailAddress(this.settings.get('membersSupportAddress'));
|
|
}
|
|
|
|
@task({drop: true})
|
|
*saveSettings() {
|
|
const response = yield this.settings.save();
|
|
this.resetEmailAddresses();
|
|
return response;
|
|
}
|
|
}
|