diff --git a/services/web/app/src/Features/Subscription/SubscriptionController.js b/services/web/app/src/Features/Subscription/SubscriptionController.js
index 27d32da407..4cd878bc59 100644
--- a/services/web/app/src/Features/Subscription/SubscriptionController.js
+++ b/services/web/app/src/Features/Subscription/SubscriptionController.js
@@ -18,9 +18,6 @@ const AnalyticsManager = require('../Analytics/AnalyticsManager')
const RecurlyEventHandler = require('./RecurlyEventHandler')
const { expressify } = require('../../util/promises')
const OError = require('@overleaf/o-error')
-const {
- getAssignmentForSession,
-} = require('../SplitTests/SplitTestV2Handler').promises
const groupPlanModalOptions = Settings.groupPlanModalOptions
const validGroupPlanModalOptions = {
@@ -58,16 +55,7 @@ async function plansPage(req, res) {
usage: getDefault('usage', 'usage', 'enterprise'),
}
- const { variant: templateVariant } = await getAssignmentForSession(
- req.session,
- 'plans-page-de-ng'
- )
- const template =
- templateVariant === 'de-ng'
- ? 'subscriptions/plans-marketing'
- : 'subscriptions/plans'
-
- res.render(template, {
+ res.render('subscriptions/plans-marketing', {
title: 'plans_and_pricing',
plans,
gaExperiments: Settings.gaExperiments.plansPage,
diff --git a/services/web/app/views/subscriptions/_modal_group_purchase.pug b/services/web/app/views/subscriptions/_modal_group_purchase.pug
deleted file mode 100644
index e8da6d0b60..0000000000
--- a/services/web/app/views/subscriptions/_modal_group_purchase.pug
+++ /dev/null
@@ -1,56 +0,0 @@
-script(type="text/ng-template", id="groupPlanModalPurchaseTemplate")
- .modal-header
- h3 Save 30% or more with a group license
- .modal-body.plans
- .container-fluid
- .row
- .col-md-6.text-center
- .circle.circle-lg
- | {{ displayPrice }}
- span.small / year
- br
- span.circle-subtext For {{ selected.size }} users
- ul.list-unstyled
- li Each user will have access to:
- li
- li(ng-if="selected.plan_code == 'collaborator'")
- strong #{translate("collabs_per_proj", {collabcount:10})}
- li(ng-if="selected.plan_code == 'professional'")
- strong #{translate("unlimited_collabs")}
- +features_premium
- .col-md-6
- form.form
- .form-group
- label(for='plan_code')
- | Plan
- select.form-control(id="plan_code", ng-model="selected.plan_code")
- option(ng-repeat="plan_code in options.plan_codes", value="{{plan_code.code}}") {{ plan_code.display }}
- .form-group
- label(for='size')
- | Number of users
- select.form-control(id="size", ng-model="selected.size")
- option(ng-repeat="size in options.sizes", value="{{size}}") {{ size }}
- .form-group
- label(for='currency')
- | Currency
- select.form-control(id="currency", ng-model="selected.currency")
- option(ng-repeat="currency in options.currencies", value="{{currency.code}}") {{ currency.display }}
- .form-group
- label(for='usage')
- | Usage
- select.form-control(id="usage", ng-model="selected.usage")
- option(ng-repeat="usage in options.usages", value="{{usage.code}}") {{ usage.display }}
- p.small.text-center.row-spaced-small(ng-show="selected.usage == 'educational'")
- | The 40% educational discount can be used by students or faculty using Overleaf for teaching
- p.small.text-center.row-spaced-small(ng-show="selected.usage == 'enterprise'")
- | Save an additional 40% on groups of 10 or more with our educational discount
- .modal-footer
- .text-center
- button.btn.btn-primary.btn-lg(ng-click="purchase()") Purchase Now
- hr.thin
- a(
- href
- ng-controller="ContactGeneralModal"
- ng-click="openModal()"
- ) Need more than 50 licenses? Please get in touch
-
diff --git a/services/web/app/views/subscriptions/_plans_faq.pug b/services/web/app/views/subscriptions/_plans_faq.pug
deleted file mode 100644
index 12d881cd12..0000000000
--- a/services/web/app/views/subscriptions/_plans_faq.pug
+++ /dev/null
@@ -1,34 +0,0 @@
-.faq
- .row.row-spaced-large
- .col-md-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 FAQ
- .row
- .col-md-6
- h3 #{translate("faq_how_free_trial_works_question")}
- p #{translate('faq_how_does_free_trial_works_answer', { appName:'{{settings.appName}}', len:'7' })}
- .col-md-6
- h3 #{translate('faq_change_plans_question')}
- p #{translate('faq_change_plans_answer')}
- .row
- .col-md-6
- h3 #{translate('faq_do_collab_need_premium_question')}
- p #{translate('faq_do_collab_need_premium_answer')}
- .col-md-6
- h3 #{translate('faq_need_more_collab_question')}
- p !{translate('faq_need_more_collab_answer', { referFriendsLink: translate('referring_your_friends') })}
- .row
- .col-md-6
- h3 #{translate('faq_purchase_more_licenses_question')}
- p !{translate('faq_purchase_more_licenses_answer', { groupLink: translate('discounted_group_accounts') })}
- a(href='#groups', ng-click="openGroupPlanModal()") #{translate("get_in_touch_for_details")}
- .col-md-6
- h3 #{translate('faq_monthly_or_annual_question')}
- p #{translate('faq_monthly_or_annual_answer')}
- .row
- .col-md-6
- h3 #{translate('faq_how_to_pay_question')}
- p #{translate('faq_how_to_pay_answer')}
- .col-md-6
- h3 #{translate('faq_pay_by_invoice_question')}
- p !{translate('faq_pay_by_invoice_answer', {}, [{ name: 'a', attrs: { href: "#pay-by-invoice", 'ng-controller': "ContactGeneralModal", 'ng-click': "openModal()" }}])}
diff --git a/services/web/app/views/subscriptions/_plans_page_tables.pug b/services/web/app/views/subscriptions/_plans_page_tables.pug
deleted file mode 100644
index 9db4d6b7ec..0000000000
--- a/services/web/app/views/subscriptions/_plans_page_tables.pug
+++ /dev/null
@@ -1,117 +0,0 @@
-
-//- Features Tables
-mixin table_premium
- table.card.plans-table.plans-table-main
- tr
- th
- th #{translate("free")}
- th #{translate("personal")}
- th #{translate("collaborator")}
- .outer.outer-top
- .outer-content
- .best-value
- strong #{translate('best_value')}
- th #{translate("professional")}
-
- tr
- td #{translate("price")}
- td #{translate("free")}
- td
- +price_personal
- td
- +price_collaborator
- td
- +price_professional
-
- for feature in planFeatures
- tr
- td(event-tracking="features-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}`)
- if feature.info
- span(tooltip=translate(feature.info)) #{translate(feature.feature)}
- else
- | #{translate(feature.feature)}
- for plan in feature.plans
- td(ng-non-bindable)
- if feature.value == 'str'
- | #{plan}
- else if plan
- i.fa.fa-check(aria-hidden="true")
- span.sr-only Feature included
- else
- i.fa.fa-times(aria-hidden="true")
- span.sr-only Feature not included
-
- tr
- td
- td
- +btn_buy_free('table')
- td
- +btn_buy_personal('table')
- td
- +btn_buy_collaborator('table')
- .outer.outer-btm
- .outer-content
- td
- +btn_buy_professional('table')
-
-mixin table_cell_student(feature)
- if feature.value == 'str'
- | #{feature.student}
- else if feature.student
- i.fa.fa-check(aria-hidden="true")
- span.sr-only Feature included
- else
- i.fa.fa-times(aria-hidden="true")
- span.sr-only Feature not included
-
-mixin table_student
- table.card.plans-table.plans-table-student
- tr
- th
- th #{translate("free")}
- th #{translate("student")} (#{translate("annual")})
- .outer.outer-top
- .outer-content
- .best-value
- strong Best Value
- th #{translate("student")}
-
- tr
- td #{translate("price")}
- td #{translate("free")}
- td
- +price_student_annual
- td
- +price_student_monthly
-
- for feature in planFeatures
- tr
- td(event-tracking="plans-page-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}`)
- if feature.info
- span(tooltip=translate(feature.info)) #{translate(feature.feature)}
- else
- | #{translate(feature.feature)}
- td(ng-non-bindable)
- if feature.value == 'str'
- | #{feature.plans.free}
- else if feature.plans.free
- i.fa.fa-check(aria-hidden="true")
- span.sr-only Feature included
- else
- i.fa.fa-times(aria-hidden="true")
- span.sr-only Feature included
- td(ng-non-bindable)
- +table_cell_student(feature)
- td(ng-non-bindable)
- +table_cell_student(feature)
-
- tr
- td
- td
- +btn_buy_free('table')
- td
- +btn_buy_student('table', 'annual')
- .outer.outer-btm
- .outer-content
- td
- +btn_buy_student('table', 'monthly')
diff --git a/services/web/app/views/subscriptions/_plans_quotes.pug b/services/web/app/views/subscriptions/_plans_quotes.pug
deleted file mode 100644
index e7c6978a48..0000000000
--- a/services/web/app/views/subscriptions/_plans_quotes.pug
+++ /dev/null
@@ -1,25 +0,0 @@
-.row.row-spaced-large
- .col-md-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 #{translate('in_good_company')}
-.row
- .col-md-6
- div
- .row
- .col-md-3
- .circle-img
- img(src=buildImgPath('advocates/schultz.jpg') alt="Kevin Schultz")
- .col-md-9
- blockquote
- p It is the ability to collaborate very easily that drew me to Overleaf.
- footer Kevin Schultz, Assistant Professor of Physics, Hartwick College
- .col-md-6
- div
- .row
- .col-md-3
- .circle-img
- img(src=buildImgPath('advocates/dagoret-campagne.jpg') alt="Dr Sylvie Dagoret-Campagne")
- .col-md-9
- blockquote
- p Overleaf is a great educational tool for publishing scientific documents.
- footer Dr Sylvie Dagoret-Campagne, Director of Research at CNRS, University of Paris-Saclay
\ No newline at end of file
diff --git a/services/web/app/views/subscriptions/plans.pug b/services/web/app/views/subscriptions/plans.pug
deleted file mode 100644
index 5b9e4caf29..0000000000
--- a/services/web/app/views/subscriptions/plans.pug
+++ /dev/null
@@ -1,100 +0,0 @@
-extends ../layout
-
-include _plans_page_mixins
-include _plans_page_tables
-
-block vars
- - metadata = { viewport: true }
-
-block append meta
- meta(name="ol-recomendedCurrency" content=recomendedCurrency)
- meta(name="ol-groupPlans" data-type="json" content=groupPlans)
-
-block content
- main.content.content-alt#main-content
- .container
- .user-notifications
- ul.list-unstyled(ng-cloak)
- li.notification-entry
- .alert.alert-info
- .notification-body
- span To help you work from home throughout 2021, we're providing discounted plans and special initiatives.
- .notification-action
- a.btn.btn-sm.btn-info(href="https://www.overleaf.com/events/wfh2021" event-tracking="Event-Pages" event-tracking-trigger="click" event-tracking-ga="WFH-Offer-Click" event-tracking-label="Plans-Banner") Upgrade
- .content-page
- .plans(ng-controller="PlansController")
- .container(ng-cloak)
- .row
- .col-md-12
- .page-header.centered.plans-header.text-centered
- h1.text-capitalize(ng-non-bindable) #{translate('get_instant_access_to')} #{settings.appName}
- .row
- .col-md-8.col-md-offset-2
- p.text-centered #{translate("sl_benefits_plans")}
-
- +allCardsAndControls()
-
- .row.row-spaced-large.text-centered
- .col-xs-12
- p.text-centered !{translate('also_provides_free_plan', { appName:'{{settings.appName}}' }, [{ name: 'a', attrs: { href: '/register' }}])}
- i.fa.fa-cc-mastercard.fa-2x(aria-hidden="true")
- span.sr-only Mastercard accepted
- i.fa.fa-cc-visa.fa-2x(aria-hidden="true")
- span.sr-only Visa accepted
- i.fa.fa-cc-amex.fa-2x(aria-hidden="true")
- span.sr-only Amex accepted
- i.fa.fa-cc-paypal.fa-2x(aria-hidden="true")
- span.sr-only Paypal accepted
- div.text-centered #{translate('change_plans_any_time')}
#{translate('billed_after_x_days', {len:'7'})}
- br
- div.text-centered #{translate('subject_to_additional_vat')}
#{translate('select_country_vat')}
-
- .row.row-spaced-large
- .col-md-8.col-md-offset-2
- .card.text-centered
- .card-header
- h2 #{translate('looking_multiple_licenses')}
- span #{translate('reduce_costs_group_licenses')}
- br
- br
- a.btn.btn-default(
- href="#groups"
- ng-click="openGroupPlanModal()"
- ) #{translate('find_out_more')}
-
- .row.row-spaced-large
- .col-sm-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 #{translate('compare_plan_features')}
- .row
- .col-md-6.col-md-offset-3
- +plan_switch('table')
- .col-md-3.text-right
- +currency_dropdown
- .row(event-tracking="features-table-viewed" event-tracking-ga="subscription-funnel" event-tracking-trigger="scroll" event-tracking-send-once="true" event-tracking-label="exp-")
- .col-sm-12(ng-if="ui.view != 'student'")
- +table_premium
- .col-sm-12(ng-if="ui.view == 'student'")
- +table_student
-
- include _plans_quotes
-
- include _plans_faq
-
- #bottom-cards.row.row-spaced(style="display: none;")
- .col-sm-12
- +allCardsAndControls(true, 'bottom')
-
- .row.row-spaced-large
- .col-md-12
- .plans-header.plans-subheader.text-centered
- h2.header-with-btn #{translate('still_have_questions')}
- button.btn.btn-default.btn-header.text-capitalize(
- ng-controller="ContactGeneralModal"
- ng-click="openModal()"
- ) #{translate('get_in_touch')}
- != moduleIncludes("contactModalGeneral", locals)
-
- .row.row-spaced
-
- include _modal_group_purchase
diff --git a/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js b/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js
index a0c1187b42..78f3dd1039 100644
--- a/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js
+++ b/services/web/test/unit/src/Subscription/SubscriptionControllerTests.js
@@ -185,40 +185,10 @@ describe('SubscriptionController', function () {
})
})
- describe('splitTest', function () {
- const cases = [
- {
- variant: 'default',
- template: 'subscriptions/plans',
- },
- {
- variant: 'de-ng',
- template: 'subscriptions/plans-marketing',
- },
- ]
- for (const { variant, template } of cases) {
- describe(variant, function () {
- beforeEach(function () {
- const assignment = { variant }
- this.SplitTestV2Hander.promises.getAssignmentForSession.resolves(
- assignment
- )
- })
- it(`should render template ${template}`, function (done) {
- this.res.render = page => {
- page.should.equal(template)
- done()
- }
- this.SubscriptionController.plansPage(this.req, this.res)
- })
- })
- }
- })
-
describe('groupPlanModal data', function () {
it('should pass local currency if valid', function (done) {
this.res.render = (page, opts) => {
- page.should.equal('subscriptions/plans')
+ page.should.equal('subscriptions/plans-marketing')
opts.groupPlanModalDefaults.currency.should.equal('GBP')
done()
}
@@ -230,7 +200,7 @@ describe('SubscriptionController', function () {
it('should fallback to USD when valid', function (done) {
this.res.render = (page, opts) => {
- page.should.equal('subscriptions/plans')
+ page.should.equal('subscriptions/plans-marketing')
opts.groupPlanModalDefaults.currency.should.equal('USD')
done()
}
@@ -242,7 +212,7 @@ describe('SubscriptionController', function () {
it('should pass valid options for group plan modal and discard invalid', function (done) {
this.res.render = (page, opts) => {
- page.should.equal('subscriptions/plans')
+ page.should.equal('subscriptions/plans-marketing')
opts.groupPlanModalDefaults.size.should.equal('42')
opts.groupPlanModalDefaults.plan_code.should.equal('collaborator')
opts.groupPlanModalDefaults.currency.should.equal('GBP')