Defect #6324 » init.rb
| 1 |
# coding: utf-8
|
|---|---|
| 2 |
|
| 3 |
module RedminePluginloader |
| 4 |
module Patches |
| 5 |
module PluginloaderPatch |
| 6 |
|
| 7 |
def self.included(base) |
| 8 |
base.extend ClassMethods |
| 9 |
base.send(:include, InstanceMethods) |
| 10 |
base.class_eval do |
| 11 |
cattr_accessor :plugin_requirements |
| 12 |
|
| 13 |
class << self |
| 14 |
alias_method_chain :register, :pluginloader |
| 15 |
end
|
| 16 |
|
| 17 |
alias_method_chain :requires_redmine_plugin, :pluginloader |
| 18 |
end
|
| 19 |
end
|
| 20 |
|
| 21 |
module InstanceMethods |
| 22 |
def requires_redmine_plugin_with_pluginloader(plugin_name, arg, &block) |
| 23 |
self.class.plugin_requirements << [id, plugin_name, arg] |
| 24 |
end
|
| 25 |
end
|
| 26 |
|
| 27 |
module ClassMethods |
| 28 |
def register_with_pluginloader(id, &block) |
| 29 |
self.plugin_requirements ||= [ ] |
| 30 |
register_without_pluginloader(id, &block) |
| 31 |
end
|
| 32 |
|
| 33 |
def check_plugin_requirements |
| 34 |
self.plugin_requirements.each do |id, dep, arg| |
| 35 |
plugin = self.find(id) |
| 36 |
begin
|
| 37 |
plugin.requires_redmine_plugin_without_pluginloader(dep, arg) |
| 38 |
rescue ::Redmine::PluginNotFound => e |
| 39 |
raise ::Redmine::PluginRequirementError, |
| 40 |
"#{id} plugin requires the #{dep} plugin, which is not installed.", |
| 41 |
$!.backtrace |
| 42 |
end
|
| 43 |
end
|
| 44 |
end
|
| 45 |
end
|
| 46 |
end
|
| 47 |
|
| 48 |
unless ::Redmine::Plugin.included_modules.include?(PluginloaderPatch) |
| 49 |
::Redmine::Plugin.send(:include, PluginloaderPatch) |
| 50 |
end
|
| 51 |
end
|
| 52 |
end
|