Bug 25961: Add hooks for plugins to inject variables to OPAC XSLT
authorTomas Cohen Arazi <tomascohen@theke.io>
Wed, 8 Jul 2020 19:54:51 +0000 (16:54 -0300)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 30 Jul 2020 15:30:23 +0000 (17:30 +0200)
This patch adds the following plugin hooks:
- opac_results_xslt_variables
- opac_detail_xslt_variables

This hooks will inject variables returned by the plugin in the form of a
hashref, into the ones that are passed to the XSLT processing code.

To test:
1. Apply the 'DO NOT PUSH' commit
2. Install the Kitchensink plugin
3. Restart all
4. Search biblios in the OPAC
=> SUCCESS: A text is injected in front of the biblio title
5. Enter the detail page of any of the results
=> SUCCESS: A text is injected in front of the biblio title
6. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

opac/opac-detail.pl
opac/opac-search.pl

index ce091b7..66a12d8 100755 (executable)
@@ -59,9 +59,12 @@ use Koha::ItemTypes;
 use Koha::Acquisition::Orders;
 use Koha::Virtualshelves;
 use Koha::Patrons;
+use Koha::Plugins;
 use Koha::Ratings;
 use Koha::Reviews;
 
+use Try::Tiny;
+
 my $query = CGI->new();
 
 my $biblionumber = $query->param('biblionumber') || $query->param('bib') || 0;
@@ -182,6 +185,31 @@ if ( $xslfile ) {
         anonymous_session => ($borrowernumber) ? 0 : 1
     };
 
+    if ( C4::Context->config("enable_plugins") ) {
+
+        my @plugins = Koha::Plugins->new->GetPlugins({
+            method => 'opac_detail_xslt_variables',
+        });
+
+        if (@plugins) {
+            foreach my $plugin ( @plugins ) {
+                try {
+                    my $plugin_variables = $plugin->opac_detail_xslt_variables(
+                        {
+                            biblio_id  => $biblionumber,
+                            lang       => $lang,
+                            patron_id  => $borrowernumber
+                        }
+                    );
+                    $variables = { %$variables, %$plugin_variables };
+                }
+                catch {
+                    warn "$_";
+                };
+            }
+        }
+    }
+
     $template->param(
         XSLTBloc => XSLTParse4Display(
             $biblionumber, $record, "OPACXSLTDetailsDisplay", 1, undef,
index 2f2043e..3a512f8 100755 (executable)
@@ -29,6 +29,7 @@ use Modern::Perl;
 ## load Koha modules
 use C4::Context;
 use List::MoreUtils q/any/;
+use Try::Tiny;
 
 use Data::Dumper; # TODO remove
 
@@ -60,6 +61,7 @@ use Koha::Ratings;
 use Koha::Virtualshelves;
 use Koha::Library::Groups;
 use Koha::Patrons;
+use Koha::Plugins;
 use Koha::SearchFields;
 
 use POSIX qw(ceil floor strftime);
@@ -647,6 +649,29 @@ if (C4::Context->preference('OpacHiddenItemsExceptions')){
 }
 
 my $variables = { anonymous_session => ($borrowernumber) ? 0 : 1 };
+if ( C4::Context->config("enable_plugins") ) {
+
+    my @plugins = Koha::Plugins->new->GetPlugins({
+        method => 'opac_results_xslt_variables',
+    });
+
+    if (@plugins) {
+        foreach my $plugin ( @plugins ) {
+            try {
+                my $plugin_variables = $plugin->opac_results_xslt_variables(
+                    {
+                        lang       => $lang,
+                        patron_id  => $borrowernumber
+                    }
+                );
+                $variables = { %$variables, %$plugin_variables };
+            }
+            catch {
+                warn "$_";
+            };
+        }
+    }
+}
 
 for (my $i=0;$i<@servers;$i++) {
     my $server = $servers[$i];