View | Details | Raw Unified | Return to bug 34978
Collapse All | Expand All

(-)a/Koha/Plugins.pm (-30 / +27 lines)
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
- 

Return to bug 34978