Commit b461081b2d206d5aecdaba4e52eeaed49ffe0e13

Authored by Daniel
1 parent 88f4efc5

admin_features: Add redirection options after signup when confirmation

email is enabled.

(ActionItem2998)

Signed-off-by: Daniel Bucher <daniel.bucher88@gmail.com>
Signed-off-by: Luiz Matos <luizff.matos@gmail.com>
app/controllers/public/account_controller.rb
... ... @@ -79,6 +79,7 @@ class AccountController &lt; ApplicationController
79 79 @user.environment = environment
80 80 @terms_of_use = environment.terms_of_use
81 81 @user.person_data = params[:profile_data]
  82 + @user.return_to = session[:return_to]
82 83 @person = Person.new(params[:profile_data])
83 84 @person.environment = @user.environment
84 85 if request.post?
... ... @@ -370,6 +371,12 @@ class AccountController &lt; ApplicationController
370 371 end
371 372  
372 373 def go_to_initial_page
  374 + if params[:redirection]
  375 + session[:return_to] = @user.return_to
  376 + @user.return_to = nil
  377 + @user.save
  378 + end
  379 +
373 380 if params[:return_to]
374 381 #I never get here
375 382 redirect_to params[:return_to]
... ...
app/models/user.rb
... ... @@ -71,7 +71,8 @@ class User &lt; ActiveRecord::Base
71 71 body :recipient => user.name,
72 72 :activation_code => user.activation_code,
73 73 :environment => user.environment.name,
74   - :url => user.environment.top_url
  74 + :url => user.environment.top_url,
  75 + :return_to => user.return_to
75 76 end
76 77  
77 78 def signup_welcome_email(user)
... ... @@ -93,7 +94,7 @@ class User &lt; ActiveRecord::Base
93 94 self.person.save!
94 95 end
95 96 end
96   -
  97 +
97 98 has_one :person, :dependent => :destroy
98 99 belongs_to :environment
99 100  
... ... @@ -183,7 +184,7 @@ class User &lt; ActiveRecord::Base
183 184 encryption_methods[sym] = block
184 185 end
185 186  
186   - # the encryption method used for this instance
  187 + # the encryption method used for this instance
187 188 def encryption_method
188 189 (password_type || User.system_encryption_method).to_sym
189 190 end
... ... @@ -226,7 +227,7 @@ class User &lt; ActiveRecord::Base
226 227 end
227 228  
228 229 def remember_token?
229   - remember_token_expires_at && Time.now.utc < remember_token_expires_at
  230 + remember_token_expires_at && Time.now.utc < remember_token_expires_at
230 231 end
231 232  
232 233 # These create and unset the fields required for remembering users between browser closes
... ... @@ -255,7 +256,7 @@ class User &lt; ActiveRecord::Base
255 256 raise IncorrectPassword unless self.authenticated?(current)
256 257 self.force_change_password!(new, confirmation)
257 258 end
258   -
  259 +
259 260 # Changes the password of a user without asking for the old password. This
260 261 # method is intended to be used by the "I forgot my password", and must be
261 262 # used with care.
... ... @@ -326,7 +327,7 @@ class User &lt; ActiveRecord::Base
326 327 end
327 328  
328 329 protected
329   - # before filter
  330 + # before filter
330 331 def encrypt_password
331 332 return if password.blank?
332 333 self.salt ||= Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
... ...
app/views/user/mailer/activation_code.rhtml
1 1 <%= _('Hi, %{recipient}!') % { :recipient => @recipient } %>
2 2  
3   -<%= word_wrap(_('Welcome to %{environment}! To activate your account, follow the link: %{activation_url}') % { :environment => @environment, :activation_url => @url + url_for(:controller => :account, :action => :activate, :activation_code => @activation_code) }) %>
  3 +<%= word_wrap(_('Welcome to %{environment}! To activate your account, follow the link: %{activation_url}') % { :environment => @environment, :activation_url => @url + url_for(:controller => :account, :action => :activate, :activation_code => @activation_code, :redirection => (true if @return_to) ) }) %>
4 4  
5 5 <%= _("Greetings,") %>
6 6  
... ...
db/migrate/20140312184749_add_return_to_to_users.rb 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +class AddReturnToToUsers < ActiveRecord::Migration
  2 + def self.up
  3 + add_column :users, :return_to, :string
  4 + end
  5 +
  6 + def self.down
  7 + remove_column :users, :return_to, :string
  8 + end
  9 +end
... ...
db/schema.rb
... ... @@ -9,7 +9,7 @@
9 9 #
10 10 # It's strongly recommended to check this file into your version control system.
11 11  
12   -ActiveRecord::Schema.define(:version => 20140205191914) do
  12 +ActiveRecord::Schema.define(:version => 20140312184749) do
13 13  
14 14 create_table "abuse_reports", :force => true do |t|
15 15 t.integer "reporter_id"
... ... @@ -282,7 +282,7 @@ ActiveRecord::Schema.define(:version =&gt; 20140205191914) do
282 282 t.text "signup_welcome_text"
283 283 t.string "languages"
284 284 t.string "default_language"
285   - t.string "redirection_after_signup", :default => "keep_on_same_page"
  285 + t.string "redirection_after_signup", :default => "keep_on_same_page"
286 286 end
287 287  
288 288 create_table "external_feeds", :force => true do |t|
... ... @@ -620,6 +620,7 @@ ActiveRecord::Schema.define(:version =&gt; 20140205191914) do
620 620 t.datetime "chat_status_at"
621 621 t.string "activation_code", :limit => 40
622 622 t.datetime "activated_at"
  623 + t.string "return_to"
623 624 end
624 625  
625 626 create_table "validation_infos", :force => true do |t|
... ...
features/signup.feature
... ... @@ -141,3 +141,107 @@ Feature: signup
141 141 And I press "Create my account"
142 142 Then I should be on the homepage
143 143  
  144 + @selenium
  145 + Scenario: user should stay on same page after following confirmation link
  146 + Given the environment is configured to stay on the same page after login
  147 + And feature "skip_new_user_email_confirmation" is disabled on environment
  148 + And feature "allow_change_of_redirection_after_login" is enabled on environment
  149 + And I am on /search/people
  150 + When I follow "Sign up"
  151 + And I fill in the following within ".no-boxes":
  152 + | e-Mail | josesilva@example.com |
  153 + | Username | josesilva |
  154 + | Password | secret |
  155 + | Password confirmation | secret |
  156 + | Full name | José da Silva |
  157 + And wait for the captcha signup time
  158 + And I press "Create my account"
  159 + And I go to josesilva's confirmation URL
  160 + And I fill in "Username" with "josesilva"
  161 + And I fill in "Password" with "secret"
  162 + And I press "Log in"
  163 + Then I should be on /search/people
  164 +
  165 + @selenium
  166 + Scenario: user should go to his homepage after following confirmation link
  167 + Given the environment is configured to redirect to profile homepage after login
  168 + And feature "skip_new_user_email_confirmation" is disabled on environment
  169 + And feature "allow_change_of_redirection_after_login" is enabled on environment
  170 + And I am on /search/people
  171 + When I follow "Sign up"
  172 + And I fill in the following within ".no-boxes":
  173 + | e-Mail | josesilva@example.com |
  174 + | Username | josesilva |
  175 + | Password | secret |
  176 + | Password confirmation | secret |
  177 + | Full name | José da Silva |
  178 + And wait for the captcha signup time
  179 + And I press "Create my account"
  180 + And I go to josesilva's confirmation URL
  181 + And I fill in "Username" with "josesilva"
  182 + And I fill in "Password" with "secret"
  183 + And I press "Log in"
  184 + Then I should be on /profile/josesilva
  185 +
  186 + @selenium
  187 + Scenario: user should go to his control panel after following confirmation link
  188 + Given the environment is configured to redirect to profile control panel after login
  189 + And feature "skip_new_user_email_confirmation" is disabled on environment
  190 + And feature "allow_change_of_redirection_after_login" is enabled on environment
  191 + And I am on /search/people
  192 + When I follow "Sign up"
  193 + And I fill in the following within ".no-boxes":
  194 + | e-Mail | josesilva@example.com |
  195 + | Username | josesilva |
  196 + | Password | secret |
  197 + | Password confirmation | secret |
  198 + | Full name | José da Silva |
  199 + And wait for the captcha signup time
  200 + And I press "Create my account"
  201 + And I go to josesilva's confirmation URL
  202 + And I fill in "Username" with "josesilva"
  203 + And I fill in "Password" with "secret"
  204 + And I press "Log in"
  205 + Then I should be on /myprofile/josesilva
  206 +
  207 + @selenium
  208 + Scenario: user should go to his profile page after following confirmation link
  209 + Given the environment is configured to redirect to profile page after login
  210 + And feature "skip_new_user_email_confirmation" is disabled on environment
  211 + And feature "allow_change_of_redirection_after_login" is enabled on environment
  212 + And I am on /search/people
  213 + When I follow "Sign up"
  214 + And I fill in the following within ".no-boxes":
  215 + | e-Mail | josesilva@example.com |
  216 + | Username | josesilva |
  217 + | Password | secret |
  218 + | Password confirmation | secret |
  219 + | Full name | José da Silva |
  220 + And wait for the captcha signup time
  221 + And I press "Create my account"
  222 + And I go to josesilva's confirmation URL
  223 + And I fill in "Username" with "josesilva"
  224 + And I fill in "Password" with "secret"
  225 + And I press "Log in"
  226 + Then I should be on /profile/josesilva
  227 +
  228 + @selenium
  229 + Scenario: user should go to the environment homepage after following confirmation link
  230 + Given the environment is configured to redirect to site homepage after login
  231 + And feature "skip_new_user_email_confirmation" is disabled on environment
  232 + And feature "allow_change_of_redirection_after_login" is enabled on environment
  233 + And I am on /search/people
  234 + When I follow "Sign up"
  235 + And I fill in the following within ".no-boxes":
  236 + | e-Mail | josesilva@example.com |
  237 + | Username | josesilva |
  238 + | Password | secret |
  239 + | Password confirmation | secret |
  240 + | Full name | José da Silva |
  241 + And wait for the captcha signup time
  242 + And I press "Create my account"
  243 + And I go to josesilva's confirmation URL
  244 + And I fill in "Username" with "josesilva"
  245 + And I fill in "Password" with "secret"
  246 + And I press "Log in"
  247 + Then I should be on the homepage
... ...
features/support/paths.rb
... ... @@ -111,6 +111,10 @@ module NavigationHelpers
111 111 when /the user data path/
112 112 '/account/user_data'
113 113  
  114 + when /^(.+)'s confirmation URL/
  115 + user = User[$1]
  116 + "/account/activate?activation_code=#{user.activation_code}&redirection=" + (user.return_to.nil? ? 'false' : 'true')
  117 +
114 118 when /^(.+)'s members page/
115 119 '/profile/%s/members' % profile_identifier($1)
116 120  
... ...