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
-
-
-
-
-
-
-
-
-
-
-
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"]');