##// END OF EJS Templates
Treat Calendar and Gantt pages as separate modules. #6153...
Eric Davis -
r3899:fc9b984cc147
parent child
Show More
@@ -0,0 +1,12
1 class EnableCalendarAndGanttModulesWhereAppropriate < ActiveRecord::Migration
2 def self.up
3 EnabledModule.find(:all, :conditions => ["name = ?", 'issue_tracking']).each do |e|
4 EnabledModule.create(:name => 'calendar', :project_id => e.project_id)
5 EnabledModule.create(:name => 'gantt', :project_id => e.project_id)
6 end
7 end
8
9 def self.down
10 EnabledModule.delete_all("name = 'calendar' OR name = 'gantt'")
11 end
12 end
@@ -1,184 +1,186
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
18
19 # DO NOT MODIFY THIS FILE !!!
19 # DO NOT MODIFY THIS FILE !!!
20 # Settings can be defined through the application in Admin -> Settings
20 # Settings can be defined through the application in Admin -> Settings
21
21
22 app_title:
22 app_title:
23 default: Redmine
23 default: Redmine
24 app_subtitle:
24 app_subtitle:
25 default: Project management
25 default: Project management
26 welcome_text:
26 welcome_text:
27 default:
27 default:
28 login_required:
28 login_required:
29 default: 0
29 default: 0
30 self_registration:
30 self_registration:
31 default: '2'
31 default: '2'
32 lost_password:
32 lost_password:
33 default: 1
33 default: 1
34 password_min_length:
34 password_min_length:
35 format: int
35 format: int
36 default: 4
36 default: 4
37 attachment_max_size:
37 attachment_max_size:
38 format: int
38 format: int
39 default: 5120
39 default: 5120
40 issues_export_limit:
40 issues_export_limit:
41 format: int
41 format: int
42 default: 500
42 default: 500
43 activity_days_default:
43 activity_days_default:
44 format: int
44 format: int
45 default: 30
45 default: 30
46 per_page_options:
46 per_page_options:
47 default: '25,50,100'
47 default: '25,50,100'
48 mail_from:
48 mail_from:
49 default: redmine@example.net
49 default: redmine@example.net
50 bcc_recipients:
50 bcc_recipients:
51 default: 1
51 default: 1
52 plain_text_mail:
52 plain_text_mail:
53 default: 0
53 default: 0
54 text_formatting:
54 text_formatting:
55 default: textile
55 default: textile
56 cache_formatted_text:
56 cache_formatted_text:
57 default: 0
57 default: 0
58 wiki_compression:
58 wiki_compression:
59 default: ""
59 default: ""
60 default_language:
60 default_language:
61 default: en
61 default: en
62 host_name:
62 host_name:
63 default: localhost:3000
63 default: localhost:3000
64 protocol:
64 protocol:
65 default: http
65 default: http
66 feeds_limit:
66 feeds_limit:
67 format: int
67 format: int
68 default: 15
68 default: 15
69 # Maximum size of files that can be displayed
69 # Maximum size of files that can be displayed
70 # inline through the file viewer (in KB)
70 # inline through the file viewer (in KB)
71 file_max_size_displayed:
71 file_max_size_displayed:
72 format: int
72 format: int
73 default: 512
73 default: 512
74 diff_max_lines_displayed:
74 diff_max_lines_displayed:
75 format: int
75 format: int
76 default: 1500
76 default: 1500
77 enabled_scm:
77 enabled_scm:
78 serialized: true
78 serialized: true
79 default:
79 default:
80 - Subversion
80 - Subversion
81 - Darcs
81 - Darcs
82 - Mercurial
82 - Mercurial
83 - Cvs
83 - Cvs
84 - Bazaar
84 - Bazaar
85 - Git
85 - Git
86 autofetch_changesets:
86 autofetch_changesets:
87 default: 1
87 default: 1
88 sys_api_enabled:
88 sys_api_enabled:
89 default: 0
89 default: 0
90 sys_api_key:
90 sys_api_key:
91 default: ''
91 default: ''
92 commit_ref_keywords:
92 commit_ref_keywords:
93 default: 'refs,references,IssueID'
93 default: 'refs,references,IssueID'
94 commit_fix_keywords:
94 commit_fix_keywords:
95 default: 'fixes,closes'
95 default: 'fixes,closes'
96 commit_fix_status_id:
96 commit_fix_status_id:
97 format: int
97 format: int
98 default: 0
98 default: 0
99 commit_fix_done_ratio:
99 commit_fix_done_ratio:
100 default: 100
100 default: 100
101 # autologin duration in days
101 # autologin duration in days
102 # 0 means autologin is disabled
102 # 0 means autologin is disabled
103 autologin:
103 autologin:
104 format: int
104 format: int
105 default: 0
105 default: 0
106 # date format
106 # date format
107 date_format:
107 date_format:
108 default: ''
108 default: ''
109 time_format:
109 time_format:
110 default: ''
110 default: ''
111 user_format:
111 user_format:
112 default: :firstname_lastname
112 default: :firstname_lastname
113 format: symbol
113 format: symbol
114 cross_project_issue_relations:
114 cross_project_issue_relations:
115 default: 0
115 default: 0
116 notified_events:
116 notified_events:
117 serialized: true
117 serialized: true
118 default:
118 default:
119 - issue_added
119 - issue_added
120 - issue_updated
120 - issue_updated
121 mail_handler_body_delimiters:
121 mail_handler_body_delimiters:
122 default: ''
122 default: ''
123 mail_handler_api_enabled:
123 mail_handler_api_enabled:
124 default: 0
124 default: 0
125 mail_handler_api_key:
125 mail_handler_api_key:
126 default:
126 default:
127 issue_list_default_columns:
127 issue_list_default_columns:
128 serialized: true
128 serialized: true
129 default:
129 default:
130 - tracker
130 - tracker
131 - status
131 - status
132 - priority
132 - priority
133 - subject
133 - subject
134 - assigned_to
134 - assigned_to
135 - updated_on
135 - updated_on
136 display_subprojects_issues:
136 display_subprojects_issues:
137 default: 1
137 default: 1
138 issue_done_ratio:
138 issue_done_ratio:
139 default: 'issue_field'
139 default: 'issue_field'
140 default_projects_public:
140 default_projects_public:
141 default: 1
141 default: 1
142 default_projects_modules:
142 default_projects_modules:
143 serialized: true
143 serialized: true
144 default:
144 default:
145 - issue_tracking
145 - issue_tracking
146 - time_tracking
146 - time_tracking
147 - news
147 - news
148 - documents
148 - documents
149 - files
149 - files
150 - wiki
150 - wiki
151 - repository
151 - repository
152 - boards
152 - boards
153 - calendar
154 - gantt
153 # Role given to a non-admin user who creates a project
155 # Role given to a non-admin user who creates a project
154 new_project_user_role_id:
156 new_project_user_role_id:
155 format: int
157 format: int
156 default: ''
158 default: ''
157 sequential_project_identifiers:
159 sequential_project_identifiers:
158 default: 0
160 default: 0
159 # encodings used to convert repository files content to UTF-8
161 # encodings used to convert repository files content to UTF-8
160 # multiple values accepted, comma separated
162 # multiple values accepted, comma separated
161 repositories_encodings:
163 repositories_encodings:
162 default: ''
164 default: ''
163 # encoding used to convert commit logs to UTF-8
165 # encoding used to convert commit logs to UTF-8
164 commit_logs_encoding:
166 commit_logs_encoding:
165 default: 'UTF-8'
167 default: 'UTF-8'
166 repository_log_display_limit:
168 repository_log_display_limit:
167 format: int
169 format: int
168 default: 100
170 default: 100
169 ui_theme:
171 ui_theme:
170 default: ''
172 default: ''
171 emails_footer:
173 emails_footer:
172 default: |-
174 default: |-
173 You have received this notification because you have either subscribed to it, or are involved in it.
175 You have received this notification because you have either subscribed to it, or are involved in it.
174 To change your notification preferences, please click here: http://hostname/my/account
176 To change your notification preferences, please click here: http://hostname/my/account
175 gravatar_enabled:
177 gravatar_enabled:
176 default: 0
178 default: 0
177 openid:
179 openid:
178 default: 0
180 default: 0
179 gravatar_default:
181 gravatar_default:
180 default: ''
182 default: ''
181 start_of_week:
183 start_of_week:
182 default: ''
184 default: ''
183 rest_api_enabled:
185 rest_api_enabled:
184 default: 0
186 default: 0
@@ -1,225 +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, :activity]}, :public => true
47 map.permission :view_project, {:projects => [:show, :activity]}, :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 => :add}, :require => :loggedin
49 map.permission :add_project, {:projects => :add}, :require => :loggedin
50 map.permission :edit_project, {:projects => [:settings, :edit]}, :require => :member
50 map.permission :edit_project, {:projects => [:settings, :edit]}, :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, :close_completed, :destroy]}, :require => :member
54 map.permission :add_subprojects, {:projects => :add}, :require => :member
54 map.permission :add_subprojects, {:projects => :add}, :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, {:projects => :roadmap,
60 map.permission :view_issues, {:projects => :roadmap,
61 :issues => [:index, :changes, :show],
61 :issues => [:index, :changes, :show],
62 :auto_complete => [:issues],
62 :auto_complete => [:issues],
63 :context_menus => [:issues],
63 :context_menus => [:issues],
64 :versions => [:show, :status_by],
64 :versions => [:show, :status_by],
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, :update_form], :journals => [:new]}
68 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :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 # Gantt & calendar
80 map.permission :view_gantt, :gantts => :show
81 map.permission :view_calendar, :calendars => :show
82 # Watchers
79 # Watchers
83 map.permission :view_issue_watchers, {}
80 map.permission :view_issue_watchers, {}
84 map.permission :add_issue_watchers, {:watchers => :new}
81 map.permission :add_issue_watchers, {:watchers => :new}
85 map.permission :delete_issue_watchers, {:watchers => :destroy}
82 map.permission :delete_issue_watchers, {:watchers => :destroy}
86 end
83 end
87
84
88 map.project_module :time_tracking do |map|
85 map.project_module :time_tracking do |map|
89 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
86 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
90 map.permission :view_time_entries, :timelog => [:details, :report]
87 map.permission :view_time_entries, :timelog => [:details, :report]
91 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
88 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
92 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
89 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
93 map.permission :manage_project_activities, {:projects => [:save_activities, :reset_activities]}, :require => :member
90 map.permission :manage_project_activities, {:projects => [:save_activities, :reset_activities]}, :require => :member
94 end
91 end
95
92
96 map.project_module :news do |map|
93 map.project_module :news do |map|
97 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
98 map.permission :view_news, {:news => [:index, :show]}, :public => true
95 map.permission :view_news, {:news => [:index, :show]}, :public => true
99 map.permission :comment_news, {:news => :add_comment}
96 map.permission :comment_news, {:news => :add_comment}
100 end
97 end
101
98
102 map.project_module :documents do |map|
99 map.project_module :documents do |map|
103 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
104 map.permission :view_documents, :documents => [:index, :show, :download]
101 map.permission :view_documents, :documents => [:index, :show, :download]
105 end
102 end
106
103
107 map.project_module :files do |map|
104 map.project_module :files do |map|
108 map.permission :manage_files, {:projects => :add_file}, :require => :loggedin
105 map.permission :manage_files, {:projects => :add_file}, :require => :loggedin
109 map.permission :view_files, :projects => :list_files, :versions => :download
106 map.permission :view_files, :projects => :list_files, :versions => :download
110 end
107 end
111
108
112 map.project_module :wiki do |map|
109 map.project_module :wiki do |map|
113 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
110 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
114 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
111 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
115 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
112 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
116 map.permission :view_wiki_pages, :wiki => [:index, :special]
113 map.permission :view_wiki_pages, :wiki => [:index, :special]
117 map.permission :export_wiki_pages, {}
114 map.permission :export_wiki_pages, {}
118 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
115 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
119 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
116 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
120 map.permission :delete_wiki_pages_attachments, {}
117 map.permission :delete_wiki_pages_attachments, {}
121 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
118 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
122 end
119 end
123
120
124 map.project_module :repository do |map|
121 map.project_module :repository do |map|
125 map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member
122 map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member
126 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]
127 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
124 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
128 map.permission :commit_access, {}
125 map.permission :commit_access, {}
129 end
126 end
130
127
131 map.project_module :boards do |map|
128 map.project_module :boards do |map|
132 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
129 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
133 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
130 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
134 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
131 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
135 map.permission :edit_messages, {:messages => :edit}, :require => :member
132 map.permission :edit_messages, {:messages => :edit}, :require => :member
136 map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin
133 map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin
137 map.permission :delete_messages, {:messages => :destroy}, :require => :member
134 map.permission :delete_messages, {:messages => :destroy}, :require => :member
138 map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin
135 map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin
139 end
136 end
137
138 map.project_module :calendar do |map|
139 map.permission :view_calendar, :calendars => :show
140 end
141
142 map.project_module :gantt do |map|
143 map.permission :view_gantt, :gantts => :show
144 end
140 end
145 end
141
146
142 Redmine::MenuManager.map :top_menu do |menu|
147 Redmine::MenuManager.map :top_menu do |menu|
143 menu.push :home, :home_path
148 menu.push :home, :home_path
144 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? }
145 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural
150 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural
146 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
147 menu.push :help, Redmine::Info.help_url, :last => true
152 menu.push :help, Redmine::Info.help_url, :last => true
148 end
153 end
149
154
150 Redmine::MenuManager.map :account_menu do |menu|
155 Redmine::MenuManager.map :account_menu do |menu|
151 menu.push :login, :signin_path, :if => Proc.new { !User.current.logged? }
156 menu.push :login, :signin_path, :if => Proc.new { !User.current.logged? }
152 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? }
153 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? }
154 menu.push :logout, :signout_path, :if => Proc.new { User.current.logged? }
159 menu.push :logout, :signout_path, :if => Proc.new { User.current.logged? }
155 end
160 end
156
161
157 Redmine::MenuManager.map :application_menu do |menu|
162 Redmine::MenuManager.map :application_menu do |menu|
158 # Empty
163 # Empty
159 end
164 end
160
165
161 Redmine::MenuManager.map :admin_menu do |menu|
166 Redmine::MenuManager.map :admin_menu do |menu|
162 menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
167 menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
163 menu.push :users, {:controller => 'users'}, :caption => :label_user_plural
168 menu.push :users, {:controller => 'users'}, :caption => :label_user_plural
164 menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
169 menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
165 menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions
170 menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions
166 menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural
171 menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural
167 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,
168 :html => {:class => 'issue_statuses'}
173 :html => {:class => 'issue_statuses'}
169 menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow
174 menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow
170 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,
171 :html => {:class => 'custom_fields'}
176 :html => {:class => 'custom_fields'}
172 menu.push :enumerations, {:controller => 'enumerations'}
177 menu.push :enumerations, {:controller => 'enumerations'}
173 menu.push :settings, {:controller => 'settings'}
178 menu.push :settings, {:controller => 'settings'}
174 menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'},
179 menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'},
175 :html => {:class => 'server_authentication'}
180 :html => {:class => 'server_authentication'}
176 menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
181 menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
177 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
178 end
183 end
179
184
180 Redmine::MenuManager.map :project_menu do |menu|
185 Redmine::MenuManager.map :project_menu do |menu|
181 menu.push :overview, { :controller => 'projects', :action => 'show' }
186 menu.push :overview, { :controller => 'projects', :action => 'show' }
182 menu.push :activity, { :controller => 'projects', :action => 'activity' }
187 menu.push :activity, { :controller => 'projects', :action => 'activity' }
183 menu.push :roadmap, { :controller => 'projects', :action => 'roadmap' },
188 menu.push :roadmap, { :controller => 'projects', :action => 'roadmap' },
184 :if => Proc.new { |p| p.shared_versions.any? }
189 :if => Proc.new { |p| p.shared_versions.any? }
185 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
186 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,
187 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
192 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
188 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
189 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
190 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
191 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
192 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
197 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
193 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
198 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
194 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,
195 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
200 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
196 menu.push :files, { :controller => 'projects', :action => 'list_files' }, :caption => :label_file_plural
201 menu.push :files, { :controller => 'projects', :action => 'list_files' }, :caption => :label_file_plural
197 menu.push :repository, { :controller => 'repositories', :action => 'show' },
202 menu.push :repository, { :controller => 'repositories', :action => 'show' },
198 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
203 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
199 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
204 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
200 end
205 end
201
206
202 Redmine::Activity.map do |activity|
207 Redmine::Activity.map do |activity|
203 activity.register :issues, :class_name => %w(Issue Journal)
208 activity.register :issues, :class_name => %w(Issue Journal)
204 activity.register :changesets
209 activity.register :changesets
205 activity.register :news
210 activity.register :news
206 activity.register :documents, :class_name => %w(Document Attachment)
211 activity.register :documents, :class_name => %w(Document Attachment)
207 activity.register :files, :class_name => 'Attachment'
212 activity.register :files, :class_name => 'Attachment'
208 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
213 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
209 activity.register :messages, :default => false
214 activity.register :messages, :default => false
210 activity.register :time_entries, :default => false
215 activity.register :time_entries, :default => false
211 end
216 end
212
217
213 Redmine::Search.map do |search|
218 Redmine::Search.map do |search|
214 search.register :issues
219 search.register :issues
215 search.register :news
220 search.register :news
216 search.register :documents
221 search.register :documents
217 search.register :changesets
222 search.register :changesets
218 search.register :wiki_pages
223 search.register :wiki_pages
219 search.register :messages
224 search.register :messages
220 search.register :projects
225 search.register :projects
221 end
226 end
222
227
223 Redmine::WikiFormatting.map do |format|
228 Redmine::WikiFormatting.map do |format|
224 format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper
229 format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper
225 end
230 end
@@ -1,65 +1,97
1 ---
1 ---
2 enabled_modules_001:
2 enabled_modules_001:
3 name: issue_tracking
3 name: issue_tracking
4 project_id: 1
4 project_id: 1
5 id: 1
5 id: 1
6 enabled_modules_002:
6 enabled_modules_002:
7 name: time_tracking
7 name: time_tracking
8 project_id: 1
8 project_id: 1
9 id: 2
9 id: 2
10 enabled_modules_003:
10 enabled_modules_003:
11 name: news
11 name: news
12 project_id: 1
12 project_id: 1
13 id: 3
13 id: 3
14 enabled_modules_004:
14 enabled_modules_004:
15 name: documents
15 name: documents
16 project_id: 1
16 project_id: 1
17 id: 4
17 id: 4
18 enabled_modules_005:
18 enabled_modules_005:
19 name: files
19 name: files
20 project_id: 1
20 project_id: 1
21 id: 5
21 id: 5
22 enabled_modules_006:
22 enabled_modules_006:
23 name: wiki
23 name: wiki
24 project_id: 1
24 project_id: 1
25 id: 6
25 id: 6
26 enabled_modules_007:
26 enabled_modules_007:
27 name: repository
27 name: repository
28 project_id: 1
28 project_id: 1
29 id: 7
29 id: 7
30 enabled_modules_008:
30 enabled_modules_008:
31 name: boards
31 name: boards
32 project_id: 1
32 project_id: 1
33 id: 8
33 id: 8
34 enabled_modules_009:
34 enabled_modules_009:
35 name: repository
35 name: repository
36 project_id: 3
36 project_id: 3
37 id: 9
37 id: 9
38 enabled_modules_010:
38 enabled_modules_010:
39 name: wiki
39 name: wiki
40 project_id: 3
40 project_id: 3
41 id: 10
41 id: 10
42 enabled_modules_011:
42 enabled_modules_011:
43 name: issue_tracking
43 name: issue_tracking
44 project_id: 2
44 project_id: 2
45 id: 11
45 id: 11
46 enabled_modules_012:
46 enabled_modules_012:
47 name: time_tracking
47 name: time_tracking
48 project_id: 3
48 project_id: 3
49 id: 12
49 id: 12
50 enabled_modules_013:
50 enabled_modules_013:
51 name: issue_tracking
51 name: issue_tracking
52 project_id: 3
52 project_id: 3
53 id: 13
53 id: 13
54 enabled_modules_014:
54 enabled_modules_014:
55 name: issue_tracking
55 name: issue_tracking
56 project_id: 5
56 project_id: 5
57 id: 14
57 id: 14
58 enabled_modules_015:
58 enabled_modules_015:
59 name: wiki
59 name: wiki
60 project_id: 2
60 project_id: 2
61 id: 15
61 id: 15
62 enabled_modules_016:
62 enabled_modules_016:
63 name: boards
63 name: boards
64 project_id: 2
64 project_id: 2
65 id: 16
65 id: 16
66 enabled_modules_017:
67 name: calendar
68 project_id: 1
69 id: 17
70 enabled_modules_018:
71 name: gantt
72 project_id: 1
73 id: 18
74 enabled_modules_019:
75 name: calendar
76 project_id: 2
77 id: 19
78 enabled_modules_020:
79 name: gantt
80 project_id: 2
81 id: 20
82 enabled_modules_021:
83 name: calendar
84 project_id: 3
85 id: 21
86 enabled_modules_022:
87 name: gantt
88 project_id: 3
89 id: 22
90 enabled_modules_023:
91 name: calendar
92 project_id: 5
93 id: 23
94 enabled_modules_024:
95 name: gantt
96 project_id: 5
97 id: 24
@@ -1,84 +1,86
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2009 Jean-Philippe Lang
2 # Copyright (C) 2006-2009 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 module RedmineMenuTestHelper
20 module RedmineMenuTestHelper
21 # Assertions
21 # Assertions
22 def assert_number_of_items_in_menu(menu_name, count)
22 def assert_number_of_items_in_menu(menu_name, count)
23 assert Redmine::MenuManager.items(menu_name).size >= count, "Menu has less than #{count} items"
23 assert Redmine::MenuManager.items(menu_name).size >= count, "Menu has less than #{count} items"
24 end
24 end
25
25
26 def assert_menu_contains_item_named(menu_name, item_name)
26 def assert_menu_contains_item_named(menu_name, item_name)
27 assert Redmine::MenuManager.items(menu_name).collect(&:name).include?(item_name.to_sym), "Menu did not have an item named #{item_name}"
27 assert Redmine::MenuManager.items(menu_name).collect(&:name).include?(item_name.to_sym), "Menu did not have an item named #{item_name}"
28 end
28 end
29
29
30 # Helpers
30 # Helpers
31 def get_menu_item(menu_name, item_name)
31 def get_menu_item(menu_name, item_name)
32 Redmine::MenuManager.items(menu_name).find {|item| item.name == item_name.to_sym}
32 Redmine::MenuManager.items(menu_name).find {|item| item.name == item_name.to_sym}
33 end
33 end
34 end
34 end
35
35
36 class RedmineTest < ActiveSupport::TestCase
36 class RedmineTest < ActiveSupport::TestCase
37 include RedmineMenuTestHelper
37 include RedmineMenuTestHelper
38
38
39 def test_top_menu
39 def test_top_menu
40 assert_number_of_items_in_menu :top_menu, 5
40 assert_number_of_items_in_menu :top_menu, 5
41 assert_menu_contains_item_named :top_menu, :home
41 assert_menu_contains_item_named :top_menu, :home
42 assert_menu_contains_item_named :top_menu, :my_page
42 assert_menu_contains_item_named :top_menu, :my_page
43 assert_menu_contains_item_named :top_menu, :projects
43 assert_menu_contains_item_named :top_menu, :projects
44 assert_menu_contains_item_named :top_menu, :administration
44 assert_menu_contains_item_named :top_menu, :administration
45 assert_menu_contains_item_named :top_menu, :help
45 assert_menu_contains_item_named :top_menu, :help
46 end
46 end
47
47
48 def test_account_menu
48 def test_account_menu
49 assert_number_of_items_in_menu :account_menu, 4
49 assert_number_of_items_in_menu :account_menu, 4
50 assert_menu_contains_item_named :account_menu, :login
50 assert_menu_contains_item_named :account_menu, :login
51 assert_menu_contains_item_named :account_menu, :register
51 assert_menu_contains_item_named :account_menu, :register
52 assert_menu_contains_item_named :account_menu, :my_account
52 assert_menu_contains_item_named :account_menu, :my_account
53 assert_menu_contains_item_named :account_menu, :logout
53 assert_menu_contains_item_named :account_menu, :logout
54 end
54 end
55
55
56 def test_application_menu
56 def test_application_menu
57 assert_number_of_items_in_menu :application_menu, 0
57 assert_number_of_items_in_menu :application_menu, 0
58 end
58 end
59
59
60 def test_admin_menu
60 def test_admin_menu
61 assert_number_of_items_in_menu :admin_menu, 0
61 assert_number_of_items_in_menu :admin_menu, 0
62 end
62 end
63
63
64 def test_project_menu
64 def test_project_menu
65 assert_number_of_items_in_menu :project_menu, 12
65 assert_number_of_items_in_menu :project_menu, 14
66 assert_menu_contains_item_named :project_menu, :overview
66 assert_menu_contains_item_named :project_menu, :overview
67 assert_menu_contains_item_named :project_menu, :activity
67 assert_menu_contains_item_named :project_menu, :activity
68 assert_menu_contains_item_named :project_menu, :roadmap
68 assert_menu_contains_item_named :project_menu, :roadmap
69 assert_menu_contains_item_named :project_menu, :issues
69 assert_menu_contains_item_named :project_menu, :issues
70 assert_menu_contains_item_named :project_menu, :new_issue
70 assert_menu_contains_item_named :project_menu, :new_issue
71 assert_menu_contains_item_named :project_menu, :calendar
72 assert_menu_contains_item_named :project_menu, :gantt
71 assert_menu_contains_item_named :project_menu, :news
73 assert_menu_contains_item_named :project_menu, :news
72 assert_menu_contains_item_named :project_menu, :documents
74 assert_menu_contains_item_named :project_menu, :documents
73 assert_menu_contains_item_named :project_menu, :wiki
75 assert_menu_contains_item_named :project_menu, :wiki
74 assert_menu_contains_item_named :project_menu, :boards
76 assert_menu_contains_item_named :project_menu, :boards
75 assert_menu_contains_item_named :project_menu, :files
77 assert_menu_contains_item_named :project_menu, :files
76 assert_menu_contains_item_named :project_menu, :repository
78 assert_menu_contains_item_named :project_menu, :repository
77 assert_menu_contains_item_named :project_menu, :settings
79 assert_menu_contains_item_named :project_menu, :settings
78 end
80 end
79
81
80 def test_new_issue_should_have_root_as_a_parent
82 def test_new_issue_should_have_root_as_a_parent
81 new_issue = get_menu_item(:project_menu, :new_issue)
83 new_issue = get_menu_item(:project_menu, :new_issue)
82 assert_equal :root, new_issue.parent.name
84 assert_equal :root, new_issue.parent.name
83 end
85 end
84 end
86 end
General Comments 0
You need to be logged in to leave comments. Login now