|
Lines 21-27
use Modern::Perl;
Link Here
|
| 21 |
|
21 |
|
| 22 |
use Array::Utils qw( array_minus ); |
22 |
use Array::Utils qw( array_minus ); |
| 23 |
use Class::Inspector; |
23 |
use Class::Inspector; |
| 24 |
use List::MoreUtils qw( any ); |
24 |
use List::MoreUtils qw( any none ); |
| 25 |
use Module::Load::Conditional qw( can_load ); |
25 |
use Module::Load::Conditional qw( can_load ); |
| 26 |
use Module::Load; |
26 |
use Module::Load; |
| 27 |
use Module::Pluggable search_path => ['Koha::Plugin'], |
27 |
use Module::Pluggable search_path => ['Koha::Plugin'], |
|
Lines 33-38
use C4::Context;
Link Here
|
| 33 |
use C4::Output; |
33 |
use C4::Output; |
| 34 |
|
34 |
|
| 35 |
use Koha::Cache::Memory::Lite; |
35 |
use Koha::Cache::Memory::Lite; |
|
|
36 |
use Koha::Exceptions; |
| 36 |
use Koha::Exceptions::Plugin; |
37 |
use Koha::Exceptions::Plugin; |
| 37 |
use Koha::Plugins::Datas; |
38 |
use Koha::Plugins::Datas; |
| 38 |
use Koha::Plugins::Methods; |
39 |
use Koha::Plugins::Methods; |
|
Lines 303-348
sub InstallPlugins {
Link Here
|
| 303 |
my $verbose = $params->{verbose} // $self->_verbose; |
304 |
my $verbose = $params->{verbose} // $self->_verbose; |
| 304 |
|
305 |
|
| 305 |
my @plugin_classes = $self->plugins(); |
306 |
my @plugin_classes = $self->plugins(); |
| 306 |
my ( @plugins, @classes_filters ); |
307 |
my @plugins; |
| 307 |
|
308 |
|
| 308 |
my $has_filters = defined( $params->{include} ) || defined( $params->{exclude} ); |
309 |
Koha::Exceptions::BadParameter->throw("Only one of 'include' and 'exclude' can be passed") |
|
|
310 |
if ( $params->{exclude} && $params->{include} ); |
| 309 |
|
311 |
|
| 310 |
# Warn user if the specified classes doesn't exist and return nothing |
312 |
if ( defined( $params->{include} ) || defined( $params->{exclude} ) ) { |
| 311 |
if ($has_filters) { |
313 |
my @classes_filters = |
| 312 |
@classes_filters = defined( $params->{include} ) ? @{ $params->{include} } : @{ $params->{exclude} }; |
314 |
defined( $params->{include} ) |
|
|
315 |
? @{ $params->{include} } |
| 316 |
: @{ $params->{exclude} }; |
| 313 |
|
317 |
|
| 314 |
foreach my $classes_filter (@classes_filters) { |
318 |
# Warn user if the specified classes doesn't exist and return nothing |
| 315 |
my $is_found = 0; |
319 |
foreach my $class_name (@classes_filters) { |
| 316 |
|
320 |
unless ( any { $class_name eq $_ } @plugin_classes ) { |
| 317 |
foreach my $plugin_class (@plugin_classes) { |
321 |
warn "$class_name has not been found, try a different name"; |
| 318 |
$is_found = 1 |
|
|
| 319 |
if $plugin_class =~ ":$classes_filter\$|^$classes_filter\$" |
| 320 |
|| ( $classes_filter =~ "^::" && $plugin_class =~ "$classes_filter\$" ); |
| 321 |
} |
| 322 |
unless ($is_found) { |
| 323 |
warn "$classes_filter have not been found, try a different name"; |
| 324 |
return; |
322 |
return; |
| 325 |
} |
323 |
} |
| 326 |
} |
324 |
} |
|
|
325 |
|
| 326 |
# filter things |
| 327 |
if ( $params->{include} ) { |
| 328 |
@plugin_classes = grep { |
| 329 |
my $plugin_class = $_; |
| 330 |
any { $plugin_class eq $_ } @classes_filters |
| 331 |
} @plugin_classes; |
| 332 |
} else { # exclude |
| 333 |
@plugin_classes = grep { |
| 334 |
my $plugin_class = $_; |
| 335 |
none { $plugin_class eq $_ } @classes_filters |
| 336 |
} @plugin_classes; |
| 337 |
} |
| 327 |
} |
338 |
} |
| 328 |
|
339 |
|
| 329 |
foreach my $plugin_class (@plugin_classes) { |
340 |
foreach my $plugin_class (@plugin_classes) { |
| 330 |
if ( can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ) ) { |
341 |
if ( can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ) ) { |
| 331 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
342 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
| 332 |
|
343 |
|
| 333 |
# Apply the filters |
|
|
| 334 |
if ($has_filters) { |
| 335 |
my $is_found = 0; |
| 336 |
foreach my $classes_filter (@classes_filters) { |
| 337 |
$is_found = 1 |
| 338 |
if $plugin_class =~ ":$classes_filter\$|^$classes_filter\$" |
| 339 |
|| ( $classes_filter =~ "^::" && $plugin_class =~ "$classes_filter\$" ); |
| 340 |
} |
| 341 |
next |
| 342 |
if ( defined( $params->{include} ) && !$is_found ) |
| 343 |
|| ( defined( $params->{exclude} ) && $is_found ); |
| 344 |
} |
| 345 |
|
| 346 |
my $plugin; |
344 |
my $plugin; |
| 347 |
my $failed_instantiation; |
345 |
my $failed_instantiation; |
| 348 |
|
346 |
|
| 349 |
- |
|
|