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'} :
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]
@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?
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
<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>
<%= 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]-->
--- /dev/null
+<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>
+
--- /dev/null
+<% 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 %>
+
:password => 'test',
:password_confirmation => 'test',
:mail => 'jdoe@gmail.com'
- }
+ },
+ :notification_option => 'none'
end
should_assign_to :user
should_respond_with :redirect
should_redirect_to('user edit') { {:controller => 'users', :action => 'edit', :id => User.find_by_login('jdoe')}}
+
+ should 'set the users mail notification' do
+ user = User.last
+ assert_equal 'none', user.mail_notification
+ end
end
context "when unsuccessful" do
def test_edit
ActionMailer::Base.deliveries.clear
- post :edit, :id => 2, :user => {:firstname => 'Changed'}
- assert_equal 'Changed', User.find(2).firstname
+ post :edit, :id => 2, :user => {:firstname => 'Changed'}, :notification_option => 'all', :pref => {:hide_mail => '1', :comments_sorting => 'desc'}
+
+ user = User.find(2)
+ assert_equal 'Changed', user.firstname
+ assert_equal 'all', user.mail_notification
+ assert_equal true, user.pref[:hide_mail]
+ assert_equal 'desc', user.pref[:comments_sorting]
assert ActionMailer::Base.deliveries.empty?
end