kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
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.
164 lines
7.4 KiB
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
|
|
|