return bless( $args, $class );
}
-=head2 GetPlugins()
+=head2 GetPlugins
-This will return a list of all the available plugins of the passed type.
+This will return a list of all available plugins, optionally limited by
+method or metadata value.
-Usage: my @plugins = C4::Plugins::GetPlugins( $method );
+ my @plugins = C4::Plugins::GetPlugins({
+ method => 'some_method',
+ metadata => { some_key => 'some_value' },
+ });
+
+The method and metadata parameters are optional.
+Available methods currently are: 'report', 'tool', 'to_marc', 'edifact'.
+If you pass multiple keys in the metadata hash, all keys must match.
-At the moment, the available types are 'report', 'tool' and 'to_marc'.
=cut
sub GetPlugins {
- my $self = shift;
- my $method = shift;
+ my ( $self, $params ) = @_;
+ my $method = $params->{method};
+ my $req_metadata = $params->{metadata} // {};
my @plugin_classes = $self->plugins();
my @plugins;
my $plugin = $plugin_class->new({ enable_plugins => $self->{'enable_plugins'} });
- if ($method) {
- if ( $plugin->can($method) ) {
- push( @plugins, $plugin );
+ # Limit results by method or metadata
+ my $ok = 1;
+ next if $method && !$plugin->can($method);
+ my $plugin_metadata = $plugin->get_metadata;
+ foreach my $key ( keys %$req_metadata ) {
+ if( !$plugin_metadata->{$key} ||
+ $plugin_metadata->{$key} ne $req_metadata->{$key} ) {
+ $ok = 0;
+ last;
}
- } else {
- push( @plugins, $plugin );
}
+ push( @plugins, $plugin ) if $ok;
}
}
return @plugins;
$template->param( plugins_enabled => $plugins_enabled );
if ( $plugins_enabled ) {
- my @plugins = Koha::Plugins->new()->GetPlugins('edifact');
+ my @plugins = Koha::Plugins->new()->GetPlugins({
+ method => 'edifact',
+ });
$template->param( plugins => \@plugins );
}
}
method => $method,
);
- my @plugins = Koha::Plugins->new()->GetPlugins($method);
+ my @plugins = Koha::Plugins->new()->GetPlugins({
+ method => $method,
+ });
$template->param( plugins => \@plugins, );
package Koha::Plugin::Test;
-## It's good practive to use Modern::Perl
+## It's good practice to use Modern::Perl
use Modern::Perl;
## Required for all plugins
minimum_version => '3.11',
maximum_version => undef,
version => $VERSION,
+ my_example_tag => 'find_me',
};
## This is the minimum code required for a plugin's 'new' method
use strict;
use warnings;
-use Test::More tests => 22;
+use Test::More tests => 23;
use File::Basename;
use FindBin qw($Bin);
use Archive::Extract;
is( $plugin->get_qualified_table_name('mytable'), 'koha_plugin_test_mytable', 'Test $plugin->get_qualified_table_name()' );
is( $plugin->get_plugin_http_path(), '/plugin/Koha/Plugin/Test', 'Test $plugin->get_plugin_http_path()' );
-my @plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins( 'report' );
+# testing GetPlugins
+my @plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({
+ method => 'report'
+});
my @names = map { $_->get_metadata()->{'name'} } @plugins;
is( scalar grep( /^Test Plugin$/, @names), 1, "Koha::Plugins::GetPlugins functions correctly" );
+@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({
+ metadata => { my_example_tag => 'find_me' },
+});
+@names = map { $_->get_metadata()->{'name'} } @plugins;
+is( scalar grep( /^Test Plugin$/, @names), 1, "GetPlugins also found Test Plugin via a metadata tag" );
SKIP: {
my $plugins_dir = C4::Context->config("pluginsdir");
if ( C4::Context->preference('UseKohaPlugins') &&
C4::Context->config('enable_plugins') ) {
- my @plugins = Koha::Plugins->new()->GetPlugins('to_marc');
+ my @plugins = Koha::Plugins->new()->GetPlugins({
+ method => 'to_marc',
+ });
$template->param( plugins => \@plugins );
}
}