@@ -, +, @@ --- Koha/Plugins.pm | 54 ++++++++++++++++++- .../prog/en/modules/plugins/plugins-home.tt | 28 +++++----- plugins/plugins-home.pl | 4 +- 3 files changed, 69 insertions(+), 17 deletions(-) --- a/Koha/Plugins.pm +++ a/Koha/Plugins.pm @@ -21,9 +21,10 @@ use Modern::Perl; use Class::Inspector; use List::MoreUtils qw(any); -use Module::Load::Conditional qw(can_load); use Module::Load qw(load); +use Module::Load::Conditional qw(can_load); use Module::Pluggable search_path => ['Koha::Plugin'], except => qr/::Edifact(|::Line|::Message|::Order|::Segment|::Transport)$/; +use YAML qw(LoadFile); use C4::Context; use C4::Output; @@ -112,6 +113,57 @@ sub GetPlugins { return @plugins; } +sub GetPluginsMetadata { + my ( $self, $params ) = @_; + + my $method = $params->{method}; + my $req_metadata = $params->{metadata} // {}; + + my $filter = ( $method ) ? { plugin_method => $method } : undef; + + my $plugin_classes = Koha::Plugins::Methods->search( + $filter, + { columns => 'plugin_class', + distinct => 1 + } + )->_resultset->get_column('plugin_class'); + + my @plugins; + while ( my $plugin_class = $plugin_classes->next ) { + my $plugin_path = $plugin_class; + $plugin_path =~ s/::/\//g; # Take class name, transform :: to / to get path + $plugin_path =~ s/$/.pm/; # Add .pm to the end + require $plugin_path; # Require the plugin to have it's path listed in INC + $plugin_path = + $INC{$plugin_path}; # Get the full true path to the plugin from INC + my $meta_yaml = "$plugin_path/META.yml"; + + my $plugin_metadata; + + if ( -r $meta_yaml ) { + $plugin_metadata = YAML::LoadFile($meta_yaml); + } else { + load $plugin_class; + my $plugin = $plugin_class->new({ + enable_plugins => $self->{'enable_plugins'} + }); + + # filter the plugin out by metadata + $plugin_metadata = $plugin->get_metadata; + } + + next + if $plugin_metadata + and %$req_metadata + and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata; + + push @plugins, $plugin_metadata; + + } + + return @plugins; +} + =head2 InstallPlugins Koha::Plugins::InstallPlugins() --- a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt @@ -80,7 +80,7 @@ [% END %] - [% UNLESS ( plugins ) %] + [% UNLESS ( plugins_metadata ) %] [% UNLESS ( method ) %]
No plugins installed
[% ELSE %] @@ -113,10 +113,10 @@ [% END %] - [% FOREACH plugin IN plugins %] + [% FOREACH metadata IN plugins_metadata %] - [% plugin.metadata.name | html %] + [% metadata.name | html %] [% IF ( plugin.is_enabled ) %] ENABLED [% ELSE %] @@ -124,25 +124,25 @@ [% END %] - [% plugin.metadata.description | html %] + [% metadata.description | html %] - [% IF ( plugin.metadata.minimum_version && koha_version < plugin.metadata.minimum_version ) %] + [% IF ( metadata.minimum_version && koha_version < metadata.minimum_version ) %]
Warning: This report was written for a newer version of Koha. Run at your own risk.
[% END %] - [% IF ( plugin.metadata.maximum_version && koha_version > plugin.metadata.maximum_version ) %] + [% IF ( metadata.maximum_version && koha_version > metadata.maximum_version ) %]
Warning: This plugin was written for an older version of Koha. Run at your own risk.
[% END %] - [% plugin.metadata.author | html %] - [% plugin.metadata.version | html %] - [% plugin.metadata.minimum_version | html %] - [% plugin.metadata.maximum_version | html %] - [% plugin.metadata.date_updated | $KohaDates %] + [% metadata.author | html %] + [% metadata.version | html %] + [% metadata.minimum_version | html %] + [% metadata.maximum_version | html %] + [% metadata.date_updated | $KohaDates %] [% IF ( CAN_user_plugins_configure || CAN_user_plugins_manage || CAN_user_plugins_report || CAN_user_plugins_tool ) %]