diff options
author | Eric Davis <edavis@littlestreamsoftware.com> | 2010-09-28 22:13:06 +0000 |
---|---|---|
committer | Eric Davis <edavis@littlestreamsoftware.com> | 2010-09-28 22:13:06 +0000 |
commit | 437690119b0b1bd462d45f2367c1fe805e529972 (patch) | |
tree | acab2ce9db00d12e8ef9ae962234f0da341e00bc /app | |
parent | 26ef9da02b7ef7550712317ad050e5a2f31744c6 (diff) | |
download | redmine-437690119b0b1bd462d45f2367c1fe805e529972.tar.gz redmine-437690119b0b1bd462d45f2367c1fe805e529972.zip |
Allow admins to edit user's email notifications and preferences. #3503
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4223 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/users_controller.rb | 43 | ||||
-rw-r--r-- | app/models/user.rb | 2 | ||||
-rw-r--r-- | app/views/my/account.rhtml | 16 | ||||
-rw-r--r-- | app/views/users/_form.rhtml | 10 | ||||
-rw-r--r-- | app/views/users/_mail_notifications.html.erb | 12 | ||||
-rw-r--r-- | app/views/users/_preferences.html.erb | 6 |
6 files changed, 74 insertions, 15 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f22427a66..fb7a0e10d 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -72,17 +72,40 @@ class UsersController < ApplicationController end def add + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + @notification_option = Setting.default_notification_option + @user = User.new(:language => Setting.default_language) @auth_sources = AuthSource.find(:all) + + # TODO: Similar to My#account + # Only users that belong to more than 1 project can select projects for which they are notified + # Note that @user.membership.size would fail since AR ignores + # :include association option when doing a count + if @user.memberships.length < 1 + @notification_options.delete_if {|option| option.first == :selected} + end end verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } def create + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + @notification_option = Setting.default_notification_option + @user = User.new(params[:user]) @user.admin = params[:user][:admin] || false @user.login = params[:user][:login] @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id + + # TODO: Similar to My#account + @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.pref.attributes = params[:pref] + @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + if @user.save + @user.pref.save + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] flash[:notice] = l(:notice_successful_create) redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} : @@ -90,12 +113,24 @@ class UsersController < ApplicationController return else @auth_sources = AuthSource.find(:all) + @notification_option = @user.mail_notification + render :action => 'add' end end def edit @user = User.find(params[:id]) + # TODO: Similar to My#account + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + # Only users that belong to more than 1 project can select projects for which they are notified + # Note that @user.membership.size would fail since AR ignores + # :include association option when doing a count + if @user.memberships.length < 1 + @notification_options.delete_if {|option| option.first == :selected} + end + @notification_option = @user.mail_notification + if request.post? @user.admin = params[:user][:admin] if params[:user][:admin] @user.login = params[:user][:login] if params[:user][:login] @@ -106,7 +141,15 @@ class UsersController < ApplicationController @user.attributes = params[:user] # Was the account actived ? (do it before User#save clears the change) was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) + # TODO: Similar to My#account + @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.pref.attributes = params[:pref] + @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + if @user.save + @user.pref.save + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + if was_activated Mailer.deliver_account_activated(@user) elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? diff --git a/app/models/user.rb b/app/models/user.rb index 0ac5e7d63..481c832b4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -74,7 +74,7 @@ class User < Principal validates_confirmation_of :password, :allow_nil => true def before_create - self.mail_notification = Setting.default_notification_option + self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? true end diff --git a/app/views/my/account.rhtml b/app/views/my/account.rhtml index b173b2b0d..99b58ffe7 100644 --- a/app/views/my/account.rhtml +++ b/app/views/my/account.rhtml @@ -32,24 +32,12 @@ <div class="splitcontentright"> <h3><%=l(:field_mail_notification)%></h3> <div class="box"> -<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym), - :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> -<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> -<p><% User.current.projects.each do |project| %> - <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br /> -<% end %></p> -<p><em><%= l(:text_user_mail_option) %></em></p> -<% end %> -<p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p> +<%= render :partial => 'users/mail_notifications' %> </div> <h3><%=l(:label_preferences)%></h3> <div class="box tabular"> -<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> -<p><%= pref_fields.check_box :hide_mail %></p> -<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p> -<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> -<% end %> +<%= render :partial => 'users/preferences' %> </div> </div> diff --git a/app/views/users/_form.rhtml b/app/views/users/_form.rhtml index 4f9a0ff21..7e50fcdc3 100644 --- a/app/views/users/_form.rhtml +++ b/app/views/users/_form.rhtml @@ -32,4 +32,14 @@ <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p> </div> </div> + +<div class="box"> +<h3><%=l(:field_mail_notification)%></h3> +<%= render :partial => 'users/mail_notifications' %> +</div> + +<div class="box tabular"> +<h3><%=l(:label_preferences)%></h3> +<%= render :partial => 'users/preferences' %> +</div> <!--[eoform:user]--> diff --git a/app/views/users/_mail_notifications.html.erb b/app/views/users/_mail_notifications.html.erb new file mode 100644 index 000000000..d29250893 --- /dev/null +++ b/app/views/users/_mail_notifications.html.erb @@ -0,0 +1,12 @@ +<p> +<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym), + :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> +</p> +<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> +<p><% @user.projects.each do |project| %> + <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br /> +<% end %></p> +<p><em><%= l(:text_user_mail_option) %></em></p> +<% end %> +<p><label><%= l(:label_user_mail_no_self_notified) %></label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %></p> + diff --git a/app/views/users/_preferences.html.erb b/app/views/users/_preferences.html.erb new file mode 100644 index 000000000..85b5990e3 --- /dev/null +++ b/app/views/users/_preferences.html.erb @@ -0,0 +1,6 @@ +<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> +<p><%= pref_fields.check_box :hide_mail %></p> +<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p> +<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> +<% end %> + |