merge in create account
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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'] = []
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -22,29 +22,50 @@
|
||||
{{text-field value=email}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if create_accounts}}
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="card-element">{{i18n 'user.username.title'}}</label>
|
||||
<div class="controls">
|
||||
{{text-field value=username}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="card-element">{{i18n 'user.name.title'}}</label>
|
||||
<div class="controls">
|
||||
{{text-field value=name}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="card-element">{{i18n 'user.password.title'}}</label>
|
||||
<div class="controls">
|
||||
{{input type="password" value=password}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
<div class="control-group save-button">
|
||||
<div class="controls">
|
||||
{{#d-button action="submitStripeCard" disabled=transactionInProgress class="btn btn-primary btn-payment"}}
|
||||
{{i18n 'discourse_donations.submit'}}
|
||||
{{#if create_accounts}}
|
||||
{{i18n 'discourse_donations.submit_with_create_account'}}
|
||||
{{else}}
|
||||
{{i18n 'discourse_donations.submit'}}
|
||||
{{/if}}
|
||||
{{/d-button}}
|
||||
|
||||
{{#if transactionInProgress}}
|
||||
{{loading-spinner size="small"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if result}}
|
||||
<span>{{result}}</span>
|
||||
<p>{{{result}}}</p>
|
||||
{{/if}}
|
||||
{{#if success}}
|
||||
<p>{{i18n 'discourse_donations.messages.success'}}</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if success}}
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<span>{{i18n 'discourse_donations.messages.success'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</form>
|
||||
|
||||
@@ -6,5 +6,6 @@ en:
|
||||
amount: Amount
|
||||
card: Credit or debit card
|
||||
submit: Make Payment
|
||||
submit_with_create_account: Make Payment and Create Account
|
||||
messages:
|
||||
success: Thank you for your donation!
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
en:
|
||||
site_settings:
|
||||
discourse_donations_enabled: Enable the discourse donations plugin.
|
||||
discourse_donations_enable_create_accounts: "EXPERIMENTAL: Enable anonymous users to create accounts after successful payment"
|
||||
discourse_donations_secret_key: Stripe Secret Key
|
||||
discourse_donations_public_key: Stripe Public Key
|
||||
discourse_donations_currency: Currency Code
|
||||
|
||||
@@ -6,6 +6,9 @@ plugins:
|
||||
client: false
|
||||
discourse_donations_public_key:
|
||||
client: true
|
||||
discourse_donations_enable_create_accounts:
|
||||
client: true
|
||||
default: false
|
||||
discourse_donations_description:
|
||||
client: true
|
||||
default: 'Donation'
|
||||
|
||||
@@ -4,6 +4,7 @@ require_relative '../../support/dd_helper'
|
||||
module DiscourseDonations
|
||||
RSpec.describe ChargesController, type: :controller do
|
||||
routes { DiscourseDonations::Engine.routes }
|
||||
let(:body) { JSON.parse(response.body) }
|
||||
|
||||
before do
|
||||
SiteSetting.stubs(:discourse_donations_secret_key).returns('secret-key-yo')
|
||||
@@ -13,17 +14,32 @@ module DiscourseDonations
|
||||
|
||||
it 'responds ok for anonymous users' do
|
||||
post :create, { email: '[email protected]' }
|
||||
expect(body['message']).to eq(body['outcome']['seller_message'])
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'responds ok when the email is empty' do
|
||||
post :create, { email: '' }
|
||||
post :create, { create_account: 'true', email: '' }
|
||||
expect(body['message']).to eq('Please enter your email address')
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'responds ok for logged in user' do
|
||||
it 'responds ok when the email is empty' do
|
||||
post :create, { create_account: 'true' }
|
||||
expect(body['message']).to eq('Please enter your email address')
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'expects a username if accounts are being created' do
|
||||
post :create, { email: '[email protected]', create_account: 'true' }
|
||||
expect(body['message']).to eq('Please enter a username')
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'does not expect a username or email if accounts are not being created' do
|
||||
current_user = log_in(:coding_horror)
|
||||
post :create
|
||||
post :create, { create_account: 'false' }
|
||||
expect(body['message']).to eq('Payment complete.')
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user