]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/user_controller.rb
Preserve the referer at the end of account creation
[rails.git] / app / controllers / user_controller.rb
index 52c3deac806eec55dba6ca5d198f9f7b65f00d53..649c0c9078792afc184c4961cbda6a0ef8c77094 100644 (file)
@@ -1,6 +1,5 @@
 class UserController < ApplicationController
-  layout 'site', :except => [:api_details, :login]
-  layout 'slim', :only => :login
+  layout :choose_layout
 
   before_filter :authorize, :only => [:api_details, :api_gpx_files]
   before_filter :authorize_web, :except => [:api_details, :api_gpx_files]
@@ -96,9 +95,9 @@ class UserController < ApplicationController
         flash[:notice] = t 'user.new.flash create success message', :email => @user.email
         Notifier.deliver_signup_confirm(@user, @user.tokens.create(:referer => params[:referer]))
         session[:token] = @user.tokens.create.token
-        redirect_to :action => 'login'
+        redirect_to :action => 'login', :referer => params[:referer]
       else
-        render :action => 'new'
+        render :action => 'new', :referer => params[:referer]
       end
     end
   end
@@ -497,4 +496,17 @@ private
   rescue ActiveRecord::RecordNotFound
     redirect_to :controller => 'user', :action => 'view', :display_name => params[:display_name] unless @this_user
   end
+
+  ##
+  # Choose the layout to use. See
+  # https://rails.lighthouseapp.com/projects/8994/tickets/5371-layout-with-onlyexcept-options-makes-other-actions-render-without-layouts
+  def choose_layout
+    if [ 'api_details' ].include? action_name
+      nil
+    elsif params[:referer] == url_for(:controller => :oauth, :action => :oauthorize, :only_path => true)
+      'slim'
+    else
+      'site'
+    end
+  end
 end