Commit b461081b2d206d5aecdaba4e52eeaed49ffe0e13
1 parent
88f4efc5
Exists in
master
and in
29 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 |