OSDN Git Service

Add redminele plugin
[redminele/redmine.git] / vendor / plugins / redmine_le / app / controllers / ldap_users_controller.rb
1 class LdapUsersController < ApplicationController\r
2   unloadable\r
3   before_filter :require_admin, :setup_auth_source\r
4 \r
5   def index\r
6     @ldap_users = LdapUser.find(:all)\r
7   end\r
8 \r
9   def new\r
10     @ldap_user = LdapUser.new\r
11     render :action => "edit"\r
12   end\r
13 \r
14   def create\r
15     @user = User.new(:language => Setting.default_language)\r
16     @ldap_user = LdapUser.new\r
17     @user.login = @ldap_user.login = params[:ldap_user][:login]\r
18 \r
19     if assign_params_and_save\r
20       flash[:notice] = l(:notice_successful_create)\r
21 \r
22       if @user.save_without_validation\r
23         @user.auth_source = nil # dummy\r
24         Mailer.deliver_account_information(@user, @ldap_user.password) if params[:send_information]\r
25       else\r
26         flash[:error] = l(:error_failed_to_create_redmine_user)\r
27       end\r
28 \r
29       redirect_to :action => 'edit', :id => @ldap_user.login\r
30     else\r
31       render :action => 'edit'\r
32     end\r
33   end\r
34 \r
35   def edit\r
36     @ldap_user = LdapUser.find(params[:id])\r
37   end\r
38 \r
39   def update\r
40     @user = User.find_by_login(params[:id]) || User.new(:login => params[:id])\r
41     @ldap_user = LdapUser.find(params[:id])\r
42 \r
43     if assign_params_and_save\r
44       flash[:notice] = l(:notice_successful_update)\r
45       if @ldap_user.admin? && !params[:ldap_user][:password].blank?\r
46         flash[:warning] = l(:warning_need_to_restart)\r
47       end\r
48     \r
49       if @user.save_without_validation\r
50         @user.auth_source = nil # dummy\r
51         Mailer.deliver_account_information(@user, @ldap_user.password) if params[:send_information] && !@ldap_user.password.blank?\r
52       else\r
53         flash[:error] = l(:error_failed_to_update_redmine_user)\r
54       end\r
55 \r
56       redirect_to :action => 'edit', :id => @ldap_user.login\r
57     else\r
58       render :action => 'edit'\r
59     end\r
60   end\r
61 \r
62   def destroy\r
63     #@ldap_user = LdapUser.find(params[:id])\r
64   end\r
65 \r
66   private\r
67   def setup_auth_source\r
68     setting = RedmineLeSetting.instance\r
69     return render_403 if setting.use_external_ldap\r
70     return render_404 unless @auth_source = LdapUser.auth_source = setting.auth_source\r
71   end\r
72 \r
73   def assign_params_and_save\r
74     h = params[:ldap_user]\r
75     attrs = %w[firstname lastname mail]\r
76     attrs.each {|attr|\r
77       @user.send(attr+"=", @ldap_user.send(attr+"=", h[attr]))\r
78     }\r
79     @ldap_user.password = h[:password]\r
80     @ldap_user.password_confirmation = h[:password_confirmation]\r
81 \r
82     unless @user.valid?\r
83       @user.errors.each_error {|attr, error|\r
84         if attrs.include?(attr) && @user.send(attr+"_changed?")\r
85           @ldap_user.errors.add_to_base(error.full_message)\r
86         end\r
87       }\r
88     end\r
89     @user.auth_source ||= @auth_source\r
90 \r
91     RedmineLeSetting.transaction do\r
92       @ldap_user.errors.empty? && @ldap_user.save\r
93     end\r
94 \r
95     @ldap_user.errors.empty?\r
96   end\r
97 end\r