From 06d47f53e5959184cd6b6c3779337363cfd76a35 Mon Sep 17 00:00:00 2001 From: Rishabh Garg Date: Fri, 15 Jan 2021 20:01:40 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Added=20new=20FirstPromoter=20integ?= =?UTF-8?q?ration=20(#1825)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit no issue Adds new FirstPromoter integration on the integrations page. FirstPromoter enables sites to launch their own members referral program, and integration allows Site admins to directly add their FirstPromoter tracking ID in the settings to enable FirstPromoter script on their site. --- .../settings/integrations/firstpromoter.js | 70 ++++++++++++++++ app/models/setting.js | 2 + app/router.js | 1 + .../settings/integrations/firstpromoter.js | 39 +++++++++ app/services/settings.js | 2 +- app/styles/layouts/settings.css | 5 ++ app/templates/settings/integrations.hbs | 24 +++++- .../settings/integrations/firstpromoter.hbs | 79 ++++++++++++++++++ public/assets/icons/firstpromoter.png | Bin 0 -> 15941 bytes public/assets/img/firstpromoter.png | Bin 0 -> 15941 bytes 10 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 app/controllers/settings/integrations/firstpromoter.js create mode 100644 app/routes/settings/integrations/firstpromoter.js create mode 100644 app/templates/settings/integrations/firstpromoter.hbs create mode 100644 public/assets/icons/firstpromoter.png create mode 100644 public/assets/img/firstpromoter.png diff --git a/app/controllers/settings/integrations/firstpromoter.js b/app/controllers/settings/integrations/firstpromoter.js new file mode 100644 index 000000000..8414c7c72 --- /dev/null +++ b/app/controllers/settings/integrations/firstpromoter.js @@ -0,0 +1,70 @@ +/* eslint-disable ghost/ember/alias-model-in-controller */ +import Controller from '@ember/controller'; +import {inject as service} from '@ember/service'; +import {task} from 'ember-concurrency'; + +export default Controller.extend({ + notifications: service(), + settings: service(), + + leaveSettingsTransition: null, + + actions: { + update(value) { + this.settings.set('firstpromoter', value); + }, + + save() { + this.save.perform(); + }, + + toggleLeaveSettingsModal(transition) { + let leaveTransition = this.leaveSettingsTransition; + + if (!transition && this.showLeaveSettingsModal) { + this.set('leaveSettingsTransition', null); + this.set('showLeaveSettingsModal', false); + return; + } + + if (!leaveTransition || transition.targetName === leaveTransition.targetName) { + this.set('leaveSettingsTransition', transition); + + // if a save is running, wait for it to finish then transition + if (this.save.isRunning) { + return this.save.last.then(() => { + transition.retry(); + }); + } + + // we genuinely have unsaved data, show the modal + this.set('showLeaveSettingsModal', true); + } + }, + + leaveSettings() { + let transition = this.leaveSettingsTransition; + let settings = this.settings; + + if (!transition) { + this.notifications.showAlert('Sorry, there was an error in the application. Please let the Ghost team know what happened.', {type: 'error'}); + return; + } + + // roll back changes on settings model + settings.rollbackAttributes(); + + return transition.retry(); + } + }, + + save: task(function* () { + try { + yield this.settings.validate(); + return yield this.settings.save(); + } catch (error) { + this.notifications.showAPIError(error); + throw error; + } + }).drop() +}); diff --git a/app/models/setting.js b/app/models/setting.js index f80ff75b2..34421f9fc 100644 --- a/app/models/setting.js +++ b/app/models/setting.js @@ -26,6 +26,8 @@ export default Model.extend(ValidationEngine, { slack: attr('slack-settings'), amp: attr('boolean'), ampGtagId: attr('string'), + firstpromoter: attr('boolean'), + firstpromoterId: attr('string'), unsplash: attr('unsplash-settings', { defaultValue() { return {isActive: true}; diff --git a/app/router.js b/app/router.js index 06a0e77a6..9ae86a368 100644 --- a/app/router.js +++ b/app/router.js @@ -59,6 +59,7 @@ Router.map(function () { }); this.route('settings.integrations.slack', {path: '/settings/integrations/slack'}); this.route('settings.integrations.amp', {path: '/settings/integrations/amp'}); + this.route('settings.integrations.firstpromoter', {path: '/settings/integrations/firstpromoter'}); this.route('settings.integrations.unsplash', {path: '/settings/integrations/unsplash'}); this.route('settings.integrations.zapier', {path: '/settings/integrations/zapier'}); diff --git a/app/routes/settings/integrations/firstpromoter.js b/app/routes/settings/integrations/firstpromoter.js new file mode 100644 index 000000000..675b174c3 --- /dev/null +++ b/app/routes/settings/integrations/firstpromoter.js @@ -0,0 +1,39 @@ +import AuthenticatedRoute from 'ghost-admin/routes/authenticated'; +import CurrentUserSettings from 'ghost-admin/mixins/current-user-settings'; +import {inject as service} from '@ember/service'; + +export default AuthenticatedRoute.extend(CurrentUserSettings, { + settings: service(), + + beforeModel() { + this._super(...arguments); + return this.get('session.user') + .then(this.transitionAuthor()) + .then(this.transitionEditor()) + .then(this.settings.reload()); + }, + + actions: { + save() { + this.controller.send('save'); + }, + + willTransition(transition) { + let controller = this.controller; + let modelIsDirty = this.settings.get('hasDirtyAttributes'); + + if (modelIsDirty) { + transition.abort(); + controller.send('toggleLeaveSettingsModal', transition); + return; + } + } + }, + + buildRouteInfoMetadata() { + return { + titleToken: 'FirstPromoter' + }; + } + +}); diff --git a/app/services/settings.js b/app/services/settings.js index 9bb57166d..9af283f2c 100644 --- a/app/services/settings.js +++ b/app/services/settings.js @@ -27,7 +27,7 @@ export default Service.extend(_ProxyMixin, ValidationEngine, { _loadSettings() { if (!this._loadingPromise) { this._loadingPromise = this.store - .queryRecord('setting', {group: 'site,theme,private,members,portal,newsletter,email,amp,labs,slack,unsplash,views'}) + .queryRecord('setting', {group: 'site,theme,private,members,portal,newsletter,email,amp,labs,slack,unsplash,views,firstpromoter'}) .then((settings) => { this._loadingPromise = null; return settings; diff --git a/app/styles/layouts/settings.css b/app/styles/layouts/settings.css index 0415c3f5c..bb408e122 100644 --- a/app/styles/layouts/settings.css +++ b/app/styles/layouts/settings.css @@ -899,6 +899,11 @@ p.theme-validation-details { padding-right: 40px; } +.gh-setting-firstpromoter-liquid { + padding-left: 40px; + padding-right: 40px; +} + .gh-setting-unsplash-checkbox { margin-bottom: 0; } \ No newline at end of file diff --git a/app/templates/settings/integrations.hbs b/app/templates/settings/integrations.hbs index 14380440c..a608e2aa3 100644 --- a/app/templates/settings/integrations.hbs +++ b/app/templates/settings/integrations.hbs @@ -153,7 +153,29 @@ - +
+ +
+
+
+
+

FirstPromoter

+

Launch your member referral program

+
+
+
+
+ {{#if this.settings.firstpromoter}} + Active + {{else}} + Configure + {{/if}} + {{svg-jar "arrow-right"}} +
+
+
+
+
diff --git a/app/templates/settings/integrations/firstpromoter.hbs b/app/templates/settings/integrations/firstpromoter.hbs new file mode 100644 index 000000000..b483cedf1 --- /dev/null +++ b/app/templates/settings/integrations/firstpromoter.hbs @@ -0,0 +1,79 @@ +
+ +

+ Integrations + {{svg-jar "arrow-right"}} + FirstPromoter +

+
+ +
+
+ + {{#if this.showLeaveSettingsModal}} + + {{/if}} + +
+
+
+
+ +
+
+
+

FirstPromoter

+

Launch your own member referral program

+
+
+ +
FirstPromoter configuration
+
+
+
+
Enable FirstPromoter
+
Enable FirstPromoter for tracking referrals
+
+
+
+ +
+
+
+ {{#liquid-if this.settings.firstpromoter class="nl5 nr5"}} +
+
+
FirstPromoter Tracking ID
+
Affiliate and referral tracking, find your ID here
+
+ + + + +
+
+
+ {{/liquid-if}} +
+
+
diff --git a/public/assets/icons/firstpromoter.png b/public/assets/icons/firstpromoter.png new file mode 100644 index 0000000000000000000000000000000000000000..3252af7d6045022b860f945a0f818d1821895050 GIT binary patch literal 15941 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 literal 0 HcmV?d00001 diff --git a/public/assets/img/firstpromoter.png b/public/assets/img/firstpromoter.png new file mode 100644 index 0000000000000000000000000000000000000000..3252af7d6045022b860f945a0f818d1821895050 GIT binary patch literal 15941 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 literal 0 HcmV?d00001