0
Fork 0
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:
Rishabh 2022-04-05 22:56:18 +05:30
parent 8e7e2b1d54
commit 45080a0ab2
2 changed files with 18 additions and 3 deletions

View file

@ -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,

View file

@ -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,