diff --git a/app/controllers/proposal_controller.rb b/app/controllers/proposal_controller.rb index 95042af5..bc969e2a 100644 --- a/app/controllers/proposal_controller.rb +++ b/app/controllers/proposal_controller.rb @@ -1,5 +1,6 @@ class ProposalController < ApplicationController before_filter :authenticate_user!, except: [:show, :new, :create] + before_action :create_user_if_not_signed_in, only: [:create] load_resource :conference, find_by: :short_title load_resource :program, through: :conference, singleton: true load_and_authorize_resource :event, parent: false, through: :program @@ -26,32 +27,9 @@ class ProposalController < ApplicationController def create @url = conference_program_proposal_index_path(@conference.short_title) - unless current_user - @user = User.new(user_params) - if @user.save - sign_in(@user) - else - flash[:error] = "Could not save user: #{@user.errors.full_messages.join(', ')}" - render action: 'new' - return - end - end - params[:event].delete :user - @event = Event.new(event_params) - @event.program = @program - - @event.event_users.new(user: current_user, - event_role: 'submitter') - @event.event_users.new(user: current_user, - event_role: 'speaker') - - unless @event.save - flash[:error] = "Could not submit proposal: #{@event.errors.full_messages.join(', ')}" - render action: 'new' - return - end + proposal_submission ahoy.track 'Event submission', title: 'New submission' @@ -146,6 +124,20 @@ class ProposalController < ApplicationController def user_params params.require(:user).permit(:email, :password, :password_confirmation, :username) end + + def proposal_submission + @event = Event.new(event_params) + @event.program = @program + + @event.event_users.new(user: current_user, + event_role: 'submitter') + @event.event_users.new(user: current_user, + event_role: 'speaker') + + return unless !@event.save + flash[:error] = "Could not submit proposal: #{@event.errors.full_messages.join(', ')}" + render action: 'new' + end end # FIXME: Introduce strong_parameters pronto! diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ce2fde95..c11c712d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -300,4 +300,17 @@ module ApplicationHelper def unread_notifications(user) Comment.accessible_by(current_ability).find_since_last_login(user) end + + def create_user_if_not_signed_in + unless current_user + @user = User.new(user_params) + if @user.save + sign_in(@user) + else + flash[:error] = "Could not save user: #{@user.errors.full_messages.join(', ')}" + render action: 'new' + return + end + end + end end