From ca965bb455afcb99b3f9d22f0ce19ced3e793712 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Thu, 16 Mar 2017 09:48:51 +0800 Subject: [PATCH] FEATURE: Redirect to groups page after login/registration flow. --- .../components/group-membership-button.js.es6 | 51 +++++++++---------- .../components/group-membership-button.hbs | 4 +- app/controllers/users_controller.rb | 8 ++- spec/controllers/users_controller_spec.rb | 21 ++++++++ 4 files changed, 55 insertions(+), 29 deletions(-) diff --git a/app/assets/javascripts/discourse/components/group-membership-button.js.es6 b/app/assets/javascripts/discourse/components/group-membership-button.js.es6 index dba83c69dc2..a3de6d7ab02 100644 --- a/app/assets/javascripts/discourse/components/group-membership-button.js.es6 +++ b/app/assets/javascripts/discourse/components/group-membership-button.js.es6 @@ -22,30 +22,25 @@ export default Ember.Component.extend({ } }, - @computed - joinGroupAction() { - return this.currentUser ? 'joinGroup' : 'showLogin'; - }, - - @computed - requestMembershipAction() { - return this.currentUser ? 'requestMembership' : 'showLogin'; + _showLoginModal() { + this.sendAction('showLogin'); + $.cookie('destination_url', window.location.href); }, actions: { - showLogin() { - this.sendAction('showLogin'); - }, - joinGroup() { - this.set('updatingMembership', true); - const model = this.get('model'); + if (this.currentUser) { + this.set('updatingMembership', true); + const model = this.get('model'); - model.addMembers(this.currentUser.get('username')).then(() => { - model.set('is_group_user', true); - }).catch(popupAjaxError).finally(() => { - this.set('updatingMembership', false); - }); + model.addMembers(this.currentUser.get('username')).then(() => { + model.set('is_group_user', true); + }).catch(popupAjaxError).finally(() => { + this.set('updatingMembership', false); + }); + } else { + this._showLoginModal(); + } }, leaveGroup() { @@ -60,14 +55,18 @@ export default Ember.Component.extend({ }, requestMembership() { - const groupName = this.get('model.name'); + if (this.currentUser) { + const groupName = this.get('model.name'); - Group.loadOwners(groupName).then(result => { - const names = result.map(owner => owner.username).join(","); - const title = I18n.t('groups.request_membership_pm.title'); - const body = I18n.t('groups.request_membership_pm.body', { groupName }); - this.sendAction("createNewMessageViaParams", names, title, body); - }); + Group.loadOwners(groupName).then(result => { + const names = result.map(owner => owner.username).join(","); + const title = I18n.t('groups.request_membership_pm.title'); + const body = I18n.t('groups.request_membership_pm.body', { groupName }); + this.sendAction("createNewMessageViaParams", names, title, body); + }); + } else { + this._showLoginModal(); + } } } }); diff --git a/app/assets/javascripts/discourse/templates/components/group-membership-button.hbs b/app/assets/javascripts/discourse/templates/components/group-membership-button.hbs index 1fc14e88970..bd2d456feee 100644 --- a/app/assets/javascripts/discourse/templates/components/group-membership-button.hbs +++ b/app/assets/javascripts/discourse/templates/components/group-membership-button.hbs @@ -6,7 +6,7 @@ label="groups.leave" disabled=updatingMembership}} {{else}} - {{d-button action=joinGroupAction + {{d-button action="joinGroup" class="group-index-join" icon="plus" label="groups.join" @@ -22,7 +22,7 @@ disabled=true}} {{/if}} {{else}} - {{d-button action=requestMembershipAction + {{d-button action="requestMembership" class="group-index-request" icon="envelope" label="groups.request"}} diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 82276f6af4e..0fb1de4e00f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -550,7 +550,13 @@ class UsersController < ApplicationController if Guardian.new(@user).can_access_forum? @user.enqueue_welcome_message('welcome_user') if @user.send_welcome_message log_on_user(@user) - return redirect_to(wizard_path) if Wizard.user_requires_completion?(@user) + + if Wizard.user_requires_completion?(@user) + return redirect_to(wizard_path) + elsif destination_url = cookies[:destination_url] + cookies[:destination_url] = nil + return redirect_to(destination_url) + end else @needs_approval = true end diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index cc8d418516d..e227dd7afdd 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -191,6 +191,27 @@ describe UsersController do end end + describe '#perform_account_activation' do + describe 'when cookies contains a destination URL' do + let(:token) { 'asdadwewq' } + let(:user) { Fabricate(:user) } + + before do + UsersController.any_instance.stubs(:honeypot_or_challenge_fails?).returns(false) + EmailToken.expects(:confirm).with(token).returns(user) + end + + it 'should redirect to the URL' do + destination_url = 'http://thisisasite.com/somepath' + request.cookies[:destination_url] = destination_url + + put :perform_account_activation, token: token + + expect(response).to redirect_to(destination_url) + end + end + end + describe '.password_reset' do let(:user) { Fabricate(:user) }