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