@@ -116,40 +116,51 class UsersController < ApplicationController | |||||
116 | @notification_options = @user.valid_notification_options |
|
116 | @notification_options = @user.valid_notification_options | |
117 | @notification_option = @user.mail_notification |
|
117 | @notification_option = @user.mail_notification | |
118 |
|
118 | |||
119 | if request.post? |
|
|||
120 | @user.admin = params[:user][:admin] if params[:user][:admin] |
|
|||
121 | @user.login = params[:user][:login] if params[:user][:login] |
|
|||
122 | if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) |
|
|||
123 | @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] |
|
|||
124 | end |
|
|||
125 | @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] |
|
|||
126 | @user.attributes = params[:user] |
|
|||
127 | # Was the account actived ? (do it before User#save clears the change) |
|
|||
128 | was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) |
|
|||
129 | # TODO: Similar to My#account |
|
|||
130 | @user.mail_notification = params[:notification_option] || 'only_my_events' |
|
|||
131 | @user.pref.attributes = params[:pref] |
|
|||
132 | @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') |
|
|||
133 |
|
||||
134 | if @user.save |
|
|||
135 | @user.pref.save |
|
|||
136 | @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) |
|
|||
137 |
|
||||
138 | if was_activated |
|
|||
139 | Mailer.deliver_account_activated(@user) |
|
|||
140 | elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? |
|
|||
141 | Mailer.deliver_account_information(@user, params[:password]) |
|
|||
142 | end |
|
|||
143 | flash[:notice] = l(:notice_successful_update) |
|
|||
144 | redirect_to :back |
|
|||
145 | end |
|
|||
146 | end |
|
|||
147 | @auth_sources = AuthSource.find(:all) |
|
119 | @auth_sources = AuthSource.find(:all) | |
148 | @membership ||= Member.new |
|
120 | @membership ||= Member.new | |
|
121 | end | |||
|
122 | ||||
|
123 | verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } | |||
|
124 | def update | |||
|
125 | @user = User.find(params[:id]) | |||
|
126 | @notification_options = @user.valid_notification_options | |||
|
127 | @notification_option = @user.mail_notification | |||
|
128 | ||||
|
129 | @user.admin = params[:user][:admin] if params[:user][:admin] | |||
|
130 | @user.login = params[:user][:login] if params[:user][:login] | |||
|
131 | if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) | |||
|
132 | @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] | |||
|
133 | end | |||
|
134 | @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] | |||
|
135 | @user.attributes = params[:user] | |||
|
136 | # Was the account actived ? (do it before User#save clears the change) | |||
|
137 | was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) | |||
|
138 | # TODO: Similar to My#account | |||
|
139 | @user.mail_notification = params[:notification_option] || 'only_my_events' | |||
|
140 | @user.pref.attributes = params[:pref] | |||
|
141 | @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') | |||
|
142 | ||||
|
143 | if @user.save | |||
|
144 | @user.pref.save | |||
|
145 | @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) | |||
|
146 | ||||
|
147 | if was_activated | |||
|
148 | Mailer.deliver_account_activated(@user) | |||
|
149 | elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? | |||
|
150 | Mailer.deliver_account_information(@user, params[:password]) | |||
|
151 | end | |||
|
152 | flash[:notice] = l(:notice_successful_update) | |||
|
153 | redirect_to :back | |||
|
154 | else | |||
|
155 | @auth_sources = AuthSource.find(:all) | |||
|
156 | @membership ||= Member.new | |||
|
157 | ||||
|
158 | render :action => :edit | |||
|
159 | end | |||
149 | rescue ::ActionController::RedirectBackError |
|
160 | rescue ::ActionController::RedirectBackError | |
150 | redirect_to :controller => 'users', :action => 'edit', :id => @user |
|
161 | redirect_to :controller => 'users', :action => 'edit', :id => @user | |
151 | end |
|
162 | end | |
152 |
|
163 | |||
153 | def edit_membership |
|
164 | def edit_membership | |
154 | @user = User.find(params[:id]) |
|
165 | @user = User.find(params[:id]) | |
155 | @membership = Member.edit_membership(params[:membership_id], params[:membership], @user) |
|
166 | @membership = Member.edit_membership(params[:membership_id], params[:membership], @user) |
@@ -34,14 +34,14 module UsersHelper | |||||
34 | end |
|
34 | end | |
35 |
|
35 | |||
36 | def change_status_link(user) |
|
36 | def change_status_link(user) | |
37 |
url = {:controller => 'users', :action => ' |
|
37 | url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} | |
38 |
|
38 | |||
39 | if user.locked? |
|
39 | if user.locked? | |
40 |
link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :p |
|
40 | link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock' | |
41 | elsif user.registered? |
|
41 | elsif user.registered? | |
42 |
link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :p |
|
42 | link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock' | |
43 | elsif user != User.current |
|
43 | elsif user != User.current | |
44 |
link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :p |
|
44 | link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :put, :class => 'icon icon-lock' | |
45 | end |
|
45 | end | |
46 | end |
|
46 | end | |
47 |
|
47 |
@@ -1,4 +1,4 | |||||
1 |
<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => " |
|
1 | <% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "update", :tab => nil }, :html => { :method => :put, :class => nil } do |f| %> | |
2 | <%= render :partial => 'form', :locals => { :f => f } %> |
|
2 | <%= render :partial => 'form', :locals => { :f => f } %> | |
3 | <% if @user.active? -%> |
|
3 | <% if @user.active? -%> | |
4 | <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label> |
|
4 | <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label> |
@@ -1,4 +1,4 | |||||
1 |
<% form_for(:user, :url => { :action => ' |
|
1 | <% form_for(:user, :url => { :action => 'update' }, :html => {:method => :put}) do %> | |
2 | <div class="box"> |
|
2 | <div class="box"> | |
3 | <% Group.all.sort.each do |group| %> |
|
3 | <% Group.all.sort.each do |group| %> | |
4 | <label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br /> |
|
4 | <label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br /> |
@@ -148,11 +148,11 ActionController::Routing::Routes.draw do |map| | |||||
148 | end |
|
148 | end | |
149 | users.with_options :conditions => {:method => :post} do |user_actions| |
|
149 | users.with_options :conditions => {:method => :post} do |user_actions| | |
150 | user_actions.connect 'users/new', :action => 'create' |
|
150 | user_actions.connect 'users/new', :action => 'create' | |
151 | user_actions.connect 'users/:id/edit', :action => 'edit' |
|
|||
152 | user_actions.connect 'users/:id/memberships', :action => 'edit_membership' |
|
151 | user_actions.connect 'users/:id/memberships', :action => 'edit_membership' | |
153 | user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership' |
|
152 | user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership' | |
154 | user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership' |
|
153 | user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership' | |
155 | end |
|
154 | end | |
|
155 | users.connect 'users/:id/edit', :action => 'update', :conditions => {:method => :put} | |||
156 | end |
|
156 | end | |
157 |
|
157 | |||
158 | # For nice "roadmap" in the url for the index action |
|
158 | # For nice "roadmap" in the url for the index action |
@@ -153,9 +153,9 class UsersControllerTest < ActionController::TestCase | |||||
153 |
|
153 | |||
154 | end |
|
154 | end | |
155 |
|
155 | |||
156 |
def test_ |
|
156 | def test_update | |
157 | ActionMailer::Base.deliveries.clear |
|
157 | ActionMailer::Base.deliveries.clear | |
158 |
p |
|
158 | put :update, :id => 2, :user => {:firstname => 'Changed'}, :notification_option => 'all', :pref => {:hide_mail => '1', :comments_sorting => 'desc'} | |
159 |
|
159 | |||
160 | user = User.find(2) |
|
160 | user = User.find(2) | |
161 | assert_equal 'Changed', user.firstname |
|
161 | assert_equal 'Changed', user.firstname | |
@@ -165,7 +165,7 class UsersControllerTest < ActionController::TestCase | |||||
165 | assert ActionMailer::Base.deliveries.empty? |
|
165 | assert ActionMailer::Base.deliveries.empty? | |
166 | end |
|
166 | end | |
167 |
|
167 | |||
168 |
def test_ |
|
168 | def test_update_with_activation_should_send_a_notification | |
169 | u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr') |
|
169 | u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr') | |
170 | u.login = 'foo' |
|
170 | u.login = 'foo' | |
171 | u.status = User::STATUS_REGISTERED |
|
171 | u.status = User::STATUS_REGISTERED | |
@@ -173,7 +173,7 class UsersControllerTest < ActionController::TestCase | |||||
173 | ActionMailer::Base.deliveries.clear |
|
173 | ActionMailer::Base.deliveries.clear | |
174 | Setting.bcc_recipients = '1' |
|
174 | Setting.bcc_recipients = '1' | |
175 |
|
175 | |||
176 |
p |
|
176 | put :update, :id => u.id, :user => {:status => User::STATUS_ACTIVE} | |
177 | assert u.reload.active? |
|
177 | assert u.reload.active? | |
178 | mail = ActionMailer::Base.deliveries.last |
|
178 | mail = ActionMailer::Base.deliveries.last | |
179 | assert_not_nil mail |
|
179 | assert_not_nil mail | |
@@ -181,12 +181,12 class UsersControllerTest < ActionController::TestCase | |||||
181 | assert mail.body.include?(ll('fr', :notice_account_activated)) |
|
181 | assert mail.body.include?(ll('fr', :notice_account_activated)) | |
182 | end |
|
182 | end | |
183 |
|
183 | |||
184 |
def test_ |
|
184 | def test_updat_with_password_change_should_send_a_notification | |
185 | ActionMailer::Base.deliveries.clear |
|
185 | ActionMailer::Base.deliveries.clear | |
186 | Setting.bcc_recipients = '1' |
|
186 | Setting.bcc_recipients = '1' | |
187 |
|
187 | |||
188 | u = User.find(2) |
|
188 | u = User.find(2) | |
189 |
p |
|
189 | put :update, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1' | |
190 | assert_equal User.hash_password('newpass'), u.reload.hashed_password |
|
190 | assert_equal User.hash_password('newpass'), u.reload.hashed_password | |
191 |
|
191 | |||
192 | mail = ActionMailer::Base.deliveries.last |
|
192 | mail = ActionMailer::Base.deliveries.last | |
@@ -195,13 +195,13 class UsersControllerTest < ActionController::TestCase | |||||
195 | assert mail.body.include?('newpass') |
|
195 | assert mail.body.include?('newpass') | |
196 | end |
|
196 | end | |
197 |
|
197 | |||
198 |
test " |
|
198 | test "put :update with a password change to an AuthSource user switching to Internal authentication" do | |
199 | # Configure as auth source |
|
199 | # Configure as auth source | |
200 | u = User.find(2) |
|
200 | u = User.find(2) | |
201 | u.auth_source = AuthSource.find(1) |
|
201 | u.auth_source = AuthSource.find(1) | |
202 | u.save! |
|
202 | u.save! | |
203 |
|
203 | |||
204 |
p |
|
204 | put :update, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass' | |
205 |
|
205 | |||
206 | assert_equal nil, u.reload.auth_source |
|
206 | assert_equal nil, u.reload.auth_source | |
207 | assert_equal User.hash_password('newpass'), u.reload.hashed_password |
|
207 | assert_equal User.hash_password('newpass'), u.reload.hashed_password |
@@ -35,7 +35,7 class AdminTest < ActionController::IntegrationTest | |||||
35 | assert_kind_of User, logged_user |
|
35 | assert_kind_of User, logged_user | |
36 | assert_equal "Paul", logged_user.firstname |
|
36 | assert_equal "Paul", logged_user.firstname | |
37 |
|
37 | |||
38 |
p |
|
38 | put "users/#{user.id}/edit", :id => user.id, :user => { :status => User::STATUS_LOCKED } | |
39 | assert_redirected_to "/users/#{ user.id }/edit" |
|
39 | assert_redirected_to "/users/#{ user.id }/edit" | |
40 | locked_user = User.try_to_login("psmith", "psmith09") |
|
40 | locked_user = User.try_to_login("psmith", "psmith09") | |
41 | assert_equal nil, locked_user |
|
41 | assert_equal nil, locked_user |
@@ -251,10 +251,11 class RoutingTest < ActionController::IntegrationTest | |||||
251 | should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership' |
|
251 | should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership' | |
252 |
|
252 | |||
253 | should_route :post, "/users/new", :controller => 'users', :action => 'create' |
|
253 | should_route :post, "/users/new", :controller => 'users', :action => 'create' | |
254 | should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444' |
|
|||
255 | should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123' |
|
254 | should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123' | |
256 | should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55' |
|
255 | should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55' | |
257 | should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12' |
|
256 | should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12' | |
|
257 | ||||
|
258 | should_route :put, "/users/444/edit", :controller => 'users', :action => 'update', :id => '444' | |||
258 | end |
|
259 | end | |
259 |
|
260 | |||
260 | # TODO: should they all be scoped under /projects/:project_id ? |
|
261 | # TODO: should they all be scoped under /projects/:project_id ? |
General Comments 0
You need to be logged in to leave comments.
Login now