File: lib/redmine/default_data/loader.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Redmine#18
  module: DefaultData#19
  class: DataAlreadyLoaded#20
inherits from
  Exception ( Builtin-Module )
  module: Loader#22
includes
  I18n ( Redmine )
has properties
module method: no_data? #28
module method: load / 1 #37

Code

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