| Lines 115-136
          sub GetPlugins {
      
      
        Link Here | 
        
          | 115 |  | 115 |  | 
        
          | 116 |     my $method       = $params->{method}; | 116 |     my $method       = $params->{method}; | 
        
          | 117 |     my $req_metadata = $params->{metadata} // {}; | 117 |     my $req_metadata = $params->{metadata} // {}; | 
          
            
              | 118 |  | 118 |     my $all          = $params->{all} // 0; | 
            
              | 119 |     my $filter = ( $method ) ? { plugin_method => $method } : undef; | 119 |     my $nocache      = 0; | 
            
              | 120 |  | 120 |  | 
            
              | 121 |     my $plugin_classes = Koha::Plugins::Methods->search( | 121 |     my @plugin_classes; | 
            
              | 122 |         $filter, | 122 |     if ($all) { | 
            
              | 123 |         {   columns  => 'plugin_class', | 123 |         @plugin_classes = $self->plugins(); | 
            
              | 124 |             distinct => 1 | 124 |  | 
            
              | 125 |         } | 125 |         # Do not use Module::Load::Conditional cache if we want all plugins | 
            
              | 126 |     )->_resultset->get_column('plugin_class'); | 126 |         # as $self->plugins can return uninstalled plugins | 
            
              |  |  | 127 |         $nocache = 1; | 
            
              | 128 |     } else { | 
            
              | 129 |         my $rs = Koha::Database->schema->resultset('PluginData'); | 
            
              | 130 |         $rs = $rs->search({ plugin_key => '__ENABLED__', plugin_value => 1 }); | 
            
              | 131 |         @plugin_classes = $rs->get_column('plugin_class')->all(); | 
            
              | 132 |     } | 
        
          | 127 |  | 133 |  | 
        
          | 128 |     my @plugins; | 134 |     my @plugins; | 
          
            
              | 129 |  | 135 |     foreach my $plugin_class (@plugin_classes) { | 
            
              | 130 |     # Loop through all plugins that implement at least a method | 136 |         if ( can_load( modules => { $plugin_class => undef }, nocache => $nocache ) ) { | 
            
              | 131 |     while ( my $plugin_class = $plugin_classes->next ) { | 137 |             next unless $plugin_class->isa('Koha::Plugins::Base'); | 
            
              | 132 |  | 138 |             next if $method && !$plugin_class->can($method); | 
            
              | 133 |         if ( can_load( modules => { $plugin_class => undef }, nocache => 1 ) ) { |  |  | 
        
          | 134 |  | 139 |  | 
        
          | 135 |             my $plugin; | 140 |             my $plugin; | 
        
          | 136 |             my $failed_instantiation; | 141 |             my $failed_instantiation; | 
  
    | Lines 149-163
          sub GetPlugins {
      
      
        Link Here | 
        
          | 149 |  | 154 |  | 
        
          | 150 |             next if $failed_instantiation; | 155 |             next if $failed_instantiation; | 
        
          | 151 |  | 156 |  | 
            
              | 152 |             next unless $plugin->is_enabled or |  |  | 
            
              | 153 |                         defined($params->{all}) && $params->{all}; | 
            
              | 154 |  | 
        
          | 155 |             # filter the plugin out by metadata | 157 |             # filter the plugin out by metadata | 
          
            
              | 156 |             my $plugin_metadata = $plugin->get_metadata; | 158 |             if (%$req_metadata) { | 
            
              | 157 |             next | 159 |                 my $plugin_metadata = $plugin->get_metadata; | 
            
              | 158 |                 if $plugin_metadata | 160 |                 next | 
            
              | 159 |                 and %$req_metadata | 161 |                     if $plugin_metadata | 
            
              | 160 |                 and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata; | 162 |                     and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata; | 
            
              |  |  | 163 |             } | 
        
          | 161 |  | 164 |  | 
        
          | 162 |             push @plugins, $plugin; | 165 |             push @plugins, $plugin; | 
        
          | 163 |         } elsif ( defined($params->{errors}) && $params->{errors} ){ | 166 |         } elsif ( defined($params->{errors}) && $params->{errors} ){ | 
            
              | 164 | -  |  |  |