##// END OF EJS Templates
Adds 'Delete wiki pages attachments' permission....
Jean-Philippe Lang -
r1936:ccbe48d77911
parent child
Show More
@@ -0,0 +1,13
1 class AddDeleteWikiPagesAttachmentsPermission < ActiveRecord::Migration
2 def self.up
3 Role.find(:all).each do |r|
4 r.add_permission!(:delete_wiki_pages_attachments) if r.has_permission?(:edit_wiki_pages)
5 end
6 end
7
8 def self.down
9 Role.find(:all).each do |r|
10 r.remove_permission!(:delete_wiki_pages_attachments)
11 end
12 end
13 end
@@ -1,151 +1,152
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/mime_type'
4 require 'redmine/mime_type'
5 require 'redmine/core_ext'
5 require 'redmine/core_ext'
6 require 'redmine/themes'
6 require 'redmine/themes'
7 require 'redmine/hook'
7 require 'redmine/hook'
8 require 'redmine/plugin'
8 require 'redmine/plugin'
9
9
10 begin
10 begin
11 require_library_or_gem 'RMagick' unless Object.const_defined?(:Magick)
11 require_library_or_gem 'RMagick' unless Object.const_defined?(:Magick)
12 rescue LoadError
12 rescue LoadError
13 # RMagick is not available
13 # RMagick is not available
14 end
14 end
15
15
16 REDMINE_SUPPORTED_SCM = %w( Subversion Darcs Mercurial Cvs Bazaar Git Filesystem )
16 REDMINE_SUPPORTED_SCM = %w( Subversion Darcs Mercurial Cvs Bazaar Git Filesystem )
17
17
18 # Permissions
18 # Permissions
19 Redmine::AccessControl.map do |map|
19 Redmine::AccessControl.map do |map|
20 map.permission :view_project, {:projects => [:show, :activity]}, :public => true
20 map.permission :view_project, {:projects => [:show, :activity]}, :public => true
21 map.permission :search_project, {:search => :index}, :public => true
21 map.permission :search_project, {:search => :index}, :public => true
22 map.permission :edit_project, {:projects => [:settings, :edit]}, :require => :member
22 map.permission :edit_project, {:projects => [:settings, :edit]}, :require => :member
23 map.permission :select_project_modules, {:projects => :modules}, :require => :member
23 map.permission :select_project_modules, {:projects => :modules}, :require => :member
24 map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy]}, :require => :member
24 map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy]}, :require => :member
25 map.permission :manage_versions, {:projects => [:settings, :add_version], :versions => [:edit, :destroy]}, :require => :member
25 map.permission :manage_versions, {:projects => [:settings, :add_version], :versions => [:edit, :destroy]}, :require => :member
26
26
27 map.project_module :issue_tracking do |map|
27 map.project_module :issue_tracking do |map|
28 # Issue categories
28 # Issue categories
29 map.permission :manage_categories, {:projects => [:settings, :add_issue_category], :issue_categories => [:edit, :destroy]}, :require => :member
29 map.permission :manage_categories, {:projects => [:settings, :add_issue_category], :issue_categories => [:edit, :destroy]}, :require => :member
30 # Issues
30 # Issues
31 map.permission :view_issues, {:projects => [:changelog, :roadmap],
31 map.permission :view_issues, {:projects => [:changelog, :roadmap],
32 :issues => [:index, :changes, :show, :context_menu],
32 :issues => [:index, :changes, :show, :context_menu],
33 :versions => [:show, :status_by],
33 :versions => [:show, :status_by],
34 :queries => :index,
34 :queries => :index,
35 :reports => :issue_report}, :public => true
35 :reports => :issue_report}, :public => true
36 map.permission :add_issues, {:issues => :new}
36 map.permission :add_issues, {:issues => :new}
37 map.permission :edit_issues, {:issues => [:edit, :reply, :bulk_edit, :destroy_attachment]}
37 map.permission :edit_issues, {:issues => [:edit, :reply, :bulk_edit, :destroy_attachment]}
38 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
38 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
39 map.permission :add_issue_notes, {:issues => [:edit, :reply]}
39 map.permission :add_issue_notes, {:issues => [:edit, :reply]}
40 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
40 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
41 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
41 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
42 map.permission :move_issues, {:issues => :move}, :require => :loggedin
42 map.permission :move_issues, {:issues => :move}, :require => :loggedin
43 map.permission :delete_issues, {:issues => :destroy}, :require => :member
43 map.permission :delete_issues, {:issues => :destroy}, :require => :member
44 # Queries
44 # Queries
45 map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member
45 map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member
46 map.permission :save_queries, {:queries => [:new, :edit, :destroy]}, :require => :loggedin
46 map.permission :save_queries, {:queries => [:new, :edit, :destroy]}, :require => :loggedin
47 # Gantt & calendar
47 # Gantt & calendar
48 map.permission :view_gantt, :issues => :gantt
48 map.permission :view_gantt, :issues => :gantt
49 map.permission :view_calendar, :issues => :calendar
49 map.permission :view_calendar, :issues => :calendar
50 # Watchers
50 # Watchers
51 map.permission :view_issue_watchers, {}
51 map.permission :view_issue_watchers, {}
52 map.permission :add_issue_watchers, {:watchers => :new}
52 map.permission :add_issue_watchers, {:watchers => :new}
53 end
53 end
54
54
55 map.project_module :time_tracking do |map|
55 map.project_module :time_tracking do |map|
56 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
56 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
57 map.permission :view_time_entries, :timelog => [:details, :report]
57 map.permission :view_time_entries, :timelog => [:details, :report]
58 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
58 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
59 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
59 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
60 end
60 end
61
61
62 map.project_module :news do |map|
62 map.project_module :news do |map|
63 map.permission :manage_news, {:news => [:new, :edit, :destroy, :destroy_comment]}, :require => :member
63 map.permission :manage_news, {:news => [:new, :edit, :destroy, :destroy_comment]}, :require => :member
64 map.permission :view_news, {:news => [:index, :show]}, :public => true
64 map.permission :view_news, {:news => [:index, :show]}, :public => true
65 map.permission :comment_news, {:news => :add_comment}
65 map.permission :comment_news, {:news => :add_comment}
66 end
66 end
67
67
68 map.project_module :documents do |map|
68 map.project_module :documents do |map|
69 map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin
69 map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin
70 map.permission :view_documents, :documents => [:index, :show, :download]
70 map.permission :view_documents, :documents => [:index, :show, :download]
71 end
71 end
72
72
73 map.project_module :files do |map|
73 map.project_module :files do |map|
74 map.permission :manage_files, {:projects => :add_file, :versions => :destroy_file}, :require => :loggedin
74 map.permission :manage_files, {:projects => :add_file, :versions => :destroy_file}, :require => :loggedin
75 map.permission :view_files, :projects => :list_files, :versions => :download
75 map.permission :view_files, :projects => :list_files, :versions => :download
76 end
76 end
77
77
78 map.project_module :wiki do |map|
78 map.project_module :wiki do |map|
79 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
79 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
80 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
80 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
81 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
81 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
82 map.permission :view_wiki_pages, :wiki => [:index, :special]
82 map.permission :view_wiki_pages, :wiki => [:index, :special]
83 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
83 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
84 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment, :destroy_attachment]
84 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
85 map.permission :delete_wiki_pages_attachments, :wiki => :destroy_attachment
85 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
86 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
86 end
87 end
87
88
88 map.project_module :repository do |map|
89 map.project_module :repository do |map|
89 map.permission :manage_repository, {:repositories => [:edit, :destroy]}, :require => :member
90 map.permission :manage_repository, {:repositories => [:edit, :destroy]}, :require => :member
90 map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
91 map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
91 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
92 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
92 map.permission :commit_access, {}
93 map.permission :commit_access, {}
93 end
94 end
94
95
95 map.project_module :boards do |map|
96 map.project_module :boards do |map|
96 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
97 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
97 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
98 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
98 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
99 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
99 map.permission :edit_messages, {:messages => :edit}, :require => :member
100 map.permission :edit_messages, {:messages => :edit}, :require => :member
100 map.permission :delete_messages, {:messages => :destroy}, :require => :member
101 map.permission :delete_messages, {:messages => :destroy}, :require => :member
101 end
102 end
102 end
103 end
103
104
104 Redmine::MenuManager.map :top_menu do |menu|
105 Redmine::MenuManager.map :top_menu do |menu|
105 menu.push :home, :home_path, :html => { :class => 'home' }
106 menu.push :home, :home_path, :html => { :class => 'home' }
106 menu.push :my_page, { :controller => 'my', :action => 'page' }, :html => { :class => 'mypage' }, :if => Proc.new { User.current.logged? }
107 menu.push :my_page, { :controller => 'my', :action => 'page' }, :html => { :class => 'mypage' }, :if => Proc.new { User.current.logged? }
107 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural, :html => { :class => 'projects' }
108 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural, :html => { :class => 'projects' }
108 menu.push :administration, { :controller => 'admin', :action => 'index' }, :html => { :class => 'admin' }, :if => Proc.new { User.current.admin? }, :last => true
109 menu.push :administration, { :controller => 'admin', :action => 'index' }, :html => { :class => 'admin' }, :if => Proc.new { User.current.admin? }, :last => true
109 menu.push :help, Redmine::Info.help_url, :html => { :class => 'help' }, :last => true
110 menu.push :help, Redmine::Info.help_url, :html => { :class => 'help' }, :last => true
110 end
111 end
111
112
112 Redmine::MenuManager.map :account_menu do |menu|
113 Redmine::MenuManager.map :account_menu do |menu|
113 menu.push :login, :signin_path, :html => { :class => 'login' }, :if => Proc.new { !User.current.logged? }
114 menu.push :login, :signin_path, :html => { :class => 'login' }, :if => Proc.new { !User.current.logged? }
114 menu.push :register, { :controller => 'account', :action => 'register' }, :html => { :class => 'register' }, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
115 menu.push :register, { :controller => 'account', :action => 'register' }, :html => { :class => 'register' }, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
115 menu.push :my_account, { :controller => 'my', :action => 'account' }, :html => { :class => 'myaccount' }, :if => Proc.new { User.current.logged? }
116 menu.push :my_account, { :controller => 'my', :action => 'account' }, :html => { :class => 'myaccount' }, :if => Proc.new { User.current.logged? }
116 menu.push :logout, :signout_path, :html => { :class => 'logout' }, :if => Proc.new { User.current.logged? }
117 menu.push :logout, :signout_path, :html => { :class => 'logout' }, :if => Proc.new { User.current.logged? }
117 end
118 end
118
119
119 Redmine::MenuManager.map :application_menu do |menu|
120 Redmine::MenuManager.map :application_menu do |menu|
120 # Empty
121 # Empty
121 end
122 end
122
123
123 Redmine::MenuManager.map :project_menu do |menu|
124 Redmine::MenuManager.map :project_menu do |menu|
124 menu.push :overview, { :controller => 'projects', :action => 'show' }
125 menu.push :overview, { :controller => 'projects', :action => 'show' }
125 menu.push :activity, { :controller => 'projects', :action => 'activity' }
126 menu.push :activity, { :controller => 'projects', :action => 'activity' }
126 menu.push :roadmap, { :controller => 'projects', :action => 'roadmap' },
127 menu.push :roadmap, { :controller => 'projects', :action => 'roadmap' },
127 :if => Proc.new { |p| p.versions.any? }
128 :if => Proc.new { |p| p.versions.any? }
128 menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
129 menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
129 menu.push :new_issue, { :controller => 'issues', :action => 'new' }, :param => :project_id, :caption => :label_issue_new,
130 menu.push :new_issue, { :controller => 'issues', :action => 'new' }, :param => :project_id, :caption => :label_issue_new,
130 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
131 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
131 menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
132 menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
132 menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
133 menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
133 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
134 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
134 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
135 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
135 menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
136 menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
136 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
137 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
137 menu.push :files, { :controller => 'projects', :action => 'list_files' }, :caption => :label_attachment_plural
138 menu.push :files, { :controller => 'projects', :action => 'list_files' }, :caption => :label_attachment_plural
138 menu.push :repository, { :controller => 'repositories', :action => 'show' },
139 menu.push :repository, { :controller => 'repositories', :action => 'show' },
139 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
140 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
140 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
141 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
141 end
142 end
142
143
143 Redmine::Activity.map do |activity|
144 Redmine::Activity.map do |activity|
144 activity.register :issues, :class_name => %w(Issue Journal)
145 activity.register :issues, :class_name => %w(Issue Journal)
145 activity.register :changesets
146 activity.register :changesets
146 activity.register :news
147 activity.register :news
147 activity.register :documents, :class_name => %w(Document Attachment)
148 activity.register :documents, :class_name => %w(Document Attachment)
148 activity.register :files, :class_name => 'Attachment'
149 activity.register :files, :class_name => 'Attachment'
149 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
150 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
150 activity.register :messages, :default => false
151 activity.register :messages, :default => false
151 end
152 end
@@ -1,172 +1,173
1 ---
1 ---
2 roles_001:
2 roles_001:
3 name: Manager
3 name: Manager
4 id: 1
4 id: 1
5 builtin: 0
5 builtin: 0
6 permissions: |
6 permissions: |
7 ---
7 ---
8 - :edit_project
8 - :edit_project
9 - :manage_members
9 - :manage_members
10 - :manage_versions
10 - :manage_versions
11 - :manage_categories
11 - :manage_categories
12 - :add_issues
12 - :add_issues
13 - :edit_issues
13 - :edit_issues
14 - :manage_issue_relations
14 - :manage_issue_relations
15 - :add_issue_notes
15 - :add_issue_notes
16 - :move_issues
16 - :move_issues
17 - :delete_issues
17 - :delete_issues
18 - :view_issue_watchers
18 - :view_issue_watchers
19 - :add_issue_watchers
19 - :add_issue_watchers
20 - :manage_public_queries
20 - :manage_public_queries
21 - :save_queries
21 - :save_queries
22 - :view_gantt
22 - :view_gantt
23 - :view_calendar
23 - :view_calendar
24 - :log_time
24 - :log_time
25 - :view_time_entries
25 - :view_time_entries
26 - :edit_time_entries
26 - :edit_time_entries
27 - :delete_time_entries
27 - :delete_time_entries
28 - :manage_news
28 - :manage_news
29 - :comment_news
29 - :comment_news
30 - :view_documents
30 - :view_documents
31 - :manage_documents
31 - :manage_documents
32 - :view_wiki_pages
32 - :view_wiki_pages
33 - :view_wiki_edits
33 - :view_wiki_edits
34 - :edit_wiki_pages
34 - :edit_wiki_pages
35 - :delete_wiki_pages_attachments
35 - :protect_wiki_pages
36 - :protect_wiki_pages
36 - :delete_wiki_pages
37 - :delete_wiki_pages
37 - :rename_wiki_pages
38 - :rename_wiki_pages
38 - :add_messages
39 - :add_messages
39 - :edit_messages
40 - :edit_messages
40 - :delete_messages
41 - :delete_messages
41 - :manage_boards
42 - :manage_boards
42 - :view_files
43 - :view_files
43 - :manage_files
44 - :manage_files
44 - :browse_repository
45 - :browse_repository
45 - :view_changesets
46 - :view_changesets
46
47
47 position: 1
48 position: 1
48 roles_002:
49 roles_002:
49 name: Developer
50 name: Developer
50 id: 2
51 id: 2
51 builtin: 0
52 builtin: 0
52 permissions: |
53 permissions: |
53 ---
54 ---
54 - :edit_project
55 - :edit_project
55 - :manage_members
56 - :manage_members
56 - :manage_versions
57 - :manage_versions
57 - :manage_categories
58 - :manage_categories
58 - :add_issues
59 - :add_issues
59 - :edit_issues
60 - :edit_issues
60 - :manage_issue_relations
61 - :manage_issue_relations
61 - :add_issue_notes
62 - :add_issue_notes
62 - :move_issues
63 - :move_issues
63 - :delete_issues
64 - :delete_issues
64 - :view_issue_watchers
65 - :view_issue_watchers
65 - :save_queries
66 - :save_queries
66 - :view_gantt
67 - :view_gantt
67 - :view_calendar
68 - :view_calendar
68 - :log_time
69 - :log_time
69 - :view_time_entries
70 - :view_time_entries
70 - :edit_own_time_entries
71 - :edit_own_time_entries
71 - :manage_news
72 - :manage_news
72 - :comment_news
73 - :comment_news
73 - :view_documents
74 - :view_documents
74 - :manage_documents
75 - :manage_documents
75 - :view_wiki_pages
76 - :view_wiki_pages
76 - :view_wiki_edits
77 - :view_wiki_edits
77 - :edit_wiki_pages
78 - :edit_wiki_pages
78 - :protect_wiki_pages
79 - :protect_wiki_pages
79 - :delete_wiki_pages
80 - :delete_wiki_pages
80 - :add_messages
81 - :add_messages
81 - :manage_boards
82 - :manage_boards
82 - :view_files
83 - :view_files
83 - :manage_files
84 - :manage_files
84 - :browse_repository
85 - :browse_repository
85 - :view_changesets
86 - :view_changesets
86
87
87 position: 2
88 position: 2
88 roles_003:
89 roles_003:
89 name: Reporter
90 name: Reporter
90 id: 3
91 id: 3
91 builtin: 0
92 builtin: 0
92 permissions: |
93 permissions: |
93 ---
94 ---
94 - :edit_project
95 - :edit_project
95 - :manage_members
96 - :manage_members
96 - :manage_versions
97 - :manage_versions
97 - :manage_categories
98 - :manage_categories
98 - :add_issues
99 - :add_issues
99 - :edit_issues
100 - :edit_issues
100 - :manage_issue_relations
101 - :manage_issue_relations
101 - :add_issue_notes
102 - :add_issue_notes
102 - :move_issues
103 - :move_issues
103 - :view_issue_watchers
104 - :view_issue_watchers
104 - :save_queries
105 - :save_queries
105 - :view_gantt
106 - :view_gantt
106 - :view_calendar
107 - :view_calendar
107 - :log_time
108 - :log_time
108 - :view_time_entries
109 - :view_time_entries
109 - :manage_news
110 - :manage_news
110 - :comment_news
111 - :comment_news
111 - :view_documents
112 - :view_documents
112 - :manage_documents
113 - :manage_documents
113 - :view_wiki_pages
114 - :view_wiki_pages
114 - :view_wiki_edits
115 - :view_wiki_edits
115 - :edit_wiki_pages
116 - :edit_wiki_pages
116 - :delete_wiki_pages
117 - :delete_wiki_pages
117 - :add_messages
118 - :add_messages
118 - :manage_boards
119 - :manage_boards
119 - :view_files
120 - :view_files
120 - :manage_files
121 - :manage_files
121 - :browse_repository
122 - :browse_repository
122 - :view_changesets
123 - :view_changesets
123
124
124 position: 3
125 position: 3
125 roles_004:
126 roles_004:
126 name: Non member
127 name: Non member
127 id: 4
128 id: 4
128 builtin: 1
129 builtin: 1
129 permissions: |
130 permissions: |
130 ---
131 ---
131 - :add_issues
132 - :add_issues
132 - :edit_issues
133 - :edit_issues
133 - :manage_issue_relations
134 - :manage_issue_relations
134 - :add_issue_notes
135 - :add_issue_notes
135 - :move_issues
136 - :move_issues
136 - :save_queries
137 - :save_queries
137 - :view_gantt
138 - :view_gantt
138 - :view_calendar
139 - :view_calendar
139 - :log_time
140 - :log_time
140 - :view_time_entries
141 - :view_time_entries
141 - :comment_news
142 - :comment_news
142 - :view_documents
143 - :view_documents
143 - :manage_documents
144 - :manage_documents
144 - :view_wiki_pages
145 - :view_wiki_pages
145 - :view_wiki_edits
146 - :view_wiki_edits
146 - :edit_wiki_pages
147 - :edit_wiki_pages
147 - :add_messages
148 - :add_messages
148 - :view_files
149 - :view_files
149 - :manage_files
150 - :manage_files
150 - :browse_repository
151 - :browse_repository
151 - :view_changesets
152 - :view_changesets
152
153
153 position: 4
154 position: 4
154 roles_005:
155 roles_005:
155 name: Anonymous
156 name: Anonymous
156 id: 5
157 id: 5
157 builtin: 2
158 builtin: 2
158 permissions: |
159 permissions: |
159 ---
160 ---
160 - :add_issue_notes
161 - :add_issue_notes
161 - :view_gantt
162 - :view_gantt
162 - :view_calendar
163 - :view_calendar
163 - :view_time_entries
164 - :view_time_entries
164 - :view_documents
165 - :view_documents
165 - :view_wiki_pages
166 - :view_wiki_pages
166 - :view_wiki_edits
167 - :view_wiki_edits
167 - :view_files
168 - :view_files
168 - :browse_repository
169 - :browse_repository
169 - :view_changesets
170 - :view_changesets
170
171
171 position: 5
172 position: 5
172 No newline at end of file
173
@@ -1,254 +1,261
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 'wiki_controller'
19 require 'wiki_controller'
20
20
21 # Re-raise errors caught by the controller.
21 # Re-raise errors caught by the controller.
22 class WikiController; def rescue_action(e) raise e end; end
22 class WikiController; def rescue_action(e) raise e end; end
23
23
24 class WikiControllerTest < Test::Unit::TestCase
24 class WikiControllerTest < Test::Unit::TestCase
25 fixtures :projects, :users, :roles, :members, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
25 fixtures :projects, :users, :roles, :members, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
26
26
27 def setup
27 def setup
28 @controller = WikiController.new
28 @controller = WikiController.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_show_start_page
34 def test_show_start_page
35 get :index, :id => 'ecookbook'
35 get :index, :id => 'ecookbook'
36 assert_response :success
36 assert_response :success
37 assert_template 'show'
37 assert_template 'show'
38 assert_tag :tag => 'h1', :content => /CookBook documentation/
38 assert_tag :tag => 'h1', :content => /CookBook documentation/
39
39
40 # child_pages macro
40 # child_pages macro
41 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
41 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
42 :child => { :tag => 'li',
42 :child => { :tag => 'li',
43 :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
43 :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
44 :content => 'Page with an inline image' } }
44 :content => 'Page with an inline image' } }
45 end
45 end
46
46
47 def test_show_page_with_name
47 def test_show_page_with_name
48 get :index, :id => 1, :page => 'Another_page'
48 get :index, :id => 1, :page => 'Another_page'
49 assert_response :success
49 assert_response :success
50 assert_template 'show'
50 assert_template 'show'
51 assert_tag :tag => 'h1', :content => /Another page/
51 assert_tag :tag => 'h1', :content => /Another page/
52 # Included page with an inline image
52 # Included page with an inline image
53 assert_tag :tag => 'p', :content => /This is an inline image/
53 assert_tag :tag => 'p', :content => /This is an inline image/
54 assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
54 assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
55 :alt => 'This is a logo' }
55 :alt => 'This is a logo' }
56 end
56 end
57
57
58 def test_show_unexistent_page_without_edit_right
58 def test_show_unexistent_page_without_edit_right
59 get :index, :id => 1, :page => 'Unexistent page'
59 get :index, :id => 1, :page => 'Unexistent page'
60 assert_response 404
60 assert_response 404
61 end
61 end
62
62
63 def test_show_unexistent_page_with_edit_right
63 def test_show_unexistent_page_with_edit_right
64 @request.session[:user_id] = 2
64 @request.session[:user_id] = 2
65 get :index, :id => 1, :page => 'Unexistent page'
65 get :index, :id => 1, :page => 'Unexistent page'
66 assert_response :success
66 assert_response :success
67 assert_template 'edit'
67 assert_template 'edit'
68 end
68 end
69
69
70 def test_create_page
70 def test_create_page
71 @request.session[:user_id] = 2
71 @request.session[:user_id] = 2
72 post :edit, :id => 1,
72 post :edit, :id => 1,
73 :page => 'New page',
73 :page => 'New page',
74 :content => {:comments => 'Created the page',
74 :content => {:comments => 'Created the page',
75 :text => "h1. New page\n\nThis is a new page",
75 :text => "h1. New page\n\nThis is a new page",
76 :version => 0}
76 :version => 0}
77 assert_redirected_to 'wiki/ecookbook/New_page'
77 assert_redirected_to 'wiki/ecookbook/New_page'
78 page = Project.find(1).wiki.find_page('New page')
78 page = Project.find(1).wiki.find_page('New page')
79 assert !page.new_record?
79 assert !page.new_record?
80 assert_not_nil page.content
80 assert_not_nil page.content
81 assert_equal 'Created the page', page.content.comments
81 assert_equal 'Created the page', page.content.comments
82 end
82 end
83
83
84 def test_preview
84 def test_preview
85 @request.session[:user_id] = 2
85 @request.session[:user_id] = 2
86 xhr :post, :preview, :id => 1, :page => 'CookBook_documentation',
86 xhr :post, :preview, :id => 1, :page => 'CookBook_documentation',
87 :content => { :comments => '',
87 :content => { :comments => '',
88 :text => 'this is a *previewed text*',
88 :text => 'this is a *previewed text*',
89 :version => 3 }
89 :version => 3 }
90 assert_response :success
90 assert_response :success
91 assert_template 'common/_preview'
91 assert_template 'common/_preview'
92 assert_tag :tag => 'strong', :content => /previewed text/
92 assert_tag :tag => 'strong', :content => /previewed text/
93 end
93 end
94
94
95 def test_preview_new_page
95 def test_preview_new_page
96 @request.session[:user_id] = 2
96 @request.session[:user_id] = 2
97 xhr :post, :preview, :id => 1, :page => 'New page',
97 xhr :post, :preview, :id => 1, :page => 'New page',
98 :content => { :text => 'h1. New page',
98 :content => { :text => 'h1. New page',
99 :comments => '',
99 :comments => '',
100 :version => 0 }
100 :version => 0 }
101 assert_response :success
101 assert_response :success
102 assert_template 'common/_preview'
102 assert_template 'common/_preview'
103 assert_tag :tag => 'h1', :content => /New page/
103 assert_tag :tag => 'h1', :content => /New page/
104 end
104 end
105
105
106 def test_history
106 def test_history
107 get :history, :id => 1, :page => 'CookBook_documentation'
107 get :history, :id => 1, :page => 'CookBook_documentation'
108 assert_response :success
108 assert_response :success
109 assert_template 'history'
109 assert_template 'history'
110 assert_not_nil assigns(:versions)
110 assert_not_nil assigns(:versions)
111 assert_equal 3, assigns(:versions).size
111 assert_equal 3, assigns(:versions).size
112 assert_select "input[type=submit][name=commit]"
112 assert_select "input[type=submit][name=commit]"
113 end
113 end
114
114
115 def test_history_with_one_version
115 def test_history_with_one_version
116 get :history, :id => 1, :page => 'Another_page'
116 get :history, :id => 1, :page => 'Another_page'
117 assert_response :success
117 assert_response :success
118 assert_template 'history'
118 assert_template 'history'
119 assert_not_nil assigns(:versions)
119 assert_not_nil assigns(:versions)
120 assert_equal 1, assigns(:versions).size
120 assert_equal 1, assigns(:versions).size
121 assert_select "input[type=submit][name=commit]", false
121 assert_select "input[type=submit][name=commit]", false
122 end
122 end
123
123
124 def test_diff
124 def test_diff
125 get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1
125 get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1
126 assert_response :success
126 assert_response :success
127 assert_template 'diff'
127 assert_template 'diff'
128 assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
128 assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
129 :content => /updated/
129 :content => /updated/
130 end
130 end
131
131
132 def test_annotate
132 def test_annotate
133 get :annotate, :id => 1, :page => 'CookBook_documentation', :version => 2
133 get :annotate, :id => 1, :page => 'CookBook_documentation', :version => 2
134 assert_response :success
134 assert_response :success
135 assert_template 'annotate'
135 assert_template 'annotate'
136 # Line 1
136 # Line 1
137 assert_tag :tag => 'tr', :child => { :tag => 'th', :attributes => {:class => 'line-num'}, :content => '1' },
137 assert_tag :tag => 'tr', :child => { :tag => 'th', :attributes => {:class => 'line-num'}, :content => '1' },
138 :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /John Smith/ },
138 :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /John Smith/ },
139 :child => { :tag => 'td', :content => /h1\. CookBook documentation/ }
139 :child => { :tag => 'td', :content => /h1\. CookBook documentation/ }
140 # Line 2
140 # Line 2
141 assert_tag :tag => 'tr', :child => { :tag => 'th', :attributes => {:class => 'line-num'}, :content => '2' },
141 assert_tag :tag => 'tr', :child => { :tag => 'th', :attributes => {:class => 'line-num'}, :content => '2' },
142 :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ },
142 :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ },
143 :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ }
143 :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ }
144 end
144 end
145
145
146 def test_rename_with_redirect
146 def test_rename_with_redirect
147 @request.session[:user_id] = 2
147 @request.session[:user_id] = 2
148 post :rename, :id => 1, :page => 'Another_page',
148 post :rename, :id => 1, :page => 'Another_page',
149 :wiki_page => { :title => 'Another renamed page',
149 :wiki_page => { :title => 'Another renamed page',
150 :redirect_existing_links => 1 }
150 :redirect_existing_links => 1 }
151 assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
151 assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
152 wiki = Project.find(1).wiki
152 wiki = Project.find(1).wiki
153 # Check redirects
153 # Check redirects
154 assert_not_nil wiki.find_page('Another page')
154 assert_not_nil wiki.find_page('Another page')
155 assert_nil wiki.find_page('Another page', :with_redirect => false)
155 assert_nil wiki.find_page('Another page', :with_redirect => false)
156 end
156 end
157
157
158 def test_rename_without_redirect
158 def test_rename_without_redirect
159 @request.session[:user_id] = 2
159 @request.session[:user_id] = 2
160 post :rename, :id => 1, :page => 'Another_page',
160 post :rename, :id => 1, :page => 'Another_page',
161 :wiki_page => { :title => 'Another renamed page',
161 :wiki_page => { :title => 'Another renamed page',
162 :redirect_existing_links => "0" }
162 :redirect_existing_links => "0" }
163 assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
163 assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
164 wiki = Project.find(1).wiki
164 wiki = Project.find(1).wiki
165 # Check that there's no redirects
165 # Check that there's no redirects
166 assert_nil wiki.find_page('Another page')
166 assert_nil wiki.find_page('Another page')
167 end
167 end
168
168
169 def test_destroy
169 def test_destroy
170 @request.session[:user_id] = 2
170 @request.session[:user_id] = 2
171 post :destroy, :id => 1, :page => 'CookBook_documentation'
171 post :destroy, :id => 1, :page => 'CookBook_documentation'
172 assert_redirected_to 'wiki/ecookbook/Page_index/special'
172 assert_redirected_to 'wiki/ecookbook/Page_index/special'
173 end
173 end
174
174
175 def test_page_index
175 def test_page_index
176 get :special, :id => 'ecookbook', :page => 'Page_index'
176 get :special, :id => 'ecookbook', :page => 'Page_index'
177 assert_response :success
177 assert_response :success
178 assert_template 'special_page_index'
178 assert_template 'special_page_index'
179 pages = assigns(:pages)
179 pages = assigns(:pages)
180 assert_not_nil pages
180 assert_not_nil pages
181 assert_equal Project.find(1).wiki.pages.size, pages.size
181 assert_equal Project.find(1).wiki.pages.size, pages.size
182
182
183 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
183 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
184 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/CookBook_documentation' },
184 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/CookBook_documentation' },
185 :content => 'CookBook documentation' },
185 :content => 'CookBook documentation' },
186 :child => { :tag => 'ul',
186 :child => { :tag => 'ul',
187 :child => { :tag => 'li',
187 :child => { :tag => 'li',
188 :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
188 :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
189 :content => 'Page with an inline image' } } } },
189 :content => 'Page with an inline image' } } } },
190 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Another_page' },
190 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Another_page' },
191 :content => 'Another page' } }
191 :content => 'Another page' } }
192 end
192 end
193
193
194 def test_not_found
194 def test_not_found
195 get :index, :id => 999
195 get :index, :id => 999
196 assert_response 404
196 assert_response 404
197 end
197 end
198
198
199 def test_protect_page
199 def test_protect_page
200 page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
200 page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
201 assert !page.protected?
201 assert !page.protected?
202 @request.session[:user_id] = 2
202 @request.session[:user_id] = 2
203 post :protect, :id => 1, :page => page.title, :protected => '1'
203 post :protect, :id => 1, :page => page.title, :protected => '1'
204 assert_redirected_to 'wiki/ecookbook/Another_page'
204 assert_redirected_to 'wiki/ecookbook/Another_page'
205 assert page.reload.protected?
205 assert page.reload.protected?
206 end
206 end
207
207
208 def test_unprotect_page
208 def test_unprotect_page
209 page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
209 page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
210 assert page.protected?
210 assert page.protected?
211 @request.session[:user_id] = 2
211 @request.session[:user_id] = 2
212 post :protect, :id => 1, :page => page.title, :protected => '0'
212 post :protect, :id => 1, :page => page.title, :protected => '0'
213 assert_redirected_to 'wiki/ecookbook'
213 assert_redirected_to 'wiki/ecookbook'
214 assert !page.reload.protected?
214 assert !page.reload.protected?
215 end
215 end
216
216
217 def test_show_page_with_edit_link
217 def test_show_page_with_edit_link
218 @request.session[:user_id] = 2
218 @request.session[:user_id] = 2
219 get :index, :id => 1
219 get :index, :id => 1
220 assert_response :success
220 assert_response :success
221 assert_template 'show'
221 assert_template 'show'
222 assert_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation/edit' }
222 assert_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation/edit' }
223 end
223 end
224
224
225 def test_show_page_without_edit_link
225 def test_show_page_without_edit_link
226 @request.session[:user_id] = 4
226 @request.session[:user_id] = 4
227 get :index, :id => 1
227 get :index, :id => 1
228 assert_response :success
228 assert_response :success
229 assert_template 'show'
229 assert_template 'show'
230 assert_no_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation/edit' }
230 assert_no_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation/edit' }
231 end
231 end
232
232
233 def test_edit_unprotected_page
233 def test_edit_unprotected_page
234 # Non members can edit unprotected wiki pages
234 # Non members can edit unprotected wiki pages
235 @request.session[:user_id] = 4
235 @request.session[:user_id] = 4
236 get :edit, :id => 1, :page => 'Another_page'
236 get :edit, :id => 1, :page => 'Another_page'
237 assert_response :success
237 assert_response :success
238 assert_template 'edit'
238 assert_template 'edit'
239 end
239 end
240
240
241 def test_edit_protected_page_by_nonmember
241 def test_edit_protected_page_by_nonmember
242 # Non members can't edit protected wiki pages
242 # Non members can't edit protected wiki pages
243 @request.session[:user_id] = 4
243 @request.session[:user_id] = 4
244 get :edit, :id => 1, :page => 'CookBook_documentation'
244 get :edit, :id => 1, :page => 'CookBook_documentation'
245 assert_response 403
245 assert_response 403
246 end
246 end
247
247
248 def test_edit_protected_page_by_member
248 def test_edit_protected_page_by_member
249 @request.session[:user_id] = 2
249 @request.session[:user_id] = 2
250 get :edit, :id => 1, :page => 'CookBook_documentation'
250 get :edit, :id => 1, :page => 'CookBook_documentation'
251 assert_response :success
251 assert_response :success
252 assert_template 'edit'
252 assert_template 'edit'
253 end
253 end
254
255 def test_destroy_attachment
256 @request.session[:user_id] = 2
257 assert_difference 'Attachment.count', -1 do
258 post :destroy_attachment, :id => 1, :page => 'Page_with_an_inline_image', :attachment_id => 3
259 end
260 end
254 end
261 end
General Comments 0
You need to be logged in to leave comments. Login now