##// END OF EJS Templates
Indentation....
Jean-Philippe Lang -
r5034:9df575090652
parent child
Show More
@@ -1,240 +1,240
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class UsersController < ApplicationController
18 class UsersController < ApplicationController
19 layout 'admin'
19 layout 'admin'
20
20
21 before_filter :require_admin, :except => :show
21 before_filter :require_admin, :except => :show
22 before_filter :find_user, :only => [:show, :edit, :update, :destroy, :edit_membership, :destroy_membership]
22 before_filter :find_user, :only => [:show, :edit, :update, :destroy, :edit_membership, :destroy_membership]
23 accept_key_auth :index, :show, :create, :update, :destroy
23 accept_key_auth :index, :show, :create, :update, :destroy
24
24
25 helper :sort
25 helper :sort
26 include SortHelper
26 include SortHelper
27 helper :custom_fields
27 helper :custom_fields
28 include CustomFieldsHelper
28 include CustomFieldsHelper
29
29
30 def index
30 def index
31 sort_init 'login', 'asc'
31 sort_init 'login', 'asc'
32 sort_update %w(login firstname lastname mail admin created_on last_login_on)
32 sort_update %w(login firstname lastname mail admin created_on last_login_on)
33
33
34 case params[:format]
34 case params[:format]
35 when 'xml', 'json'
35 when 'xml', 'json'
36 @offset, @limit = api_offset_and_limit
36 @offset, @limit = api_offset_and_limit
37 else
37 else
38 @limit = per_page_option
38 @limit = per_page_option
39 end
39 end
40
40
41 scope = User
41 scope = User
42 scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present?
42 scope = scope.in_group(params[:group_id].to_i) if params[:group_id].present?
43
43
44 @status = params[:status] ? params[:status].to_i : 1
44 @status = params[:status] ? params[:status].to_i : 1
45 c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
45 c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
46
46
47 unless params[:name].blank?
47 unless params[:name].blank?
48 name = "%#{params[:name].strip.downcase}%"
48 name = "%#{params[:name].strip.downcase}%"
49 c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name]
49 c << ["LOWER(login) LIKE ? OR LOWER(firstname) LIKE ? OR LOWER(lastname) LIKE ? OR LOWER(mail) LIKE ?", name, name, name, name]
50 end
50 end
51
51
52 @user_count = scope.count(:conditions => c.conditions)
52 @user_count = scope.count(:conditions => c.conditions)
53 @user_pages = Paginator.new self, @user_count, @limit, params['page']
53 @user_pages = Paginator.new self, @user_count, @limit, params['page']
54 @offset ||= @user_pages.current.offset
54 @offset ||= @user_pages.current.offset
55 @users = scope.find :all,
55 @users = scope.find :all,
56 :order => sort_clause,
56 :order => sort_clause,
57 :conditions => c.conditions,
57 :conditions => c.conditions,
58 :limit => @limit,
58 :limit => @limit,
59 :offset => @offset
59 :offset => @offset
60
60
61 respond_to do |format|
61 respond_to do |format|
62 format.html {
62 format.html {
63 @groups = Group.all.sort
63 @groups = Group.all.sort
64 render :layout => !request.xhr?
64 render :layout => !request.xhr?
65 }
65 }
66 format.api
66 format.api
67 end
67 end
68 end
68 end
69
69
70 def show
70 def show
71 # show projects based on current user visibility
71 # show projects based on current user visibility
72 @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
72 @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
73
73
74 events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
74 events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
75 @events_by_day = events.group_by(&:event_date)
75 @events_by_day = events.group_by(&:event_date)
76
76
77 unless User.current.admin?
77 unless User.current.admin?
78 if !@user.active? || (@user != User.current && @memberships.empty? && events.empty?)
78 if !@user.active? || (@user != User.current && @memberships.empty? && events.empty?)
79 render_404
79 render_404
80 return
80 return
81 end
81 end
82 end
82 end
83
83
84 respond_to do |format|
84 respond_to do |format|
85 format.html { render :layout => 'base' }
85 format.html { render :layout => 'base' }
86 format.api
86 format.api
87 end
87 end
88 end
88 end
89
89
90 def new
90 def new
91 @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option)
91 @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option)
92 @auth_sources = AuthSource.find(:all)
92 @auth_sources = AuthSource.find(:all)
93 end
93 end
94
94
95 verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
95 verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
96 def create
96 def create
97 @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option)
97 @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option)
98 @user.safe_attributes = params[:user]
98 @user.safe_attributes = params[:user]
99 @user.admin = params[:user][:admin] || false
99 @user.admin = params[:user][:admin] || false
100 @user.login = params[:user][:login]
100 @user.login = params[:user][:login]
101 @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation] unless @user.auth_source_id
101 @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation] unless @user.auth_source_id
102
102
103 # TODO: Similar to My#account
103 # TODO: Similar to My#account
104 @user.pref.attributes = params[:pref]
104 @user.pref.attributes = params[:pref]
105 @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
105 @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
106
106
107 if @user.save
107 if @user.save
108 @user.pref.save
108 @user.pref.save
109 @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
109 @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
110
110
111 Mailer.deliver_account_information(@user, params[:user][:password]) if params[:send_information]
111 Mailer.deliver_account_information(@user, params[:user][:password]) if params[:send_information]
112
112
113 respond_to do |format|
113 respond_to do |format|
114 format.html {
114 format.html {
115 flash[:notice] = l(:notice_successful_create)
115 flash[:notice] = l(:notice_successful_create)
116 redirect_to(params[:continue] ?
116 redirect_to(params[:continue] ?
117 {:controller => 'users', :action => 'new'} :
117 {:controller => 'users', :action => 'new'} :
118 {:controller => 'users', :action => 'edit', :id => @user}
118 {:controller => 'users', :action => 'edit', :id => @user}
119 )
119 )
120 }
120 }
121 format.api { render :action => 'show', :status => :created, :location => user_url(@user) }
121 format.api { render :action => 'show', :status => :created, :location => user_url(@user) }
122 end
122 end
123 else
123 else
124 @auth_sources = AuthSource.find(:all)
124 @auth_sources = AuthSource.find(:all)
125 # Clear password input
125 # Clear password input
126 @user.password = @user.password_confirmation = nil
126 @user.password = @user.password_confirmation = nil
127
127
128 respond_to do |format|
128 respond_to do |format|
129 format.html { render :action => 'new' }
129 format.html { render :action => 'new' }
130 format.api { render_validation_errors(@user) }
130 format.api { render_validation_errors(@user) }
131 end
131 end
132 end
132 end
133 end
133 end
134
134
135 def edit
135 def edit
136 @auth_sources = AuthSource.find(:all)
136 @auth_sources = AuthSource.find(:all)
137 @membership ||= Member.new
137 @membership ||= Member.new
138 end
138 end
139
139
140 verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
140 verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
141 def update
141 def update
142 @user.admin = params[:user][:admin] if params[:user][:admin]
142 @user.admin = params[:user][:admin] if params[:user][:admin]
143 @user.login = params[:user][:login] if params[:user][:login]
143 @user.login = params[:user][:login] if params[:user][:login]
144 if params[:user][:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
144 if params[:user][:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
145 @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation]
145 @user.password, @user.password_confirmation = params[:user][:password], params[:user][:password_confirmation]
146 end
146 end
147 @user.safe_attributes = params[:user]
147 @user.safe_attributes = params[:user]
148 # Was the account actived ? (do it before User#save clears the change)
148 # Was the account actived ? (do it before User#save clears the change)
149 was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
149 was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE])
150 # TODO: Similar to My#account
150 # TODO: Similar to My#account
151 @user.pref.attributes = params[:pref]
151 @user.pref.attributes = params[:pref]
152 @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
152 @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
153
153
154 if @user.save
154 if @user.save
155 @user.pref.save
155 @user.pref.save
156 @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
156 @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
157
157
158 if was_activated
158 if was_activated
159 Mailer.deliver_account_activated(@user)
159 Mailer.deliver_account_activated(@user)
160 elsif @user.active? && params[:send_information] && !params[:user][:password].blank? && @user.auth_source_id.nil?
160 elsif @user.active? && params[:send_information] && !params[:user][:password].blank? && @user.auth_source_id.nil?
161 Mailer.deliver_account_information(@user, params[:user][:password])
161 Mailer.deliver_account_information(@user, params[:user][:password])
162 end
162 end
163
163
164 respond_to do |format|
164 respond_to do |format|
165 format.html {
165 format.html {
166 flash[:notice] = l(:notice_successful_update)
166 flash[:notice] = l(:notice_successful_update)
167 redirect_to :back
167 redirect_to :back
168 }
168 }
169 format.api { head :ok }
169 format.api { head :ok }
170 end
170 end
171 else
171 else
172 @auth_sources = AuthSource.find(:all)
172 @auth_sources = AuthSource.find(:all)
173 @membership ||= Member.new
173 @membership ||= Member.new
174 # Clear password input
174 # Clear password input
175 @user.password = @user.password_confirmation = nil
175 @user.password = @user.password_confirmation = nil
176
176
177 respond_to do |format|
177 respond_to do |format|
178 format.html { render :action => :edit }
178 format.html { render :action => :edit }
179 format.api { render_validation_errors(@user) }
179 format.api { render_validation_errors(@user) }
180 end
180 end
181 end
181 end
182 rescue ::ActionController::RedirectBackError
182 rescue ::ActionController::RedirectBackError
183 redirect_to :controller => 'users', :action => 'edit', :id => @user
183 redirect_to :controller => 'users', :action => 'edit', :id => @user
184 end
184 end
185
185
186 verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed }
186 verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed }
187 def destroy
187 def destroy
188 @user.destroy
188 @user.destroy
189 respond_to do |format|
189 respond_to do |format|
190 format.html { redirect_to(users_url) }
190 format.html { redirect_to(users_url) }
191 format.api { head :ok }
191 format.api { head :ok }
192 end
192 end
193 end
193 end
194
194
195 def edit_membership
195 def edit_membership
196 @membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
196 @membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
197 @membership.save if request.post?
197 @membership.save if request.post?
198 respond_to do |format|
198 respond_to do |format|
199 if @membership.valid?
199 if @membership.valid?
200 format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
200 format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
201 format.js {
201 format.js {
202 render(:update) {|page|
202 render(:update) {|page|
203 page.replace_html "tab-content-memberships", :partial => 'users/memberships'
203 page.replace_html "tab-content-memberships", :partial => 'users/memberships'
204 page.visual_effect(:highlight, "member-#{@membership.id}")
204 page.visual_effect(:highlight, "member-#{@membership.id}")
205 }
205 }
206 }
206 }
207 else
207 else
208 format.js {
208 format.js {
209 render(:update) {|page|
209 render(:update) {|page|
210 page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))
210 page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))
211 }
211 }
212 }
212 }
213 end
213 end
214 end
214 end
215 end
215 end
216
216
217 def destroy_membership
217 def destroy_membership
218 @membership = Member.find(params[:membership_id])
218 @membership = Member.find(params[:membership_id])
219 if request.post? && @membership.deletable?
219 if request.post? && @membership.deletable?
220 @membership.destroy
220 @membership.destroy
221 end
221 end
222 respond_to do |format|
222 respond_to do |format|
223 format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
223 format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
224 format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'users/memberships'} }
224 format.js { render(:update) {|page| page.replace_html "tab-content-memberships", :partial => 'users/memberships'} }
225 end
225 end
226 end
226 end
227
227
228 private
228 private
229
229
230 def find_user
230 def find_user
231 if params[:id] == 'current'
231 if params[:id] == 'current'
232 require_login || return
232 require_login || return
233 @user = User.current
233 @user = User.current
234 else
234 else
235 @user = User.find(params[:id])
235 @user = User.find(params[:id])
236 end
236 end
237 rescue ActiveRecord::RecordNotFound
237 rescue ActiveRecord::RecordNotFound
238 render_404
238 render_404
239 end
239 end
240 end
240 end
General Comments 0
You need to be logged in to leave comments. Login now