##// END OF EJS Templates
Moved redmine:load_default_data code to a module so that it can be called from the application....
Jean-Philippe Lang -
r1024:6ae87d7c4c10
parent child
Show More
@@ -0,0 +1,171
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
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
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 module Redmine
19 module DefaultData
20 class DataAlreadyLoaded < Exception; end
21
22 module Loader
23 include GLoc
24
25 class << self
26 # Returns true if no data is already loaded in the database
27 # otherwise false
28 def no_data?
29 !Role.find(:first, :conditions => {:builtin => 0}) &&
30 !Tracker.find(:first) &&
31 !IssueStatus.find(:first) &&
32 !Enumeration.find(:first)
33 end
34
35 # Loads the default data
36 # Raises a RecordNotSaved exception if something goes wrong
37 def load(lang=nil)
38 raise DataAlreadyLoaded.new("Some configuration data is already loaded.") unless no_data?
39 set_language_if_valid(lang)
40
41 # Roles
42 manager = Role.create! :name => l(:default_role_manager),
43 :position => 1
44 manager.permissions = manager.setable_permissions.collect {|p| p.name}
45 manager.save!
46
47 developper = Role.create! :name => l(:default_role_developper),
48 :position => 2,
49 :permissions => [:manage_versions,
50 :manage_categories,
51 :add_issues,
52 :edit_issues,
53 :manage_issue_relations,
54 :add_issue_notes,
55 :change_issue_status,
56 :save_queries,
57 :view_gantt,
58 :view_calendar,
59 :log_time,
60 :view_time_entries,
61 :comment_news,
62 :view_documents,
63 :view_wiki_pages,
64 :edit_wiki_pages,
65 :delete_wiki_pages,
66 :add_messages,
67 :view_files,
68 :manage_files,
69 :browse_repository,
70 :view_changesets]
71
72 reporter = Role.create! :name => l(:default_role_reporter),
73 :position => 3,
74 :permissions => [:add_issues,
75 :add_issue_notes,
76 :change_issue_status,
77 :save_queries,
78 :view_gantt,
79 :view_calendar,
80 :log_time,
81 :view_time_entries,
82 :comment_news,
83 :view_documents,
84 :view_wiki_pages,
85 :add_messages,
86 :view_files,
87 :browse_repository,
88 :view_changesets]
89
90 Role.non_member.update_attribute :permissions, [:add_issues,
91 :add_issue_notes,
92 :change_issue_status,
93 :save_queries,
94 :view_gantt,
95 :view_calendar,
96 :view_time_entries,
97 :comment_news,
98 :view_documents,
99 :view_wiki_pages,
100 :add_messages,
101 :view_files,
102 :browse_repository,
103 :view_changesets]
104
105 Role.anonymous.update_attribute :permissions, [:view_gantt,
106 :view_calendar,
107 :view_time_entries,
108 :view_documents,
109 :view_wiki_pages,
110 :view_files,
111 :browse_repository,
112 :view_changesets]
113
114 # Trackers
115 Tracker.create!(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1)
116 Tracker.create!(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2)
117 Tracker.create!(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3)
118
119 # Issue statuses
120 new = IssueStatus.create!(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1)
121 assigned = IssueStatus.create!(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :position => 2)
122 resolved = IssueStatus.create!(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3)
123 feedback = IssueStatus.create!(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4)
124 closed = IssueStatus.create!(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5)
125 rejected = IssueStatus.create!(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6)
126
127 # Workflow
128 Tracker.find(:all).each { |t|
129 IssueStatus.find(:all).each { |os|
130 IssueStatus.find(:all).each { |ns|
131 Workflow.create!(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
132 }
133 }
134 }
135
136 Tracker.find(:all).each { |t|
137 [new, assigned, resolved, feedback].each { |os|
138 [assigned, resolved, feedback, closed].each { |ns|
139 Workflow.create!(:tracker_id => t.id, :role_id => developper.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
140 }
141 }
142 }
143
144 Tracker.find(:all).each { |t|
145 [new, assigned, resolved, feedback].each { |os|
146 [closed].each { |ns|
147 Workflow.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
148 }
149 }
150 Workflow.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
151 }
152
153 # Enumerations
154 Enumeration.create!(:opt => "DCAT", :name => l(:default_doc_category_user), :position => 1)
155 Enumeration.create!(:opt => "DCAT", :name => l(:default_doc_category_tech), :position => 2)
156
157 Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_low), :position => 1)
158 Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_normal), :position => 2, :is_default => true)
159 Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_high), :position => 3)
160 Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_urgent), :position => 4)
161 Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_immediate), :position => 5)
162
163 Enumeration.create!(:opt => "ACTI", :name => l(:default_activity_design), :position => 1)
164 Enumeration.create!(:opt => "ACTI", :name => l(:default_activity_development), :position => 2)
165
166 true
167 end
168 end
169 end
170 end
171 end
@@ -19,150 +19,11 task :load_default_data => :environment do
19 puts "===================================="
19 puts "===================================="
20
20
21 begin
21 begin
22 # check that no data already exists
22 Redmine::DefaultData::Loader.load(current_language)
23 if Role.find(:first, :conditions => {:builtin => 0})
23 puts "Default configuration data loaded."
24 raise "Some roles are already defined."
25 end
26 if Tracker.find(:first)
27 raise "Some trackers are already defined."
28 end
29 if IssueStatus.find(:first)
30 raise "Some statuses are already defined."
31 end
32 if Enumeration.find(:first)
33 raise "Some enumerations are already defined."
34 end
35
36 puts "Loading default configuration data for language: #{current_language}"
37
38 # roles
39 manager = Role.create :name => l(:default_role_manager),
40 :position => 1
41 manager.permissions = manager.setable_permissions.collect {|p| p.name}
42 manager.save
43
44 developper = Role.create :name => l(:default_role_developper),
45 :position => 2,
46 :permissions => [:manage_versions,
47 :manage_categories,
48 :add_issues,
49 :edit_issues,
50 :manage_issue_relations,
51 :add_issue_notes,
52 :change_issue_status,
53 :save_queries,
54 :view_gantt,
55 :view_calendar,
56 :log_time,
57 :view_time_entries,
58 :comment_news,
59 :view_documents,
60 :view_wiki_pages,
61 :edit_wiki_pages,
62 :delete_wiki_pages,
63 :add_messages,
64 :view_files,
65 :manage_files,
66 :browse_repository,
67 :view_changesets]
68
69 reporter = Role.create :name => l(:default_role_reporter),
70 :position => 3,
71 :permissions => [:add_issues,
72 :add_issue_notes,
73 :change_issue_status,
74 :save_queries,
75 :view_gantt,
76 :view_calendar,
77 :log_time,
78 :view_time_entries,
79 :comment_news,
80 :view_documents,
81 :view_wiki_pages,
82 :add_messages,
83 :view_files,
84 :browse_repository,
85 :view_changesets]
86
87 Role.non_member.update_attribute :permissions, [:add_issues,
88 :add_issue_notes,
89 :change_issue_status,
90 :save_queries,
91 :view_gantt,
92 :view_calendar,
93 :view_time_entries,
94 :comment_news,
95 :view_documents,
96 :view_wiki_pages,
97 :add_messages,
98 :view_files,
99 :browse_repository,
100 :view_changesets]
101
102 Role.anonymous.update_attribute :permissions, [:view_gantt,
103 :view_calendar,
104 :view_time_entries,
105 :view_documents,
106 :view_wiki_pages,
107 :view_files,
108 :browse_repository,
109 :view_changesets]
110
111 # trackers
112 Tracker.create(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1)
113 Tracker.create(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2)
114 Tracker.create(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3)
115
116 # issue statuses
117 new = IssueStatus.create(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1)
118 assigned = IssueStatus.create(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :position => 2)
119 resolved = IssueStatus.create(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3)
120 feedback = IssueStatus.create(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4)
121 closed = IssueStatus.create(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5)
122 rejected = IssueStatus.create(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6)
123
124 # workflow
125 Tracker.find(:all).each { |t|
126 IssueStatus.find(:all).each { |os|
127 IssueStatus.find(:all).each { |ns|
128 Workflow.create(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
129 }
130 }
131 }
132
133 Tracker.find(:all).each { |t|
134 [new, assigned, resolved, feedback].each { |os|
135 [assigned, resolved, feedback, closed].each { |ns|
136 Workflow.create(:tracker_id => t.id, :role_id => developper.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
137 }
138 }
139 }
140
141 Tracker.find(:all).each { |t|
142 [new, assigned, resolved, feedback].each { |os|
143 [closed].each { |ns|
144 Workflow.create(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
145 }
146 }
147 Workflow.create(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
148 }
149
150 # enumerations
151 Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_user), :position => 1)
152 Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_tech), :position => 2)
153
154 Enumeration.create(:opt => "IPRI", :name => l(:default_priority_low), :position => 1)
155 Enumeration.create(:opt => "IPRI", :name => l(:default_priority_normal), :position => 2, :is_default => true)
156 Enumeration.create(:opt => "IPRI", :name => l(:default_priority_high), :position => 3)
157 Enumeration.create(:opt => "IPRI", :name => l(:default_priority_urgent), :position => 4)
158 Enumeration.create(:opt => "IPRI", :name => l(:default_priority_immediate), :position => 5)
159
160 Enumeration.create(:opt => "ACTI", :name => l(:default_activity_design), :position => 1)
161 Enumeration.create(:opt => "ACTI", :name => l(:default_activity_development), :position => 2)
162
163 rescue => error
24 rescue => error
164 puts "Error: " + error
25 puts "Error: " + error
165 puts "Default configuration data can't be loaded."
26 puts "Default configuration data was not loaded."
166 end
27 end
167 end
28 end
168 end
29 end
General Comments 0
You need to be logged in to leave comments. Login now