Chris@0
|
1 # redMine - project management software
|
Chris@0
|
2 # Copyright (C) 2006-2007 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@0
|
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@0
|
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@0
|
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@0
|
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@0
|
40
|
Chris@0
|
41 Role.transaction do
|
Chris@0
|
42 # Roles
|
Chris@0
|
43 manager = Role.create! :name => l(:default_role_manager),
|
Chris@0
|
44 :position => 1
|
Chris@0
|
45 manager.permissions = manager.setable_permissions.collect {|p| p.name}
|
Chris@0
|
46 manager.save!
|
Chris@0
|
47
|
Chris@0
|
48 developer = Role.create! :name => l(:default_role_developer),
|
Chris@0
|
49 :position => 2,
|
Chris@0
|
50 :permissions => [:manage_versions,
|
Chris@0
|
51 :manage_categories,
|
Chris@0
|
52 :view_issues,
|
Chris@0
|
53 :add_issues,
|
Chris@0
|
54 :edit_issues,
|
Chris@0
|
55 :manage_issue_relations,
|
Chris@0
|
56 :manage_subtasks,
|
Chris@0
|
57 :add_issue_notes,
|
Chris@0
|
58 :save_queries,
|
Chris@0
|
59 :view_gantt,
|
Chris@0
|
60 :view_calendar,
|
Chris@0
|
61 :log_time,
|
Chris@0
|
62 :view_time_entries,
|
Chris@0
|
63 :comment_news,
|
Chris@0
|
64 :view_documents,
|
Chris@0
|
65 :view_wiki_pages,
|
Chris@0
|
66 :view_wiki_edits,
|
Chris@0
|
67 :edit_wiki_pages,
|
Chris@0
|
68 :delete_wiki_pages,
|
Chris@0
|
69 :add_messages,
|
Chris@0
|
70 :edit_own_messages,
|
Chris@0
|
71 :view_files,
|
Chris@0
|
72 :manage_files,
|
Chris@0
|
73 :browse_repository,
|
Chris@0
|
74 :view_changesets,
|
Chris@0
|
75 :commit_access]
|
Chris@0
|
76
|
Chris@0
|
77 reporter = Role.create! :name => l(:default_role_reporter),
|
Chris@0
|
78 :position => 3,
|
Chris@0
|
79 :permissions => [:view_issues,
|
Chris@0
|
80 :add_issues,
|
Chris@0
|
81 :add_issue_notes,
|
Chris@0
|
82 :save_queries,
|
Chris@0
|
83 :view_gantt,
|
Chris@0
|
84 :view_calendar,
|
Chris@0
|
85 :log_time,
|
Chris@0
|
86 :view_time_entries,
|
Chris@0
|
87 :comment_news,
|
Chris@0
|
88 :view_documents,
|
Chris@0
|
89 :view_wiki_pages,
|
Chris@0
|
90 :view_wiki_edits,
|
Chris@0
|
91 :add_messages,
|
Chris@0
|
92 :edit_own_messages,
|
Chris@0
|
93 :view_files,
|
Chris@0
|
94 :browse_repository,
|
Chris@0
|
95 :view_changesets]
|
Chris@0
|
96
|
Chris@0
|
97 Role.non_member.update_attribute :permissions, [:view_issues,
|
Chris@0
|
98 :add_issues,
|
Chris@0
|
99 :add_issue_notes,
|
Chris@0
|
100 :save_queries,
|
Chris@0
|
101 :view_gantt,
|
Chris@0
|
102 :view_calendar,
|
Chris@0
|
103 :view_time_entries,
|
Chris@0
|
104 :comment_news,
|
Chris@0
|
105 :view_documents,
|
Chris@0
|
106 :view_wiki_pages,
|
Chris@0
|
107 :view_wiki_edits,
|
Chris@0
|
108 :add_messages,
|
Chris@0
|
109 :view_files,
|
Chris@0
|
110 :browse_repository,
|
Chris@0
|
111 :view_changesets]
|
Chris@0
|
112
|
Chris@0
|
113 Role.anonymous.update_attribute :permissions, [:view_issues,
|
Chris@0
|
114 :view_gantt,
|
Chris@0
|
115 :view_calendar,
|
Chris@0
|
116 :view_time_entries,
|
Chris@0
|
117 :view_documents,
|
Chris@0
|
118 :view_wiki_pages,
|
Chris@0
|
119 :view_wiki_edits,
|
Chris@0
|
120 :view_files,
|
Chris@0
|
121 :browse_repository,
|
Chris@0
|
122 :view_changesets]
|
Chris@0
|
123
|
Chris@0
|
124 # Trackers
|
Chris@0
|
125 Tracker.create!(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1)
|
Chris@0
|
126 Tracker.create!(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2)
|
Chris@0
|
127 Tracker.create!(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3)
|
Chris@0
|
128
|
Chris@0
|
129 # Issue statuses
|
Chris@0
|
130 new = IssueStatus.create!(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1)
|
Chris@0
|
131 in_progress = IssueStatus.create!(:name => l(:default_issue_status_in_progress), :is_closed => false, :is_default => false, :position => 2)
|
Chris@0
|
132 resolved = IssueStatus.create!(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3)
|
Chris@0
|
133 feedback = IssueStatus.create!(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4)
|
Chris@0
|
134 closed = IssueStatus.create!(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5)
|
Chris@0
|
135 rejected = IssueStatus.create!(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6)
|
Chris@0
|
136
|
Chris@0
|
137 # Workflow
|
Chris@0
|
138 Tracker.find(:all).each { |t|
|
Chris@0
|
139 IssueStatus.find(:all).each { |os|
|
Chris@0
|
140 IssueStatus.find(:all).each { |ns|
|
Chris@0
|
141 Workflow.create!(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
Chris@0
|
142 }
|
Chris@0
|
143 }
|
Chris@0
|
144 }
|
Chris@0
|
145
|
Chris@0
|
146 Tracker.find(:all).each { |t|
|
Chris@0
|
147 [new, in_progress, resolved, feedback].each { |os|
|
Chris@0
|
148 [in_progress, resolved, feedback, closed].each { |ns|
|
Chris@0
|
149 Workflow.create!(:tracker_id => t.id, :role_id => developer.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
Chris@0
|
150 }
|
Chris@0
|
151 }
|
Chris@0
|
152 }
|
Chris@0
|
153
|
Chris@0
|
154 Tracker.find(:all).each { |t|
|
Chris@0
|
155 [new, in_progress, resolved, feedback].each { |os|
|
Chris@0
|
156 [closed].each { |ns|
|
Chris@0
|
157 Workflow.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
Chris@0
|
158 }
|
Chris@0
|
159 }
|
Chris@0
|
160 Workflow.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
|
Chris@0
|
161 }
|
Chris@0
|
162
|
Chris@0
|
163 # Enumerations
|
Chris@0
|
164 DocumentCategory.create!(:name => l(:default_doc_category_user), :position => 1)
|
Chris@0
|
165 DocumentCategory.create!(:name => l(:default_doc_category_tech), :position => 2)
|
Chris@0
|
166
|
Chris@0
|
167 IssuePriority.create!(:name => l(:default_priority_low), :position => 1)
|
Chris@0
|
168 IssuePriority.create!(:name => l(:default_priority_normal), :position => 2, :is_default => true)
|
Chris@0
|
169 IssuePriority.create!(:name => l(:default_priority_high), :position => 3)
|
Chris@0
|
170 IssuePriority.create!(:name => l(:default_priority_urgent), :position => 4)
|
Chris@0
|
171 IssuePriority.create!(:name => l(:default_priority_immediate), :position => 5)
|
Chris@0
|
172
|
Chris@0
|
173 TimeEntryActivity.create!(:name => l(:default_activity_design), :position => 1)
|
Chris@0
|
174 TimeEntryActivity.create!(:name => l(:default_activity_development), :position => 2)
|
Chris@0
|
175 end
|
Chris@0
|
176 true
|
Chris@0
|
177 end
|
Chris@0
|
178 end
|
Chris@0
|
179 end
|
Chris@0
|
180 end
|
Chris@0
|
181 end
|