You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

loader.rb 11 kB

13 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. # Redmine - project management software
  2. # Copyright (C) 2006-2013 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. module Redmine
  18. module DefaultData
  19. class DataAlreadyLoaded < Exception; end
  20. module Loader
  21. include Redmine::I18n
  22. class << self
  23. # Returns true if no data is already loaded in the database
  24. # otherwise false
  25. def no_data?
  26. !Role.where(:builtin => 0).exists? &&
  27. !Tracker.exists? &&
  28. !IssueStatus.exists? &&
  29. !Enumeration.exists?
  30. end
  31. # Loads the default data
  32. # Raises a RecordNotSaved exception if something goes wrong
  33. def load(lang=nil)
  34. raise DataAlreadyLoaded.new("Some configuration data is already loaded.") unless no_data?
  35. set_language_if_valid(lang)
  36. Role.transaction do
  37. # Roles
  38. manager = Role.create! :name => l(:default_role_manager),
  39. :issues_visibility => 'all',
  40. :position => 1
  41. manager.permissions = manager.setable_permissions.collect {|p| p.name}
  42. manager.save!
  43. developer = Role.create! :name => l(:default_role_developer),
  44. :position => 2,
  45. :permissions => [:manage_versions,
  46. :manage_categories,
  47. :view_issues,
  48. :add_issues,
  49. :edit_issues,
  50. :view_private_notes,
  51. :set_notes_private,
  52. :manage_issue_relations,
  53. :manage_subtasks,
  54. :add_issue_notes,
  55. :save_queries,
  56. :view_gantt,
  57. :view_calendar,
  58. :log_time,
  59. :view_time_entries,
  60. :comment_news,
  61. :view_documents,
  62. :view_wiki_pages,
  63. :view_wiki_edits,
  64. :edit_wiki_pages,
  65. :delete_wiki_pages,
  66. :add_messages,
  67. :edit_own_messages,
  68. :view_files,
  69. :manage_files,
  70. :browse_repository,
  71. :view_changesets,
  72. :commit_access,
  73. :manage_related_issues]
  74. reporter = Role.create! :name => l(:default_role_reporter),
  75. :position => 3,
  76. :permissions => [:view_issues,
  77. :add_issues,
  78. :add_issue_notes,
  79. :save_queries,
  80. :view_gantt,
  81. :view_calendar,
  82. :log_time,
  83. :view_time_entries,
  84. :comment_news,
  85. :view_documents,
  86. :view_wiki_pages,
  87. :view_wiki_edits,
  88. :add_messages,
  89. :edit_own_messages,
  90. :view_files,
  91. :browse_repository,
  92. :view_changesets]
  93. Role.non_member.update_attribute :permissions, [:view_issues,
  94. :add_issues,
  95. :add_issue_notes,
  96. :save_queries,
  97. :view_gantt,
  98. :view_calendar,
  99. :view_time_entries,
  100. :comment_news,
  101. :view_documents,
  102. :view_wiki_pages,
  103. :view_wiki_edits,
  104. :add_messages,
  105. :view_files,
  106. :browse_repository,
  107. :view_changesets]
  108. Role.anonymous.update_attribute :permissions, [:view_issues,
  109. :view_gantt,
  110. :view_calendar,
  111. :view_time_entries,
  112. :view_documents,
  113. :view_wiki_pages,
  114. :view_wiki_edits,
  115. :view_files,
  116. :browse_repository,
  117. :view_changesets]
  118. # Trackers
  119. Tracker.create!(:name => l(:default_tracker_bug), :is_in_chlog => true, :is_in_roadmap => false, :position => 1)
  120. Tracker.create!(:name => l(:default_tracker_feature), :is_in_chlog => true, :is_in_roadmap => true, :position => 2)
  121. Tracker.create!(:name => l(:default_tracker_support), :is_in_chlog => false, :is_in_roadmap => false, :position => 3)
  122. # Issue statuses
  123. new = IssueStatus.create!(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :position => 1)
  124. in_progress = IssueStatus.create!(:name => l(:default_issue_status_in_progress), :is_closed => false, :is_default => false, :position => 2)
  125. resolved = IssueStatus.create!(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :position => 3)
  126. feedback = IssueStatus.create!(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :position => 4)
  127. closed = IssueStatus.create!(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :position => 5)
  128. rejected = IssueStatus.create!(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :position => 6)
  129. # Workflow
  130. Tracker.all.each { |t|
  131. IssueStatus.all.each { |os|
  132. IssueStatus.all.each { |ns|
  133. WorkflowTransition.create!(:tracker_id => t.id, :role_id => manager.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
  134. }
  135. }
  136. }
  137. Tracker.all.each { |t|
  138. [new, in_progress, resolved, feedback].each { |os|
  139. [in_progress, resolved, feedback, closed].each { |ns|
  140. WorkflowTransition.create!(:tracker_id => t.id, :role_id => developer.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
  141. }
  142. }
  143. }
  144. Tracker.all.each { |t|
  145. [new, in_progress, resolved, feedback].each { |os|
  146. [closed].each { |ns|
  147. WorkflowTransition.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. WorkflowTransition.create!(:tracker_id => t.id, :role_id => reporter.id, :old_status_id => resolved.id, :new_status_id => feedback.id)
  151. }
  152. # Enumerations
  153. IssuePriority.create!(:name => l(:default_priority_low), :position => 1)
  154. IssuePriority.create!(:name => l(:default_priority_normal), :position => 2, :is_default => true)
  155. IssuePriority.create!(:name => l(:default_priority_high), :position => 3)
  156. IssuePriority.create!(:name => l(:default_priority_urgent), :position => 4)
  157. IssuePriority.create!(:name => l(:default_priority_immediate), :position => 5)
  158. DocumentCategory.create!(:name => l(:default_doc_category_user), :position => 1)
  159. DocumentCategory.create!(:name => l(:default_doc_category_tech), :position => 2)
  160. TimeEntryActivity.create!(:name => l(:default_activity_design), :position => 1)
  161. TimeEntryActivity.create!(:name => l(:default_activity_development), :position => 2)
  162. end
  163. true
  164. end
  165. end
  166. end
  167. end
  168. end

软件技术创新是当今国家整体创新能力的重要基础和发展引擎。近年来,大众参与的软件创新与创业活动已经成为网络时代软件开发和应用的新形态,正在快速改变着全球软件创新模式和软件产业格局。 ...