Lines 64-84
Calls a plugin method for all enabled plugins
Link Here
|
64 |
sub call { |
64 |
sub call { |
65 |
my ($class, $method, @args) = @_; |
65 |
my ($class, $method, @args) = @_; |
66 |
|
66 |
|
67 |
my @responses; |
67 |
return unless C4::Context->config('enable_plugins'); |
68 |
if (C4::Context->config('enable_plugins')) { |
|
|
69 |
my @plugins = $class->new({ enable_plugins => 1 })->GetPlugins({ method => $method }); |
70 |
@plugins = grep { $_->can($method) } @plugins; |
71 |
foreach my $plugin (@plugins) { |
72 |
my $response = eval { $plugin->$method(@args) }; |
73 |
if ($@) { |
74 |
warn sprintf("Plugin error (%s): %s", $plugin->get_metadata->{name}, $@); |
75 |
next; |
76 |
} |
77 |
|
68 |
|
78 |
push @responses, $response; |
69 |
my @responses; |
|
|
70 |
my @plugins = $class->new()->GetPlugins({ method => $method }); |
71 |
foreach my $plugin (@plugins) { |
72 |
my $response = eval { $plugin->$method(@args) }; |
73 |
if ($@) { |
74 |
warn sprintf("Plugin error (%s): %s", $plugin->get_metadata->{name}, $@); |
75 |
next; |
79 |
} |
76 |
} |
80 |
|
77 |
|
|
|
78 |
push @responses, $response; |
81 |
} |
79 |
} |
|
|
80 |
|
82 |
return @responses; |
81 |
return @responses; |
83 |
} |
82 |
} |
84 |
|
83 |
|
Lines 103-139
sub GetPlugins {
Link Here
|
103 |
|
102 |
|
104 |
my $method = $params->{method}; |
103 |
my $method = $params->{method}; |
105 |
my $req_metadata = $params->{metadata} // {}; |
104 |
my $req_metadata = $params->{metadata} // {}; |
106 |
|
105 |
my $all = $params->{all} // 0; |
107 |
my $filter = ( $method ) ? { plugin_method => $method } : undef; |
106 |
my $nocache = 0; |
108 |
|
107 |
|
109 |
my $plugin_classes = Koha::Plugins::Methods->search( |
108 |
my @plugin_classes; |
110 |
$filter, |
109 |
if ($all) { |
111 |
{ columns => 'plugin_class', |
110 |
@plugin_classes = $self->plugins(); |
112 |
distinct => 1 |
111 |
|
113 |
} |
112 |
# Do not use Module::Load::Conditional cache if we want all plugins |
114 |
)->_resultset->get_column('plugin_class'); |
113 |
# as $self->plugins can return uninstalled plugins |
|
|
114 |
$nocache = 1; |
115 |
} else { |
116 |
my $rs = Koha::Database->schema->resultset('PluginData'); |
117 |
$rs = $rs->search({ plugin_key => '__ENABLED__', plugin_value => 1 }); |
118 |
@plugin_classes = $rs->get_column('plugin_class')->all(); |
119 |
} |
115 |
|
120 |
|
116 |
my @plugins; |
121 |
my @plugins; |
|
|
122 |
foreach my $plugin_class (@plugin_classes) { |
123 |
if ( can_load( modules => { $plugin_class => undef }, nocache => $nocache ) ) { |
124 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
125 |
next if $method && !$plugin_class->can($method); |
117 |
|
126 |
|
118 |
# Loop through all plugins that implement at least a method |
|
|
119 |
while ( my $plugin_class = $plugin_classes->next ) { |
120 |
|
121 |
if ( can_load( modules => { $plugin_class => undef }, nocache => 1 ) ) { |
122 |
my $plugin = $plugin_class->new({ |
127 |
my $plugin = $plugin_class->new({ |
123 |
enable_plugins => $self->{'enable_plugins'} |
128 |
enable_plugins => $self->{'enable_plugins'} |
124 |
# loads even if plugins are disabled |
129 |
# loads even if plugins are disabled |
125 |
# FIXME: is this for testing without bothering to mock config? |
130 |
# FIXME: is this for testing without bothering to mock config? |
126 |
}); |
131 |
}); |
127 |
|
132 |
|
128 |
next unless $plugin->is_enabled or |
|
|
129 |
defined($params->{all}) && $params->{all}; |
130 |
|
131 |
# filter the plugin out by metadata |
133 |
# filter the plugin out by metadata |
132 |
my $plugin_metadata = $plugin->get_metadata; |
134 |
if (%$req_metadata) { |
133 |
next |
135 |
my $plugin_metadata = $plugin->get_metadata; |
134 |
if $plugin_metadata |
136 |
next |
135 |
and %$req_metadata |
137 |
if $plugin_metadata |
136 |
and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata; |
138 |
and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata; |
|
|
139 |
} |
137 |
|
140 |
|
138 |
push @plugins, $plugin; |
141 |
push @plugins, $plugin; |
139 |
} elsif ( defined($params->{errors}) && $params->{errors} ){ |
142 |
} elsif ( defined($params->{errors}) && $params->{errors} ){ |
140 |
- |
|
|