Lines 20-25
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 qw(load); |
25 |
use Module::Load qw(load); |
25 |
use Module::Load::Conditional qw(can_load); |
26 |
use Module::Load::Conditional qw(can_load); |
Lines 30-38
use C4::Context;
Link Here
|
30 |
use C4::Output; |
31 |
use C4::Output; |
31 |
use Koha::Plugins::Methods; |
32 |
use Koha::Plugins::Methods; |
32 |
|
33 |
|
|
|
34 |
our @pluginsdir; |
35 |
|
33 |
BEGIN { |
36 |
BEGIN { |
34 |
my $pluginsdir = C4::Context->config("pluginsdir"); |
37 |
my $pluginsdir = C4::Context->config("pluginsdir"); |
35 |
my @pluginsdir = ref($pluginsdir) eq 'ARRAY' ? @$pluginsdir : $pluginsdir; |
38 |
@pluginsdir = ref($pluginsdir) eq 'ARRAY' ? @$pluginsdir : $pluginsdir; |
36 |
push( @INC, @pluginsdir ); |
39 |
push( @INC, @pluginsdir ); |
37 |
pop @INC if $INC[-1] eq '.'; |
40 |
pop @INC if $INC[-1] eq '.'; |
38 |
} |
41 |
} |
Lines 128-148
sub GetPluginsMetadata {
Link Here
|
128 |
} |
131 |
} |
129 |
)->_resultset->get_column('plugin_class'); |
132 |
)->_resultset->get_column('plugin_class'); |
130 |
|
133 |
|
|
|
134 |
my @metafiles = File::Find::Rule->file()->name('META.yml')->in( @pluginsdir ); |
135 |
|
131 |
my @plugins; |
136 |
my @plugins; |
132 |
while ( my $plugin_class = $plugin_classes->next ) { |
137 |
while ( my $plugin_class = $plugin_classes->next ) { |
133 |
my $plugin_path = $plugin_class; |
138 |
my $plugin_path = $plugin_class; |
134 |
$plugin_path =~ s/::/\//g; # Take class name, transform :: to / to get path |
139 |
$plugin_path =~ s/::/\//g; # Take class name, transform :: to / to get path |
|
|
140 |
my $yaml_to_find = "$plugin_path/META.yml"; |
135 |
$plugin_path =~ s/$/.pm/; # Add .pm to the end |
141 |
$plugin_path =~ s/$/.pm/; # Add .pm to the end |
136 |
require $plugin_path; # Require the plugin to have it's path listed in INC |
|
|
137 |
$plugin_path = |
138 |
$INC{$plugin_path}; # Get the full true path to the plugin from INC |
139 |
my $meta_yaml = "$plugin_path/META.yml"; |
140 |
|
142 |
|
141 |
my $plugin_metadata; |
143 |
# Find the full path to the file, it's somewhere in the list of metafiles we found when this module as loaded |
|
|
144 |
my ( $meta_yaml ) = grep { $yaml_to_find eq substr( $_, -length($yaml_to_find) ) } @metafiles; |
142 |
|
145 |
|
143 |
if ( -r $meta_yaml ) { |
146 |
my $plugin_metadata; |
|
|
147 |
if ( -r $meta_yaml ) { # If the metafile exists and is readable, use it |
144 |
$plugin_metadata = YAML::LoadFile($meta_yaml); |
148 |
$plugin_metadata = YAML::LoadFile($meta_yaml); |
145 |
} else { |
149 |
} else { # Fall back to loading the plugin to get the metadata if there is no META.yml file to read |
146 |
load $plugin_class; |
150 |
load $plugin_class; |
147 |
my $plugin = $plugin_class->new({ |
151 |
my $plugin = $plugin_class->new({ |
148 |
enable_plugins => $self->{'enable_plugins'} |
152 |
enable_plugins => $self->{'enable_plugins'} |