OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
openproject/lib/open_project/backlogs/engine.rb

164 lines
7.4 KiB

require 'acts_as_silent_list'
module OpenProject::Backlogs
class Engine < ::Rails::Engine
engine_name :openproject_backlogs
def self.settings
{ :default => { "story_trackers" => nil,
"task_tracker" => nil,
"card_spec" => nil
},
:partial => 'shared/settings' }
end
config.autoload_paths += Dir["#{config.root}/lib/"]
initializer 'backlogs.precompile_assets' do
Rails.application.config.assets.precompile += %w( backlogs.css backlogs.js )
end
config.before_configuration do |app|
# This is required for the routes to be loaded first
# as the routes should be prepended so they take precedence over the core.
app.config.paths['config/routes'].unshift File.join(File.dirname(__FILE__), "..", "..", "..", "config", "routes.rb")
end
initializer "remove_duplicate_backlogs_routes", :after => "add_routing_paths" do |app|
# removes duplicate entry from app.routes_reloader
# As we prepend the plugin's routes to the load_path up front and rails
# adds all engines' config/routes.rb later, we have double loaded the routes
# This is not harmful as such but leads to duplicate routes which decreases performance
app.routes_reloader.paths.uniq!
end
initializer 'backlogs.register_test_paths' do |app|
app.config.plugins_to_test_paths << self.root
end
config.to_prepare do
# TODO: avoid this dirty hack necessary to prevent settings method getting lost after reloading
Setting.create_setting("plugin_openproject_backlogs", {'default' => Engine.settings[:default], 'serialized' => true})
Setting.create_setting_accessors("plugin_openproject_backlogs")
require_dependency 'issue'
require_dependency 'task'
require_dependency 'acts_as_silent_list'
if Issue.const_defined? "SAFE_ATTRIBUTES"
Issue::SAFE_ATTRIBUTES << "story_points"
Issue::SAFE_ATTRIBUTES << "remaining_hours"
Issue::SAFE_ATTRIBUTES << "position"
else
Issue.safe_attributes "story_points", "remaining_hours", "position"
end
require_dependency 'open_project/backlogs/issue_view'
require_dependency 'open_project/backlogs/issue_form'
# 'require_dependency' reloads the class with every request
# in development mode which
# would duplicate the registered view listeners
require 'open_project/backlogs/hooks'
require_dependency 'open_project/backlogs/patches'
require_dependency 'open_project/backlogs/patches/issue_patch'
require_dependency 'open_project/backlogs/patches/issue_status_patch'
require_dependency 'open_project/backlogs/patches/my_controller_patch'
require_dependency 'open_project/backlogs/patches/project_patch'
require_dependency 'open_project/backlogs/patches/projects_controller_patch'
require_dependency 'open_project/backlogs/patches/projects_helper_patch'
require_dependency 'open_project/backlogs/patches/query_patch'
require_dependency 'open_project/backlogs/patches/user_patch'
require_dependency 'open_project/backlogs/patches/version_controller_patch'
require_dependency 'open_project/backlogs/patches/version_patch'
end
config.after_initialize do
# We are overwriting versions/_form.html.erb so our view must be found first
VersionsController.view_paths.unshift("#{config.root}/app/views")
Redmine::Plugin.register :openproject_backlogs do
name 'OpenProject Backlogs'
author 'relaxdiego, friflaj, Finn GmbH'
description 'A plugin for agile teams'
url 'https://github.com/finnlabs/openproject_backlogs'
author_url 'http://www.finn.de/'
version OpenProject::Backlogs::VERSION
#requires_redmine_plugin 'chiliproject_nissue', '1.0.0'
Redmine::AccessControl.permission(:edit_project).actions << "projects/project_issue_statuses"
Redmine::AccessControl.permission(:edit_project).actions << "projects/rebuild_positions"
settings Engine.settings
project_module :backlogs do
# SYNTAX: permission :name_of_permission, { :controller_name => [:action1, :action2] }
# Master backlog permissions
permission :view_master_backlog, {
:rb_master_backlogs => :index,
:rb_sprints => [:index, :show],
:rb_wikis => :show,
:rb_stories => [:index, :show],
:rb_queries => :show,
:rb_server_variables => :show,
:rb_burndown_charts => :show,
:issue_boxes => :show
}
permission :view_taskboards, {
:rb_taskboards => :show,
:rb_sprints => :show,
:rb_stories => [:index, :show],
:rb_tasks => [:index, :show],
:rb_impediments => [:index, :show],
:rb_wikis => :show,
:rb_server_variables => :show,
:rb_burndown_charts => :show
}
# Sprint permissions
# :show_sprints and :list_sprints are implicit in :view_master_backlog permission
permission :update_sprints, {
:rb_sprints => [:edit, :update],
:rb_wikis => [:edit, :update]
}
# Story permissions
# :show_stories and :list_stories are implicit in :view_master_backlog permission
permission :create_stories, { :rb_stories => :create }
permission :update_stories, { :rb_stories => :update,
:issue_boxes => [:edit, :update] }
# Task permissions
# :show_tasks and :list_tasks are implicit in :view_sprints
permission :create_tasks, { :rb_tasks => [:new, :create] }
permission :update_tasks, { :rb_tasks => [:edit, :update],
:issue_boxes => [:edit, :update] }
# Impediment permissions
# :show_impediments and :list_impediments are implicit in :view_sprints
permission :create_impediments, { :rb_impediments => [:new, :create] }
permission :update_impediments, { :rb_impediments => [:edit, :update],
:issue_boxes => [:edit, :update] }
end
menu :project_menu,
:backlogs,
{:controller => :rb_master_backlogs, :action => :index},
:caption => :project_module_backlogs,
:before => :calendar,
:param => :project_id,
:if => proc { not(User.current.respond_to?(:impaired?) and User.current.impaired?) }
end
end
end
end