From 0e866aaa1ea2d969394f39ac32bc9c092266dfe8 Mon Sep 17 00:00:00 2001 From: "Fabien \"egg\" O'Carroll" Date: Thu, 27 Jan 2022 13:07:27 +0200 Subject: [PATCH] Updated redirect logic to handle tier based urls refs https://github.com/TryGhost/Team/issues/1168 This makes the actual switch to use a Tiers redirect URL rather than the settings when the Tiers feature is enabled. --- core/server/services/members/middleware.js | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/core/server/services/members/middleware.js b/core/server/services/members/middleware.js index d5f35c184f..08e3b84e9e 100644 --- a/core/server/services/members/middleware.js +++ b/core/server/services/members/middleware.js @@ -1,6 +1,7 @@ const _ = require('lodash'); const logging = require('@tryghost/logging'); const membersService = require('./service'); +const models = require('../../models'); const offersService = require('../offers/service'); const urlUtils = require('../../../shared/url-utils'); const ghostVersion = require('@tryghost/version'); @@ -199,10 +200,26 @@ const createSessionFromMagicLink = async function (req, res, next) { if (action === 'signup') { let customRedirect = ''; - if (subscriptions.find(sub => ['active', 'trialing'].includes(sub.status))) { - customRedirect = settingsCache.get('members_paid_signup_redirect') || ''; + const mostRecentActiveSubscription = subscriptions + .sort((a, b) => { + const aStartDate = new Date(a.start_date); + const bStartDate = new Date(b.start_date); + return bStartDate.valueOf() - aStartDate.valueOf(); + }) + .find(sub => ['active', 'trialing'].includes(sub.status)); + if (mostRecentActiveSubscription) { + if (labsService.isSet('multipleProducts')) { + customRedirect = mostRecentActiveSubscription.tier.welcome_page_url; + } else { + customRedirect = settingsCache.get('members_paid_signup_redirect') || ''; + } } else { - customRedirect = settingsCache.get('members_free_signup_redirect') || ''; + if (labsService.isSet('multipleProducts')) { + const freeTier = await models.Product.findOne({type: 'free'}); + customRedirect = freeTier && freeTier.get('welcome_page_url') || ''; + } else { + customRedirect = settingsCache.get('members_free_signup_redirect') || ''; + } } if (customRedirect && customRedirect !== '/') {