Commit b461081b2d206d5aecdaba4e52eeaed49ffe0e13
1 parent
88f4efc5
Exists in
staging
and in
42 other branches
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>
Showing
7 changed files
with
135 additions
and
9 deletions
Show diff stats
app/controllers/public/account_controller.rb
@@ -79,6 +79,7 @@ class AccountController < ApplicationController | @@ -79,6 +79,7 @@ class AccountController < ApplicationController | ||
79 | @user.environment = environment | 79 | @user.environment = environment |
80 | @terms_of_use = environment.terms_of_use | 80 | @terms_of_use = environment.terms_of_use |
81 | @user.person_data = params[:profile_data] | 81 | @user.person_data = params[:profile_data] |
82 | + @user.return_to = session[:return_to] | ||
82 | @person = Person.new(params[:profile_data]) | 83 | @person = Person.new(params[:profile_data]) |
83 | @person.environment = @user.environment | 84 | @person.environment = @user.environment |
84 | if request.post? | 85 | if request.post? |
@@ -370,6 +371,12 @@ class AccountController < ApplicationController | @@ -370,6 +371,12 @@ class AccountController < ApplicationController | ||
370 | end | 371 | end |
371 | 372 | ||
372 | def go_to_initial_page | 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 | if params[:return_to] | 380 | if params[:return_to] |
374 | #I never get here | 381 | #I never get here |
375 | redirect_to params[:return_to] | 382 | redirect_to params[:return_to] |
app/models/user.rb
@@ -71,7 +71,8 @@ class User < ActiveRecord::Base | @@ -71,7 +71,8 @@ class User < ActiveRecord::Base | ||
71 | body :recipient => user.name, | 71 | body :recipient => user.name, |
72 | :activation_code => user.activation_code, | 72 | :activation_code => user.activation_code, |
73 | :environment => user.environment.name, | 73 | :environment => user.environment.name, |
74 | - :url => user.environment.top_url | 74 | + :url => user.environment.top_url, |
75 | + :return_to => user.return_to | ||
75 | end | 76 | end |
76 | 77 | ||
77 | def signup_welcome_email(user) | 78 | def signup_welcome_email(user) |
@@ -93,7 +94,7 @@ class User < ActiveRecord::Base | @@ -93,7 +94,7 @@ class User < ActiveRecord::Base | ||
93 | self.person.save! | 94 | self.person.save! |
94 | end | 95 | end |
95 | end | 96 | end |
96 | - | 97 | + |
97 | has_one :person, :dependent => :destroy | 98 | has_one :person, :dependent => :destroy |
98 | belongs_to :environment | 99 | belongs_to :environment |
99 | 100 | ||
@@ -183,7 +184,7 @@ class User < ActiveRecord::Base | @@ -183,7 +184,7 @@ class User < ActiveRecord::Base | ||
183 | encryption_methods[sym] = block | 184 | encryption_methods[sym] = block |
184 | end | 185 | end |
185 | 186 | ||
186 | - # the encryption method used for this instance | 187 | + # the encryption method used for this instance |
187 | def encryption_method | 188 | def encryption_method |
188 | (password_type || User.system_encryption_method).to_sym | 189 | (password_type || User.system_encryption_method).to_sym |
189 | end | 190 | end |
@@ -226,7 +227,7 @@ class User < ActiveRecord::Base | @@ -226,7 +227,7 @@ class User < ActiveRecord::Base | ||
226 | end | 227 | end |
227 | 228 | ||
228 | def remember_token? | 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 | end | 231 | end |
231 | 232 | ||
232 | # These create and unset the fields required for remembering users between browser closes | 233 | # These create and unset the fields required for remembering users between browser closes |
@@ -255,7 +256,7 @@ class User < ActiveRecord::Base | @@ -255,7 +256,7 @@ class User < ActiveRecord::Base | ||
255 | raise IncorrectPassword unless self.authenticated?(current) | 256 | raise IncorrectPassword unless self.authenticated?(current) |
256 | self.force_change_password!(new, confirmation) | 257 | self.force_change_password!(new, confirmation) |
257 | end | 258 | end |
258 | - | 259 | + |
259 | # Changes the password of a user without asking for the old password. This | 260 | # Changes the password of a user without asking for the old password. This |
260 | # method is intended to be used by the "I forgot my password", and must be | 261 | # method is intended to be used by the "I forgot my password", and must be |
261 | # used with care. | 262 | # used with care. |
@@ -326,7 +327,7 @@ class User < ActiveRecord::Base | @@ -326,7 +327,7 @@ class User < ActiveRecord::Base | ||
326 | end | 327 | end |
327 | 328 | ||
328 | protected | 329 | protected |
329 | - # before filter | 330 | + # before filter |
330 | def encrypt_password | 331 | def encrypt_password |
331 | return if password.blank? | 332 | return if password.blank? |
332 | self.salt ||= Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record? | 333 | self.salt ||= Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record? |
app/views/user/mailer/activation_code.rhtml
1 | <%= _('Hi, %{recipient}!') % { :recipient => @recipient } %> | 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 | <%= _("Greetings,") %> | 5 | <%= _("Greetings,") %> |
6 | 6 |
db/schema.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # | 9 | # |
10 | # It's strongly recommended to check this file into your version control system. | 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 | create_table "abuse_reports", :force => true do |t| | 14 | create_table "abuse_reports", :force => true do |t| |
15 | t.integer "reporter_id" | 15 | t.integer "reporter_id" |
@@ -282,7 +282,7 @@ ActiveRecord::Schema.define(:version => 20140205191914) do | @@ -282,7 +282,7 @@ ActiveRecord::Schema.define(:version => 20140205191914) do | ||
282 | t.text "signup_welcome_text" | 282 | t.text "signup_welcome_text" |
283 | t.string "languages" | 283 | t.string "languages" |
284 | t.string "default_language" | 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 | end | 286 | end |
287 | 287 | ||
288 | create_table "external_feeds", :force => true do |t| | 288 | create_table "external_feeds", :force => true do |t| |
@@ -620,6 +620,7 @@ ActiveRecord::Schema.define(:version => 20140205191914) do | @@ -620,6 +620,7 @@ ActiveRecord::Schema.define(:version => 20140205191914) do | ||
620 | t.datetime "chat_status_at" | 620 | t.datetime "chat_status_at" |
621 | t.string "activation_code", :limit => 40 | 621 | t.string "activation_code", :limit => 40 |
622 | t.datetime "activated_at" | 622 | t.datetime "activated_at" |
623 | + t.string "return_to" | ||
623 | end | 624 | end |
624 | 625 | ||
625 | create_table "validation_infos", :force => true do |t| | 626 | create_table "validation_infos", :force => true do |t| |
features/signup.feature
@@ -141,3 +141,107 @@ Feature: signup | @@ -141,3 +141,107 @@ Feature: signup | ||
141 | And I press "Create my account" | 141 | And I press "Create my account" |
142 | Then I should be on the homepage | 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,6 +111,10 @@ module NavigationHelpers | ||
111 | when /the user data path/ | 111 | when /the user data path/ |
112 | '/account/user_data' | 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 | when /^(.+)'s members page/ | 118 | when /^(.+)'s members page/ |
115 | '/profile/%s/members' % profile_identifier($1) | 119 | '/profile/%s/members' % profile_identifier($1) |
116 | 120 |