git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2164 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/0.9.0
@@ -121,7 +121,10 @@ class IssuesController < ApplicationController | |||
render :nothing => true, :layout => true | |||
return | |||
end | |||
@issue.attributes = params[:issue] | |||
if params[:issue].is_a?(Hash) | |||
@issue.attributes = params[:issue] | |||
@issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project) | |||
end | |||
@issue.author = User.current | |||
default_status = IssueStatus.default |
@@ -28,6 +28,7 @@ class Mailer < ActionMailer::Base | |||
'Issue-Author' => issue.author.login | |||
redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to | |||
recipients issue.recipients | |||
cc(issue.watcher_recipients - @recipients) | |||
subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}" | |||
body :issue => issue, | |||
:issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue) |
@@ -48,6 +48,14 @@ | |||
<p><label><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p> | |||
<% end %> | |||
<% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%> | |||
<p><label>Watchers</label> | |||
<% @issue.project.users.sort.each do |user| -%> | |||
<label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watcher_user_ids.include?(user.id) %> <%=h user %></label> | |||
<% end -%> | |||
</p> | |||
<% end %> | |||
<%= call_hook(:view_issues_form_details_bottom, { :issue => @issue, :form => f }) %> | |||
<%= wikitoolbar_for 'issue_description' %> |
@@ -322,6 +322,30 @@ class IssuesControllerTest < Test::Unit::TestCase | |||
assert_equal 'activerecord_error_invalid', issue.errors.on(:custom_values) | |||
end | |||
def test_post_new_with_watchers | |||
@request.session[:user_id] = 2 | |||
ActionMailer::Base.deliveries.clear | |||
assert_difference 'Watcher.count', 2 do | |||
post :new, :project_id => 1, | |||
:issue => {:tracker_id => 1, | |||
:subject => 'This is a new issue with watchers', | |||
:description => 'This is the description', | |||
:priority_id => 5, | |||
:watcher_user_ids => ['2', '3']} | |||
end | |||
assert_redirected_to 'issues/show' | |||
issue = Issue.find_by_subject('This is a new issue with watchers') | |||
# Watchers added | |||
assert_equal [2, 3], issue.watcher_user_ids.sort | |||
assert issue.watched_by?(User.find(3)) | |||
# Watchers notified | |||
mail = ActionMailer::Base.deliveries.last | |||
assert_kind_of TMail::Mail, mail | |||
assert [mail.bcc, mail.cc].flatten.include?(User.find(3).mail) | |||
end | |||
def test_post_should_preserve_fields_values_on_validation_failure | |||
@request.session[:user_id] = 2 | |||
post :new, :project_id => 1, |
@@ -14,6 +14,8 @@ module Redmine | |||
class_eval do | |||
has_many :watchers, :as => :watchable, :dependent => :delete_all | |||
has_many :watcher_users, :through => :watchers, :source => :user | |||
attr_protected :watcher_ids, :watcher_user_ids | |||
end | |||
end | |||
end |