From 23a002112273d2b406af7edd6b85acce0d5d699c Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 16 Jan 2023 04:41:01 +0000 Subject: [PATCH] Bug 32539: Add exception handling to plugin hooks in template plugin This change wraps Koha plugin hook calls with exception handling within the template plugin for Koha plugins. Test plan: 0) Apply patch 1) Install a plugin that provides "opac_head", "opac_js", "intranet_head", and "intranet_js" with Perl errors in them 2) Load an OPAC page 3) Note that the OPAC page loads correctly 4) Load a staff interace page 5) Note that the staff interface page loads correctly Signed-off-by: David Nind Signed-off-by: Jonathan Druart Signed-off-by: Tomas Cohen Arazi --- Koha/Template/Plugin/KohaPlugins.pm | 44 ++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/Koha/Template/Plugin/KohaPlugins.pm b/Koha/Template/Plugin/KohaPlugins.pm index d313f73126..4a6e27c221 100644 --- a/Koha/Template/Plugin/KohaPlugins.pm +++ b/Koha/Template/Plugin/KohaPlugins.pm @@ -61,7 +61,16 @@ sub get_plugins_opac_head { } ); - my @data = map { $_->opac_head || q{} } @plugins; + my @data = (); + foreach my $plugin (@plugins){ + try { + my $datum = $plugin->opac_head || q{}; + push(@data,$datum); + } + catch { + warn "Error calling 'opac_head' on the " . $plugin->{class} . "plugin ($_)"; + }; + } return join( "\n", @data ); } @@ -88,7 +97,16 @@ sub get_plugins_opac_js { } ); - my @data = map { $_->opac_js || q{} } @plugins; + my @data = (); + foreach my $plugin (@plugins){ + try { + my $datum = $plugin->opac_js || q{}; + push(@data,$datum); + } + catch { + warn "Error calling 'opac_js' on the " . $plugin->{class} . "plugin ($_)"; + }; + } return join( "\n", @data ); } @@ -115,7 +133,16 @@ sub get_plugins_intranet_head { } ); - my @data = map { $_->intranet_head || q{} } @plugins; + my @data = (); + foreach my $plugin (@plugins){ + try { + my $datum = $plugin->intranet_head || q{}; + push(@data,$datum); + } + catch { + warn "Error calling 'intranet_head' on the " . $plugin->{class} . "plugin ($_)"; + }; + } return join( "\n", @data ); } @@ -142,7 +169,16 @@ sub get_plugins_intranet_js { } ); - my @data = map { $_->intranet_js || q{} } @plugins; + my @data = (); + foreach my $plugin (@plugins){ + try { + my $datum = $plugin->intranet_js || q{}; + push(@data,$datum); + } + catch { + warn "Error calling 'intranet_js' on the " . $plugin->{class} . "plugin ($_)"; + }; + } return join( "\n", @data ); }