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'], 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
- 

Return to bug 34978