summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2010-09-28 22:13:06 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2010-09-28 22:13:06 +0000
commit437690119b0b1bd462d45f2367c1fe805e529972 (patch)
treeacab2ce9db00d12e8ef9ae962234f0da341e00bc /app
parent26ef9da02b7ef7550712317ad050e5a2f31744c6 (diff)
downloadredmine-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.rb43
-rw-r--r--app/models/user.rb2
-rw-r--r--app/views/my/account.rhtml16
-rw-r--r--app/views/users/_form.rhtml10
-rw-r--r--app/views/users/_mail_notifications.html.erb12
-rw-r--r--app/views/users/_preferences.html.erb6
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 %>
+