Lines 104-129
sub call {
Link Here
|
104 |
|
104 |
|
105 |
Returns a list of enabled plugins. |
105 |
Returns a list of enabled plugins. |
106 |
|
106 |
|
107 |
@plugins = Koha::Plugins->get_enabled_plugins(); |
107 |
@plugins = Koha::Plugins->get_enabled_plugins( [ verbose => 1 ] ); |
108 |
|
108 |
|
109 |
=cut |
109 |
=cut |
110 |
|
110 |
|
111 |
sub get_enabled_plugins { |
111 |
sub get_enabled_plugins { |
112 |
my ($class) = @_; |
112 |
my ( $class, $params ) = @_; |
113 |
|
113 |
|
114 |
return unless C4::Context->config('enable_plugins'); |
114 |
return unless C4::Context->config('enable_plugins'); |
115 |
|
115 |
|
116 |
my $enabled_plugins = Koha::Cache::Memory::Lite->get_from_cache(ENABLED_PLUGINS_CACHE_KEY); |
116 |
my $enabled_plugins = Koha::Cache::Memory::Lite->get_from_cache(ENABLED_PLUGINS_CACHE_KEY); |
117 |
unless ($enabled_plugins) { |
117 |
unless ($enabled_plugins) { |
|
|
118 |
my $verbose = $params->{verbose} // $class->_verbose; |
118 |
$enabled_plugins = []; |
119 |
$enabled_plugins = []; |
119 |
my $rs = Koha::Database->schema->resultset('PluginData'); |
120 |
my $rs = Koha::Database->schema->resultset('PluginData'); |
120 |
$rs = $rs->search({ plugin_key => '__ENABLED__', plugin_value => 1 }); |
121 |
$rs = $rs->search({ plugin_key => '__ENABLED__', plugin_value => 1 }); |
121 |
my @plugin_classes = $rs->get_column('plugin_class')->all(); |
122 |
my @plugin_classes = $rs->get_column('plugin_class')->all(); |
122 |
foreach my $plugin_class (@plugin_classes) { |
123 |
foreach my $plugin_class (@plugin_classes) { |
123 |
unless (can_load(modules => { $plugin_class => undef }, nocache => 1)) { |
124 |
next unless can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ); |
124 |
warn "Failed to load $plugin_class: $Module::Load::Conditional::ERROR"; |
|
|
125 |
next; |
126 |
} |
127 |
|
125 |
|
128 |
my $plugin = eval { $plugin_class->new() }; |
126 |
my $plugin = eval { $plugin_class->new() }; |
129 |
if ($@ || !$plugin) { |
127 |
if ($@ || !$plugin) { |
Lines 139-144
sub get_enabled_plugins {
Link Here
|
139 |
return @$enabled_plugins; |
137 |
return @$enabled_plugins; |
140 |
} |
138 |
} |
141 |
|
139 |
|
|
|
140 |
sub _verbose { |
141 |
my $class = shift; |
142 |
# Return false when running unit tests |
143 |
return exists $ENV{_} && $ENV{_} =~ /\/prove(\s|$)|\.t$/ ? 0 : 1; |
144 |
} |
142 |
|
145 |
|
143 |
=head2 feature_enabled |
146 |
=head2 feature_enabled |
144 |
|
147 |
|
Lines 171-176
method or metadata value.
Link Here
|
171 |
my @plugins = Koha::Plugins::GetPlugins({ |
174 |
my @plugins = Koha::Plugins::GetPlugins({ |
172 |
method => 'some_method', |
175 |
method => 'some_method', |
173 |
metadata => { some_key => 'some_value' }, |
176 |
metadata => { some_key => 'some_value' }, |
|
|
177 |
[ verbose => 1 ], |
174 |
}); |
178 |
}); |
175 |
|
179 |
|
176 |
The method and metadata parameters are optional. |
180 |
The method and metadata parameters are optional. |
Lines 183-188
sub GetPlugins {
Link Here
|
183 |
|
187 |
|
184 |
my $method = $params->{method}; |
188 |
my $method = $params->{method}; |
185 |
my $req_metadata = $params->{metadata} // {}; |
189 |
my $req_metadata = $params->{metadata} // {}; |
|
|
190 |
my $verbose = delete $params->{verbose} // $self->_verbose; |
186 |
|
191 |
|
187 |
my $filter = ( $method ) ? { plugin_method => $method } : undef; |
192 |
my $filter = ( $method ) ? { plugin_method => $method } : undef; |
188 |
|
193 |
|
Lines 198-204
sub GetPlugins {
Link Here
|
198 |
# Loop through all plugins that implement at least a method |
203 |
# Loop through all plugins that implement at least a method |
199 |
while ( my $plugin_class = $plugin_classes->next ) { |
204 |
while ( my $plugin_class = $plugin_classes->next ) { |
200 |
|
205 |
|
201 |
if ( can_load( modules => { $plugin_class => undef }, nocache => 1 ) ) { |
206 |
if ( can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ) ) { |
202 |
|
207 |
|
203 |
my $plugin; |
208 |
my $plugin; |
204 |
my $failed_instantiation; |
209 |
my $failed_instantiation; |
Lines 239-245
sub GetPlugins {
Link Here
|
239 |
|
244 |
|
240 |
=head2 InstallPlugins |
245 |
=head2 InstallPlugins |
241 |
|
246 |
|
242 |
Koha::Plugins::InstallPlugins() |
247 |
Koha::Plugins::InstallPlugins( [ verbose => 1 ] ) |
243 |
|
248 |
|
244 |
This method iterates through all plugins physically present on a system. |
249 |
This method iterates through all plugins physically present on a system. |
245 |
For each plugin module found, it will test that the plugin can be loaded, |
250 |
For each plugin module found, it will test that the plugin can be loaded, |
Lines 252-263
has removed a plugin directly from the system without using the UI
Link Here
|
252 |
|
257 |
|
253 |
sub InstallPlugins { |
258 |
sub InstallPlugins { |
254 |
my ( $self, $params ) = @_; |
259 |
my ( $self, $params ) = @_; |
|
|
260 |
my $verbose = $params->{verbose} // $self->_verbose; |
255 |
|
261 |
|
256 |
my @plugin_classes = $self->plugins(); |
262 |
my @plugin_classes = $self->plugins(); |
257 |
my @plugins; |
263 |
my @plugins; |
258 |
|
264 |
|
259 |
foreach my $plugin_class (@plugin_classes) { |
265 |
foreach my $plugin_class (@plugin_classes) { |
260 |
if ( can_load( modules => { $plugin_class => undef }, nocache => 1 ) ) { |
266 |
if ( can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ) ) { |
261 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
267 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
262 |
|
268 |
|
263 |
my $plugin; |
269 |
my $plugin; |
Lines 285-294
sub InstallPlugins {
Link Here
|
285 |
} |
291 |
} |
286 |
|
292 |
|
287 |
push @plugins, $plugin; |
293 |
push @plugins, $plugin; |
288 |
} else { |
|
|
289 |
my $error = $Module::Load::Conditional::ERROR; |
290 |
# Do not warn the error if the plugin has been uninstalled |
291 |
warn $error unless $error =~ m|^Could not find or check module '$plugin_class'|; |
292 |
} |
294 |
} |
293 |
} |
295 |
} |
294 |
|
296 |
|
295 |
- |
|
|