@user.pref.attributes = params[:pref]
if @user.save
@user.pref.save
- @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
set_language_if_valid @user.language
flash[:notice] = l(:notice_account_updated)
redirect_to my_account_path
if @user.save
@user.pref.attributes = params[:pref]
@user.pref.save
- @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
Mailer.account_information(@user, @user.password).deliver if params[:send_information]
if @user.save
@user.pref.save
- @user.notified_project_ids = (@user.mail_notification == 'selected' ? params[:notified_project_ids] : [])
if was_activated
Mailer.account_activated(@user).deliver
before_create :set_mail_notification
before_save :generate_password_if_needed, :update_hashed_password
before_destroy :remove_references_before_destroy
+ after_save :update_notified_project_ids
scope :in_group, lambda {|group|
group_id = group.is_a?(Group) ? group.id : group.to_i
@name = nil
@projects_by_role = nil
@membership_by_project_id = nil
+ @notified_projects_ids = nil
+ @notified_projects_ids_changed = false
base_reload(*args)
end
end
def notified_project_ids=(ids)
- Member.update_all("mail_notification = #{connection.quoted_false}", ['user_id = ?', id])
- Member.update_all("mail_notification = #{connection.quoted_true}", ['user_id = ? AND project_id IN (?)', id, ids]) if ids && !ids.empty?
- @notified_projects_ids = nil
- notified_projects_ids
+ @notified_projects_ids_changed = true
+ @notified_projects_ids = ids
+ end
+
+ # Updates per project notifications (after_save callback)
+ def update_notified_project_ids
+ if @notified_projects_ids_changed
+ ids = (mail_notification == 'selected' ? Array.wrap(notified_projects_ids).reject(&:blank?) : [])
+ members.update_all(:mail_notification => false)
+ members.where(:project_id => ids).update_all(:mail_notification => true) if ids.any?
+ end
end
+ private :update_notified_project_ids
def valid_notification_options
self.class.valid_notification_options(self)
'lastname',
'mail',
'mail_notification',
+ 'notified_project_ids',
'language',
'custom_field_values',
'custom_fields',
<%= render_project_nested_lists(@user.projects) do |project|
content_tag('label',
check_box_tag(
- 'notified_project_ids[]',
+ 'user[notified_project_ids][]',
project.id,
@user.notified_projects_ids.include?(project.id)
) + ' ' + h(project.name)
)
end %>
+ <%= hidden_field_tag 'user[notified_project_ids][]', '' %>
<p><em class="info"><%= l(:text_user_mail_option) %></em></p>
<% end %>
u = User.find(2)
assert_equal [1, 2, 5], u.projects.collect{|p| p.id}.sort
assert_equal [1, 2, 5], u.notified_projects_ids.sort
- assert_tag :tag => 'input',
- :attributes => {
- :id => 'notified_project_ids_',
- :value => 1,
- }
+ assert_select 'input[name=?][value=?]', 'user[notified_project_ids][]', '1'
assert_equal 'all', u.mail_notification
put :update, :id => 2,
:user => {
- :mail_notification => 'selected',
- },
- :notified_project_ids => [1, 2]
+ :mail_notification => 'selected',
+ :notified_project_ids => [1, 2]
+ }
u = User.find(2)
assert_equal 'selected', u.mail_notification
assert_equal [1, 2], u.notified_projects_ids.sort