|
Lines 21-37
use Modern::Perl;
Link Here
|
| 21 |
|
21 |
|
| 22 |
use Class::Inspector; |
22 |
use Class::Inspector; |
| 23 |
use List::MoreUtils qw(any); |
23 |
use List::MoreUtils qw(any); |
| 24 |
use Module::Load::Conditional qw(can_load); |
|
|
| 25 |
use Module::Load qw(load); |
24 |
use Module::Load qw(load); |
|
|
25 |
use Module::Load::Conditional qw(can_load); |
| 26 |
use Module::Pluggable search_path => ['Koha::Plugin'], except => qr/::Edifact(|::Line|::Message|::Order|::Segment|::Transport)$/; |
26 |
use Module::Pluggable search_path => ['Koha::Plugin'], except => qr/::Edifact(|::Line|::Message|::Order|::Segment|::Transport)$/; |
|
|
27 |
use YAML qw(Load Dump); |
| 27 |
|
28 |
|
| 28 |
use C4::Context; |
29 |
use C4::Context; |
| 29 |
use C4::Output; |
30 |
use C4::Output; |
| 30 |
use Koha::Plugins::Methods; |
31 |
use Koha::Plugins::Methods; |
|
|
32 |
use Koha::Plugins::Data; |
| 33 |
|
| 34 |
our @pluginsdir; |
| 31 |
|
35 |
|
| 32 |
BEGIN { |
36 |
BEGIN { |
| 33 |
my $pluginsdir = C4::Context->config("pluginsdir"); |
37 |
my $pluginsdir = C4::Context->config("pluginsdir"); |
| 34 |
my @pluginsdir = ref($pluginsdir) eq 'ARRAY' ? @$pluginsdir : $pluginsdir; |
38 |
@pluginsdir = ref($pluginsdir) eq 'ARRAY' ? @$pluginsdir : $pluginsdir; |
| 35 |
push( @INC, @pluginsdir ); |
39 |
push( @INC, @pluginsdir ); |
| 36 |
pop @INC if $INC[-1] eq '.'; |
40 |
pop @INC if $INC[-1] eq '.'; |
| 37 |
} |
41 |
} |
|
Lines 112-117
sub GetPlugins {
Link Here
|
| 112 |
return @plugins; |
116 |
return @plugins; |
| 113 |
} |
117 |
} |
| 114 |
|
118 |
|
|
|
119 |
sub GetPluginsMetadata { |
| 120 |
my ( $self, $params ) = @_; |
| 121 |
|
| 122 |
my $method = $params->{method}; |
| 123 |
my $req_metadata = $params->{metadata} // {}; |
| 124 |
|
| 125 |
my $filter = ( $method ) ? { plugin_method => $method } : undef; |
| 126 |
|
| 127 |
my $plugin_classes = Koha::Plugins::Methods->search( |
| 128 |
$filter, |
| 129 |
{ columns => 'plugin_class', |
| 130 |
distinct => 1 |
| 131 |
} |
| 132 |
)->_resultset->get_column('plugin_class'); |
| 133 |
|
| 134 |
my @plugins; |
| 135 |
while ( my $plugin_class = $plugin_classes->next ) { |
| 136 |
my $plugin_metadata = Koha::Plugins::Data->find( |
| 137 |
{ |
| 138 |
plugin_class => $plugin_class, |
| 139 |
plugin_key => 'metadata', |
| 140 |
} |
| 141 |
); |
| 142 |
|
| 143 |
if ( $plugin_metadata ) { |
| 144 |
$plugin_metadata = YAML::Load( $plugin_metadata->plugin_value ); |
| 145 |
} |
| 146 |
else { |
| 147 |
load $plugin_class; |
| 148 |
my $plugin = $plugin_class->new( |
| 149 |
{ |
| 150 |
enable_plugins => $self->{enable_plugins} |
| 151 |
} |
| 152 |
); |
| 153 |
$plugin_metadata = $plugin->get_metadata; |
| 154 |
|
| 155 |
Koha::Plugins::Datum->new( |
| 156 |
{ |
| 157 |
plugin_class => $plugin_class, |
| 158 |
plugin_key => 'metadata', |
| 159 |
plugin_value => YAML::Dump( $plugin_metadata ), |
| 160 |
} |
| 161 |
); |
| 162 |
} |
| 163 |
|
| 164 |
next |
| 165 |
if $plugin_metadata |
| 166 |
and %$req_metadata |
| 167 |
and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata; |
| 168 |
|
| 169 |
push @plugins, $plugin_metadata; |
| 170 |
|
| 171 |
} |
| 172 |
|
| 173 |
return @plugins; |
| 174 |
} |
| 175 |
|
| 115 |
=head2 InstallPlugins |
176 |
=head2 InstallPlugins |
| 116 |
|
177 |
|
| 117 |
Koha::Plugins::InstallPlugins() |
178 |
Koha::Plugins::InstallPlugins() |
|
Lines 137-142
sub InstallPlugins {
Link Here
|
| 137 |
|
198 |
|
| 138 |
my $plugin = $plugin_class->new({ enable_plugins => $self->{'enable_plugins'} }); |
199 |
my $plugin = $plugin_class->new({ enable_plugins => $self->{'enable_plugins'} }); |
| 139 |
|
200 |
|
|
|
201 |
# Force update plugin metadata in the database |
| 202 |
my $metadata = $plugin->get_metadata( { skip_database => 1 } ); |
| 203 |
my $params = { |
| 204 |
plugin_class => $plugin_class, |
| 205 |
plugin_key => 'metadata', |
| 206 |
}; |
| 207 |
my $db_metadata = Koha::Plugins::Data->find( $params ) || Koha::Plugins::Datum->new( $params ); |
| 208 |
$db_metadata->plugin_value( YAML::Dump($metadata) ); |
| 209 |
$db_metadata->store(); |
| 210 |
|
| 140 |
Koha::Plugins::Methods->search({ plugin_class => $plugin_class })->delete(); |
211 |
Koha::Plugins::Methods->search({ plugin_class => $plugin_class })->delete(); |
| 141 |
|
212 |
|
| 142 |
foreach my $method ( @{ Class::Inspector->methods( $plugin_class, 'public' ) } ) { |
213 |
foreach my $method ( @{ Class::Inspector->methods( $plugin_class, 'public' ) } ) { |