##// END OF EJS Templates
Merged r4088 from trunk....
Eric Davis -
r4033:2149add25c15
parent child
Show More
@@ -1,141 +1,144
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
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 VersionsController < ApplicationController
18 class VersionsController < ApplicationController
19 menu_item :roadmap
19 menu_item :roadmap
20 model_object Version
20 model_object Version
21 before_filter :find_model_object, :except => [:index, :new, :close_completed]
21 before_filter :find_model_object, :except => [:index, :new, :close_completed]
22 before_filter :find_project_from_association, :except => [:index, :new, :close_completed]
22 before_filter :find_project_from_association, :except => [:index, :new, :close_completed]
23 before_filter :find_project, :only => [:index, :new, :close_completed]
23 before_filter :find_project, :only => [:index, :new, :close_completed]
24 before_filter :authorize
24 before_filter :authorize
25
25
26 helper :custom_fields
26 helper :custom_fields
27 helper :projects
27 helper :projects
28
28
29 def index
29 def index
30 @trackers = @project.trackers.find(:all, :order => 'position')
30 @trackers = @project.trackers.find(:all, :order => 'position')
31 retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
31 retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
32 @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
32 @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
33 project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
33 project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
34
34
35 @versions = @project.shared_versions || []
35 @versions = @project.shared_versions || []
36 @versions += @project.rolled_up_versions.visible if @with_subprojects
36 @versions += @project.rolled_up_versions.visible if @with_subprojects
37 @versions = @versions.uniq.sort
37 @versions = @versions.uniq.sort
38 @versions.reject! {|version| version.closed? || version.completed? } unless params[:completed]
38 @versions.reject! {|version| version.closed? || version.completed? } unless params[:completed]
39
39
40 @issues_by_version = {}
40 @issues_by_version = {}
41 unless @selected_tracker_ids.empty?
41 unless @selected_tracker_ids.empty?
42 @versions.each do |version|
42 @versions.each do |version|
43 issues = version.fixed_issues.visible.find(:all,
43 issues = version.fixed_issues.visible.find(:all,
44 :include => [:project, :status, :tracker, :priority],
44 :include => [:project, :status, :tracker, :priority],
45 :conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
45 :conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
46 :order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
46 :order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
47 @issues_by_version[version] = issues
47 @issues_by_version[version] = issues
48 end
48 end
49 end
49 end
50 @versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
50 @versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
51 end
51 end
52
52
53 def show
53 def show
54 @issues = @version.fixed_issues.visible.find(:all,
54 @issues = @version.fixed_issues.visible.find(:all,
55 :include => [:status, :tracker, :priority],
55 :include => [:status, :tracker, :priority],
56 :order => "#{Tracker.table_name}.position, #{Issue.table_name}.id")
56 :order => "#{Tracker.table_name}.position, #{Issue.table_name}.id")
57 end
57 end
58
58
59 def new
59 def new
60 @version = @project.versions.build
60 @version = @project.versions.build
61 if params[:version]
61 if params[:version]
62 attributes = params[:version].dup
62 attributes = params[:version].dup
63 attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
63 attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
64 @version.attributes = attributes
64 @version.attributes = attributes
65 end
65 end
66 if request.post?
66 if request.post?
67 if @version.save
67 if @version.save
68 respond_to do |format|
68 respond_to do |format|
69 format.html do
69 format.html do
70 flash[:notice] = l(:notice_successful_create)
70 flash[:notice] = l(:notice_successful_create)
71 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
71 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
72 end
72 end
73 format.js do
73 format.js do
74 # IE doesn't support the replace_html rjs method for select box options
74 # IE doesn't support the replace_html rjs method for select box options
75 render(:update) {|page| page.replace "issue_fixed_version_id",
75 render(:update) {|page| page.replace "issue_fixed_version_id",
76 content_tag('select', '<option></option>' + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
76 content_tag('select', '<option></option>' + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
77 }
77 }
78 end
78 end
79 end
79 end
80 else
80 else
81 respond_to do |format|
81 respond_to do |format|
82 format.html
82 format.html
83 format.js do
83 format.js do
84 render(:update) {|page| page.alert(@version.errors.full_messages.join('\n')) }
84 render(:update) {|page| page.alert(@version.errors.full_messages.join('\n')) }
85 end
85 end
86 end
86 end
87 end
87 end
88 end
88 end
89 end
89 end
90
90
91 def edit
91 def edit
92 end
93
94 def update
92 if request.post? && params[:version]
95 if request.post? && params[:version]
93 attributes = params[:version].dup
96 attributes = params[:version].dup
94 attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
97 attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
95 if @version.update_attributes(attributes)
98 if @version.update_attributes(attributes)
96 flash[:notice] = l(:notice_successful_update)
99 flash[:notice] = l(:notice_successful_update)
97 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
100 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
98 end
101 end
99 end
102 end
100 end
103 end
101
104
102 def close_completed
105 def close_completed
103 if request.post?
106 if request.post?
104 @project.close_completed_versions
107 @project.close_completed_versions
105 end
108 end
106 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
109 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
107 end
110 end
108
111
109 def destroy
112 def destroy
110 if @version.fixed_issues.empty?
113 if @version.fixed_issues.empty?
111 @version.destroy
114 @version.destroy
112 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
115 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
113 else
116 else
114 flash[:error] = l(:notice_unable_delete_version)
117 flash[:error] = l(:notice_unable_delete_version)
115 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
118 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
116 end
119 end
117 end
120 end
118
121
119 def status_by
122 def status_by
120 respond_to do |format|
123 respond_to do |format|
121 format.html { render :action => 'show' }
124 format.html { render :action => 'show' }
122 format.js { render(:update) {|page| page.replace_html 'status_by', render_issue_status_by(@version, params[:status_by])} }
125 format.js { render(:update) {|page| page.replace_html 'status_by', render_issue_status_by(@version, params[:status_by])} }
123 end
126 end
124 end
127 end
125
128
126 private
129 private
127 def find_project
130 def find_project
128 @project = Project.find(params[:project_id])
131 @project = Project.find(params[:project_id])
129 rescue ActiveRecord::RecordNotFound
132 rescue ActiveRecord::RecordNotFound
130 render_404
133 render_404
131 end
134 end
132
135
133 def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
136 def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
134 if ids = params[:tracker_ids]
137 if ids = params[:tracker_ids]
135 @selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
138 @selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
136 else
139 else
137 @selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
140 @selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
138 end
141 end
139 end
142 end
140
143
141 end
144 end
@@ -1,7 +1,7
1 <h2><%=l(:label_version)%></h2>
1 <h2><%=l(:label_version)%></h2>
2
2
3 <% labelled_tabular_form_for :version, @version, :url => { :action => 'edit' } do |f| %>
3 <% labelled_tabular_form_for :version, @version, :url => { :action => 'update', :id => @version } do |f| %>
4 <%= render :partial => 'form', :locals => { :f => f } %>
4 <%= render :partial => 'form', :locals => { :f => f } %>
5 <%= submit_tag l(:button_save) %>
5 <%= submit_tag l(:button_save) %>
6 <% end %>
6 <% end %>
7
7
@@ -1,302 +1,305
1 ActionController::Routing::Routes.draw do |map|
1 ActionController::Routing::Routes.draw do |map|
2 # Add your own custom routes here.
2 # Add your own custom routes here.
3 # The priority is based upon order of creation: first created -> highest priority.
3 # The priority is based upon order of creation: first created -> highest priority.
4
4
5 # Here's a sample route:
5 # Here's a sample route:
6 # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
6 # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
7 # Keep in mind you can assign values other than :controller and :action
7 # Keep in mind you can assign values other than :controller and :action
8
8
9 map.home '', :controller => 'welcome'
9 map.home '', :controller => 'welcome'
10
10
11 map.signin 'login', :controller => 'account', :action => 'login'
11 map.signin 'login', :controller => 'account', :action => 'login'
12 map.signout 'logout', :controller => 'account', :action => 'logout'
12 map.signout 'logout', :controller => 'account', :action => 'logout'
13
13
14 map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
14 map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
15 map.connect 'help/:ctrl/:page', :controller => 'help'
15 map.connect 'help/:ctrl/:page', :controller => 'help'
16
16
17 map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog'
17 map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog'
18 map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog'
18 map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog'
19 map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog'
19 map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog'
20
20
21 map.with_options :controller => 'timelog' do |timelog|
21 map.with_options :controller => 'timelog' do |timelog|
22 timelog.connect 'projects/:project_id/time_entries', :action => 'details'
22 timelog.connect 'projects/:project_id/time_entries', :action => 'details'
23
23
24 timelog.with_options :action => 'details', :conditions => {:method => :get} do |time_details|
24 timelog.with_options :action => 'details', :conditions => {:method => :get} do |time_details|
25 time_details.connect 'time_entries'
25 time_details.connect 'time_entries'
26 time_details.connect 'time_entries.:format'
26 time_details.connect 'time_entries.:format'
27 time_details.connect 'issues/:issue_id/time_entries'
27 time_details.connect 'issues/:issue_id/time_entries'
28 time_details.connect 'issues/:issue_id/time_entries.:format'
28 time_details.connect 'issues/:issue_id/time_entries.:format'
29 time_details.connect 'projects/:project_id/time_entries.:format'
29 time_details.connect 'projects/:project_id/time_entries.:format'
30 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries'
30 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries'
31 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format'
31 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format'
32 end
32 end
33 timelog.connect 'projects/:project_id/time_entries/report', :action => 'report'
33 timelog.connect 'projects/:project_id/time_entries/report', :action => 'report'
34 timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report|
34 timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report|
35 time_report.connect 'time_entries/report'
35 time_report.connect 'time_entries/report'
36 time_report.connect 'time_entries/report.:format'
36 time_report.connect 'time_entries/report.:format'
37 time_report.connect 'projects/:project_id/time_entries/report.:format'
37 time_report.connect 'projects/:project_id/time_entries/report.:format'
38 end
38 end
39
39
40 timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit|
40 timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit|
41 time_edit.connect 'issues/:issue_id/time_entries/new'
41 time_edit.connect 'issues/:issue_id/time_entries/new'
42 end
42 end
43
43
44 timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
44 timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
45 end
45 end
46
46
47 map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
47 map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
48 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
48 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
49 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
49 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
50 map.with_options :controller => 'wiki' do |wiki_routes|
50 map.with_options :controller => 'wiki' do |wiki_routes|
51 wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
51 wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
52 wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
52 wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
53 wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
53 wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
54 wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
54 wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
55 wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
55 wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
56 wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
56 wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
57 wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
57 wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
58 wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
58 wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
59 end
59 end
60
60
61 wiki_routes.connect 'projects/:id/wiki/:page/:action',
61 wiki_routes.connect 'projects/:id/wiki/:page/:action',
62 :action => /edit|rename|destroy|preview|protect/,
62 :action => /edit|rename|destroy|preview|protect/,
63 :conditions => {:method => :post}
63 :conditions => {:method => :post}
64 end
64 end
65
65
66 map.with_options :controller => 'messages' do |messages_routes|
66 map.with_options :controller => 'messages' do |messages_routes|
67 messages_routes.with_options :conditions => {:method => :get} do |messages_views|
67 messages_routes.with_options :conditions => {:method => :get} do |messages_views|
68 messages_views.connect 'boards/:board_id/topics/new', :action => 'new'
68 messages_views.connect 'boards/:board_id/topics/new', :action => 'new'
69 messages_views.connect 'boards/:board_id/topics/:id', :action => 'show'
69 messages_views.connect 'boards/:board_id/topics/:id', :action => 'show'
70 messages_views.connect 'boards/:board_id/topics/:id/edit', :action => 'edit'
70 messages_views.connect 'boards/:board_id/topics/:id/edit', :action => 'edit'
71 end
71 end
72 messages_routes.with_options :conditions => {:method => :post} do |messages_actions|
72 messages_routes.with_options :conditions => {:method => :post} do |messages_actions|
73 messages_actions.connect 'boards/:board_id/topics/new', :action => 'new'
73 messages_actions.connect 'boards/:board_id/topics/new', :action => 'new'
74 messages_actions.connect 'boards/:board_id/topics/:id/replies', :action => 'reply'
74 messages_actions.connect 'boards/:board_id/topics/:id/replies', :action => 'reply'
75 messages_actions.connect 'boards/:board_id/topics/:id/:action', :action => /edit|destroy/
75 messages_actions.connect 'boards/:board_id/topics/:id/:action', :action => /edit|destroy/
76 end
76 end
77 end
77 end
78
78
79 map.with_options :controller => 'boards' do |board_routes|
79 map.with_options :controller => 'boards' do |board_routes|
80 board_routes.with_options :conditions => {:method => :get} do |board_views|
80 board_routes.with_options :conditions => {:method => :get} do |board_views|
81 board_views.connect 'projects/:project_id/boards', :action => 'index'
81 board_views.connect 'projects/:project_id/boards', :action => 'index'
82 board_views.connect 'projects/:project_id/boards/new', :action => 'new'
82 board_views.connect 'projects/:project_id/boards/new', :action => 'new'
83 board_views.connect 'projects/:project_id/boards/:id', :action => 'show'
83 board_views.connect 'projects/:project_id/boards/:id', :action => 'show'
84 board_views.connect 'projects/:project_id/boards/:id.:format', :action => 'show'
84 board_views.connect 'projects/:project_id/boards/:id.:format', :action => 'show'
85 board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit'
85 board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit'
86 end
86 end
87 board_routes.with_options :conditions => {:method => :post} do |board_actions|
87 board_routes.with_options :conditions => {:method => :post} do |board_actions|
88 board_actions.connect 'projects/:project_id/boards', :action => 'new'
88 board_actions.connect 'projects/:project_id/boards', :action => 'new'
89 board_actions.connect 'projects/:project_id/boards/:id/:action', :action => /edit|destroy/
89 board_actions.connect 'projects/:project_id/boards/:id/:action', :action => /edit|destroy/
90 end
90 end
91 end
91 end
92
92
93 map.with_options :controller => 'documents' do |document_routes|
93 map.with_options :controller => 'documents' do |document_routes|
94 document_routes.with_options :conditions => {:method => :get} do |document_views|
94 document_routes.with_options :conditions => {:method => :get} do |document_views|
95 document_views.connect 'projects/:project_id/documents', :action => 'index'
95 document_views.connect 'projects/:project_id/documents', :action => 'index'
96 document_views.connect 'projects/:project_id/documents/new', :action => 'new'
96 document_views.connect 'projects/:project_id/documents/new', :action => 'new'
97 document_views.connect 'documents/:id', :action => 'show'
97 document_views.connect 'documents/:id', :action => 'show'
98 document_views.connect 'documents/:id/edit', :action => 'edit'
98 document_views.connect 'documents/:id/edit', :action => 'edit'
99 end
99 end
100 document_routes.with_options :conditions => {:method => :post} do |document_actions|
100 document_routes.with_options :conditions => {:method => :post} do |document_actions|
101 document_actions.connect 'projects/:project_id/documents', :action => 'new'
101 document_actions.connect 'projects/:project_id/documents', :action => 'new'
102 document_actions.connect 'documents/:id/:action', :action => /destroy|edit/
102 document_actions.connect 'documents/:id/:action', :action => /destroy|edit/
103 end
103 end
104 end
104 end
105
105
106 map.resources :issue_moves, :only => [:new, :create], :path_prefix => '/issues', :as => 'move'
106 map.resources :issue_moves, :only => [:new, :create], :path_prefix => '/issues', :as => 'move'
107 map.auto_complete_issues '/issues/auto_complete', :controller => 'auto_completes', :action => 'issues'
107 map.auto_complete_issues '/issues/auto_complete', :controller => 'auto_completes', :action => 'issues'
108 # TODO: would look nicer as /issues/:id/preview
108 # TODO: would look nicer as /issues/:id/preview
109 map.preview_issue '/issues/preview/:id', :controller => 'previews', :action => 'issue'
109 map.preview_issue '/issues/preview/:id', :controller => 'previews', :action => 'issue'
110 map.issues_context_menu '/issues/context_menu', :controller => 'context_menus', :action => 'issues'
110 map.issues_context_menu '/issues/context_menu', :controller => 'context_menus', :action => 'issues'
111 map.issue_changes '/issues/changes', :controller => 'journals', :action => 'index'
111 map.issue_changes '/issues/changes', :controller => 'journals', :action => 'index'
112
112
113 map.with_options :controller => 'issues' do |issues_routes|
113 map.with_options :controller => 'issues' do |issues_routes|
114 issues_routes.with_options :conditions => {:method => :get} do |issues_views|
114 issues_routes.with_options :conditions => {:method => :get} do |issues_views|
115 issues_views.connect 'issues', :action => 'index'
115 issues_views.connect 'issues', :action => 'index'
116 issues_views.connect 'issues.:format', :action => 'index'
116 issues_views.connect 'issues.:format', :action => 'index'
117 issues_views.connect 'projects/:project_id/issues', :action => 'index'
117 issues_views.connect 'projects/:project_id/issues', :action => 'index'
118 issues_views.connect 'projects/:project_id/issues.:format', :action => 'index'
118 issues_views.connect 'projects/:project_id/issues.:format', :action => 'index'
119 issues_views.connect 'projects/:project_id/issues/new', :action => 'new'
119 issues_views.connect 'projects/:project_id/issues/new', :action => 'new'
120 issues_views.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
120 issues_views.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
121 issues_views.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
121 issues_views.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
122 issues_views.connect 'projects/:project_id/issues/:copy_from/copy', :action => 'new'
122 issues_views.connect 'projects/:project_id/issues/:copy_from/copy', :action => 'new'
123 issues_views.connect 'issues/:id', :action => 'show', :id => /\d+/
123 issues_views.connect 'issues/:id', :action => 'show', :id => /\d+/
124 issues_views.connect 'issues/:id.:format', :action => 'show', :id => /\d+/
124 issues_views.connect 'issues/:id.:format', :action => 'show', :id => /\d+/
125 issues_views.connect 'issues/:id/edit', :action => 'edit', :id => /\d+/
125 issues_views.connect 'issues/:id/edit', :action => 'edit', :id => /\d+/
126 end
126 end
127 issues_routes.with_options :conditions => {:method => :post} do |issues_actions|
127 issues_routes.with_options :conditions => {:method => :post} do |issues_actions|
128 issues_actions.connect 'issues', :action => 'index'
128 issues_actions.connect 'issues', :action => 'index'
129 issues_actions.connect 'projects/:project_id/issues', :action => 'create'
129 issues_actions.connect 'projects/:project_id/issues', :action => 'create'
130 issues_actions.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
130 issues_actions.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
131 issues_actions.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
131 issues_actions.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
132 issues_actions.connect 'issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/
132 issues_actions.connect 'issues/:id/quoted', :controller => 'journals', :action => 'new', :id => /\d+/
133 issues_actions.connect 'issues/:id/:action', :action => /edit|destroy/, :id => /\d+/
133 issues_actions.connect 'issues/:id/:action', :action => /edit|destroy/, :id => /\d+/
134 issues_actions.connect 'issues.:format', :action => 'create', :format => /xml/
134 issues_actions.connect 'issues.:format', :action => 'create', :format => /xml/
135 issues_actions.connect 'issues/bulk_edit', :action => 'bulk_update'
135 issues_actions.connect 'issues/bulk_edit', :action => 'bulk_update'
136 end
136 end
137 issues_routes.with_options :conditions => {:method => :put} do |issues_actions|
137 issues_routes.with_options :conditions => {:method => :put} do |issues_actions|
138 issues_actions.connect 'issues/:id/edit', :action => 'update', :id => /\d+/
138 issues_actions.connect 'issues/:id/edit', :action => 'update', :id => /\d+/
139 issues_actions.connect 'issues/:id.:format', :action => 'update', :id => /\d+/, :format => /xml/
139 issues_actions.connect 'issues/:id.:format', :action => 'update', :id => /\d+/, :format => /xml/
140 end
140 end
141 issues_routes.with_options :conditions => {:method => :delete} do |issues_actions|
141 issues_routes.with_options :conditions => {:method => :delete} do |issues_actions|
142 issues_actions.connect 'issues/:id.:format', :action => 'destroy', :id => /\d+/, :format => /xml/
142 issues_actions.connect 'issues/:id.:format', :action => 'destroy', :id => /\d+/, :format => /xml/
143 end
143 end
144 issues_routes.connect 'issues/gantt', :controller => 'gantts', :action => 'show'
144 issues_routes.connect 'issues/gantt', :controller => 'gantts', :action => 'show'
145 issues_routes.connect 'issues/calendar', :controller => 'calendars', :action => 'show'
145 issues_routes.connect 'issues/calendar', :controller => 'calendars', :action => 'show'
146 issues_routes.connect 'issues/:action'
146 issues_routes.connect 'issues/:action'
147 end
147 end
148
148
149 map.with_options :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
149 map.with_options :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
150 relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
150 relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
151 relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
151 relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
152 end
152 end
153
153
154 map.with_options :controller => 'reports', :conditions => {:method => :get} do |reports|
154 map.with_options :controller => 'reports', :conditions => {:method => :get} do |reports|
155 reports.connect 'projects/:id/issues/report', :action => 'issue_report'
155 reports.connect 'projects/:id/issues/report', :action => 'issue_report'
156 reports.connect 'projects/:id/issues/report/:detail', :action => 'issue_report_details'
156 reports.connect 'projects/:id/issues/report/:detail', :action => 'issue_report_details'
157 end
157 end
158
158
159 map.with_options :controller => 'news' do |news_routes|
159 map.with_options :controller => 'news' do |news_routes|
160 news_routes.with_options :conditions => {:method => :get} do |news_views|
160 news_routes.with_options :conditions => {:method => :get} do |news_views|
161 news_views.connect 'news', :action => 'index'
161 news_views.connect 'news', :action => 'index'
162 news_views.connect 'projects/:project_id/news', :action => 'index'
162 news_views.connect 'projects/:project_id/news', :action => 'index'
163 news_views.connect 'projects/:project_id/news.:format', :action => 'index'
163 news_views.connect 'projects/:project_id/news.:format', :action => 'index'
164 news_views.connect 'news.:format', :action => 'index'
164 news_views.connect 'news.:format', :action => 'index'
165 news_views.connect 'projects/:project_id/news/new', :action => 'new'
165 news_views.connect 'projects/:project_id/news/new', :action => 'new'
166 news_views.connect 'news/:id', :action => 'show'
166 news_views.connect 'news/:id', :action => 'show'
167 news_views.connect 'news/:id/edit', :action => 'edit'
167 news_views.connect 'news/:id/edit', :action => 'edit'
168 end
168 end
169 news_routes.with_options do |news_actions|
169 news_routes.with_options do |news_actions|
170 news_actions.connect 'projects/:project_id/news', :action => 'new'
170 news_actions.connect 'projects/:project_id/news', :action => 'new'
171 news_actions.connect 'news/:id/edit', :action => 'edit'
171 news_actions.connect 'news/:id/edit', :action => 'edit'
172 news_actions.connect 'news/:id/destroy', :action => 'destroy'
172 news_actions.connect 'news/:id/destroy', :action => 'destroy'
173 end
173 end
174 end
174 end
175
175
176 map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
176 map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
177
177
178 map.with_options :controller => 'users' do |users|
178 map.with_options :controller => 'users' do |users|
179 users.with_options :conditions => {:method => :get} do |user_views|
179 users.with_options :conditions => {:method => :get} do |user_views|
180 user_views.connect 'users', :action => 'index'
180 user_views.connect 'users', :action => 'index'
181 user_views.connect 'users/:id', :action => 'show', :id => /\d+/
181 user_views.connect 'users/:id', :action => 'show', :id => /\d+/
182 user_views.connect 'users/new', :action => 'add'
182 user_views.connect 'users/new', :action => 'add'
183 user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
183 user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
184 end
184 end
185 users.with_options :conditions => {:method => :post} do |user_actions|
185 users.with_options :conditions => {:method => :post} do |user_actions|
186 user_actions.connect 'users', :action => 'add'
186 user_actions.connect 'users', :action => 'add'
187 user_actions.connect 'users/new', :action => 'add'
187 user_actions.connect 'users/new', :action => 'add'
188 user_actions.connect 'users/:id/edit', :action => 'edit'
188 user_actions.connect 'users/:id/edit', :action => 'edit'
189 user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
189 user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
190 user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
190 user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
191 user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
191 user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
192 end
192 end
193 end
193 end
194
194
195 map.with_options :controller => 'projects' do |projects|
195 map.with_options :controller => 'projects' do |projects|
196 projects.with_options :conditions => {:method => :get} do |project_views|
196 projects.with_options :conditions => {:method => :get} do |project_views|
197 project_views.connect 'projects', :action => 'index'
197 project_views.connect 'projects', :action => 'index'
198 project_views.connect 'projects.:format', :action => 'index'
198 project_views.connect 'projects.:format', :action => 'index'
199 project_views.connect 'projects/new', :action => 'new'
199 project_views.connect 'projects/new', :action => 'new'
200 project_views.connect 'projects/:id', :action => 'show'
200 project_views.connect 'projects/:id', :action => 'show'
201 project_views.connect 'projects/:id.:format', :action => 'show'
201 project_views.connect 'projects/:id.:format', :action => 'show'
202 project_views.connect 'projects/:id/:action', :action => /destroy|settings/
202 project_views.connect 'projects/:id/:action', :action => /destroy|settings/
203 project_views.connect 'projects/:id/files', :controller => 'files', :action => 'index'
203 project_views.connect 'projects/:id/files', :controller => 'files', :action => 'index'
204 project_views.connect 'projects/:id/files/new', :controller => 'files', :action => 'new'
204 project_views.connect 'projects/:id/files/new', :controller => 'files', :action => 'new'
205 project_views.connect 'projects/:id/settings/:tab', :action => 'settings'
205 project_views.connect 'projects/:id/settings/:tab', :action => 'settings'
206 end
206 end
207
207
208 projects.with_options :controller => 'activities', :action => 'index', :conditions => {:method => :get} do |activity|
208 projects.with_options :controller => 'activities', :action => 'index', :conditions => {:method => :get} do |activity|
209 activity.connect 'projects/:id/activity'
209 activity.connect 'projects/:id/activity'
210 activity.connect 'projects/:id/activity.:format'
210 activity.connect 'projects/:id/activity.:format'
211 activity.connect 'activity', :id => nil
211 activity.connect 'activity', :id => nil
212 activity.connect 'activity.:format', :id => nil
212 activity.connect 'activity.:format', :id => nil
213 end
213 end
214
214
215 projects.with_options :conditions => {:method => :post} do |project_actions|
215 projects.with_options :conditions => {:method => :post} do |project_actions|
216 project_actions.connect 'projects/new', :action => 'create'
216 project_actions.connect 'projects/new', :action => 'create'
217 project_actions.connect 'projects', :action => 'create'
217 project_actions.connect 'projects', :action => 'create'
218 project_actions.connect 'projects.:format', :action => 'create', :format => /xml/
218 project_actions.connect 'projects.:format', :action => 'create', :format => /xml/
219 project_actions.connect 'projects/:id/edit', :action => 'update'
219 project_actions.connect 'projects/:id/edit', :action => 'update'
220 project_actions.connect 'projects/:id/:action', :action => /destroy|archive|unarchive/
220 project_actions.connect 'projects/:id/:action', :action => /destroy|archive|unarchive/
221 project_actions.connect 'projects/:id/files/new', :controller => 'files', :action => 'new'
221 project_actions.connect 'projects/:id/files/new', :controller => 'files', :action => 'new'
222 project_actions.connect 'projects/:id/activities/save', :controller => 'project_enumerations', :action => 'save'
222 project_actions.connect 'projects/:id/activities/save', :controller => 'project_enumerations', :action => 'save'
223 end
223 end
224
224
225 projects.with_options :conditions => {:method => :put} do |project_actions|
225 projects.with_options :conditions => {:method => :put} do |project_actions|
226 project_actions.conditions 'projects/:id.:format', :action => 'update', :format => /xml/
226 project_actions.conditions 'projects/:id.:format', :action => 'update', :format => /xml/
227 end
227 end
228
228
229 projects.with_options :conditions => {:method => :delete} do |project_actions|
229 projects.with_options :conditions => {:method => :delete} do |project_actions|
230 project_actions.conditions 'projects/:id.:format', :action => 'destroy', :format => /xml/
230 project_actions.conditions 'projects/:id.:format', :action => 'destroy', :format => /xml/
231 project_actions.conditions 'projects/:id/reset_activities', :controller => 'project_enumerations', :action => 'destroy'
231 project_actions.conditions 'projects/:id/reset_activities', :controller => 'project_enumerations', :action => 'destroy'
232 end
232 end
233 end
233 end
234
234
235 map.with_options :controller => 'versions' do |versions|
235 map.with_options :controller => 'versions' do |versions|
236 versions.connect 'projects/:project_id/versions/new', :action => 'new'
236 versions.connect 'projects/:project_id/versions/new', :action => 'new'
237 versions.connect 'projects/:project_id/roadmap', :action => 'index'
237 versions.connect 'projects/:project_id/roadmap', :action => 'index'
238 versions.connect 'versions/:action/:id', :conditions => {:method => :get}
239
238 versions.with_options :conditions => {:method => :post} do |version_actions|
240 versions.with_options :conditions => {:method => :post} do |version_actions|
241 version_actions.connect 'versions/update/:id', :action => 'update'
239 version_actions.connect 'projects/:project_id/versions/close_completed', :action => 'close_completed'
242 version_actions.connect 'projects/:project_id/versions/close_completed', :action => 'close_completed'
240 end
243 end
241 end
244 end
242
245
243 map.with_options :controller => 'issue_categories' do |categories|
246 map.with_options :controller => 'issue_categories' do |categories|
244 categories.connect 'projects/:project_id/issue_categories/new', :action => 'new'
247 categories.connect 'projects/:project_id/issue_categories/new', :action => 'new'
245 end
248 end
246
249
247 map.with_options :controller => 'repositories' do |repositories|
250 map.with_options :controller => 'repositories' do |repositories|
248 repositories.with_options :conditions => {:method => :get} do |repository_views|
251 repositories.with_options :conditions => {:method => :get} do |repository_views|
249 repository_views.connect 'projects/:id/repository', :action => 'show'
252 repository_views.connect 'projects/:id/repository', :action => 'show'
250 repository_views.connect 'projects/:id/repository/edit', :action => 'edit'
253 repository_views.connect 'projects/:id/repository/edit', :action => 'edit'
251 repository_views.connect 'projects/:id/repository/statistics', :action => 'stats'
254 repository_views.connect 'projects/:id/repository/statistics', :action => 'stats'
252 repository_views.connect 'projects/:id/repository/revisions', :action => 'revisions'
255 repository_views.connect 'projects/:id/repository/revisions', :action => 'revisions'
253 repository_views.connect 'projects/:id/repository/revisions.:format', :action => 'revisions'
256 repository_views.connect 'projects/:id/repository/revisions.:format', :action => 'revisions'
254 repository_views.connect 'projects/:id/repository/revisions/:rev', :action => 'revision'
257 repository_views.connect 'projects/:id/repository/revisions/:rev', :action => 'revision'
255 repository_views.connect 'projects/:id/repository/revisions/:rev/diff', :action => 'diff'
258 repository_views.connect 'projects/:id/repository/revisions/:rev/diff', :action => 'diff'
256 repository_views.connect 'projects/:id/repository/revisions/:rev/diff.:format', :action => 'diff'
259 repository_views.connect 'projects/:id/repository/revisions/:rev/diff.:format', :action => 'diff'
257 repository_views.connect 'projects/:id/repository/revisions/:rev/raw/*path', :action => 'entry', :format => 'raw', :requirements => { :rev => /[a-z0-9\.\-_]+/ }
260 repository_views.connect 'projects/:id/repository/revisions/:rev/raw/*path', :action => 'entry', :format => 'raw', :requirements => { :rev => /[a-z0-9\.\-_]+/ }
258 repository_views.connect 'projects/:id/repository/revisions/:rev/:action/*path', :requirements => { :rev => /[a-z0-9\.\-_]+/ }
261 repository_views.connect 'projects/:id/repository/revisions/:rev/:action/*path', :requirements => { :rev => /[a-z0-9\.\-_]+/ }
259 repository_views.connect 'projects/:id/repository/raw/*path', :action => 'entry', :format => 'raw'
262 repository_views.connect 'projects/:id/repository/raw/*path', :action => 'entry', :format => 'raw'
260 # TODO: why the following route is required?
263 # TODO: why the following route is required?
261 repository_views.connect 'projects/:id/repository/entry/*path', :action => 'entry'
264 repository_views.connect 'projects/:id/repository/entry/*path', :action => 'entry'
262 repository_views.connect 'projects/:id/repository/:action/*path'
265 repository_views.connect 'projects/:id/repository/:action/*path'
263 end
266 end
264
267
265 repositories.connect 'projects/:id/repository/:action', :conditions => {:method => :post}
268 repositories.connect 'projects/:id/repository/:action', :conditions => {:method => :post}
266 end
269 end
267
270
268 map.connect 'attachments/:id', :controller => 'attachments', :action => 'show', :id => /\d+/
271 map.connect 'attachments/:id', :controller => 'attachments', :action => 'show', :id => /\d+/
269 map.connect 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/
272 map.connect 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/
270 map.connect 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/
273 map.connect 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/
271
274
272 map.resources :groups
275 map.resources :groups
273
276
274 #left old routes at the bottom for backwards compat
277 #left old routes at the bottom for backwards compat
275 map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
278 map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
276 map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
279 map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
277 map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
280 map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
278 map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages'
281 map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages'
279 map.connect 'wiki/:id/:page/:action', :page => nil, :controller => 'wiki'
282 map.connect 'wiki/:id/:page/:action', :page => nil, :controller => 'wiki'
280 map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations'
283 map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations'
281 map.connect 'projects/:project_id/news/:action', :controller => 'news'
284 map.connect 'projects/:project_id/news/:action', :controller => 'news'
282 map.connect 'projects/:project_id/timelog/:action/:id', :controller => 'timelog', :project_id => /.+/
285 map.connect 'projects/:project_id/timelog/:action/:id', :controller => 'timelog', :project_id => /.+/
283 map.with_options :controller => 'repositories' do |omap|
286 map.with_options :controller => 'repositories' do |omap|
284 omap.repositories_show 'repositories/browse/:id/*path', :action => 'browse'
287 omap.repositories_show 'repositories/browse/:id/*path', :action => 'browse'
285 omap.repositories_changes 'repositories/changes/:id/*path', :action => 'changes'
288 omap.repositories_changes 'repositories/changes/:id/*path', :action => 'changes'
286 omap.repositories_diff 'repositories/diff/:id/*path', :action => 'diff'
289 omap.repositories_diff 'repositories/diff/:id/*path', :action => 'diff'
287 omap.repositories_entry 'repositories/entry/:id/*path', :action => 'entry'
290 omap.repositories_entry 'repositories/entry/:id/*path', :action => 'entry'
288 omap.repositories_entry 'repositories/annotate/:id/*path', :action => 'annotate'
291 omap.repositories_entry 'repositories/annotate/:id/*path', :action => 'annotate'
289 omap.connect 'repositories/revision/:id/:rev', :action => 'revision'
292 omap.connect 'repositories/revision/:id/:rev', :action => 'revision'
290 end
293 end
291
294
292 map.with_options :controller => 'sys' do |sys|
295 map.with_options :controller => 'sys' do |sys|
293 sys.connect 'sys/projects.:format', :action => 'projects', :conditions => {:method => :get}
296 sys.connect 'sys/projects.:format', :action => 'projects', :conditions => {:method => :get}
294 sys.connect 'sys/projects/:id/repository.:format', :action => 'create_project_repository', :conditions => {:method => :post}
297 sys.connect 'sys/projects/:id/repository.:format', :action => 'create_project_repository', :conditions => {:method => :post}
295 end
298 end
296
299
297 # Install the default route as the lowest priority.
300 # Install the default route as the lowest priority.
298 map.connect ':controller/:action/:id'
301 map.connect ':controller/:action/:id'
299 map.connect 'robots.txt', :controller => 'welcome', :action => 'robots'
302 map.connect 'robots.txt', :controller => 'welcome', :action => 'robots'
300 # Used for OpenID
303 # Used for OpenID
301 map.root :controller => 'account', :action => 'login'
304 map.root :controller => 'account', :action => 'login'
302 end
305 end
@@ -1,230 +1,230
1 require 'redmine/access_control'
1 require 'redmine/access_control'
2 require 'redmine/menu_manager'
2 require 'redmine/menu_manager'
3 require 'redmine/activity'
3 require 'redmine/activity'
4 require 'redmine/search'
4 require 'redmine/search'
5 require 'redmine/custom_field_format'
5 require 'redmine/custom_field_format'
6 require 'redmine/mime_type'
6 require 'redmine/mime_type'
7 require 'redmine/core_ext'
7 require 'redmine/core_ext'
8 require 'redmine/themes'
8 require 'redmine/themes'
9 require 'redmine/hook'
9 require 'redmine/hook'
10 require 'redmine/plugin'
10 require 'redmine/plugin'
11 require 'redmine/wiki_formatting'
11 require 'redmine/wiki_formatting'
12 require 'redmine/scm/base'
12 require 'redmine/scm/base'
13
13
14 begin
14 begin
15 require_library_or_gem 'RMagick' unless Object.const_defined?(:Magick)
15 require_library_or_gem 'RMagick' unless Object.const_defined?(:Magick)
16 rescue LoadError
16 rescue LoadError
17 # RMagick is not available
17 # RMagick is not available
18 end
18 end
19
19
20 if RUBY_VERSION < '1.9'
20 if RUBY_VERSION < '1.9'
21 require 'faster_csv'
21 require 'faster_csv'
22 else
22 else
23 require 'csv'
23 require 'csv'
24 FCSV = CSV
24 FCSV = CSV
25 end
25 end
26
26
27 Redmine::Scm::Base.add "Subversion"
27 Redmine::Scm::Base.add "Subversion"
28 Redmine::Scm::Base.add "Darcs"
28 Redmine::Scm::Base.add "Darcs"
29 Redmine::Scm::Base.add "Mercurial"
29 Redmine::Scm::Base.add "Mercurial"
30 Redmine::Scm::Base.add "Cvs"
30 Redmine::Scm::Base.add "Cvs"
31 Redmine::Scm::Base.add "Bazaar"
31 Redmine::Scm::Base.add "Bazaar"
32 Redmine::Scm::Base.add "Git"
32 Redmine::Scm::Base.add "Git"
33 Redmine::Scm::Base.add "Filesystem"
33 Redmine::Scm::Base.add "Filesystem"
34
34
35 Redmine::CustomFieldFormat.map do |fields|
35 Redmine::CustomFieldFormat.map do |fields|
36 fields.register Redmine::CustomFieldFormat.new('string', :label => :label_string, :order => 1)
36 fields.register Redmine::CustomFieldFormat.new('string', :label => :label_string, :order => 1)
37 fields.register Redmine::CustomFieldFormat.new('text', :label => :label_text, :order => 2)
37 fields.register Redmine::CustomFieldFormat.new('text', :label => :label_text, :order => 2)
38 fields.register Redmine::CustomFieldFormat.new('int', :label => :label_integer, :order => 3)
38 fields.register Redmine::CustomFieldFormat.new('int', :label => :label_integer, :order => 3)
39 fields.register Redmine::CustomFieldFormat.new('float', :label => :label_float, :order => 4)
39 fields.register Redmine::CustomFieldFormat.new('float', :label => :label_float, :order => 4)
40 fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
40 fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
41 fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
41 fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
42 fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
42 fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
43 end
43 end
44
44
45 # Permissions
45 # Permissions
46 Redmine::AccessControl.map do |map|
46 Redmine::AccessControl.map do |map|
47 map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true
47 map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true
48 map.permission :search_project, {:search => :index}, :public => true
48 map.permission :search_project, {:search => :index}, :public => true
49 map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin
49 map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin
50 map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member
50 map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member
51 map.permission :select_project_modules, {:projects => :modules}, :require => :member
51 map.permission :select_project_modules, {:projects => :modules}, :require => :member
52 map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy, :autocomplete_for_member]}, :require => :member
52 map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy, :autocomplete_for_member]}, :require => :member
53 map.permission :manage_versions, {:projects => :settings, :versions => [:new, :edit, :close_completed, :destroy]}, :require => :member
53 map.permission :manage_versions, {:projects => :settings, :versions => [:new, :edit, :update, :close_completed, :destroy]}, :require => :member
54 map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member
54 map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member
55
55
56 map.project_module :issue_tracking do |map|
56 map.project_module :issue_tracking do |map|
57 # Issue categories
57 # Issue categories
58 map.permission :manage_categories, {:projects => :settings, :issue_categories => [:new, :edit, :destroy]}, :require => :member
58 map.permission :manage_categories, {:projects => :settings, :issue_categories => [:new, :edit, :destroy]}, :require => :member
59 # Issues
59 # Issues
60 map.permission :view_issues, {:issues => [:index, :show],
60 map.permission :view_issues, {:issues => [:index, :show],
61 :auto_complete => [:issues],
61 :auto_complete => [:issues],
62 :context_menus => [:issues],
62 :context_menus => [:issues],
63 :versions => [:index, :show, :status_by],
63 :versions => [:index, :show, :status_by],
64 :journals => :index,
64 :journals => :index,
65 :queries => :index,
65 :queries => :index,
66 :reports => [:issue_report, :issue_report_details]}
66 :reports => [:issue_report, :issue_report_details]}
67 map.permission :add_issues, {:issues => [:new, :create, :update_form]}
67 map.permission :add_issues, {:issues => [:new, :create, :update_form]}
68 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
68 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]}
69 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
69 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
70 map.permission :manage_subtasks, {}
70 map.permission :manage_subtasks, {}
71 map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]}
71 map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]}
72 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
72 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
73 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
73 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
74 map.permission :move_issues, {:issue_moves => [:new, :create]}, :require => :loggedin
74 map.permission :move_issues, {:issue_moves => [:new, :create]}, :require => :loggedin
75 map.permission :delete_issues, {:issues => :destroy}, :require => :member
75 map.permission :delete_issues, {:issues => :destroy}, :require => :member
76 # Queries
76 # Queries
77 map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member
77 map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member
78 map.permission :save_queries, {:queries => [:new, :edit, :destroy]}, :require => :loggedin
78 map.permission :save_queries, {:queries => [:new, :edit, :destroy]}, :require => :loggedin
79 # Watchers
79 # Watchers
80 map.permission :view_issue_watchers, {}
80 map.permission :view_issue_watchers, {}
81 map.permission :add_issue_watchers, {:watchers => :new}
81 map.permission :add_issue_watchers, {:watchers => :new}
82 map.permission :delete_issue_watchers, {:watchers => :destroy}
82 map.permission :delete_issue_watchers, {:watchers => :destroy}
83 end
83 end
84
84
85 map.project_module :time_tracking do |map|
85 map.project_module :time_tracking do |map|
86 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
86 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
87 map.permission :view_time_entries, :timelog => [:details, :report]
87 map.permission :view_time_entries, :timelog => [:details, :report]
88 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
88 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
89 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
89 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
90 map.permission :manage_project_activities, {:project_enumerations => [:save, :destroy]}, :require => :member
90 map.permission :manage_project_activities, {:project_enumerations => [:save, :destroy]}, :require => :member
91 end
91 end
92
92
93 map.project_module :news do |map|
93 map.project_module :news do |map|
94 map.permission :manage_news, {:news => [:new, :edit, :destroy, :destroy_comment]}, :require => :member
94 map.permission :manage_news, {:news => [:new, :edit, :destroy, :destroy_comment]}, :require => :member
95 map.permission :view_news, {:news => [:index, :show]}, :public => true
95 map.permission :view_news, {:news => [:index, :show]}, :public => true
96 map.permission :comment_news, {:news => :add_comment}
96 map.permission :comment_news, {:news => :add_comment}
97 end
97 end
98
98
99 map.project_module :documents do |map|
99 map.project_module :documents do |map|
100 map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment]}, :require => :loggedin
100 map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment]}, :require => :loggedin
101 map.permission :view_documents, :documents => [:index, :show, :download]
101 map.permission :view_documents, :documents => [:index, :show, :download]
102 end
102 end
103
103
104 map.project_module :files do |map|
104 map.project_module :files do |map|
105 map.permission :manage_files, {:files => :new}, :require => :loggedin
105 map.permission :manage_files, {:files => :new}, :require => :loggedin
106 map.permission :view_files, :files => :index, :versions => :download
106 map.permission :view_files, :files => :index, :versions => :download
107 end
107 end
108
108
109 map.project_module :wiki do |map|
109 map.project_module :wiki do |map|
110 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
110 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
111 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
111 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
112 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
112 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
113 map.permission :view_wiki_pages, :wiki => [:index, :special]
113 map.permission :view_wiki_pages, :wiki => [:index, :special]
114 map.permission :export_wiki_pages, {}
114 map.permission :export_wiki_pages, {}
115 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
115 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
116 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
116 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
117 map.permission :delete_wiki_pages_attachments, {}
117 map.permission :delete_wiki_pages_attachments, {}
118 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
118 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
119 end
119 end
120
120
121 map.project_module :repository do |map|
121 map.project_module :repository do |map|
122 map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member
122 map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member
123 map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
123 map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
124 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
124 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
125 map.permission :commit_access, {}
125 map.permission :commit_access, {}
126 end
126 end
127
127
128 map.project_module :boards do |map|
128 map.project_module :boards do |map|
129 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
129 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
130 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
130 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
131 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
131 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
132 map.permission :edit_messages, {:messages => :edit}, :require => :member
132 map.permission :edit_messages, {:messages => :edit}, :require => :member
133 map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin
133 map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin
134 map.permission :delete_messages, {:messages => :destroy}, :require => :member
134 map.permission :delete_messages, {:messages => :destroy}, :require => :member
135 map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin
135 map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin
136 end
136 end
137
137
138 map.project_module :calendar do |map|
138 map.project_module :calendar do |map|
139 map.permission :view_calendar, :calendars => :show
139 map.permission :view_calendar, :calendars => :show
140 end
140 end
141
141
142 map.project_module :gantt do |map|
142 map.project_module :gantt do |map|
143 map.permission :view_gantt, :gantts => :show
143 map.permission :view_gantt, :gantts => :show
144 end
144 end
145 end
145 end
146
146
147 Redmine::MenuManager.map :top_menu do |menu|
147 Redmine::MenuManager.map :top_menu do |menu|
148 menu.push :home, :home_path
148 menu.push :home, :home_path
149 menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? }
149 menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? }
150 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural
150 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural
151 menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true
151 menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true
152 menu.push :help, Redmine::Info.help_url, :last => true
152 menu.push :help, Redmine::Info.help_url, :last => true
153 end
153 end
154
154
155 Redmine::MenuManager.map :account_menu do |menu|
155 Redmine::MenuManager.map :account_menu do |menu|
156 menu.push :login, :signin_path, :if => Proc.new { !User.current.logged? }
156 menu.push :login, :signin_path, :if => Proc.new { !User.current.logged? }
157 menu.push :register, { :controller => 'account', :action => 'register' }, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
157 menu.push :register, { :controller => 'account', :action => 'register' }, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
158 menu.push :my_account, { :controller => 'my', :action => 'account' }, :if => Proc.new { User.current.logged? }
158 menu.push :my_account, { :controller => 'my', :action => 'account' }, :if => Proc.new { User.current.logged? }
159 menu.push :logout, :signout_path, :if => Proc.new { User.current.logged? }
159 menu.push :logout, :signout_path, :if => Proc.new { User.current.logged? }
160 end
160 end
161
161
162 Redmine::MenuManager.map :application_menu do |menu|
162 Redmine::MenuManager.map :application_menu do |menu|
163 # Empty
163 # Empty
164 end
164 end
165
165
166 Redmine::MenuManager.map :admin_menu do |menu|
166 Redmine::MenuManager.map :admin_menu do |menu|
167 menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
167 menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
168 menu.push :users, {:controller => 'users'}, :caption => :label_user_plural
168 menu.push :users, {:controller => 'users'}, :caption => :label_user_plural
169 menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
169 menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
170 menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions
170 menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions
171 menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural
171 menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural
172 menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural,
172 menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural,
173 :html => {:class => 'issue_statuses'}
173 :html => {:class => 'issue_statuses'}
174 menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow
174 menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow
175 menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural,
175 menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural,
176 :html => {:class => 'custom_fields'}
176 :html => {:class => 'custom_fields'}
177 menu.push :enumerations, {:controller => 'enumerations'}
177 menu.push :enumerations, {:controller => 'enumerations'}
178 menu.push :settings, {:controller => 'settings'}
178 menu.push :settings, {:controller => 'settings'}
179 menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'},
179 menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'},
180 :html => {:class => 'server_authentication'}
180 :html => {:class => 'server_authentication'}
181 menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
181 menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
182 menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true
182 menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true
183 end
183 end
184
184
185 Redmine::MenuManager.map :project_menu do |menu|
185 Redmine::MenuManager.map :project_menu do |menu|
186 menu.push :overview, { :controller => 'projects', :action => 'show' }
186 menu.push :overview, { :controller => 'projects', :action => 'show' }
187 menu.push :activity, { :controller => 'activities', :action => 'index' }
187 menu.push :activity, { :controller => 'activities', :action => 'index' }
188 menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id,
188 menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id,
189 :if => Proc.new { |p| p.shared_versions.any? }
189 :if => Proc.new { |p| p.shared_versions.any? }
190 menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
190 menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
191 menu.push :new_issue, { :controller => 'issues', :action => 'new' }, :param => :project_id, :caption => :label_issue_new,
191 menu.push :new_issue, { :controller => 'issues', :action => 'new' }, :param => :project_id, :caption => :label_issue_new,
192 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
192 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
193 menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt
193 menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt
194 menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
194 menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
195 menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
195 menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
196 menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
196 menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
197 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
197 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
198 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
198 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
199 menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
199 menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
200 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
200 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
201 menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_plural
201 menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_plural
202 menu.push :repository, { :controller => 'repositories', :action => 'show' },
202 menu.push :repository, { :controller => 'repositories', :action => 'show' },
203 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
203 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
204 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
204 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
205 end
205 end
206
206
207 Redmine::Activity.map do |activity|
207 Redmine::Activity.map do |activity|
208 activity.register :issues, :class_name => %w(Issue Journal)
208 activity.register :issues, :class_name => %w(Issue Journal)
209 activity.register :changesets
209 activity.register :changesets
210 activity.register :news
210 activity.register :news
211 activity.register :documents, :class_name => %w(Document Attachment)
211 activity.register :documents, :class_name => %w(Document Attachment)
212 activity.register :files, :class_name => 'Attachment'
212 activity.register :files, :class_name => 'Attachment'
213 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
213 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
214 activity.register :messages, :default => false
214 activity.register :messages, :default => false
215 activity.register :time_entries, :default => false
215 activity.register :time_entries, :default => false
216 end
216 end
217
217
218 Redmine::Search.map do |search|
218 Redmine::Search.map do |search|
219 search.register :issues
219 search.register :issues
220 search.register :news
220 search.register :news
221 search.register :documents
221 search.register :documents
222 search.register :changesets
222 search.register :changesets
223 search.register :wiki_pages
223 search.register :wiki_pages
224 search.register :messages
224 search.register :messages
225 search.register :projects
225 search.register :projects
226 end
226 end
227
227
228 Redmine::WikiFormatting.map do |format|
228 Redmine::WikiFormatting.map do |format|
229 format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper
229 format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper
230 end
230 end
@@ -1,139 +1,139
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
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 require File.dirname(__FILE__) + '/../test_helper'
18 require File.dirname(__FILE__) + '/../test_helper'
19 require 'versions_controller'
19 require 'versions_controller'
20
20
21 # Re-raise errors caught by the controller.
21 # Re-raise errors caught by the controller.
22 class VersionsController; def rescue_action(e) raise e end; end
22 class VersionsController; def rescue_action(e) raise e end; end
23
23
24 class VersionsControllerTest < ActionController::TestCase
24 class VersionsControllerTest < ActionController::TestCase
25 fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules
25 fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules
26
26
27 def setup
27 def setup
28 @controller = VersionsController.new
28 @controller = VersionsController.new
29 @request = ActionController::TestRequest.new
29 @request = ActionController::TestRequest.new
30 @response = ActionController::TestResponse.new
30 @response = ActionController::TestResponse.new
31 User.current = nil
31 User.current = nil
32 end
32 end
33
33
34 def test_index
34 def test_index
35 get :index, :project_id => 1
35 get :index, :project_id => 1
36 assert_response :success
36 assert_response :success
37 assert_template 'index'
37 assert_template 'index'
38 assert_not_nil assigns(:versions)
38 assert_not_nil assigns(:versions)
39 # Version with no date set appears
39 # Version with no date set appears
40 assert assigns(:versions).include?(Version.find(3))
40 assert assigns(:versions).include?(Version.find(3))
41 # Completed version doesn't appear
41 # Completed version doesn't appear
42 assert !assigns(:versions).include?(Version.find(1))
42 assert !assigns(:versions).include?(Version.find(1))
43 # Context menu on issues
43 # Context menu on issues
44 assert_select "script", :text => Regexp.new(Regexp.escape("new ContextMenu('/issues/context_menu')"))
44 assert_select "script", :text => Regexp.new(Regexp.escape("new ContextMenu('/issues/context_menu')"))
45 end
45 end
46
46
47 def test_index_with_completed_versions
47 def test_index_with_completed_versions
48 get :index, :project_id => 1, :completed => 1
48 get :index, :project_id => 1, :completed => 1
49 assert_response :success
49 assert_response :success
50 assert_template 'index'
50 assert_template 'index'
51 assert_not_nil assigns(:versions)
51 assert_not_nil assigns(:versions)
52 # Version with no date set appears
52 # Version with no date set appears
53 assert assigns(:versions).include?(Version.find(3))
53 assert assigns(:versions).include?(Version.find(3))
54 # Completed version appears
54 # Completed version appears
55 assert assigns(:versions).include?(Version.find(1))
55 assert assigns(:versions).include?(Version.find(1))
56 end
56 end
57
57
58 def test_index_showing_subprojects_versions
58 def test_index_showing_subprojects_versions
59 @subproject_version = Version.generate!(:project => Project.find(3))
59 @subproject_version = Version.generate!(:project => Project.find(3))
60 get :index, :project_id => 1, :with_subprojects => 1
60 get :index, :project_id => 1, :with_subprojects => 1
61 assert_response :success
61 assert_response :success
62 assert_template 'index'
62 assert_template 'index'
63 assert_not_nil assigns(:versions)
63 assert_not_nil assigns(:versions)
64
64
65 assert assigns(:versions).include?(Version.find(4)), "Shared version not found"
65 assert assigns(:versions).include?(Version.find(4)), "Shared version not found"
66 assert assigns(:versions).include?(@subproject_version), "Subproject version not found"
66 assert assigns(:versions).include?(@subproject_version), "Subproject version not found"
67 end
67 end
68
68
69 def test_show
69 def test_show
70 get :show, :id => 2
70 get :show, :id => 2
71 assert_response :success
71 assert_response :success
72 assert_template 'show'
72 assert_template 'show'
73 assert_not_nil assigns(:version)
73 assert_not_nil assigns(:version)
74
74
75 assert_tag :tag => 'h2', :content => /1.0/
75 assert_tag :tag => 'h2', :content => /1.0/
76 end
76 end
77
77
78 def test_new
78 def test_new
79 @request.session[:user_id] = 2 # manager
79 @request.session[:user_id] = 2 # manager
80 assert_difference 'Version.count' do
80 assert_difference 'Version.count' do
81 post :new, :project_id => '1', :version => {:name => 'test_add_version'}
81 post :new, :project_id => '1', :version => {:name => 'test_add_version'}
82 end
82 end
83 assert_redirected_to '/projects/ecookbook/settings/versions'
83 assert_redirected_to '/projects/ecookbook/settings/versions'
84 version = Version.find_by_name('test_add_version')
84 version = Version.find_by_name('test_add_version')
85 assert_not_nil version
85 assert_not_nil version
86 assert_equal 1, version.project_id
86 assert_equal 1, version.project_id
87 end
87 end
88
88
89 def test_new_from_issue_form
89 def test_new_from_issue_form
90 @request.session[:user_id] = 2 # manager
90 @request.session[:user_id] = 2 # manager
91 assert_difference 'Version.count' do
91 assert_difference 'Version.count' do
92 xhr :post, :new, :project_id => '1', :version => {:name => 'test_add_version_from_issue_form'}
92 xhr :post, :new, :project_id => '1', :version => {:name => 'test_add_version_from_issue_form'}
93 end
93 end
94 assert_response :success
94 assert_response :success
95 assert_select_rjs :replace, 'issue_fixed_version_id'
95 assert_select_rjs :replace, 'issue_fixed_version_id'
96 version = Version.find_by_name('test_add_version_from_issue_form')
96 version = Version.find_by_name('test_add_version_from_issue_form')
97 assert_not_nil version
97 assert_not_nil version
98 assert_equal 1, version.project_id
98 assert_equal 1, version.project_id
99 end
99 end
100
100
101 def test_get_edit
101 def test_get_edit
102 @request.session[:user_id] = 2
102 @request.session[:user_id] = 2
103 get :edit, :id => 2
103 get :edit, :id => 2
104 assert_response :success
104 assert_response :success
105 assert_template 'edit'
105 assert_template 'edit'
106 end
106 end
107
107
108 def test_close_completed
108 def test_close_completed
109 Version.update_all("status = 'open'")
109 Version.update_all("status = 'open'")
110 @request.session[:user_id] = 2
110 @request.session[:user_id] = 2
111 post :close_completed, :project_id => 'ecookbook'
111 post :close_completed, :project_id => 'ecookbook'
112 assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook'
112 assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook'
113 assert_not_nil Version.find_by_status('closed')
113 assert_not_nil Version.find_by_status('closed')
114 end
114 end
115
115
116 def test_post_edit
116 def test_post_update
117 @request.session[:user_id] = 2
117 @request.session[:user_id] = 2
118 post :edit, :id => 2,
118 post :update, :id => 2,
119 :version => { :name => 'New version name',
119 :version => { :name => 'New version name',
120 :effective_date => Date.today.strftime("%Y-%m-%d")}
120 :effective_date => Date.today.strftime("%Y-%m-%d")}
121 assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook'
121 assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook'
122 version = Version.find(2)
122 version = Version.find(2)
123 assert_equal 'New version name', version.name
123 assert_equal 'New version name', version.name
124 assert_equal Date.today, version.effective_date
124 assert_equal Date.today, version.effective_date
125 end
125 end
126
126
127 def test_destroy
127 def test_destroy
128 @request.session[:user_id] = 2
128 @request.session[:user_id] = 2
129 post :destroy, :id => 3
129 post :destroy, :id => 3
130 assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook'
130 assert_redirected_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => 'ecookbook'
131 assert_nil Version.find_by_id(3)
131 assert_nil Version.find_by_id(3)
132 end
132 end
133
133
134 def test_issue_status_by
134 def test_issue_status_by
135 xhr :get, :status_by, :id => 2
135 xhr :get, :status_by, :id => 2
136 assert_response :success
136 assert_response :success
137 assert_template '_issue_counts'
137 assert_template '_issue_counts'
138 end
138 end
139 end
139 end
@@ -1,291 +1,297
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2010 Jean-Philippe Lang
2 # Copyright (C) 2006-2010 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
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 require "#{File.dirname(__FILE__)}/../test_helper"
18 require "#{File.dirname(__FILE__)}/../test_helper"
19
19
20 class RoutingTest < ActionController::IntegrationTest
20 class RoutingTest < ActionController::IntegrationTest
21 context "activities" do
21 context "activities" do
22 should_route :get, "/activity", :controller => 'activities', :action => 'index', :id => nil
22 should_route :get, "/activity", :controller => 'activities', :action => 'index', :id => nil
23 should_route :get, "/activity.atom", :controller => 'activities', :action => 'index', :id => nil, :format => 'atom'
23 should_route :get, "/activity.atom", :controller => 'activities', :action => 'index', :id => nil, :format => 'atom'
24 end
24 end
25
25
26 context "attachments" do
26 context "attachments" do
27 should_route :get, "/attachments/1", :controller => 'attachments', :action => 'show', :id => '1'
27 should_route :get, "/attachments/1", :controller => 'attachments', :action => 'show', :id => '1'
28 should_route :get, "/attachments/1/filename.ext", :controller => 'attachments', :action => 'show', :id => '1', :filename => 'filename.ext'
28 should_route :get, "/attachments/1/filename.ext", :controller => 'attachments', :action => 'show', :id => '1', :filename => 'filename.ext'
29 should_route :get, "/attachments/download/1", :controller => 'attachments', :action => 'download', :id => '1'
29 should_route :get, "/attachments/download/1", :controller => 'attachments', :action => 'download', :id => '1'
30 should_route :get, "/attachments/download/1/filename.ext", :controller => 'attachments', :action => 'download', :id => '1', :filename => 'filename.ext'
30 should_route :get, "/attachments/download/1/filename.ext", :controller => 'attachments', :action => 'download', :id => '1', :filename => 'filename.ext'
31 end
31 end
32
32
33 context "boards" do
33 context "boards" do
34 should_route :get, "/projects/world_domination/boards", :controller => 'boards', :action => 'index', :project_id => 'world_domination'
34 should_route :get, "/projects/world_domination/boards", :controller => 'boards', :action => 'index', :project_id => 'world_domination'
35 should_route :get, "/projects/world_domination/boards/new", :controller => 'boards', :action => 'new', :project_id => 'world_domination'
35 should_route :get, "/projects/world_domination/boards/new", :controller => 'boards', :action => 'new', :project_id => 'world_domination'
36 should_route :get, "/projects/world_domination/boards/44", :controller => 'boards', :action => 'show', :project_id => 'world_domination', :id => '44'
36 should_route :get, "/projects/world_domination/boards/44", :controller => 'boards', :action => 'show', :project_id => 'world_domination', :id => '44'
37 should_route :get, "/projects/world_domination/boards/44.atom", :controller => 'boards', :action => 'show', :project_id => 'world_domination', :id => '44', :format => 'atom'
37 should_route :get, "/projects/world_domination/boards/44.atom", :controller => 'boards', :action => 'show', :project_id => 'world_domination', :id => '44', :format => 'atom'
38 should_route :get, "/projects/world_domination/boards/44/edit", :controller => 'boards', :action => 'edit', :project_id => 'world_domination', :id => '44'
38 should_route :get, "/projects/world_domination/boards/44/edit", :controller => 'boards', :action => 'edit', :project_id => 'world_domination', :id => '44'
39
39
40 should_route :post, "/projects/world_domination/boards/new", :controller => 'boards', :action => 'new', :project_id => 'world_domination'
40 should_route :post, "/projects/world_domination/boards/new", :controller => 'boards', :action => 'new', :project_id => 'world_domination'
41 should_route :post, "/projects/world_domination/boards/44/edit", :controller => 'boards', :action => 'edit', :project_id => 'world_domination', :id => '44'
41 should_route :post, "/projects/world_domination/boards/44/edit", :controller => 'boards', :action => 'edit', :project_id => 'world_domination', :id => '44'
42 should_route :post, "/projects/world_domination/boards/44/destroy", :controller => 'boards', :action => 'destroy', :project_id => 'world_domination', :id => '44'
42 should_route :post, "/projects/world_domination/boards/44/destroy", :controller => 'boards', :action => 'destroy', :project_id => 'world_domination', :id => '44'
43
43
44 end
44 end
45
45
46 context "documents" do
46 context "documents" do
47 should_route :get, "/projects/567/documents", :controller => 'documents', :action => 'index', :project_id => '567'
47 should_route :get, "/projects/567/documents", :controller => 'documents', :action => 'index', :project_id => '567'
48 should_route :get, "/projects/567/documents/new", :controller => 'documents', :action => 'new', :project_id => '567'
48 should_route :get, "/projects/567/documents/new", :controller => 'documents', :action => 'new', :project_id => '567'
49 should_route :get, "/documents/22", :controller => 'documents', :action => 'show', :id => '22'
49 should_route :get, "/documents/22", :controller => 'documents', :action => 'show', :id => '22'
50 should_route :get, "/documents/22/edit", :controller => 'documents', :action => 'edit', :id => '22'
50 should_route :get, "/documents/22/edit", :controller => 'documents', :action => 'edit', :id => '22'
51
51
52 should_route :post, "/projects/567/documents/new", :controller => 'documents', :action => 'new', :project_id => '567'
52 should_route :post, "/projects/567/documents/new", :controller => 'documents', :action => 'new', :project_id => '567'
53 should_route :post, "/documents/567/edit", :controller => 'documents', :action => 'edit', :id => '567'
53 should_route :post, "/documents/567/edit", :controller => 'documents', :action => 'edit', :id => '567'
54 should_route :post, "/documents/567/destroy", :controller => 'documents', :action => 'destroy', :id => '567'
54 should_route :post, "/documents/567/destroy", :controller => 'documents', :action => 'destroy', :id => '567'
55 end
55 end
56
56
57 context "issues" do
57 context "issues" do
58 # REST actions
58 # REST actions
59 should_route :get, "/issues", :controller => 'issues', :action => 'index'
59 should_route :get, "/issues", :controller => 'issues', :action => 'index'
60 should_route :get, "/issues.pdf", :controller => 'issues', :action => 'index', :format => 'pdf'
60 should_route :get, "/issues.pdf", :controller => 'issues', :action => 'index', :format => 'pdf'
61 should_route :get, "/issues.atom", :controller => 'issues', :action => 'index', :format => 'atom'
61 should_route :get, "/issues.atom", :controller => 'issues', :action => 'index', :format => 'atom'
62 should_route :get, "/issues.xml", :controller => 'issues', :action => 'index', :format => 'xml'
62 should_route :get, "/issues.xml", :controller => 'issues', :action => 'index', :format => 'xml'
63 should_route :get, "/projects/23/issues", :controller => 'issues', :action => 'index', :project_id => '23'
63 should_route :get, "/projects/23/issues", :controller => 'issues', :action => 'index', :project_id => '23'
64 should_route :get, "/projects/23/issues.pdf", :controller => 'issues', :action => 'index', :project_id => '23', :format => 'pdf'
64 should_route :get, "/projects/23/issues.pdf", :controller => 'issues', :action => 'index', :project_id => '23', :format => 'pdf'
65 should_route :get, "/projects/23/issues.atom", :controller => 'issues', :action => 'index', :project_id => '23', :format => 'atom'
65 should_route :get, "/projects/23/issues.atom", :controller => 'issues', :action => 'index', :project_id => '23', :format => 'atom'
66 should_route :get, "/projects/23/issues.xml", :controller => 'issues', :action => 'index', :project_id => '23', :format => 'xml'
66 should_route :get, "/projects/23/issues.xml", :controller => 'issues', :action => 'index', :project_id => '23', :format => 'xml'
67 should_route :get, "/issues/64", :controller => 'issues', :action => 'show', :id => '64'
67 should_route :get, "/issues/64", :controller => 'issues', :action => 'show', :id => '64'
68 should_route :get, "/issues/64.pdf", :controller => 'issues', :action => 'show', :id => '64', :format => 'pdf'
68 should_route :get, "/issues/64.pdf", :controller => 'issues', :action => 'show', :id => '64', :format => 'pdf'
69 should_route :get, "/issues/64.atom", :controller => 'issues', :action => 'show', :id => '64', :format => 'atom'
69 should_route :get, "/issues/64.atom", :controller => 'issues', :action => 'show', :id => '64', :format => 'atom'
70 should_route :get, "/issues/64.xml", :controller => 'issues', :action => 'show', :id => '64', :format => 'xml'
70 should_route :get, "/issues/64.xml", :controller => 'issues', :action => 'show', :id => '64', :format => 'xml'
71
71
72 should_route :get, "/projects/23/issues/new", :controller => 'issues', :action => 'new', :project_id => '23'
72 should_route :get, "/projects/23/issues/new", :controller => 'issues', :action => 'new', :project_id => '23'
73 should_route :post, "/projects/23/issues", :controller => 'issues', :action => 'create', :project_id => '23'
73 should_route :post, "/projects/23/issues", :controller => 'issues', :action => 'create', :project_id => '23'
74 should_route :post, "/issues.xml", :controller => 'issues', :action => 'create', :format => 'xml'
74 should_route :post, "/issues.xml", :controller => 'issues', :action => 'create', :format => 'xml'
75
75
76 should_route :get, "/issues/64/edit", :controller => 'issues', :action => 'edit', :id => '64'
76 should_route :get, "/issues/64/edit", :controller => 'issues', :action => 'edit', :id => '64'
77 # TODO: Should use PUT
77 # TODO: Should use PUT
78 should_route :post, "/issues/64/edit", :controller => 'issues', :action => 'edit', :id => '64'
78 should_route :post, "/issues/64/edit", :controller => 'issues', :action => 'edit', :id => '64'
79 should_route :put, "/issues/1.xml", :controller => 'issues', :action => 'update', :id => '1', :format => 'xml'
79 should_route :put, "/issues/1.xml", :controller => 'issues', :action => 'update', :id => '1', :format => 'xml'
80
80
81 # TODO: Should use DELETE
81 # TODO: Should use DELETE
82 should_route :post, "/issues/64/destroy", :controller => 'issues', :action => 'destroy', :id => '64'
82 should_route :post, "/issues/64/destroy", :controller => 'issues', :action => 'destroy', :id => '64'
83 should_route :delete, "/issues/1.xml", :controller => 'issues', :action => 'destroy', :id => '1', :format => 'xml'
83 should_route :delete, "/issues/1.xml", :controller => 'issues', :action => 'destroy', :id => '1', :format => 'xml'
84
84
85 # Extra actions
85 # Extra actions
86 should_route :get, "/projects/23/issues/64/copy", :controller => 'issues', :action => 'new', :project_id => '23', :copy_from => '64'
86 should_route :get, "/projects/23/issues/64/copy", :controller => 'issues', :action => 'new', :project_id => '23', :copy_from => '64'
87
87
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 => 'journals', :action => 'new', :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'
95 should_route :get, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'show', :project_id => 'project-name'
95 should_route :get, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'show', :project_id => 'project-name'
96 should_route :post, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'show', :project_id => 'project-name'
96 should_route :post, "/projects/project-name/issues/calendar", :controller => 'calendars', :action => 'show', :project_id => 'project-name'
97
97
98 should_route :get, "/issues/gantt", :controller => 'gantts', :action => 'show'
98 should_route :get, "/issues/gantt", :controller => 'gantts', :action => 'show'
99 should_route :post, "/issues/gantt", :controller => 'gantts', :action => 'show'
99 should_route :post, "/issues/gantt", :controller => 'gantts', :action => 'show'
100 should_route :get, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'show', :project_id => 'project-name'
100 should_route :get, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'show', :project_id => 'project-name'
101 should_route :post, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'show', :project_id => 'project-name'
101 should_route :post, "/projects/project-name/issues/gantt", :controller => 'gantts', :action => 'show', :project_id => 'project-name'
102
102
103 should_route :get, "/issues/auto_complete", :controller => 'auto_completes', :action => 'issues'
103 should_route :get, "/issues/auto_complete", :controller => 'auto_completes', :action => 'issues'
104
104
105 should_route :get, "/issues/preview/123", :controller => 'previews', :action => 'issue', :id => '123'
105 should_route :get, "/issues/preview/123", :controller => 'previews', :action => 'issue', :id => '123'
106 should_route :post, "/issues/preview/123", :controller => 'previews', :action => 'issue', :id => '123'
106 should_route :post, "/issues/preview/123", :controller => 'previews', :action => 'issue', :id => '123'
107 should_route :get, "/issues/context_menu", :controller => 'context_menus', :action => 'issues'
107 should_route :get, "/issues/context_menu", :controller => 'context_menus', :action => 'issues'
108 should_route :post, "/issues/context_menu", :controller => 'context_menus', :action => 'issues'
108 should_route :post, "/issues/context_menu", :controller => 'context_menus', :action => 'issues'
109
109
110 should_route :get, "/issues/changes", :controller => 'journals', :action => 'index'
110 should_route :get, "/issues/changes", :controller => 'journals', :action => 'index'
111
111
112 should_route :get, "/issues/bulk_edit", :controller => 'issues', :action => 'bulk_edit'
112 should_route :get, "/issues/bulk_edit", :controller => 'issues', :action => 'bulk_edit'
113 should_route :post, "/issues/bulk_edit", :controller => 'issues', :action => 'bulk_update'
113 should_route :post, "/issues/bulk_edit", :controller => 'issues', :action => 'bulk_update'
114 end
114 end
115
115
116 context "issue categories" do
116 context "issue categories" do
117 should_route :get, "/projects/test/issue_categories/new", :controller => 'issue_categories', :action => 'new', :project_id => 'test'
117 should_route :get, "/projects/test/issue_categories/new", :controller => 'issue_categories', :action => 'new', :project_id => 'test'
118
118
119 should_route :post, "/projects/test/issue_categories/new", :controller => 'issue_categories', :action => 'new', :project_id => 'test'
119 should_route :post, "/projects/test/issue_categories/new", :controller => 'issue_categories', :action => 'new', :project_id => 'test'
120 end
120 end
121
121
122 context "issue relations" do
122 context "issue relations" do
123 should_route :post, "/issues/1/relations", :controller => 'issue_relations', :action => 'new', :issue_id => '1'
123 should_route :post, "/issues/1/relations", :controller => 'issue_relations', :action => 'new', :issue_id => '1'
124 should_route :post, "/issues/1/relations/23/destroy", :controller => 'issue_relations', :action => 'destroy', :issue_id => '1', :id => '23'
124 should_route :post, "/issues/1/relations/23/destroy", :controller => 'issue_relations', :action => 'destroy', :issue_id => '1', :id => '23'
125 end
125 end
126
126
127 context "issue reports" do
127 context "issue reports" do
128 should_route :get, "/projects/567/issues/report", :controller => 'reports', :action => 'issue_report', :id => '567'
128 should_route :get, "/projects/567/issues/report", :controller => 'reports', :action => 'issue_report', :id => '567'
129 should_route :get, "/projects/567/issues/report/assigned_to", :controller => 'reports', :action => 'issue_report_details', :id => '567', :detail => 'assigned_to'
129 should_route :get, "/projects/567/issues/report/assigned_to", :controller => 'reports', :action => 'issue_report_details', :id => '567', :detail => 'assigned_to'
130 end
130 end
131
131
132 context "members" do
132 context "members" do
133 should_route :post, "/projects/5234/members/new", :controller => 'members', :action => 'new', :id => '5234'
133 should_route :post, "/projects/5234/members/new", :controller => 'members', :action => 'new', :id => '5234'
134 end
134 end
135
135
136 context "messages" do
136 context "messages" do
137 should_route :get, "/boards/22/topics/2", :controller => 'messages', :action => 'show', :id => '2', :board_id => '22'
137 should_route :get, "/boards/22/topics/2", :controller => 'messages', :action => 'show', :id => '2', :board_id => '22'
138 should_route :get, "/boards/lala/topics/new", :controller => 'messages', :action => 'new', :board_id => 'lala'
138 should_route :get, "/boards/lala/topics/new", :controller => 'messages', :action => 'new', :board_id => 'lala'
139 should_route :get, "/boards/lala/topics/22/edit", :controller => 'messages', :action => 'edit', :id => '22', :board_id => 'lala'
139 should_route :get, "/boards/lala/topics/22/edit", :controller => 'messages', :action => 'edit', :id => '22', :board_id => 'lala'
140
140
141 should_route :post, "/boards/lala/topics/new", :controller => 'messages', :action => 'new', :board_id => 'lala'
141 should_route :post, "/boards/lala/topics/new", :controller => 'messages', :action => 'new', :board_id => 'lala'
142 should_route :post, "/boards/lala/topics/22/edit", :controller => 'messages', :action => 'edit', :id => '22', :board_id => 'lala'
142 should_route :post, "/boards/lala/topics/22/edit", :controller => 'messages', :action => 'edit', :id => '22', :board_id => 'lala'
143 should_route :post, "/boards/22/topics/555/replies", :controller => 'messages', :action => 'reply', :id => '555', :board_id => '22'
143 should_route :post, "/boards/22/topics/555/replies", :controller => 'messages', :action => 'reply', :id => '555', :board_id => '22'
144 should_route :post, "/boards/22/topics/555/destroy", :controller => 'messages', :action => 'destroy', :id => '555', :board_id => '22'
144 should_route :post, "/boards/22/topics/555/destroy", :controller => 'messages', :action => 'destroy', :id => '555', :board_id => '22'
145 end
145 end
146
146
147 context "news" do
147 context "news" do
148 should_route :get, "/news", :controller => 'news', :action => 'index'
148 should_route :get, "/news", :controller => 'news', :action => 'index'
149 should_route :get, "/news.atom", :controller => 'news', :action => 'index', :format => 'atom'
149 should_route :get, "/news.atom", :controller => 'news', :action => 'index', :format => 'atom'
150 should_route :get, "/news.xml", :controller => 'news', :action => 'index', :format => 'xml'
150 should_route :get, "/news.xml", :controller => 'news', :action => 'index', :format => 'xml'
151 should_route :get, "/news.json", :controller => 'news', :action => 'index', :format => 'json'
151 should_route :get, "/news.json", :controller => 'news', :action => 'index', :format => 'json'
152 should_route :get, "/projects/567/news", :controller => 'news', :action => 'index', :project_id => '567'
152 should_route :get, "/projects/567/news", :controller => 'news', :action => 'index', :project_id => '567'
153 should_route :get, "/projects/567/news.atom", :controller => 'news', :action => 'index', :format => 'atom', :project_id => '567'
153 should_route :get, "/projects/567/news.atom", :controller => 'news', :action => 'index', :format => 'atom', :project_id => '567'
154 should_route :get, "/projects/567/news.xml", :controller => 'news', :action => 'index', :format => 'xml', :project_id => '567'
154 should_route :get, "/projects/567/news.xml", :controller => 'news', :action => 'index', :format => 'xml', :project_id => '567'
155 should_route :get, "/projects/567/news.json", :controller => 'news', :action => 'index', :format => 'json', :project_id => '567'
155 should_route :get, "/projects/567/news.json", :controller => 'news', :action => 'index', :format => 'json', :project_id => '567'
156 should_route :get, "/news/2", :controller => 'news', :action => 'show', :id => '2'
156 should_route :get, "/news/2", :controller => 'news', :action => 'show', :id => '2'
157 should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
157 should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
158 should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234'
158 should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234'
159
159
160 should_route :post, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
160 should_route :post, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
161 should_route :post, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567'
161 should_route :post, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567'
162 should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567'
162 should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567'
163 end
163 end
164
164
165 context "projects" do
165 context "projects" do
166 should_route :get, "/projects", :controller => 'projects', :action => 'index'
166 should_route :get, "/projects", :controller => 'projects', :action => 'index'
167 should_route :get, "/projects.atom", :controller => 'projects', :action => 'index', :format => 'atom'
167 should_route :get, "/projects.atom", :controller => 'projects', :action => 'index', :format => 'atom'
168 should_route :get, "/projects.xml", :controller => 'projects', :action => 'index', :format => 'xml'
168 should_route :get, "/projects.xml", :controller => 'projects', :action => 'index', :format => 'xml'
169 should_route :get, "/projects/new", :controller => 'projects', :action => 'new'
169 should_route :get, "/projects/new", :controller => 'projects', :action => 'new'
170 should_route :get, "/projects/test", :controller => 'projects', :action => 'show', :id => 'test'
170 should_route :get, "/projects/test", :controller => 'projects', :action => 'show', :id => 'test'
171 should_route :get, "/projects/1.xml", :controller => 'projects', :action => 'show', :id => '1', :format => 'xml'
171 should_route :get, "/projects/1.xml", :controller => 'projects', :action => 'show', :id => '1', :format => 'xml'
172 should_route :get, "/projects/4223/settings", :controller => 'projects', :action => 'settings', :id => '4223'
172 should_route :get, "/projects/4223/settings", :controller => 'projects', :action => 'settings', :id => '4223'
173 should_route :get, "/projects/4223/settings/members", :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
173 should_route :get, "/projects/4223/settings/members", :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
174 should_route :get, "/projects/567/destroy", :controller => 'projects', :action => 'destroy', :id => '567'
174 should_route :get, "/projects/567/destroy", :controller => 'projects', :action => 'destroy', :id => '567'
175 should_route :get, "/projects/33/files", :controller => 'files', :action => 'index', :id => '33'
175 should_route :get, "/projects/33/files", :controller => 'files', :action => 'index', :id => '33'
176 should_route :get, "/projects/33/files/new", :controller => 'files', :action => 'new', :id => '33'
176 should_route :get, "/projects/33/files/new", :controller => 'files', :action => 'new', :id => '33'
177 should_route :get, "/projects/33/roadmap", :controller => 'versions', :action => 'index', :project_id => '33'
177 should_route :get, "/projects/33/roadmap", :controller => 'versions', :action => 'index', :project_id => '33'
178 should_route :get, "/projects/33/activity", :controller => 'activities', :action => 'index', :id => '33'
178 should_route :get, "/projects/33/activity", :controller => 'activities', :action => 'index', :id => '33'
179 should_route :get, "/projects/33/activity.atom", :controller => 'activities', :action => 'index', :id => '33', :format => 'atom'
179 should_route :get, "/projects/33/activity.atom", :controller => 'activities', :action => 'index', :id => '33', :format => 'atom'
180
180
181 should_route :post, "/projects/new", :controller => 'projects', :action => 'create'
181 should_route :post, "/projects/new", :controller => 'projects', :action => 'create'
182 should_route :post, "/projects.xml", :controller => 'projects', :action => 'create', :format => 'xml'
182 should_route :post, "/projects.xml", :controller => 'projects', :action => 'create', :format => 'xml'
183 should_route :post, "/projects/4223/edit", :controller => 'projects', :action => 'update', :id => '4223'
183 should_route :post, "/projects/4223/edit", :controller => 'projects', :action => 'update', :id => '4223'
184 should_route :post, "/projects/64/destroy", :controller => 'projects', :action => 'destroy', :id => '64'
184 should_route :post, "/projects/64/destroy", :controller => 'projects', :action => 'destroy', :id => '64'
185 should_route :post, "/projects/33/files/new", :controller => 'files', :action => 'new', :id => '33'
185 should_route :post, "/projects/33/files/new", :controller => 'files', :action => 'new', :id => '33'
186 should_route :post, "/projects/64/archive", :controller => 'projects', :action => 'archive', :id => '64'
186 should_route :post, "/projects/64/archive", :controller => 'projects', :action => 'archive', :id => '64'
187 should_route :post, "/projects/64/unarchive", :controller => 'projects', :action => 'unarchive', :id => '64'
187 should_route :post, "/projects/64/unarchive", :controller => 'projects', :action => 'unarchive', :id => '64'
188 should_route :post, "/projects/64/activities/save", :controller => 'project_enumerations', :action => 'save', :id => '64'
188 should_route :post, "/projects/64/activities/save", :controller => 'project_enumerations', :action => 'save', :id => '64'
189
189
190 should_route :put, "/projects/1.xml", :controller => 'projects', :action => 'update', :id => '1', :format => 'xml'
190 should_route :put, "/projects/1.xml", :controller => 'projects', :action => 'update', :id => '1', :format => 'xml'
191
191
192 should_route :delete, "/projects/1.xml", :controller => 'projects', :action => 'destroy', :id => '1', :format => 'xml'
192 should_route :delete, "/projects/1.xml", :controller => 'projects', :action => 'destroy', :id => '1', :format => 'xml'
193 should_route :delete, "/projects/64/reset_activities", :controller => 'project_enumerations', :action => 'destroy', :id => '64'
193 should_route :delete, "/projects/64/reset_activities", :controller => 'project_enumerations', :action => 'destroy', :id => '64'
194 end
194 end
195
195
196 context "repositories" do
196 context "repositories" do
197 should_route :get, "/projects/redmine/repository", :controller => 'repositories', :action => 'show', :id => 'redmine'
197 should_route :get, "/projects/redmine/repository", :controller => 'repositories', :action => 'show', :id => 'redmine'
198 should_route :get, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine'
198 should_route :get, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine'
199 should_route :get, "/projects/redmine/repository/revisions", :controller => 'repositories', :action => 'revisions', :id => 'redmine'
199 should_route :get, "/projects/redmine/repository/revisions", :controller => 'repositories', :action => 'revisions', :id => 'redmine'
200 should_route :get, "/projects/redmine/repository/revisions.atom", :controller => 'repositories', :action => 'revisions', :id => 'redmine', :format => 'atom'
200 should_route :get, "/projects/redmine/repository/revisions.atom", :controller => 'repositories', :action => 'revisions', :id => 'redmine', :format => 'atom'
201 should_route :get, "/projects/redmine/repository/revisions/2457", :controller => 'repositories', :action => 'revision', :id => 'redmine', :rev => '2457'
201 should_route :get, "/projects/redmine/repository/revisions/2457", :controller => 'repositories', :action => 'revision', :id => 'redmine', :rev => '2457'
202 should_route :get, "/projects/redmine/repository/revisions/2457/diff", :controller => 'repositories', :action => 'diff', :id => 'redmine', :rev => '2457'
202 should_route :get, "/projects/redmine/repository/revisions/2457/diff", :controller => 'repositories', :action => 'diff', :id => 'redmine', :rev => '2457'
203 should_route :get, "/projects/redmine/repository/revisions/2457/diff.diff", :controller => 'repositories', :action => 'diff', :id => 'redmine', :rev => '2457', :format => 'diff'
203 should_route :get, "/projects/redmine/repository/revisions/2457/diff.diff", :controller => 'repositories', :action => 'diff', :id => 'redmine', :rev => '2457', :format => 'diff'
204 should_route :get, "/projects/redmine/repository/diff/path/to/file.c", :controller => 'repositories', :action => 'diff', :id => 'redmine', :path => %w[path to file.c]
204 should_route :get, "/projects/redmine/repository/diff/path/to/file.c", :controller => 'repositories', :action => 'diff', :id => 'redmine', :path => %w[path to file.c]
205 should_route :get, "/projects/redmine/repository/revisions/2/diff/path/to/file.c", :controller => 'repositories', :action => 'diff', :id => 'redmine', :path => %w[path to file.c], :rev => '2'
205 should_route :get, "/projects/redmine/repository/revisions/2/diff/path/to/file.c", :controller => 'repositories', :action => 'diff', :id => 'redmine', :path => %w[path to file.c], :rev => '2'
206 should_route :get, "/projects/redmine/repository/browse/path/to/file.c", :controller => 'repositories', :action => 'browse', :id => 'redmine', :path => %w[path to file.c]
206 should_route :get, "/projects/redmine/repository/browse/path/to/file.c", :controller => 'repositories', :action => 'browse', :id => 'redmine', :path => %w[path to file.c]
207 should_route :get, "/projects/redmine/repository/entry/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c]
207 should_route :get, "/projects/redmine/repository/entry/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c]
208 should_route :get, "/projects/redmine/repository/revisions/2/entry/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c], :rev => '2'
208 should_route :get, "/projects/redmine/repository/revisions/2/entry/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c], :rev => '2'
209 should_route :get, "/projects/redmine/repository/raw/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c], :format => 'raw'
209 should_route :get, "/projects/redmine/repository/raw/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c], :format => 'raw'
210 should_route :get, "/projects/redmine/repository/revisions/2/raw/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c], :rev => '2', :format => 'raw'
210 should_route :get, "/projects/redmine/repository/revisions/2/raw/path/to/file.c", :controller => 'repositories', :action => 'entry', :id => 'redmine', :path => %w[path to file.c], :rev => '2', :format => 'raw'
211 should_route :get, "/projects/redmine/repository/annotate/path/to/file.c", :controller => 'repositories', :action => 'annotate', :id => 'redmine', :path => %w[path to file.c]
211 should_route :get, "/projects/redmine/repository/annotate/path/to/file.c", :controller => 'repositories', :action => 'annotate', :id => 'redmine', :path => %w[path to file.c]
212 should_route :get, "/projects/redmine/repository/changes/path/to/file.c", :controller => 'repositories', :action => 'changes', :id => 'redmine', :path => %w[path to file.c]
212 should_route :get, "/projects/redmine/repository/changes/path/to/file.c", :controller => 'repositories', :action => 'changes', :id => 'redmine', :path => %w[path to file.c]
213 should_route :get, "/projects/redmine/repository/statistics", :controller => 'repositories', :action => 'stats', :id => 'redmine'
213 should_route :get, "/projects/redmine/repository/statistics", :controller => 'repositories', :action => 'stats', :id => 'redmine'
214
214
215
215
216 should_route :post, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine'
216 should_route :post, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine'
217 end
217 end
218
218
219 context "timelogs" do
219 context "timelogs" do
220 should_route :get, "/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :issue_id => '567'
220 should_route :get, "/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :issue_id => '567'
221 should_route :get, "/projects/ecookbook/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook'
221 should_route :get, "/projects/ecookbook/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook'
222 should_route :get, "/projects/ecookbook/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook', :issue_id => '567'
222 should_route :get, "/projects/ecookbook/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook', :issue_id => '567'
223 should_route :get, "/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22'
223 should_route :get, "/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22'
224 should_route :get, "/time_entries/report", :controller => 'timelog', :action => 'report'
224 should_route :get, "/time_entries/report", :controller => 'timelog', :action => 'report'
225 should_route :get, "/projects/567/time_entries/report", :controller => 'timelog', :action => 'report', :project_id => '567'
225 should_route :get, "/projects/567/time_entries/report", :controller => 'timelog', :action => 'report', :project_id => '567'
226 should_route :get, "/projects/567/time_entries/report.csv", :controller => 'timelog', :action => 'report', :project_id => '567', :format => 'csv'
226 should_route :get, "/projects/567/time_entries/report.csv", :controller => 'timelog', :action => 'report', :project_id => '567', :format => 'csv'
227 should_route :get, "/time_entries", :controller => 'timelog', :action => 'details'
227 should_route :get, "/time_entries", :controller => 'timelog', :action => 'details'
228 should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'details', :format => 'csv'
228 should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'details', :format => 'csv'
229 should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'details', :format => 'atom'
229 should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'details', :format => 'atom'
230 should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'details', :project_id => '567'
230 should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'details', :project_id => '567'
231 should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'csv'
231 should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'csv'
232 should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'atom'
232 should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'atom'
233 should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'details', :issue_id => '234'
233 should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'details', :issue_id => '234'
234 should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'csv'
234 should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'csv'
235 should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'atom'
235 should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'atom'
236 should_route :get, "/projects/ecookbook/issues/123/time_entries", :controller => 'timelog', :action => 'details', :project_id => 'ecookbook', :issue_id => '123'
236 should_route :get, "/projects/ecookbook/issues/123/time_entries", :controller => 'timelog', :action => 'details', :project_id => 'ecookbook', :issue_id => '123'
237
237
238 should_route :post, "/time_entries/55/destroy", :controller => 'timelog', :action => 'destroy', :id => '55'
238 should_route :post, "/time_entries/55/destroy", :controller => 'timelog', :action => 'destroy', :id => '55'
239 end
239 end
240
240
241 context "users" do
241 context "users" do
242 should_route :get, "/users", :controller => 'users', :action => 'index'
242 should_route :get, "/users", :controller => 'users', :action => 'index'
243 should_route :get, "/users/44", :controller => 'users', :action => 'show', :id => '44'
243 should_route :get, "/users/44", :controller => 'users', :action => 'show', :id => '44'
244 should_route :get, "/users/new", :controller => 'users', :action => 'add'
244 should_route :get, "/users/new", :controller => 'users', :action => 'add'
245 should_route :get, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
245 should_route :get, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
246 should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership'
246 should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership'
247
247
248 should_route :post, "/users/new", :controller => 'users', :action => 'add'
248 should_route :post, "/users/new", :controller => 'users', :action => 'add'
249 should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
249 should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444'
250 should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123'
250 should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123'
251 should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55'
251 should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55'
252 should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12'
252 should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12'
253 end
253 end
254
254
255 # TODO: should they all be scoped under /projects/:project_id ?
255 context "versions" do
256 context "versions" do
256 should_route :get, "/projects/foo/versions/new", :controller => 'versions', :action => 'new', :project_id => 'foo'
257 should_route :get, "/projects/foo/versions/new", :controller => 'versions', :action => 'new', :project_id => 'foo'
258 should_route :get, "/versions/show/1", :controller => 'versions', :action => 'show', :id => '1'
259 should_route :get, "/versions/edit/1", :controller => 'versions', :action => 'edit', :id => '1'
257
260
258 should_route :post, "/projects/foo/versions/new", :controller => 'versions', :action => 'new', :project_id => 'foo'
261 should_route :post, "/projects/foo/versions/new", :controller => 'versions', :action => 'new', :project_id => 'foo'
262 should_route :post, "/versions/update/1", :controller => 'versions', :action => 'update', :id => '1'
263
264 should_route :delete, "/versions/destroy/1", :controller => 'versions', :action => 'destroy', :id => '1'
259 end
265 end
260
266
261 context "wiki (singular, project's pages)" do
267 context "wiki (singular, project's pages)" do
262 should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :id => '567'
268 should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :id => '567'
263 should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala'
269 should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala'
264 should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
270 should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
265 should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation'
271 should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation'
266 should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1'
272 should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1'
267 should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2'
273 should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2'
268 should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
274 should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
269 should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'page_index'
275 should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'page_index'
270 should_route :get, "/projects/567/wiki/Page_Index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'Page_Index'
276 should_route :get, "/projects/567/wiki/Page_Index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'Page_Index'
271 should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'date_index'
277 should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'date_index'
272 should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'special', :id => '567', :page => 'export'
278 should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'special', :id => '567', :page => 'export'
273
279
274 should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
280 should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page'
275 should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation'
281 should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation'
276 should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
282 should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida'
277 should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida'
283 should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida'
278 should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :id => '22', :page => 'ladida'
284 should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :id => '22', :page => 'ladida'
279 end
285 end
280
286
281 context "wikis (plural, admin setup)" do
287 context "wikis (plural, admin setup)" do
282 should_route :get, "/projects/ladida/wiki/destroy", :controller => 'wikis', :action => 'destroy', :id => 'ladida'
288 should_route :get, "/projects/ladida/wiki/destroy", :controller => 'wikis', :action => 'destroy', :id => 'ladida'
283
289
284 should_route :post, "/projects/ladida/wiki", :controller => 'wikis', :action => 'edit', :id => 'ladida'
290 should_route :post, "/projects/ladida/wiki", :controller => 'wikis', :action => 'edit', :id => 'ladida'
285 should_route :post, "/projects/ladida/wiki/destroy", :controller => 'wikis', :action => 'destroy', :id => 'ladida'
291 should_route :post, "/projects/ladida/wiki/destroy", :controller => 'wikis', :action => 'destroy', :id => 'ladida'
286 end
292 end
287
293
288 context "administration panel" do
294 context "administration panel" do
289 should_route :get, "/admin/projects", :controller => 'admin', :action => 'projects'
295 should_route :get, "/admin/projects", :controller => 'admin', :action => 'projects'
290 end
296 end
291 end
297 end
General Comments 0
You need to be logged in to leave comments. Login now