diff --git a/README.md b/README.md index d428a55..2f356fc 100644 --- a/README.md +++ b/README.md @@ -32,5 +32,5 @@ Visit `/admin/customize/site_texts` and search for 'discourse_donations'. You'll ## TODO * Donate when creating account -* Add a plugin outlet for custom user fields. +* Handle custom fields * Handle fails from stripe diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index 2fae050..3741678 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -7,11 +7,13 @@ module DiscourseDonations skip_before_filter :verify_authenticity_token, only: [:create] def create - if email.present? + if create_account && (email.nil? || email.empty?) + response = {'message' => 'Please enter your email address'} + elsif create_account && params[:username].nil? + response = {'message' => 'Please enter a username'} + else payment = DiscourseDonations::Stripe.new(secret_key, stripe_options) response = payment.charge(email, params) - else - response = {} end response['rewards'] = [] diff --git a/assets/javascripts/discourse/components/stripe-card.js.es6 b/assets/javascripts/discourse/components/stripe-card.js.es6 index 82a63f1..ec65bdc 100644 --- a/assets/javascripts/discourse/components/stripe-card.js.es6 +++ b/assets/javascripts/discourse/components/stripe-card.js.es6 @@ -20,6 +20,7 @@ export default Ember.Component.extend({ this._super(); this.set('anon', (Discourse.User.current() == null)); this.set('settings', getRegister(this).lookup('site-settings:main')); + this.set('create_accounts', this.get('anon') && this.get('settings').discourse_donations_enable_create_accounts); this.set('stripe', Stripe(this.get('settings').discourse_donations_public_key)); }, @@ -35,14 +36,41 @@ export default Ember.Component.extend({ this.get('card').mount('#card-element'); }, + setSuccess() { + this.set('paymentSuccess', true); + }, + + endTranscation() { + this.set('transactionInProgress', false); + }, + + createUser() { + let self = this; + ajax('/users/hp', { method: 'get' }).then(data => { + let params = { + email: self.get('email'), + username: self.get('username'), + name: self.get('name'), + password: self.get('password'), + password_confirmation: data.value, + challenge: data.challenge.split('').reverse().join(''), + }; + + ajax('/users', { data: params, method: 'post' }).then(data => { + self.setSuccess(); + self.set('result', self.get('result') + data.message); + self.endTranscation(); + }); + }); + }, + actions: { submitStripeCard() { let self = this; this.get('stripe').createToken(this.get('card')).then(data => { - self.set('result', null); - self.set('success', false); + self.set('result', ''); if (data.error) { self.set('result', data.error.message); @@ -53,14 +81,33 @@ export default Ember.Component.extend({ let params = { stripeToken: data.token.id, amount: self.get('amount') * 100, - email: self.get('email') + email: self.get('email'), + username: self.get('username'), + create_account: this.get('create_accounts') }; - ajax('/charges', { data: params, method: 'post' }).then(data => { - if(data.status == 'succeeded') { self.set('success', true) }; - self.set('transactionInProgress', false); - self.set('result', data.outcome.seller_message); - }); + if(!self.get('paymentSuccess')) { + ajax('/charges', { data: params, method: 'post' }).then(data => { + self.set('result', data.message); + + if(!this.get('create_accounts')) { + if(data.status == 'succeeded') { this.setSuccess() }; + self.endTranscation(); + } + else { + if(data.status == 'succeeded') { + this.createUser(); + } + else { + self.endTranscation(); + } + } + }); + } + else if (this.get('create_accounts')) { + self.set('result', ''); + self.createUser(); + } } }); } diff --git a/assets/javascripts/discourse/templates/components/stripe-card.hbs b/assets/javascripts/discourse/templates/components/stripe-card.hbs index 73b7471..674077d 100644 --- a/assets/javascripts/discourse/templates/components/stripe-card.hbs +++ b/assets/javascripts/discourse/templates/components/stripe-card.hbs @@ -22,29 +22,50 @@ {{text-field value=email}} + + {{#if create_accounts}} +