|
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'], except => qr/::Edifact(|::Line|::Message|::Order|::Segment|::Transport)$/; |
27 |
use Module::Pluggable search_path => ['Koha::Plugin'], except => qr/::Edifact(|::Line|::Message|::Order|::Segment|::Transport)$/; |
|
Lines 32-37
use C4::Context;
Link Here
|
| 32 |
use C4::Output; |
32 |
use C4::Output; |
| 33 |
|
33 |
|
| 34 |
use Koha::Cache::Memory::Lite; |
34 |
use Koha::Cache::Memory::Lite; |
|
|
35 |
use Koha::Exceptions; |
| 35 |
use Koha::Exceptions::Plugin; |
36 |
use Koha::Exceptions::Plugin; |
| 36 |
use Koha::Plugins::Datas; |
37 |
use Koha::Plugins::Datas; |
| 37 |
use Koha::Plugins::Methods; |
38 |
use Koha::Plugins::Methods; |
|
Lines 296-341
sub InstallPlugins {
Link Here
|
| 296 |
my $verbose = $params->{verbose} // $self->_verbose; |
297 |
my $verbose = $params->{verbose} // $self->_verbose; |
| 297 |
|
298 |
|
| 298 |
my @plugin_classes = $self->plugins(); |
299 |
my @plugin_classes = $self->plugins(); |
| 299 |
my ( @plugins, @classes_filters ); |
300 |
my @plugins; |
| 300 |
|
301 |
|
| 301 |
my $has_filters = defined( $params->{include} ) || defined( $params->{exclude} ); |
302 |
Koha::Exceptions::BadParameter->throw("Only one of 'include' and 'exclude' can be passed") |
|
|
303 |
if ( $params->{exclude} && $params->{include} ); |
| 302 |
|
304 |
|
| 303 |
# Warn user if the specified classes doesn't exist and return nothing |
305 |
if ( defined( $params->{include} ) || defined( $params->{exclude} ) ) { |
| 304 |
if ($has_filters) { |
306 |
my @classes_filters = |
| 305 |
@classes_filters = defined( $params->{include} ) ? @{ $params->{include} } : @{ $params->{exclude} }; |
307 |
defined( $params->{include} ) |
|
|
308 |
? @{ $params->{include} } |
| 309 |
: @{ $params->{exclude} }; |
| 306 |
|
310 |
|
| 307 |
foreach my $classes_filter (@classes_filters) { |
311 |
# Warn user if the specified classes doesn't exist and return nothing |
| 308 |
my $is_found = 0; |
312 |
foreach my $class_name (@classes_filters) { |
| 309 |
|
313 |
unless ( any { $class_name eq $_ } @plugin_classes ) { |
| 310 |
foreach my $plugin_class (@plugin_classes) { |
314 |
warn "$class_name has not been found, try a different name"; |
| 311 |
$is_found = 1 |
|
|
| 312 |
if $plugin_class =~ ":$classes_filter\$|^$classes_filter\$" |
| 313 |
|| ( $classes_filter =~ "^::" && $plugin_class =~ "$classes_filter\$" ); |
| 314 |
} |
| 315 |
unless ($is_found) { |
| 316 |
warn "$classes_filter have not been found, try a different name"; |
| 317 |
return; |
315 |
return; |
| 318 |
} |
316 |
} |
| 319 |
} |
317 |
} |
|
|
318 |
|
| 319 |
# filter things |
| 320 |
if ( $params->{include} ) { |
| 321 |
@plugin_classes = grep { |
| 322 |
my $plugin_class = $_; |
| 323 |
any { $plugin_class eq $_ } @classes_filters |
| 324 |
} @plugin_classes; |
| 325 |
} else { # exclude |
| 326 |
@plugin_classes = grep { |
| 327 |
my $plugin_class = $_; |
| 328 |
none { $plugin_class eq $_ } @classes_filters |
| 329 |
} @plugin_classes; |
| 330 |
} |
| 320 |
} |
331 |
} |
| 321 |
|
332 |
|
| 322 |
foreach my $plugin_class (@plugin_classes) { |
333 |
foreach my $plugin_class (@plugin_classes) { |
| 323 |
if ( can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ) ) { |
334 |
if ( can_load( modules => { $plugin_class => undef }, verbose => $verbose, nocache => 1 ) ) { |
| 324 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
335 |
next unless $plugin_class->isa('Koha::Plugins::Base'); |
| 325 |
|
336 |
|
| 326 |
# Apply the filters |
|
|
| 327 |
if ($has_filters) { |
| 328 |
my $is_found = 0; |
| 329 |
foreach my $classes_filter (@classes_filters) { |
| 330 |
$is_found = 1 |
| 331 |
if $plugin_class =~ ":$classes_filter\$|^$classes_filter\$" |
| 332 |
|| ( $classes_filter =~ "^::" && $plugin_class =~ "$classes_filter\$" ); |
| 333 |
} |
| 334 |
next |
| 335 |
if ( defined( $params->{include} ) && !$is_found ) |
| 336 |
|| ( defined( $params->{exclude} ) && $is_found ); |
| 337 |
} |
| 338 |
|
| 339 |
my $plugin; |
337 |
my $plugin; |
| 340 |
my $failed_instantiation; |
338 |
my $failed_instantiation; |
| 341 |
|
339 |
|
| 342 |
- |
|
|