mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-08-03 04:29:40 +00:00
refactor(payments): move payments into it's own service, out of rootCtrl
This commit is contained in:
parent
8c5842eb52
commit
0a53a5717e
7 changed files with 87 additions and 66 deletions
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
window.habitrpg = angular.module('habitrpg',
|
||||
['ngResource', 'ngSanitize', 'userServices', 'groupServices', 'memberServices', 'challengeServices',
|
||||
'authServices', 'notificationServices', 'guideServices', 'authCtrl',
|
||||
'authServices', 'notificationServices', 'guideServices', 'authCtrl', 'paymentServices',
|
||||
'ui.bootstrap', 'ui.keypress', 'ui.router', 'chieffancypants.loadingBar', 'At', 'infinite-scroll', 'ui.select2', 'angular.filter'])
|
||||
|
||||
// @see https://github.com/angular-ui/ui-router/issues/110 and https://github.com/HabitRPG/habitrpg/issues/1705
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
/* Make user and settings available for everyone through root scope.
|
||||
*/
|
||||
|
||||
habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$http', '$state', '$stateParams', 'Notification', 'Groups', 'Shared', 'Content', '$modal', '$timeout', 'ApiUrlService', '$filter',
|
||||
function($scope, $rootScope, $location, User, $http, $state, $stateParams, Notification, Groups, Shared, Content, $modal, $timeout, ApiUrlService, $filter) {
|
||||
habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$http', '$state', '$stateParams', 'Notification', 'Groups', 'Shared', 'Content', '$modal', '$timeout', 'ApiUrlService', 'Payments',
|
||||
function($scope, $rootScope, $location, User, $http, $state, $stateParams, Notification, Groups, Shared, Content, $modal, $timeout, ApiUrlService, Payments) {
|
||||
var user = User.user;
|
||||
|
||||
var initSticky = _.once(function(){
|
||||
|
|
@ -33,6 +33,7 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$
|
|||
$rootScope.Math = Math;
|
||||
$rootScope.Groups = Groups;
|
||||
$rootScope.toJson = angular.toJson;
|
||||
$rootScope.Payments = Payments;
|
||||
|
||||
// Angular UI Router
|
||||
$rootScope.$state = $state;
|
||||
|
|
@ -144,63 +145,6 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$
|
|||
return JSON.stringify(gift);
|
||||
}
|
||||
|
||||
$rootScope.showStripe = function(data) {
|
||||
var sub =
|
||||
data.subscription ? data.subscription
|
||||
: data.gift && data.gift.type=='subscription' ? data.gift.subscription.months
|
||||
: false;
|
||||
sub = sub && Content.subscriptionBlocks[sub];
|
||||
var amount = // 500 = $5
|
||||
sub ? sub.price*100
|
||||
: data.gift && data.gift.type=='gems' ? data.gift.gems.amount/4*100
|
||||
: 500;
|
||||
StripeCheckout.open({
|
||||
key: window.env.STRIPE_PUB_KEY,
|
||||
address: false,
|
||||
amount: amount,
|
||||
name: sub ? window.env.t('subscribe') : window.env.t('checkout'),
|
||||
description: sub ? window.env.t('buySubsText') : window.env.t('donationDesc'),
|
||||
panelLabel: sub ? window.env.t('subscribe') : window.env.t('checkout'),
|
||||
token: function(res) {
|
||||
var url = '/stripe/checkout?a=a'; // just so I can concat &x=x below
|
||||
if (data.gift) url += '&gift=' + $rootScope.encodeGift(data.uuid, data.gift);
|
||||
if (data.subscription) url += '&sub='+sub.months;
|
||||
$scope.$apply(function(){
|
||||
$http.post(url, res).success(function() {
|
||||
window.location.reload(true);
|
||||
}).error(function(res) {
|
||||
alert(res.err);
|
||||
});
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$rootScope.showStripeEdit = function(){
|
||||
StripeCheckout.open({
|
||||
key: window.env.STRIPE_PUB_KEY,
|
||||
address: false,
|
||||
name: 'Update',
|
||||
description: 'Update the card to be charged for your subscription',
|
||||
panelLabel: 'Update Card',
|
||||
token: function(data) {
|
||||
var url = '/stripe/subscribe/edit?plan=basic_earned';
|
||||
$scope.$apply(function(){
|
||||
$http.post(url, data).success(function() {
|
||||
window.location.reload(true);
|
||||
}).error(function(data) {
|
||||
alert(data.err);
|
||||
});
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$rootScope.cancelSubscription = function(){
|
||||
if (!confirm(window.env.t('sureCancelSub'))) return;
|
||||
window.location.href = '/' + user.purchased.plan.paymentMethod.toLowerCase() + '/subscribe/cancel?_id=' + user._id + '&apiToken=' + user.apiToken;
|
||||
}
|
||||
|
||||
$scope.contribText = function(contrib, backer){
|
||||
if (!contrib && !backer) return;
|
||||
if (backer && backer.npc) return backer.npc;
|
||||
|
|
|
|||
74
public/js/services/paymentServices.js
Normal file
74
public/js/services/paymentServices.js
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('paymentServices',[]).factory('Payments',
|
||||
['$rootScope', 'User', '$http', 'Content',
|
||||
function($rootScope, User, $http, Content) {
|
||||
var user = User.user;
|
||||
var plan = User.user.purchased.plan;
|
||||
var Payments = {};
|
||||
|
||||
Payments.currentSub = _.find(Content.subscriptionBlocks, function(b){
|
||||
switch (plan.paymentMethod) {
|
||||
case 'Stripe':
|
||||
return b.key == plan.planId;
|
||||
case 'Paypal':
|
||||
return b.paypalKey == plan.planId;
|
||||
default: return undefined;
|
||||
}
|
||||
})
|
||||
|
||||
Payments.showStripe = function(data) {
|
||||
var sub =
|
||||
data.subscription ? data.subscription
|
||||
: data.gift && data.gift.type=='subscription' ? data.gift.subscription.months
|
||||
: false;
|
||||
sub = sub && Content.subscriptionBlocks[sub];
|
||||
var amount = // 500 = $5
|
||||
sub ? sub.price*100
|
||||
: data.gift && data.gift.type=='gems' ? data.gift.gems.amount/4*100
|
||||
: 500;
|
||||
StripeCheckout.open({
|
||||
key: window.env.STRIPE_PUB_KEY,
|
||||
address: false,
|
||||
amount: amount,
|
||||
name: sub ? window.env.t('subscribe') : window.env.t('checkout'),
|
||||
description: sub ? window.env.t('buySubsText') : window.env.t('donationDesc'),
|
||||
panelLabel: sub ? window.env.t('subscribe') : window.env.t('checkout'),
|
||||
token: function(res) {
|
||||
var url = '/stripe/checkout?a=a'; // just so I can concat &x=x below
|
||||
if (data.gift) url += '&gift=' + $rootScope.encodeGift(data.uuid, data.gift);
|
||||
if (data.subscription) url += '&sub='+sub.months;
|
||||
$http.post(url, res).success(function() {
|
||||
window.location.reload(true);
|
||||
}).error(function(res) {
|
||||
alert(res.err);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Payments.showStripeEdit = function(){
|
||||
StripeCheckout.open({
|
||||
key: window.env.STRIPE_PUB_KEY,
|
||||
address: false,
|
||||
name: 'Update',
|
||||
description: 'Update the card to be charged for your subscription',
|
||||
panelLabel: 'Update Card',
|
||||
token: function(data) {
|
||||
var url = '/stripe/subscribe/edit?plan=basic_earned';
|
||||
$http.post(url, data).success(function() {
|
||||
window.location.reload(true);
|
||||
}).error(function(data) {
|
||||
alert(data.err);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Payments.cancelSubscription = function(){
|
||||
if (!confirm(window.env.t('sureCancelSub'))) return;
|
||||
window.location.href = '/' + plan.paymentMethod.toLowerCase() + '/subscribe/cancel?_id=' + user._id + '&apiToken=' + user.apiToken;
|
||||
}
|
||||
|
||||
return Payments;
|
||||
}]);
|
||||
|
|
@ -46,6 +46,7 @@
|
|||
"js/services/memberServices.js",
|
||||
"js/services/guideServices.js",
|
||||
"js/services/challengeServices.js",
|
||||
"js/services/paymentServices.js",
|
||||
|
||||
"js/filters/filters.js",
|
||||
|
||||
|
|
|
|||
|
|
@ -236,7 +236,9 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template')
|
|||
tr(ng-if='p.dateTerminated'): td.alert.alert-warning
|
||||
i.glyphicon.glyphicon-time
|
||||
| #{env.t('subCanceled')} <strong>{{moment(p.dateTerminated).format('MM/DD/YYYY')}}</strong>
|
||||
tr(ng-if='!p.dateTerminated'): td: h4=env.t('subscribed')
|
||||
tr(ng-if='!p.dateTerminated'): td
|
||||
h4=env.t('subscribed')
|
||||
p(ng-if='Payments.currentSub') Recurring ${{Payments.currentSub.price}} each {{Payments.currentSub.months}} Month(s) ({{p.paymentMethod}})
|
||||
tr(ng-if='p.extraMonths'): td
|
||||
span.glyphicon.glyphicon-credit-card
|
||||
| You have {{p.extraMonths | number:2}} months of subscription credit.
|
||||
|
|
@ -256,8 +258,8 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template')
|
|||
| #{block.months} Month(s) Recurring: $#{block.price} #{env.t('monthUSD')}
|
||||
|
||||
h3(ng-if='(p.customerId && p.dateTerminated)') Resubscribe
|
||||
button.btn.btn-primary(ng-click='showStripe({subscription:_subscription.months})', ng-disabled='!_subscription.months') Card
|
||||
button.btn.btn-primary(ng-click='Payments.showStripe({subscription:_subscription.months})', ng-disabled='!_subscription.months') Card
|
||||
button.btn.btn-warning(href='/paypal/subscribe?_id={{user._id}}&apiToken={{user.apiToken}}&sub={{_subscription.months}}', ng-disabled='!_subscription.months') PayPal
|
||||
div(ng-if='p.customerId')
|
||||
.btn.btn-primary(ng-if='!p.dateTerminated && p.paymentMethod=="Stripe"', ng-click='showStripeEdit()') Update Card
|
||||
.btn.btn-sm.btn-danger(ng-if='!p.dateTerminated', ng-click='cancelSubscription()')=env.t('cancelSub')
|
||||
.btn.btn-primary(ng-if='!p.dateTerminated && p.paymentMethod=="Stripe"', ng-click='Payments.showStripeEdit()') Update Card
|
||||
.btn.btn-sm.btn-danger(ng-if='!p.dateTerminated', ng-click='Payments.cancelSubscription()')=env.t('cancelSub')
|
||||
|
|
@ -20,7 +20,7 @@ script(id='modals/buyGems.html', type='text/ng-template')
|
|||
td
|
||||
p
|
||||
small.muted=env.t('paymentMethods')
|
||||
.btn.btn-primary(ng-click='showStripe({})')=env.t('card')
|
||||
.btn.btn-primary(ng-click='Payments.showStripe({})')=env.t('card')
|
||||
a.btn.btn-warning(href='/paypal/checkout?_id={{user._id}}&apiToken={{user.apiToken}}') PayPal
|
||||
|
||||
div(ng-include="'partials/options.settings.subscription.html'")
|
||||
|
|
|
|||
|
|
@ -86,6 +86,6 @@ script(type='text/ng-template', id='modals/send-gift.html')
|
|||
.modal-footer
|
||||
- var fromBal = "gift.type=='gems' && gift.gems.fromBalance"
|
||||
button.btn.btn-primary(ng-show=fromBal, ng-click='sendGift(profile._id, gift)')=env.t("send")
|
||||
a.btn.btn-primary(ng-hide=fromBal, ng-click='showStripe({gift:gift, uuid:profile._id})')=env.t('card')
|
||||
a.btn.btn-primary(ng-hide=fromBal, ng-click='Payments.showStripe({gift:gift, uuid:profile._id})')=env.t('card')
|
||||
a.btn.btn-warning(ng-hide=fromBal, href='/paypal/checkout?_id={{::user._id}}&apiToken={{::user.apiToken}}&gift={{encodeGift(profile._id, gift)}}') PayPal
|
||||
button.btn.btn-default(ng-click='$close()')=env.t('cancel')
|
||||
Loading…
Reference in a new issue