diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-01-04 18:27:05 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-01-04 18:27:05 +0000 |
commit | 6ae87d7c4c1070680720973dc912b96d438ad3fe (patch) | |
tree | 37ce4b82e078a8bdd11c2f4122a372ea03e18ef6 /lib | |
parent | 860ff9345fdd170a04201374150334d23d55634c (diff) | |
download | redmine-6ae87d7c4c1070680720973dc912b96d438ad3fe.tar.gz redmine-6ae87d7c4c1070680720973dc912b96d438ad3fe.zip |
Moved redmine:load_default_data code to a module so that it can be called from the application.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1037 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib')
-rw-r--r-- | lib/redmine/default_data/loader.rb | 171 | ||||
-rw-r--r-- | lib/tasks/load_default_data.rake | 185 |
2 files changed, 194 insertions, 162 deletions
diff --git a/lib/redmine/default_data/loader.rb b/lib/redmine/default_data/loader.rb new file mode 100644 index 000000000..105219104 --- /dev/null +++ b/lib/redmine/default_data/loader.rb @@ -0,0 +1,171 @@ +# redMine - project management software +# Copyright (C) 2006-2007 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +module Redmine + module DefaultData + class DataAlreadyLoaded < Exception; end + + module Loader + include GLoc + + class << self + # Returns true if no data is already loaded in the database + # otherwise false + def no_data? + !Role.find(:first, :conditions => {:builtin => 0}) && + !Tracker.find(:first) && + !IssueStatus.find(:first) && + !Enumeration.find(:first) + end + + # Loads the default data + # Raises a RecordNotSaved exception if something goes wrong + def load(lang=nil) + raise DataAlreadyLoaded.new("Some configuration data is already loaded.") unless no_data? + set_language_if_valid(lang) + + # Roles + manager = Role.create! :name => l(:default_role_manager), + :position => 1 + manager.permissions = manager.setable_permissions.collect {|p| p.name} + manager.save! + + developper = Role.create! :name => l(:default_role_developper), + :position => 2, + :permissions => [:manage_versions, + :manage_categories, + :add_issues, + :edit_issues, + :manage_issue_relations, + :add_issue_notes, + :change_issue_status, + :save_queries, + :view_gantt, + :view_calendar, + :log_time, + :view_time_entries, + :comment_news, + :view_documents, + :view_wiki_pages, + :edit_wiki_pages, + :delete_wiki_pages, + :add_messages, + :view_files, + :manage_files, + :browse_repository, + :view_changesets] + + reporter = Role.create! :name => l(:default_role_reporter), + :position => 3, + :permissions => [:add_issues, + :add_issue_notes, + :change_issue_status, + :save_queries, + :view_gantt, + :view_calendar, + :log_time, + :view_time_entries, + :comment_news, + :view_documents, + :view_wiki_pages, + :add_messages, + :view_files, + :browse_repository, + :view_changesets] + + Role.non_member.update_attribute :permissions, [:add_issues, + :add_issue_notes, + :change_issue_status, + :save_queries, + :view_gantt, + :view_calendar, + :view_time_entries, + :comment_news, + :view_documents, + :view_wiki_pages, + :add_messages, + :view_files, + :browse_repository, + :view_changesets] + + Role.anonymous.update_attribute :permissions, [:view_gantt, + :view_calendar, + :view_time_entries, + :view_documents, + :view_wiki_pages, + :view_files, + :browse_repository, + :view_changesets] + + # Trackers + Tracker.create!(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1) + Tracker.create!(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2) + Tracker.create!(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3) + + # Issue statuses + new = IssueStatus.create!(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1) + assigned = IssueStatus.create!(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :position => 2) + resolved = IssueStatus.create!(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3) + feedback = IssueStatus.create!(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4) + closed = IssueStatus.create!(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5) + rejected = IssueStatus.create!(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6) + + # Workflow + Tracker.find(:all).each { |t| + IssueStatus.find(:all).each { |os| + IssueStatus.find(:all).each { |ns| + Workflow.create!(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns + } + } + } + + Tracker.find(:all).each { |t| + [new, assigned, resolved, feedback].each { |os| + [assigned, resolved, feedback, closed].each { |ns| + Workflow.create!(:tracker_id => t.id, :role_id => developper.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns + } + } + } + + Tracker.find(:all).each { |t| + [new, assigned, resolved, feedback].each { |os| + [closed].each { |ns| + Workflow.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns + } + } + Workflow.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id) + } + + # Enumerations + Enumeration.create!(:opt => "DCAT", :name => l(:default_doc_category_user), :position => 1) + Enumeration.create!(:opt => "DCAT", :name => l(:default_doc_category_tech), :position => 2) + + Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_low), :position => 1) + Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_normal), :position => 2, :is_default => true) + Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_high), :position => 3) + Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_urgent), :position => 4) + Enumeration.create!(:opt => "IPRI", :name => l(:default_priority_immediate), :position => 5) + + Enumeration.create!(:opt => "ACTI", :name => l(:default_activity_design), :position => 1) + Enumeration.create!(:opt => "ACTI", :name => l(:default_activity_development), :position => 2) + + true + end + end + end + end +end diff --git a/lib/tasks/load_default_data.rake b/lib/tasks/load_default_data.rake index 8e89d4ecd..6ddd1fb97 100644 --- a/lib/tasks/load_default_data.rake +++ b/lib/tasks/load_default_data.rake @@ -1,168 +1,29 @@ desc 'Load Redmine default configuration data'
namespace :redmine do
-task :load_default_data => :environment do
- include GLoc
- set_language_if_valid('en')
- puts
-
- while true
- print "Select language: "
- print GLoc.valid_languages.sort {|x,y| x.to_s <=> y.to_s }.join(", ")
- print " [#{GLoc.current_language}] "
- lang = STDIN.gets.chomp!
- break if lang.empty?
- break if set_language_if_valid(lang)
- puts "Unknown language!"
- end
+ task :load_default_data => :environment do
+ include GLoc
+ set_language_if_valid('en')
+ puts
- puts "===================================="
-
-begin
- # check that no data already exists
- if Role.find(:first, :conditions => {:builtin => 0})
- raise "Some roles are already defined."
- end
- if Tracker.find(:first)
- raise "Some trackers are already defined."
- end
- if IssueStatus.find(:first)
- raise "Some statuses are already defined."
- end
- if Enumeration.find(:first)
- raise "Some enumerations are already defined."
- end
+ while true
+ print "Select language: "
+ print GLoc.valid_languages.sort {|x,y| x.to_s <=> y.to_s }.join(", ")
+ print " [#{GLoc.current_language}] "
+ lang = STDIN.gets.chomp!
+ break if lang.empty?
+ break if set_language_if_valid(lang)
+ puts "Unknown language!"
+ end
- puts "Loading default configuration data for language: #{current_language}"
-
- # roles
- manager = Role.create :name => l(:default_role_manager),
- :position => 1
- manager.permissions = manager.setable_permissions.collect {|p| p.name}
- manager.save
-
- developper = Role.create :name => l(:default_role_developper),
- :position => 2,
- :permissions => [:manage_versions,
- :manage_categories,
- :add_issues,
- :edit_issues,
- :manage_issue_relations,
- :add_issue_notes,
- :change_issue_status,
- :save_queries,
- :view_gantt,
- :view_calendar,
- :log_time,
- :view_time_entries,
- :comment_news,
- :view_documents,
- :view_wiki_pages,
- :edit_wiki_pages,
- :delete_wiki_pages,
- :add_messages,
- :view_files,
- :manage_files,
- :browse_repository,
- :view_changesets]
-
- reporter = Role.create :name => l(:default_role_reporter),
- :position => 3,
- :permissions => [:add_issues,
- :add_issue_notes,
- :change_issue_status,
- :save_queries,
- :view_gantt,
- :view_calendar,
- :log_time,
- :view_time_entries,
- :comment_news,
- :view_documents,
- :view_wiki_pages,
- :add_messages,
- :view_files,
- :browse_repository,
- :view_changesets]
-
- Role.non_member.update_attribute :permissions, [:add_issues,
- :add_issue_notes,
- :change_issue_status,
- :save_queries,
- :view_gantt,
- :view_calendar,
- :view_time_entries,
- :comment_news,
- :view_documents,
- :view_wiki_pages,
- :add_messages,
- :view_files,
- :browse_repository,
- :view_changesets]
-
- Role.anonymous.update_attribute :permissions, [:view_gantt,
- :view_calendar,
- :view_time_entries,
- :view_documents,
- :view_wiki_pages,
- :view_files,
- :browse_repository,
- :view_changesets]
-
- # trackers
- Tracker.create(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1)
- Tracker.create(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2)
- Tracker.create(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3)
-
- # issue statuses
- new = IssueStatus.create(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1)
- assigned = IssueStatus.create(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :position => 2)
- resolved = IssueStatus.create(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3)
- feedback = IssueStatus.create(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4)
- closed = IssueStatus.create(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5)
- rejected = IssueStatus.create(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6)
-
- # workflow
- Tracker.find(:all).each { |t|
- IssueStatus.find(:all).each { |os|
- IssueStatus.find(:all).each { |ns|
- Workflow.create(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
- }
- }
- }
-
- Tracker.find(:all).each { |t|
- [new, assigned, resolved, feedback].each { |os|
- [assigned, resolved, feedback, closed].each { |ns|
- Workflow.create(:tracker_id => t.id, :role_id => developper.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
- }
- }
- }
-
- Tracker.find(:all).each { |t|
- [new, assigned, resolved, feedback].each { |os|
- [closed].each { |ns|
- Workflow.create(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
- }
- }
- Workflow.create(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
- }
-
- # enumerations
- Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_user), :position => 1)
- Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_tech), :position => 2)
-
- Enumeration.create(:opt => "IPRI", :name => l(:default_priority_low), :position => 1)
- Enumeration.create(:opt => "IPRI", :name => l(:default_priority_normal), :position => 2, :is_default => true)
- Enumeration.create(:opt => "IPRI", :name => l(:default_priority_high), :position => 3)
- Enumeration.create(:opt => "IPRI", :name => l(:default_priority_urgent), :position => 4)
- Enumeration.create(:opt => "IPRI", :name => l(:default_priority_immediate), :position => 5)
-
- Enumeration.create(:opt => "ACTI", :name => l(:default_activity_design), :position => 1)
- Enumeration.create(:opt => "ACTI", :name => l(:default_activity_development), :position => 2)
-
-rescue => error
- puts "Error: " + error
- puts "Default configuration data can't be loaded."
-end
-end
+ puts "===================================="
+
+ begin
+ Redmine::DefaultData::Loader.load(current_language)
+ puts "Default configuration data loaded."
+ rescue => error
+ puts "Error: " + error
+ puts "Default configuration data was not loaded."
+ end
+ end
end
|