diff --git a/ghost/admin/app/components/gh-member-settings-form.js b/ghost/admin/app/components/gh-member-settings-form.js index ac3fedfd2a..4ffc670c24 100644 --- a/ghost/admin/app/components/gh-member-settings-form.js +++ b/ghost/admin/app/components/gh-member-settings-form.js @@ -46,14 +46,11 @@ export default class extends Component { } get hasSingleNewsletter() { - if (!this.feature.get('multipleNewsletters')) { - return true; - } return this.newslettersList?.length === 1; } get hasMultipleNewsletters() { - return !!(this.feature.get('multipleNewsletters') && this.newslettersList?.length > 1); + return !!(this.newslettersList?.length > 1); } get isCreatingComplimentary() { @@ -124,9 +121,7 @@ export default class extends Component { @action setup() { this.fetchTiers.perform(); - if (this.feature.get('multipleNewsletters')) { - this.fetchNewsletters.perform(); - } + this.fetchNewsletters.perform(); } @action diff --git a/ghost/admin/app/components/gh-members-list-item.hbs b/ghost/admin/app/components/gh-members-list-item.hbs index 5afc8b329e..77039f9564 100644 --- a/ghost/admin/app/components/gh-members-list-item.hbs +++ b/ghost/admin/app/components/gh-members-list-item.hbs @@ -22,25 +22,23 @@ - {{#if (feature "membersTableStatus")}} - {{#if this.hasMultipleTiers}} - - {{#if (not (is-empty @member.status))}} - {{capitalize @member.status}} - {{else}} - - - {{/if}} -
{{this.tiers}}
-
- {{else}} - - {{#if (not (is-empty @member.status))}} - {{capitalize @member.status}} - {{else}} - - - {{/if}} - - {{/if}} + {{#if this.hasMultipleTiers}} + + {{#if (not (is-empty @member.status))}} + {{capitalize @member.status}} + {{else}} + - + {{/if}} +
{{this.tiers}}
+
+ {{else}} + + {{#if (not (is-empty @member.status))}} + {{capitalize @member.status}} + {{else}} + - + {{/if}} + {{/if}} {{#if @newsletterEnabled}} {{#if (feature "emailAnalytics")}} diff --git a/ghost/admin/app/components/settings/newsletters/newsletter-management.hbs b/ghost/admin/app/components/settings/newsletters/newsletter-management.hbs index f473d12ec6..d4d26dd25a 100644 --- a/ghost/admin/app/components/settings/newsletters/newsletter-management.hbs +++ b/ghost/admin/app/components/settings/newsletters/newsletter-management.hbs @@ -1,10 +1,6 @@
- {{#if (feature "multipleNewslettersUI")}} -

Newsletters

- {{else}} -

Newsletter

- {{/if}} +

Newsletters

{{#if this.archivedNewsletters}}
diff --git a/ghost/admin/app/controllers/members.js b/ghost/admin/app/controllers/members.js index d9323cd0f9..87e35838fe 100644 --- a/ghost/admin/app/controllers/members.js +++ b/ghost/admin/app/controllers/members.js @@ -161,10 +161,7 @@ export default class MembersController extends Controller { } get filterColumns() { - const defaultColumns = ['name', 'email', 'email_open_rate', 'created_at']; - if (this.feature.get('membersTableStatus')) { - defaultColumns.push('status', 'tier'); - } + const defaultColumns = ['name', 'email', 'email_open_rate', 'created_at', 'status', 'tier']; const availableFilters = this.filters.length ? this.filters : this.softFilters; return availableFilters.map((filter) => { return filter.type; diff --git a/ghost/admin/app/services/feature.js b/ghost/admin/app/services/feature.js index 312cae83a5..94cc564079 100644 --- a/ghost/admin/app/services/feature.js +++ b/ghost/admin/app/services/feature.js @@ -56,13 +56,9 @@ export default class FeatureService extends Service { nightShift; // labs flags - @feature('membersActivity') membersActivity; @feature('urlCache') urlCache; @feature('beforeAfterCard') beforeAfterCard; - @feature('multipleNewsletters') multipleNewsletters; - @feature('multipleNewslettersUI') multipleNewslettersUI; @feature('tweetGridCard') tweetGridCard; - @feature('membersTableStatus') membersTableStatus; @feature('selectablePortalLinks') selectablePortalLinks; _user = null; diff --git a/ghost/admin/app/templates/members.hbs b/ghost/admin/app/templates/members.hbs index 73eff4716b..7e512e934a 100644 --- a/ghost/admin/app/templates/members.hbs +++ b/ghost/admin/app/templates/members.hbs @@ -112,9 +112,7 @@ {{this.listHeader}} - {{#if (feature "membersTableStatus")}} - Status - {{/if}} + Status {{#if (not-eq this.settings.editorDefaultEmailRecipients "disabled")}} Open rate {{/if}} diff --git a/ghost/admin/app/templates/settings/labs.hbs b/ghost/admin/app/templates/settings/labs.hbs index 89f7aef159..b3a76163a0 100644 --- a/ghost/admin/app/templates/settings/labs.hbs +++ b/ghost/admin/app/templates/settings/labs.hbs @@ -187,19 +187,6 @@

Alpha Features

-
-
-
-

Members Activity

-

- Enable recording of member activity for analytics -

-
-
- -
-
-
@@ -239,32 +226,6 @@
-
-
-
-

Multiple newsletters

-

- Manage and send multiple newsletter lists -

-
-
- -
-
-
-
-
-
-

Multiple newsletters UI

-

- Enables creating multiple newsletters -

-
-
- -
-
-
{{/if}} diff --git a/ghost/admin/mirage/fixtures/settings.js b/ghost/admin/mirage/fixtures/settings.js index 8fe96faec6..956a8ab6da 100644 --- a/ghost/admin/mirage/fixtures/settings.js +++ b/ghost/admin/mirage/fixtures/settings.js @@ -75,8 +75,6 @@ export default [ key: 'labs', value: JSON.stringify({ // Keep the GA flags that are not yet cleaned up in frontend code here - multipleNewsletters: true, - multipleNewslettersUI: true }), group: 'labs', created_at: '2015-01-12T18:29:01.000Z', diff --git a/ghost/admin/tests/acceptance/dashboard-test.js b/ghost/admin/tests/acceptance/dashboard-test.js index 33cafd448c..3406b3f763 100644 --- a/ghost/admin/tests/acceptance/dashboard-test.js +++ b/ghost/admin/tests/acceptance/dashboard-test.js @@ -1,7 +1,6 @@ import {authenticateSession, invalidateSession} from 'ember-simple-auth/test-support'; import {currentURL, visit} from '@ember/test-helpers'; import {describe, it} from 'mocha'; -import {enableLabsFlag} from '../helpers/labs-flag'; import {expect} from 'chai'; import {setupApplicationTest} from 'ember-mocha'; import {setupMirage} from 'ember-cli-mirage/test-support'; @@ -13,7 +12,6 @@ describe('Acceptance: Dashboard', function () { beforeEach(async function () { this.server.loadFixtures('configs'); this.server.loadFixtures('settings'); - enableLabsFlag(this.server, 'membersActivity'); let role = this.server.create('role', {name: 'Administrator'}); this.server.create('user', {roles: [role]}); diff --git a/ghost/admin/tests/acceptance/members/filter-test.js b/ghost/admin/tests/acceptance/members/filter-test.js index 36752a6db0..7d6e758acb 100644 --- a/ghost/admin/tests/acceptance/members/filter-test.js +++ b/ghost/admin/tests/acceptance/members/filter-test.js @@ -58,7 +58,7 @@ describe('Acceptance: Members filtering', function () { expect(find('[data-test-button="members-filter-actions"] span'), 'filter button').to.not.have.class('gh-btn-label-green'); // standard columns are shown - expect(findAll('[data-test-table="members"] [data-test-table-column]').length).to.equal(3); + expect(findAll('[data-test-table="members"] [data-test-table-column]').length).to.equal(4); }); describe('filtering', function () { @@ -112,15 +112,15 @@ describe('Acceptance: Members filtering', function () { }); it('can filter by tier', async function () { - // add some labels to test the selection dropdown + // add multiple tiers to activate tiers filtering const newsletter = this.server.create('newsletter', {status: 'active'}); this.server.createList('tier', 4); - // add a labelled member so we can test the filter includes correctly + // add some members with tiers const tier = this.server.create('tier'); this.server.createList('member', 3, {tiers: [tier], newsletters: [newsletter]}); - // add some non-labelled members so we can see the filter excludes correctly + // add some free members so we can see the filter excludes correctly this.server.createList('member', 4, {newsletters: [newsletter]}); await visit('/members'); @@ -149,9 +149,9 @@ describe('Acceptance: Members filtering', function () { expect(findAll('[data-test-list="members-list-item"]').length, `# of filtered member rows - ${tier.name}`) .to.equal(3); // table shows labels column+data - expect(find('[data-test-table-column="tier"]')).to.exist; - expect(findAll('[data-test-table-data="tier"]').length).to.equal(3); - expect(find('[data-test-table-data="tier"]')).to.contain.text(tier.name); + expect(find('[data-test-table-column="status"]')).to.exist; + expect(findAll('[data-test-table-data="status"]').length).to.equal(3); + expect(find('[data-test-table-data="status"]')).to.contain.text(tier.name); // can delete filter await click('[data-test-delete-members-filter="0"]');