##// END OF EJS Templates
Merged r3941 from trunk....
Eric Davis -
r3877:2012c60bfdf6
parent child
Show More
@@ -19,7 +19,7 class IssuesController < ApplicationController
19 menu_item :new_issue, :only => [:new, :create]
19 menu_item :new_issue, :only => [:new, :create]
20 default_search_scope :issues
20 default_search_scope :issues
21
21
22 before_filter :find_issue, :only => [:show, :edit, :update, :reply]
22 before_filter :find_issue, :only => [:show, :edit, :update]
23 before_filter :find_issues, :only => [:bulk_edit, :move, :perform_move, :destroy]
23 before_filter :find_issues, :only => [:bulk_edit, :move, :perform_move, :destroy]
24 before_filter :find_project, :only => [:new, :create, :update_form, :preview, :auto_complete]
24 before_filter :find_project, :only => [:new, :create, :update_form, :preview, :auto_complete]
25 before_filter :authorize, :except => [:index, :changes, :preview, :context_menu]
25 before_filter :authorize, :except => [:index, :changes, :preview, :context_menu]
@@ -200,29 +200,6 class IssuesController < ApplicationController
200 end
200 end
201 end
201 end
202
202
203 def reply
204 journal = Journal.find(params[:journal_id]) if params[:journal_id]
205 if journal
206 user = journal.user
207 text = journal.notes
208 else
209 user = @issue.author
210 text = @issue.description
211 end
212 # Replaces pre blocks with [...]
213 text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
214 content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
215 content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
216
217 render(:update) { |page|
218 page.<< "$('notes').value = \"#{escape_javascript content}\";"
219 page.show 'update'
220 page << "Form.Element.focus('notes');"
221 page << "Element.scrollTo('update');"
222 page << "$('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight;"
223 }
224 end
225
226 # Bulk edit a set of issues
203 # Bulk edit a set of issues
227 def bulk_edit
204 def bulk_edit
228 @issues.sort!
205 @issues.sort!
@@ -16,7 +16,31
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class JournalsController < ApplicationController
18 class JournalsController < ApplicationController
19 before_filter :find_journal
19 before_filter :find_journal, :only => [:edit]
20 before_filter :find_issue, :only => [:new]
21
22 def new
23 journal = Journal.find(params[:journal_id]) if params[:journal_id]
24 if journal
25 user = journal.user
26 text = journal.notes
27 else
28 user = @issue.author
29 text = @issue.description
30 end
31 # Replaces pre blocks with [...]
32 text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
33 content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
34 content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
35
36 render(:update) { |page|
37 page.<< "$('notes').value = \"#{escape_javascript content}\";"
38 page.show 'update'
39 page << "Form.Element.focus('notes');"
40 page << "Element.scrollTo('update');"
41 page << "$('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight;"
42 }
43 end
20
44
21 def edit
45 def edit
22 if request.post?
46 if request.post?
@@ -38,4 +62,12 private
38 rescue ActiveRecord::RecordNotFound
62 rescue ActiveRecord::RecordNotFound
39 render_404
63 render_404
40 end
64 end
65
66 # TODO: duplicated in IssuesController
67 def find_issue
68 @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
69 @project = @issue.project
70 rescue ActiveRecord::RecordNotFound
71 render_404
72 end
41 end
73 end
@@ -22,7 +22,7 module JournalsHelper
22 links = []
22 links = []
23 if !journal.notes.blank?
23 if !journal.notes.blank?
24 links << link_to_remote(image_tag('comment.png'),
24 links << link_to_remote(image_tag('comment.png'),
25 { :url => {:controller => 'issues', :action => 'reply', :id => issue, :journal_id => journal} },
25 { :url => {:controller => 'journals', :action => 'new', :id => issue, :journal_id => journal} },
26 :title => l(:button_quote)) if options[:reply_links]
26 :title => l(:button_quote)) if options[:reply_links]
27 links << link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes",
27 links << link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes",
28 { :controller => 'journals', :action => 'edit', :id => journal },
28 { :controller => 'journals', :action => 'edit', :id => journal },
@@ -124,7 +124,7 ActionController::Routing::Routes.draw do |map|
124 issues_actions.connect 'projects/:project_id/issues', :action => 'create'
124 issues_actions.connect 'projects/:project_id/issues', :action => 'create'
125 issues_actions.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
125 issues_actions.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
126 issues_actions.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
126 issues_actions.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
127 issues_actions.connect 'issues/:id/quoted', :action => 'reply', :id => /\d+/
127 issues_actions.connect 'issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/
128 issues_actions.connect 'issues/:id/:action', :action => /edit|destroy/, :id => /\d+/
128 issues_actions.connect 'issues/:id/:action', :action => /edit|destroy/, :id => /\d+/
129 issues_actions.connect 'issues.:format', :action => 'create', :format => /xml/
129 issues_actions.connect 'issues.:format', :action => 'create', :format => /xml/
130 end
130 end
@@ -63,10 +63,10 Redmine::AccessControl.map do |map|
63 :queries => :index,
63 :queries => :index,
64 :reports => [:issue_report, :issue_report_details]}
64 :reports => [:issue_report, :issue_report_details]}
65 map.permission :add_issues, {:issues => [:new, :create, :update_form]}
65 map.permission :add_issues, {:issues => [:new, :create, :update_form]}
66 map.permission :edit_issues, {:issues => [:edit, :update, :reply, :bulk_edit, :update_form]}
66 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :update_form], :journals => [:new]}
67 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
67 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
68 map.permission :manage_subtasks, {}
68 map.permission :manage_subtasks, {}
69 map.permission :add_issue_notes, {:issues => [:edit, :update, :reply]}
69 map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]}
70 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
70 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
71 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
71 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
72 map.permission :move_issues, {:issue_moves => [:new, :create]}, :require => :loggedin
72 map.permission :move_issues, {:issue_moves => [:new, :create]}, :require => :loggedin
@@ -634,20 +634,6 class IssuesControllerTest < ActionController::TestCase
634 assert_equal 'This is the test_new issue', issue.subject
634 assert_equal 'This is the test_new issue', issue.subject
635 end
635 end
636
636
637 def test_reply_to_issue
638 @request.session[:user_id] = 2
639 get :reply, :id => 1
640 assert_response :success
641 assert_select_rjs :show, "update"
642 end
643
644 def test_reply_to_note
645 @request.session[:user_id] = 2
646 get :reply, :id => 1, :journal_id => 2
647 assert_response :success
648 assert_select_rjs :show, "update"
649 end
650
651 def test_update_using_invalid_http_verbs
637 def test_update_using_invalid_http_verbs
652 @request.session[:user_id] = 2
638 @request.session[:user_id] = 2
653 subject = 'Updated by an invalid http verb'
639 subject = 'Updated by an invalid http verb'
@@ -31,6 +31,20 class JournalsControllerTest < ActionController::TestCase
31 User.current = nil
31 User.current = nil
32 end
32 end
33
33
34 def test_reply_to_issue
35 @request.session[:user_id] = 2
36 get :new, :id => 1
37 assert_response :success
38 assert_select_rjs :show, "update"
39 end
40
41 def test_reply_to_note
42 @request.session[:user_id] = 2
43 get :new, :id => 1, :journal_id => 2
44 assert_response :success
45 assert_select_rjs :show, "update"
46 end
47
34 def test_get_edit
48 def test_get_edit
35 @request.session[:user_id] = 1
49 @request.session[:user_id] = 1
36 xhr :get, :edit, :id => 2
50 xhr :get, :edit, :id => 2
@@ -88,7 +88,7 class RoutingTest < ActionController::IntegrationTest
88 should_route :get, "/issues/move/new", :controller => 'issue_moves', :action => 'new'
88 should_route :get, "/issues/move/new", :controller => 'issue_moves', :action => 'new'
89 should_route :post, "/issues/move", :controller => 'issue_moves', :action => 'create'
89 should_route :post, "/issues/move", :controller => 'issue_moves', :action => 'create'
90
90
91 should_route :post, "/issues/1/quoted", :controller => 'issues', :action => 'reply', :id => '1'
91 should_route :post, "/issues/1/quoted", :controller => 'journals', :action => 'new', :id => '1'
92
92
93 should_route :get, "/issues/calendar", :controller => 'calendars', :action => 'show'
93 should_route :get, "/issues/calendar", :controller => 'calendars', :action => 'show'
94 should_route :post, "/issues/calendar", :controller => 'calendars', :action => 'show'
94 should_route :post, "/issues/calendar", :controller => 'calendars', :action => 'show'
General Comments 0
You need to be logged in to leave comments. Login now