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' ) } ) { |