@@ -, +, @@ in koha-conf.xml git clone https://github.com/bywatersolutions/koha-plugin-kitchen-sink.git /path/to/new/plugins/dir --- Koha/Plugins.pm | 4 +++- Koha/Plugins/Handler.pm | 14 +++++++++++--- plugins/plugins-upload.pl | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) --- a/Koha/Plugins.pm +++ a/Koha/Plugins.pm @@ -26,7 +26,9 @@ use C4::Context; use C4::Output; BEGIN { - push @INC, C4::Context->config("pluginsdir"); + my $pluginsdir = C4::Context->config("pluginsdir"); + my @pluginsdir = ref($pluginsdir) eq 'ARRAY' ? @$pluginsdir : $pluginsdir; + push( @INC, @pluginsdir ); } =head1 NAME --- a/Koha/Plugins/Handler.pm +++ a/Koha/Plugins/Handler.pm @@ -26,7 +26,9 @@ use Module::Load::Conditional qw(can_load); use C4::Context; BEGIN { - push @INC, C4::Context->config("pluginsdir"); + my $pluginsdir = C4::Context->config("pluginsdir"); + my @pluginsdir = ref($pluginsdir) eq 'ARRAY' ? @$pluginsdir : $pluginsdir; + push( @INC, @pluginsdir ); } =head1 NAME @@ -79,8 +81,14 @@ Deletes a plugin sub delete { my ( $class, $args ) = @_; my $plugin_class = $args->{'class'}; - my $plugin_dir = C4::Context->config("pluginsdir"); - my $plugin_path = "$plugin_dir/" . join( '/', split( '::', $args->{'class'} ) ); + + 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 + $plugin_path =~ s/.pm//; # Remove the .pm from the end Koha::Plugins::Handler->run( { class => $plugin_class, method => 'uninstall' } ); --- a/plugins/plugins-upload.pl +++ a/plugins/plugins-upload.pl @@ -56,6 +56,7 @@ my %errors; if ($plugins_enabled) { if ( ( $op eq 'Upload' ) && $uploadfile ) { my $plugins_dir = C4::Context->config("pluginsdir"); + $plugins_dir = ref($plugins_dir) eq 'ARRAY' ? $plugins_dir->[0] : $plugins_dir; my $dirname = File::Temp::tempdir( CLEANUP => 1 ); $debug and warn "dirname = $dirname"; --