From 3d3b3ed057994d8719c88dad5cde4d65ffd9288b Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Sat, 15 Sep 2018 09:48:49 -0700 Subject: [PATCH] Bug 21352: Allow plugins to add CSS and Javascript to Staff interface We should have plugin hooks for the staff interface just like we have for the OPAC as detailed on bug 20181. Test Plan: 1) Apply this patch 2) Download and install the Kitchen Sink plugin ( v2.1.19 or later ) https://github.com/bywatersolutions/koha-plugin-kitchen-sink/releases/download/v2.1.19/koha-plugin-kitchen-sink-v2.1.19.kpz 3) Install the plugin 4) Restart all the things if you can ( restart_all if you are using kohadevbox ) This will ensure the plugin takes effect right away, it should be necessary but it won't hurt anything! 5) Load the staff intranet, notice you get an console error log message and the background for your staff intranet is now orange ( assuming you've not customized the staff intranet in any way ) Signed-off-by: Owen Leonard Signed-off-by: Tomas Cohen Arazi Signed-off-by: Nick Clemens (cherry picked from commit a37637e30357258885e9d0c1c7a30366869dcb08) Signed-off-by: Martin Renvoize (cherry picked from commit ee19e31ce05c927cff3505171eb9d7e68bfdd7bb) Signed-off-by: Fridolin Somers --- Koha/Template/Plugin/KohaPlugins.pm | 56 +++++++++++++++++++ .../prog/en/includes/doc-head-close.inc | 2 + .../prog/en/includes/intranet-bottom.inc | 1 + .../Koha/Template/Plugin/KohaPlugins.t | 6 +- t/db_dependent/Plugins.t | 2 + t/lib/Koha/Plugin/Test.pm | 10 ++++ 6 files changed, 76 insertions(+), 1 deletion(-) diff --git a/Koha/Template/Plugin/KohaPlugins.pm b/Koha/Template/Plugin/KohaPlugins.pm index 0148c7f301..8624504cdb 100644 --- a/Koha/Template/Plugin/KohaPlugins.pm +++ b/Koha/Template/Plugin/KohaPlugins.pm @@ -93,4 +93,60 @@ sub get_plugins_opac_js { return join( "\n", @data ); } +=head3 get_plugins_intranet_head + +[% KohaPlugins.get_plugins_intranet_head %] + +This method collects the output of all plugins with an intranet_head method +to output to the head section of intranet pages. + +=cut + +sub get_plugins_intranet_head { + return q{} + unless C4::Context->preference('UseKohaPlugins'); + + my $p = Koha::Plugins->new(); + + return q{} unless $p; + + my @plugins = $p->GetPlugins( + { + method => 'intranet_head', + } + ); + + my @data = map { $_->intranet_head || q{} } @plugins; + + return join( "\n", @data ); +} + +=head3 get_plugins_intranet_js + +[% KohaPlugins.get_plugins_intranet_js %] + +This method collects the output of all plugins with an intranet_js method +to output to the javascript section of at the bottom of intranet pages. + +=cut + +sub get_plugins_intranet_js { + return q{} + unless C4::Context->preference('UseKohaPlugins'); + + my $p = Koha::Plugins->new(); + + return q{} unless $p; + + my @plugins = $p->GetPlugins( + { + method => 'intranet_js', + } + ); + + my @data = map { $_->intranet_js || q{} } @plugins; + + return join( "\n", @data ); +} + 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc index 91402eb3ed..c452f8082e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc @@ -23,6 +23,8 @@ [% END %] [% IF ( IntranetUserCSS ) %][% END %] +[% KohaPlugins.get_plugins_intranet_head | html %] + [% UNLESS ( footerjs ) %] [% INCLUDE js_includes.inc %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc index cc862a8436..0c8502a7eb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc @@ -71,4 +71,5 @@ [% jsinclude # Parse the page template's JavaScript block if necessary %] [% END %] +[% KohaPlugins.get_plugins_intranet_js | html %] diff --git a/t/db_dependent/Koha/Template/Plugin/KohaPlugins.t b/t/db_dependent/Koha/Template/Plugin/KohaPlugins.t index 7698bf4686..b0d50e66a0 100755 --- a/t/db_dependent/Koha/Template/Plugin/KohaPlugins.t +++ b/t/db_dependent/Koha/Template/Plugin/KohaPlugins.t @@ -2,7 +2,7 @@ use Modern::Perl; -use Test::More tests => 10; +use Test::More tests => 14; use CGI; use File::Basename; use File::Spec; @@ -40,8 +40,12 @@ t::lib::Mocks::mock_preference('UseKohaPlugins',1); t::lib::Mocks::mock_config('enable_plugins',1); ok( index( $plugin->get_plugins_opac_js, 'Koha::Plugin::Test::opac_js' ) != -1, 'Test plugin opac_js return value is part of code returned by get_plugins_opac_js' ); ok( index( $plugin->get_plugins_opac_head, 'Koha::Plugin::Test::opac_head' ) != -1, 'Test plugin opac_head return value is part of code returned by get_plugins_opac_head' ); +ok( index( $plugin->get_plugins_intranet_js, 'Koha::Plugin::Test::intranet_js' ) != -1, 'Test plugin intranet_js return value is part of code returned by get_plugins_intranet_js' ); +ok( index( $plugin->get_plugins_intranet_head, 'Koha::Plugin::Test::intranet_head' ) != -1, 'Test plugin intranet_head return value is part of code returned by get_plugins_intranet_head' ); t::lib::Mocks::mock_preference('UseKohaPlugins',0); t::lib::Mocks::mock_config('enable_plugins',0); is( $plugin->get_plugins_opac_js, q{}, 'Test plugin opac_js return value is empty' ); is( $plugin->get_plugins_opac_head, q{}, 'Test plugin opac_head return value is empty' ); +is( $plugin->get_plugins_intranet_js, q{}, 'Test plugin intranet_js return value is empty' ); +is( $plugin->get_plugins_intranet_head, q{}, 'Test plugin intranet_head return value is empty' ); diff --git a/t/db_dependent/Plugins.t b/t/db_dependent/Plugins.t index e5d8ed96ff..30592498aa 100755 --- a/t/db_dependent/Plugins.t +++ b/t/db_dependent/Plugins.t @@ -47,6 +47,8 @@ ok( $plugin->can('opac_online_payment_begin'), 'Test plugin can opac_online_paym ok( $plugin->can('opac_online_payment_end'), 'Test plugin can opac_online_payment_end' ); ok( $plugin->can('opac_head'), 'Test plugin can opac_head' ); ok( $plugin->can('opac_js'), 'Test plugin can opac_js' ); +ok( $plugin->can('intranet_head'), 'Test plugin can intranet_head' ); +ok( $plugin->can('intranet_js'), 'Test plugin can intranet_js' ); ok( $plugin->can('configure'), 'Test plugin can configure' ); ok( $plugin->can('install'), 'Test plugin can install' ); ok( $plugin->can('upgrade'), 'Test plugin can upgrade' ); diff --git a/t/lib/Koha/Plugin/Test.pm b/t/lib/Koha/Plugin/Test.pm index 944ca4153b..419cc08794 100644 --- a/t/lib/Koha/Plugin/Test.pm +++ b/t/lib/Koha/Plugin/Test.pm @@ -68,6 +68,16 @@ sub opac_js { return "Koha::Plugin::Test::opac_js"; } +sub intranet_head { + my ( $self, $args ) = @_; + return "Koha::Plugin::Test::intranet_head"; +} + +sub intranet_js { + my ( $self, $args ) = @_; + return "Koha::Plugin::Test::intranet_js"; +} + sub configure { my ( $self, $args ) = @_; return "Koha::Plugin::Test::configure";; -- 2.39.2