Commit b207e83451642268b0fe51b402803a169bd92268

Authored by Daniela Feitosa
2 parents 05430e60 d4f22713

Merge branch 'rails235'

app/controllers/public/account_controller.rb
@@ -17,6 +17,8 @@ class AccountController < ApplicationController @@ -17,6 +17,8 @@ class AccountController < ApplicationController
17 @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] 17 @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code]
18 if @user and @user.activate 18 if @user and @user.activate
19 @message = _("Your account has been activated, now you can log in!") 19 @message = _("Your account has been activated, now you can log in!")
  20 + check_redirection
  21 + session[:join] = params[:join] unless params[:join].blank?
20 render :action => 'login', :userlogin => @user.login 22 render :action => 'login', :userlogin => @user.login
21 else 23 else
22 session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") 24 session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?")
@@ -35,6 +37,7 @@ class AccountController < ApplicationController @@ -35,6 +37,7 @@ class AccountController < ApplicationController
35 self.current_user ||= User.authenticate(params[:user][:login], params[:user][:password], environment) if params[:user] 37 self.current_user ||= User.authenticate(params[:user][:login], params[:user][:password], environment) if params[:user]
36 38
37 if logged_in? 39 if logged_in?
  40 + check_join_in_community(self.current_user)
38 if params[:remember_me] == "1" 41 if params[:remember_me] == "1"
39 self.current_user.remember_me 42 self.current_user.remember_me
40 cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } 43 cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
@@ -91,6 +94,7 @@ class AccountController < ApplicationController @@ -91,6 +94,7 @@ class AccountController < ApplicationController
91 if session[:may_be_a_bot] 94 if session[:may_be_a_bot]
92 return false unless verify_recaptcha :model=>@user, :message=>_('Captcha (the human test)') 95 return false unless verify_recaptcha :model=>@user, :message=>_('Captcha (the human test)')
93 end 96 end
  97 + @user.community_to_join = session[:join]
94 @user.signup! 98 @user.signup!
95 owner_role = Role.find_by_name('owner') 99 owner_role = Role.find_by_name('owner')
96 @user.person.affiliate(@user.person, [owner_role]) if owner_role 100 @user.person.affiliate(@user.person, [owner_role]) if owner_role
@@ -101,6 +105,7 @@ class AccountController < ApplicationController @@ -101,6 +105,7 @@ class AccountController < ApplicationController
101 end 105 end
102 if @user.activated? 106 if @user.activated?
103 self.current_user = @user 107 self.current_user = @user
  108 + check_join_in_community(@user)
104 go_to_signup_initial_page 109 go_to_signup_initial_page
105 else 110 else
106 @register_pending = true 111 @register_pending = true
@@ -388,12 +393,6 @@ class AccountController < ApplicationController @@ -388,12 +393,6 @@ class AccountController < ApplicationController
388 end 393 end
389 394
390 def go_to_initial_page 395 def go_to_initial_page
391 - if params[:redirection]  
392 - session[:return_to] = @user.return_to  
393 - @user.return_to = nil  
394 - @user.save  
395 - end  
396 -  
397 if params[:return_to] 396 if params[:return_to]
398 redirect_to params[:return_to] 397 redirect_to params[:return_to]
399 elsif environment.enabled?('allow_change_of_redirection_after_login') 398 elsif environment.enabled?('allow_change_of_redirection_after_login')
@@ -444,4 +443,19 @@ class AccountController < ApplicationController @@ -444,4 +443,19 @@ class AccountController < ApplicationController
444 redirect_back_or_default(default) 443 redirect_back_or_default(default)
445 end 444 end
446 end 445 end
  446 +
  447 + def check_redirection
  448 + unless params[:redirection].blank?
  449 + session[:return_to] = @user.return_to
  450 + @user.update_attributes(:return_to => nil)
  451 + end
  452 + end
  453 +
  454 + def check_join_in_community(user)
  455 + profile_to_join = session[:join]
  456 + unless profile_to_join.blank?
  457 + environment.profiles.find_by_identifier(profile_to_join).add_member(user.person)
  458 + session.delete(:join)
  459 + end
  460 + end
447 end 461 end
app/controllers/public/profile_controller.rb
@@ -3,7 +3,7 @@ class ProfileController < PublicController @@ -3,7 +3,7 @@ class ProfileController < PublicController
3 needs_profile 3 needs_profile
4 before_filter :check_access_to_profile, :except => [:join, :join_not_logged, :index, :add] 4 before_filter :check_access_to_profile, :except => [:join, :join_not_logged, :index, :add]
5 before_filter :store_location, :only => [:join, :join_not_logged, :report_abuse, :send_mail] 5 before_filter :store_location, :only => [:join, :join_not_logged, :report_abuse, :send_mail]
6 - before_filter :login_required, :only => [:add, :join, :join_not_logged, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_activities, :view_more_network_activities, :report_abuse, :register_report, :leave_comment_on_activity, :send_mail] 6 + before_filter :login_required, :only => [:add, :join, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_activities, :view_more_network_activities, :report_abuse, :register_report, :leave_comment_on_activity, :send_mail]
7 7
8 helper TagsHelper 8 helper TagsHelper
9 9
@@ -97,21 +97,12 @@ class ProfileController < PublicController @@ -97,21 +97,12 @@ class ProfileController < PublicController
97 end 97 end
98 98
99 def join_not_logged 99 def join_not_logged
100 - if request.post?  
101 - profile.add_member(user)  
102 - session[:notice] = _('%s administrator still needs to accept you as member.') % profile.name if profile.closed?  
103 - redirect_to_previous_location 100 + session[:join] = profile.identifier
  101 +
  102 + if user
  103 + redirect_to :controller => 'profile', :action => 'join'
104 else 104 else
105 - if user.memberships.include?(profile)  
106 - session[:notice] = _('You are already a member of %s.') % profile.name  
107 - redirect_to profile.url  
108 - return  
109 - end  
110 - if request.xhr?  
111 - render :layout => false  
112 - else  
113 - redirect_to profile.url  
114 - end 105 + redirect_to :controller => '/account', :action => 'login'
115 end 106 end
116 end 107 end
117 108
app/models/user.rb
@@ -63,6 +63,9 @@ class User < ActiveRecord::Base @@ -63,6 +63,9 @@ class User < ActiveRecord::Base
63 self.person.preferred_domain && self.person.preferred_domain.name || self.environment.default_hostname(true) 63 self.person.preferred_domain && self.person.preferred_domain.name || self.environment.default_hostname(true)
64 end 64 end
65 65
  66 + # virtual attribute used to stash which community to join on signup or login
  67 + attr_accessor :community_to_join
  68 +
66 class Mailer < ActionMailer::Base 69 class Mailer < ActionMailer::Base
67 def activation_email_notify(user) 70 def activation_email_notify(user)
68 user_email = "#{user.login}@#{user.email_domain}" 71 user_email = "#{user.login}@#{user.email_domain}"
@@ -85,7 +88,8 @@ class User &lt; ActiveRecord::Base @@ -85,7 +88,8 @@ class User &lt; ActiveRecord::Base
85 :activation_code => user.activation_code, 88 :activation_code => user.activation_code,
86 :environment => user.environment.name, 89 :environment => user.environment.name,
87 :url => user.environment.top_url, 90 :url => user.environment.top_url,
88 - :redirection => (true if user.return_to) 91 + :redirection => (true if user.return_to),
  92 + :join => (user.community_to_join if user.community_to_join)
89 end 93 end
90 94
91 def signup_welcome_email(user) 95 def signup_welcome_email(user)
app/views/user/mailer/activation_code.html.erb
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, :redirection => @redirection) }) %> 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 => @redirection, :join => @join) }) %>
4 4
5 <%= _("Greetings,") %> 5 <%= _("Greetings,") %>
6 6
features/login.feature
@@ -207,3 +207,18 @@ Feature: login @@ -207,3 +207,18 @@ Feature: login
207 | Password | 123456 | 207 | Password | 123456 |
208 When I press "Log in" 208 When I press "Log in"
209 Then I should be on joaosilva's control panel 209 Then I should be on joaosilva's control panel
  210 +
  211 + Scenario: join community on login
  212 + Given the following users
  213 + | login | name |
  214 + | mariasilva | Maria Silva |
  215 + And the following communities
  216 + | name | identifier | owner |
  217 + | Free Software | freesoftware | mariasilva |
  218 + And I am on /freesoftware
  219 + When I follow "Join"
  220 + And I fill in the following:
  221 + | Username / Email | joaosilva |
  222 + | Password | 123456 |
  223 + And I press "Log in"
  224 + Then "Joao Silva" should be a member of "Free Software"
features/signup.feature
@@ -250,3 +250,51 @@ Feature: signup @@ -250,3 +250,51 @@ Feature: signup
250 And I fill in "Password" with "secret" 250 And I fill in "Password" with "secret"
251 And I press "Log in" 251 And I press "Log in"
252 Then I should be on the homepage 252 Then I should be on the homepage
  253 +
  254 + @selenium
  255 + Scenario: join community on signup
  256 + Given the following users
  257 + | login | name |
  258 + | mariasilva | Maria Silva |
  259 + And the following communities
  260 + | name | identifier | owner |
  261 + | Free Software | freesoftware | mariasilva |
  262 + And feature "skip_new_user_email_confirmation" is disabled on environment
  263 + And I am on /freesoftware
  264 + When I follow "Join"
  265 + And I follow "New user"
  266 + And I fill in the following within ".no-boxes":
  267 + | e-Mail | josesilva@example.com |
  268 + | Username | josesilva |
  269 + | Password | secret |
  270 + | Password confirmation | secret |
  271 + | Full name | José da Silva |
  272 + And wait for the captcha signup time
  273 + And I press "Create my account"
  274 + And I go to josesilva's confirmation URL
  275 + And I fill in "Username" with "josesilva"
  276 + And I fill in "Password" with "secret"
  277 + And I press "Log in"
  278 + Then "José da Silva" should be a member of "Free Software"
  279 +
  280 + @selenium
  281 + Scenario: join community on direct signup
  282 + Given the following users
  283 + | login | name |
  284 + | mariasilva | Maria Silva |
  285 + And the following communities
  286 + | name | identifier | owner |
  287 + | Free Software | freesoftware | mariasilva |
  288 + And feature "skip_new_user_email_confirmation" is enabled on environment
  289 + And I am on /freesoftware
  290 + When I follow "Join"
  291 + And I follow "New user"
  292 + And I fill in the following within ".no-boxes":
  293 + | e-Mail | josesilva@example.com |
  294 + | Username | josesilva |
  295 + | Password | secret |
  296 + | Password confirmation | secret |
  297 + | Full name | José da Silva |
  298 + And wait for the captcha signup time
  299 + And I press "Create my account"
  300 + Then "José da Silva" should be a member of "Free Software"
test/functional/profile_controller_test.rb
@@ -474,17 +474,23 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -474,17 +474,23 @@ class ProfileControllerTest &lt; ActionController::TestCase
474 assert_equal "/profile/#{community.identifier}", @request.session[:previous_location] 474 assert_equal "/profile/#{community.identifier}", @request.session[:previous_location]
475 end 475 end
476 476
477 - should 'redirect to location before login after join community' do 477 + should 'redirect to login after user not logged asks to join a community' do
478 community = Community.create!(:name => 'my test community') 478 community = Community.create!(:name => 'my test community')
479 479
480 - @request.expects(:referer).returns("/profile/#{community.identifier}/to_go")  
481 - login_as(profile.identifier) 480 + get :join_not_logged, :profile => community.identifier
482 481
483 - post :join_not_logged, :profile => community.identifier 482 + assert_equal community.identifier, @request.session[:join]
  483 + assert_redirected_to :controller => :account, :action => :login
  484 + end
484 485
485 - assert_redirected_to "/profile/#{community.identifier}/to_go" 486 + should 'redirect to join after user logged asks to join_not_logged a community' do
  487 + community = Community.create!(:name => 'my test community')
  488 +
  489 + login_as(profile.identifier)
  490 + get :join_not_logged, :profile => community.identifier
486 491
487 - assert_nil @request.session[:previous_location] 492 + assert_equal community.identifier, @request.session[:join]
  493 + assert_redirected_to :controller => :profile, :action => :join
488 end 494 end
489 495
490 should 'show number of published events in index' do 496 should 'show number of published events in index' do
@@ -1186,7 +1192,7 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -1186,7 +1192,7 @@ class ProfileControllerTest &lt; ActionController::TestCase
1186 20.times {comment = fast_create(Comment, :source_id => article, :title => 'a comment', :body => 'lalala', :created_at => Time.now)} 1192 20.times {comment = fast_create(Comment, :source_id => article, :title => 'a comment', :body => 'lalala', :created_at => Time.now)}
1187 article.reload 1193 article.reload
1188 get :index, :profile => profile.identifier 1194 get :index, :profile => profile.identifier
1189 - assert_tag 'ul', :attributes => {:class => 'profile-wall-activities-comments'}, :children => {:count => 0 } 1195 + assert_tag 'ul', :attributes => {:class => 'profile-wall-activities-comments'}, :children => {:count => 0 }
1190 end 1196 end
1191 1197
1192 should "view more comments paginated" do 1198 should "view more comments paginated" do
@@ -1212,7 +1218,7 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -1212,7 +1218,7 @@ class ProfileControllerTest &lt; ActionController::TestCase
1212 20.times {fast_create(Scrap, :sender_id => profile.id, :receiver_id => profile.id, :scrap_id => scrap.id)} 1218 20.times {fast_create(Scrap, :sender_id => profile.id, :receiver_id => profile.id, :scrap_id => scrap.id)}
1213 profile.reload 1219 profile.reload
1214 get :index, :profile => profile.identifier 1220 get :index, :profile => profile.identifier
1215 - assert_tag 'ul', :attributes => {:class => 'profile-wall-activities-comments scrap-replies'}, :children => {:count => 0 } 1221 + assert_tag 'ul', :attributes => {:class => 'profile-wall-activities-comments scrap-replies'}, :children => {:count => 0 }
1216 end 1222 end
1217 1223
1218 should "view more replies paginated" do 1224 should "view more replies paginated" do
@@ -1269,15 +1275,6 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -1269,15 +1275,6 @@ class ProfileControllerTest &lt; ActionController::TestCase
1269 assert_tag :tag => 'div', :content => /#{instance_eval(&plugin2.profile_tabs[:content])}/, :attributes => {:id => /#{plugin2.profile_tabs[:id]}/} 1275 assert_tag :tag => 'div', :content => /#{instance_eval(&plugin2.profile_tabs[:content])}/, :attributes => {:id => /#{plugin2.profile_tabs[:id]}/}
1270 end 1276 end
1271 1277
1272 - should 'redirect to profile page when try to request join_not_logged via GET method' do  
1273 - community = Community.create!(:name => 'my test community')  
1274 - login_as(profile.identifier)  
1275 - get :join_not_logged, :profile => community.identifier  
1276 - assert_nothing_raised do  
1277 - assert_redirected_to community.url  
1278 - end  
1279 - end  
1280 -  
1281 should 'check different profile from the domain profile' do 1278 should 'check different profile from the domain profile' do
1282 default = Environment.default 1279 default = Environment.default
1283 default.domains.create!(:name => 'environment.com') 1280 default.domains.create!(:name => 'environment.com')