From 36f4c6dc488621ee2daccb15f3f301d4806f0e9e Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 20 Feb 2013 13:32:25 -0500 Subject: [PATCH] Bug 7804 - Add Koha Plugin System - QA Followup - Add "Plugins disabled" screen instead of error --- Koha/Plugins.pm | 2 +- Koha/Plugins/Base.pm | 2 +- Koha/Plugins/Handler.pm | 2 +- .../prog/en/modules/plugins/plugins-disabled.tt | 30 ++++++++ plugins/plugins-home.pl | 25 ++++--- plugins/plugins-upload.pl | 77 +++++++++++--------- plugins/run.pl | 11 ++- 7 files changed, 95 insertions(+), 54 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt diff --git a/Koha/Plugins.pm b/Koha/Plugins.pm index bc4a3bb..1360afa 100644 --- a/Koha/Plugins.pm +++ b/Koha/Plugins.pm @@ -38,7 +38,7 @@ Koha::Plugins - Module for loading and managing plugins. sub new { my ( $class, $args ) = @_; - die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + return unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); $args->{'pluginsdir'} = C4::Context->config("pluginsdir"); diff --git a/Koha/Plugins/Base.pm b/Koha/Plugins/Base.pm index 0e1aedc..2681ee7 100644 --- a/Koha/Plugins/Base.pm +++ b/Koha/Plugins/Base.pm @@ -39,7 +39,7 @@ C4::Plugins::Base - Base Module for plugins sub new { my ( $class, $args ) = @_; - die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + return unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); $args->{'class'} = $class; $args->{'template'} = Template->new( { ABSOLUTE => 1 } ); diff --git a/Koha/Plugins/Handler.pm b/Koha/Plugins/Handler.pm index d2f324a..bc56085 100644 --- a/Koha/Plugins/Handler.pm +++ b/Koha/Plugins/Handler.pm @@ -51,7 +51,7 @@ Runs a plugin sub run { my ( $class, $args ) = @_; - die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + return unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); my $plugin_class = $args->{'class'}; my $plugin_method = $args->{'method'}; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt new file mode 100644 index 0000000..4b100cd --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt @@ -0,0 +1,30 @@ +[% INCLUDE 'doc-head-open.inc' %] +Koha › Tools › Plugins › Upload Plugin + +[% INCLUDE 'doc-head-close.inc' %] +[% INCLUDE 'calendar.inc' %] + + + +[% INCLUDE 'header.inc' %] +[% INCLUDE 'circ-search.inc' %] + + + +
+
+
+
+
+
+

Plugins disabled!

+ +

To enable Koha plugins, the system preference UseKohaPlugins must be enabled, and the flag enable_plugins must be set in the Koha configuration file

+
+
+
+
+[% INCLUDE 'intranet-bottom.inc' %] diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index 8b7a42a..03095bb 100755 --- a/plugins/plugins-home.pl +++ b/plugins/plugins-home.pl @@ -29,29 +29,32 @@ use C4::Dates; use C4::Debug; use C4::Context; -die("Koha plugins are disabled!") - unless C4::Context->preference('UseKohaPlugins'); +my $plugins_enabled = C4::Context->preference('UseKohaPlugins') && C4::Context->config("enable_plugins"); my $input = new CGI; my $method = $input->param('method'); my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { template_name => "plugins/plugins-home.tmpl", - query => $input, - type => "intranet", + { template_name => ($plugins_enabled) ? "plugins/plugins-home.tt" : "plugins/plugins-disabled.tt", + query => $input, + type => "intranet", authnotrequired => 0, flagsrequired => { plugins => '*' }, debug => 1, } ); -$template->param( - koha_version => C4::Context->preference("Version"), - method => $method, -); +if ($plugins_enabled) { + + $template->param( + koha_version => C4::Context->preference("Version"), + method => $method, + ); + + my @plugins = Koha::Plugins->new()->GetPlugins($method); -my @plugins = Koha::Plugins->new()->GetPlugins($method); + $template->param( plugins => \@plugins, ); -$template->param( plugins => \@plugins ); +} output_html_with_http_headers( $input, $cookie, $template->output ); diff --git a/plugins/plugins-upload.pl b/plugins/plugins-upload.pl index 4548104..28a647a 100755 --- a/plugins/plugins-upload.pl +++ b/plugins/plugins-upload.pl @@ -1,4 +1,5 @@ #!/usr/bin/perl + # # This file is part of Koha. # @@ -30,15 +31,14 @@ use C4::Members; use C4::Debug; use Koha::Plugins; -die("Koha plugins are disabled!") - unless C4::Context->preference('UseKohaPlugins'); +my $plugins_enabled = C4::Context->preference('UseKohaPlugins') && C4::Context->config("enable_plugins"); my $input = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { template_name => "plugins/plugins-upload.tmpl", - query => $input, - type => "intranet", + { template_name => ($plugins_enabled) ? "plugins/plugins-upload.tmpl" : "plugins/plugins-disabled.tt", + query => $input, + type => "intranet", authnotrequired => 0, flagsrequired => { plugins => 'manage' }, debug => 1, @@ -53,46 +53,51 @@ my ( $total, $handled, @counts, $tempfile, $tfh ); my %errors; -if ( ( $op eq 'Upload' ) && $uploadfile ) { - my $plugins_dir = C4::Context->config("pluginsdir"); - - my $dirname = File::Temp::tempdir( CLEANUP => 1 ); - $debug and warn "dirname = $dirname"; +if ($plugins_enabled) { + if ( ( $op eq 'Upload' ) && $uploadfile ) { + my $plugins_dir = C4::Context->config("pluginsdir"); - my $filesuffix; - $filesuffix = $1 if $uploadfilename =~ m/(\..+)$/i; - ( $tfh, $tempfile ) = File::Temp::tempfile( SUFFIX => $filesuffix, UNLINK => 1 ); + my $dirname = File::Temp::tempdir( CLEANUP => 1 ); + $debug and warn "dirname = $dirname"; - $debug and warn "tempfile = $tempfile"; + my $filesuffix; + $filesuffix = $1 if $uploadfilename =~ m/(\..+)$/i; + ( $tfh, $tempfile ) = File::Temp::tempfile( SUFFIX => $filesuffix, UNLINK => 1 ); - $errors{'NOTKPZ'} = 1 if ( $uploadfilename !~ /\.kpz$/i ); - $errors{'NOWRITETEMP'} = 1 unless ( -w $dirname ); - $errors{'NOWRITEPLUGINS'} = 1 unless ( -w $plugins_dir ); - $errors{'EMPTYUPLOAD'} = 1 unless ( length($uploadfile) > 0 ); + $debug and warn "tempfile = $tempfile"; - if (%errors) { - $template->param( ERRORS => [ \%errors ] ); - } else { - while (<$uploadfile>) { - print $tfh $_; - } - close $tfh; + $errors{'NOTKPZ'} = 1 if ( $uploadfilename !~ /\.kpz$/i ); + $errors{'NOWRITETEMP'} = 1 unless ( -w $dirname ); + $errors{'NOWRITEPLUGINS'} = 1 unless ( -w $plugins_dir ); + $errors{'EMPTYUPLOAD'} = 1 unless ( length($uploadfile) > 0 ); - my $ae = Archive::Extract->new( archive => $tempfile, type => 'zip' ); - unless ( $ae->extract( to => $plugins_dir ) ) { - warn "ERROR: " . $ae->error; - $errors{'UZIPFAIL'} = $uploadfilename; + if (%errors) { $template->param( ERRORS => [ \%errors ] ); - output_html_with_http_headers $input, $cookie, $template->output; - exit; + } else { + while (<$uploadfile>) { + print $tfh $_; + } + close $tfh; + + my $ae = Archive::Extract->new( archive => $tempfile, type => 'zip' ); + unless ( $ae->extract( to => $plugins_dir ) ) { + warn "ERROR: " . $ae->error; + $errors{'UZIPFAIL'} = $uploadfilename; + $template->param( ERRORS => [ \%errors ] ); + output_html_with_http_headers $input, $cookie, $template->output; + exit; + } } + } elsif ( ( $op eq 'Upload' ) && !$uploadfile ) { + warn "Problem uploading file or no file uploaded."; + } + + if ( $uploadfile && !%errors && !$template->param('ERRORS') ) { + print $input->redirect("/cgi-bin/koha/plugins/plugins-home.pl"); + } else { + output_html_with_http_headers $input, $cookie, $template->output; } -} elsif ( ( $op eq 'Upload' ) && !$uploadfile ) { - warn "Problem uploading file or no file uploaded."; -} -if ( $uploadfile && !%errors && !$template->param('ERRORS') ) { - print $input->redirect("/cgi-bin/koha/plugins/plugins-home.pl"); } else { output_html_with_http_headers $input, $cookie, $template->output; } diff --git a/plugins/run.pl b/plugins/run.pl index 6b8ef28..6c462ed 100755 --- a/plugins/run.pl +++ b/plugins/run.pl @@ -29,8 +29,7 @@ use C4::Dates; use C4::Debug; use C4::Context; -die("Koha plugins are disabled!") - unless C4::Context->preference('UseKohaPlugins'); +my $plugins_enabled = C4::Context->preference('UseKohaPlugins') && C4::Context->config("enable_plugins"); my $cgi = new CGI; @@ -38,7 +37,7 @@ my $class = $cgi->param('class'); my $method = $cgi->param('method'); my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { template_name => "plugins/plugins-home.tmpl", + { template_name => "plugins/plugins-disabled.tmpl", query => $cgi, type => "intranet", authnotrequired => 0, @@ -47,4 +46,8 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( } ); -my $plugin = Koha::Plugins::Handler->run( { class => $class, method => $method, cgi => $cgi } ); +if ( $plugins_enabled ) { + my $plugin = Koha::Plugins::Handler->run( { class => $class, method => $method, cgi => $cgi } ); +} else { + output_html_with_http_headers( $cgi, $cookie, $template->output ); +} -- 1.7.2.5