|
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 |
- |
|
|