Chris@441
|
1 # Redmine - project management software
|
Chris@1115
|
2 # Copyright (C) 2006-2012 Jean-Philippe Lang
|
Chris@0
|
3 #
|
Chris@0
|
4 # This program is free software; you can redistribute it and/or
|
Chris@0
|
5 # modify it under the terms of the GNU General Public License
|
Chris@0
|
6 # as published by the Free Software Foundation; either version 2
|
Chris@0
|
7 # of the License, or (at your option) any later version.
|
Chris@909
|
8 #
|
Chris@0
|
9 # This program is distributed in the hope that it will be useful,
|
Chris@0
|
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Chris@0
|
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Chris@0
|
12 # GNU General Public License for more details.
|
Chris@909
|
13 #
|
Chris@0
|
14 # You should have received a copy of the GNU General Public License
|
Chris@0
|
15 # along with this program; if not, write to the Free Software
|
Chris@0
|
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
Chris@0
|
17
|
Chris@0
|
18 module Redmine
|
Chris@0
|
19 module DefaultData
|
Chris@0
|
20 class DataAlreadyLoaded < Exception; end
|
Chris@0
|
21
|
Chris@0
|
22 module Loader
|
Chris@0
|
23 include Redmine::I18n
|
Chris@909
|
24
|
Chris@0
|
25 class << self
|
Chris@0
|
26 # Returns true if no data is already loaded in the database
|
Chris@0
|
27 # otherwise false
|
Chris@0
|
28 def no_data?
|
Chris@0
|
29 !Role.find(:first, :conditions => {:builtin => 0}) &&
|
Chris@0
|
30 !Tracker.find(:first) &&
|
Chris@0
|
31 !IssueStatus.find(:first) &&
|
Chris@0
|
32 !Enumeration.find(:first)
|
Chris@0
|
33 end
|
Chris@909
|
34
|
Chris@0
|
35 # Loads the default data
|
Chris@0
|
36 # Raises a RecordNotSaved exception if something goes wrong
|
Chris@0
|
37 def load(lang=nil)
|
Chris@0
|
38 raise DataAlreadyLoaded.new("Some configuration data is already loaded.") unless no_data?
|
Chris@0
|
39 set_language_if_valid(lang)
|
Chris@909
|
40
|
Chris@0
|
41 Role.transaction do
|
Chris@0
|
42 # Roles
|
Chris@909
|
43 manager = Role.create! :name => l(:default_role_manager),
|
Chris@441
|
44 :issues_visibility => 'all',
|
Chris@0
|
45 :position => 1
|
Chris@0
|
46 manager.permissions = manager.setable_permissions.collect {|p| p.name}
|
Chris@0
|
47 manager.save!
|
Chris@909
|
48
|
Chris@909
|
49 developer = Role.create! :name => l(:default_role_developer),
|
Chris@909
|
50 :position => 2,
|
Chris@909
|
51 :permissions => [:manage_versions,
|
Chris@0
|
52 :manage_categories,
|
Chris@0
|
53 :view_issues,
|
Chris@0
|
54 :add_issues,
|
Chris@0
|
55 :edit_issues,
|
Chris@1115
|
56 :view_private_notes,
|
Chris@1115
|
57 :set_notes_private,
|
Chris@0
|
58 :manage_issue_relations,
|
Chris@0
|
59 :manage_subtasks,
|
Chris@0
|
60 :add_issue_notes,
|
Chris@0
|
61 :save_queries,
|
Chris@0
|
62 :view_gantt,
|
Chris@0
|
63 :view_calendar,
|
Chris@0
|
64 :log_time,
|
Chris@0
|
65 :view_time_entries,
|
Chris@0
|
66 :comment_news,
|
Chris@0
|
67 :view_documents,
|
Chris@0
|
68 :view_wiki_pages,
|
Chris@0
|
69 :view_wiki_edits,
|
Chris@0
|
70 :edit_wiki_pages,
|
Chris@0
|
71 :delete_wiki_pages,
|
Chris@0
|
72 :add_messages,
|
Chris@0
|
73 :edit_own_messages,
|
Chris@0
|
74 :view_files,
|
Chris@0
|
75 :manage_files,
|
Chris@0
|
76 :browse_repository,
|
Chris@0
|
77 :view_changesets,
|
Chris@1115
|
78 :commit_access,
|
Chris@1115
|
79 :manage_related_issues]
|
Chris@909
|
80
|
Chris@0
|
81 reporter = Role.create! :name => l(:default_role_reporter),
|
Chris@0
|
82 :position => 3,
|
Chris@0
|
83 :permissions => [:view_issues,
|
Chris@0
|
84 :add_issues,
|
Chris@0
|
85 :add_issue_notes,
|
Chris@0
|
86 :save_queries,
|
Chris@0
|
87 :view_gantt,
|
Chris@0
|
88 :view_calendar,
|
Chris@0
|
89 :log_time,
|
Chris@0
|
90 :view_time_entries,
|
Chris@0
|
91 :comment_news,
|
Chris@0
|
92 :view_documents,
|
Chris@0
|
93 :view_wiki_pages,
|
Chris@0
|
94 :view_wiki_edits,
|
Chris@0
|
95 :add_messages,
|
Chris@0
|
96 :edit_own_messages,
|
Chris@0
|
97 :view_files,
|
Chris@0
|
98 :browse_repository,
|
Chris@0
|
99 :view_changesets]
|
Chris@909
|
100
|
Chris@0
|
101 Role.non_member.update_attribute :permissions, [:view_issues,
|
Chris@0
|
102 :add_issues,
|
Chris@0
|
103 :add_issue_notes,
|
Chris@0
|
104 :save_queries,
|
Chris@0
|
105 :view_gantt,
|
Chris@0
|
106 :view_calendar,
|
Chris@0
|
107 :view_time_entries,
|
Chris@0
|
108 :comment_news,
|
Chris@0
|
109 :view_documents,
|
Chris@0
|
110 :view_wiki_pages,
|
Chris@0
|
111 :view_wiki_edits,
|
Chris@0
|
112 :add_messages,
|
Chris@0
|
113 :view_files,
|
Chris@0
|
114 :browse_repository,
|
Chris@0
|
115 :view_changesets]
|
Chris@909
|
116
|
Chris@0
|
117 Role.anonymous.update_attribute :permissions, [:view_issues,
|
Chris@0
|
118 :view_gantt,
|
Chris@0
|
119 :view_calendar,
|
Chris@0
|
120 :view_time_entries,
|
Chris@0
|
121 :view_documents,
|
Chris@0
|
122 :view_wiki_pages,
|
Chris@0
|
123 :view_wiki_edits,
|
Chris@0
|
124 :view_files,
|
Chris@0
|
125 :browse_repository,
|
Chris@0
|
126 :view_changesets]
|
Chris@909
|
127
|
Chris@0
|
128 # Trackers
|
Chris@0
|
129 Tracker.create!(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1)
|
Chris@0
|
130 Tracker.create!(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2)
|
Chris@0
|
131 Tracker.create!(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3)
|
Chris@909
|
132
|
Chris@0
|
133 # Issue statuses
|
Chris@0
|
134 new = IssueStatus.create!(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1)
|
Chris@0
|
135 in_progress = IssueStatus.create!(:name => l(:default_issue_status_in_progress), :is_closed => false, :is_default => false, :position => 2)
|
Chris@0
|
136 resolved = IssueStatus.create!(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3)
|
Chris@0
|
137 feedback = IssueStatus.create!(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4)
|
Chris@0
|
138 closed = IssueStatus.create!(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5)
|
Chris@0
|
139 rejected = IssueStatus.create!(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6)
|
Chris@909
|
140
|
Chris@0
|
141 # Workflow
|
Chris@0
|
142 Tracker.find(:all).each { |t|
|
Chris@0
|
143 IssueStatus.find(:all).each { |os|
|
Chris@0
|
144 IssueStatus.find(:all).each { |ns|
|
Chris@1115
|
145 WorkflowTransition.create!(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
Chris@909
|
146 }
|
Chris@909
|
147 }
|
Chris@0
|
148 }
|
Chris@909
|
149
|
Chris@0
|
150 Tracker.find(:all).each { |t|
|
Chris@0
|
151 [new, in_progress, resolved, feedback].each { |os|
|
Chris@0
|
152 [in_progress, resolved, feedback, closed].each { |ns|
|
Chris@1115
|
153 WorkflowTransition.create!(:tracker_id => t.id, :role_id => developer.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
Chris@909
|
154 }
|
Chris@909
|
155 }
|
Chris@0
|
156 }
|
Chris@909
|
157
|
Chris@0
|
158 Tracker.find(:all).each { |t|
|
Chris@0
|
159 [new, in_progress, resolved, feedback].each { |os|
|
Chris@0
|
160 [closed].each { |ns|
|
Chris@1115
|
161 WorkflowTransition.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
Chris@909
|
162 }
|
Chris@0
|
163 }
|
Chris@1115
|
164 WorkflowTransition.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
|
Chris@0
|
165 }
|
Chris@909
|
166
|
Chris@0
|
167 # Enumerations
|
Chris@0
|
168 IssuePriority.create!(:name => l(:default_priority_low), :position => 1)
|
Chris@0
|
169 IssuePriority.create!(:name => l(:default_priority_normal), :position => 2, :is_default => true)
|
Chris@0
|
170 IssuePriority.create!(:name => l(:default_priority_high), :position => 3)
|
Chris@0
|
171 IssuePriority.create!(:name => l(:default_priority_urgent), :position => 4)
|
Chris@0
|
172 IssuePriority.create!(:name => l(:default_priority_immediate), :position => 5)
|
Chris@909
|
173
|
Chris@1115
|
174 DocumentCategory.create!(:name => l(:default_doc_category_user), :position => 1)
|
Chris@1115
|
175 DocumentCategory.create!(:name => l(:default_doc_category_tech), :position => 2)
|
Chris@1115
|
176
|
Chris@0
|
177 TimeEntryActivity.create!(:name => l(:default_activity_design), :position => 1)
|
Chris@0
|
178 TimeEntryActivity.create!(:name => l(:default_activity_development), :position => 2)
|
Chris@0
|
179 end
|
Chris@0
|
180 true
|
Chris@0
|
181 end
|
Chris@0
|
182 end
|
Chris@0
|
183 end
|
Chris@0
|
184 end
|
Chris@0
|
185 end
|