mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-15 03:01:37 -05:00
Handled default newsletter subscription for new members
refs https://github.com/TryGhost/Team/issues/1469 When a new member signs up on the site, by default they should get subscribed to all newsletters. A new member can get added via different ways (stripe webhook, admin add, free signup), so this change updates the base member repository which gets used irrespective of how member is added to ensure default newsletters are always included for new member. If a member already has a custom newsletters list attached, we don't change anything.
This commit is contained in:
parent
8e7e2b1d54
commit
45080a0ab2
2 changed files with 18 additions and 3 deletions
|
@ -57,7 +57,8 @@ module.exports = function MembersAPI({
|
|||
},
|
||||
stripeAPIService,
|
||||
offersAPI,
|
||||
labsService
|
||||
labsService,
|
||||
newslettersService
|
||||
}) {
|
||||
const tokenService = new TokenService({
|
||||
privateKey,
|
||||
|
@ -79,6 +80,8 @@ module.exports = function MembersAPI({
|
|||
const memberRepository = new MemberRepository({
|
||||
stripeAPIService,
|
||||
tokenService,
|
||||
newslettersService,
|
||||
labsService,
|
||||
productRepository,
|
||||
Member,
|
||||
MemberCancelEvent,
|
||||
|
|
|
@ -34,6 +34,8 @@ module.exports = class MemberRepository {
|
|||
* @param {any} deps.StripeCustomer
|
||||
* @param {any} deps.StripeCustomerSubscription
|
||||
* @param {any} deps.productRepository
|
||||
* @param {any} deps.newslettersService
|
||||
* @param {any} deps.labsService
|
||||
* @param {import('../../services/stripe-api')} deps.stripeAPIService
|
||||
* @param {ITokenService} deps.tokenService
|
||||
*/
|
||||
|
@ -49,8 +51,10 @@ module.exports = class MemberRepository {
|
|||
StripeCustomerSubscription,
|
||||
OfferRedemption,
|
||||
stripeAPIService,
|
||||
labsService,
|
||||
productRepository,
|
||||
tokenService
|
||||
tokenService,
|
||||
newslettersService
|
||||
}) {
|
||||
this._Member = Member;
|
||||
this._MemberCancelEvent = MemberCancelEvent;
|
||||
|
@ -64,6 +68,8 @@ module.exports = class MemberRepository {
|
|||
this._stripeAPIService = stripeAPIService;
|
||||
this._productRepository = productRepository;
|
||||
this.tokenService = tokenService;
|
||||
this._newslettersService = newslettersService;
|
||||
this._labsService = labsService;
|
||||
|
||||
DomainEvents.subscribe(SubscriptionCreatedEvent, async function (event) {
|
||||
if (!event.data.offerId) {
|
||||
|
@ -120,7 +126,7 @@ module.exports = class MemberRepository {
|
|||
});
|
||||
}
|
||||
|
||||
const memberData = _.pick(data, ['email', 'name', 'note', 'subscribed', 'geolocation', 'created_at', 'products']);
|
||||
const memberData = _.pick(data, ['email', 'name', 'note', 'subscribed', 'geolocation', 'created_at', 'products', 'newsletters']);
|
||||
|
||||
if (memberData.products && memberData.products.length > 1) {
|
||||
throw new errors.BadRequestError({message: tpl(messages.moreThanOneProduct)});
|
||||
|
@ -143,6 +149,12 @@ module.exports = class MemberRepository {
|
|||
memberStatusData.status = 'comped';
|
||||
}
|
||||
|
||||
// Subscribe member to all newsletters by default
|
||||
if (!memberData.newsletters && this._labsService.isSet('multipleNewsletters')) {
|
||||
const newsletters = await this._newslettersService.browse(_.pick(options, 'transacting'));
|
||||
memberData.newsletters = newsletters || [];
|
||||
}
|
||||
|
||||
const member = await this._Member.add({
|
||||
...memberData,
|
||||
...memberStatusData,
|
||||
|
|
Loading…
Add table
Reference in a new issue