[Koha-patches] [PATCH] Bug 4032 XSLT systempreference takes a path to file rather than YesNo

Dobrica Pavlinusic dpavlin at rot13.org
Sat Mar 24 18:46:31 CET 2012


From: Stéphane Delaune <stephane.delaune at biblibre.com>

Signed-off-by: Marijana Glavica <mglavica at ffzg.hr>

I am signing it off because it doesn't break anything and I will report
another bug for language issues described in my previous comment.

Removed MySQLism backquotes
---
 C4/Search.pm                                       |    3 +-
 C4/VirtualShelves/Page.pm                          |    2 +-
 C4/XSLT.pm                                         |   80 ++++++++++++++-----
 catalogue/detail.pl                                |    2 +-
 installer/data/mysql/sysprefs.sql                  |    8 +-
 installer/data/mysql/updatedatabase.pl             |   30 +++++++
 .../prog/en/modules/admin/preferences/opac.pref    |   14 ++--
 .../en/modules/admin/preferences/staff_client.pref |   14 ++--
 opac/opac-detail.pl                                |    2 +-
 9 files changed, 109 insertions(+), 46 deletions(-)

diff --git a/C4/Search.pm b/C4/Search.pm
index 9bc0af2..56468b5 100644
--- a/C4/Search.pm
+++ b/C4/Search.pm
@@ -1776,8 +1776,7 @@ sub searchResults {
 	$debug && warn $marcrecord->as_formatted;
 	my $interface = $search_context eq 'opac' ? 'OPAC' : '';
 	if (!$scan && C4::Context->preference($interface . "XSLTResultsDisplay")) {
-            $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, 'Results',
-                                                                $search_context, 1, \@hiddenitems);
+            $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, $interface."XSLTResultsDisplay", 1, \@hiddenitems);
 	    # the last parameter tells Koha to clean up the problematic ampersand entities that Zebra outputs
         }
 
diff --git a/C4/VirtualShelves/Page.pm b/C4/VirtualShelves/Page.pm
index 125a1e6..d32afed 100644
--- a/C4/VirtualShelves/Page.pm
+++ b/C4/VirtualShelves/Page.pm
@@ -257,7 +257,7 @@ sub shelfpage {
                     my $biblionumber = $this_item->{'biblionumber'};
                     my $record = GetMarcBiblio($biblionumber);
                     $this_item->{XSLTBloc} =
-                        XSLTParse4Display($biblionumber, $record, 'Results', 'opac')
+                        XSLTParse4Display($biblionumber, $record, "OPACXSLTResultsDisplay")
                             if C4::Context->preference("OPACXSLTResultsDisplay") && $type eq 'opac';
 
                     # the virtualshelfcontents table does not store these columns nor are they retrieved from the items
diff --git a/C4/XSLT.pm b/C4/XSLT.pm
index 7557efe..621f08f 100644
--- a/C4/XSLT.pm
+++ b/C4/XSLT.pm
@@ -3,6 +3,7 @@ package C4::XSLT;
 # <jmf at liblime dot com>
 # Parts Copyright Katrin Fischer 2011
 # Parts Copyright ByWater Solutions 2011
+# Parts Copyright Biblibre 2012
 #
 # This file is part of Koha.
 #
@@ -32,6 +33,7 @@ use C4::Reserves;
 use Encode;
 use XML::LibXML;
 use XML::LibXSLT;
+use LWP::Simple;
 
 use vars qw($VERSION @ISA @EXPORT);
 
@@ -41,6 +43,7 @@ BEGIN {
     @ISA = qw(Exporter);
     @EXPORT = qw(
         &XSLTParse4Display
+        &GetURI
     );
 }
 
@@ -50,6 +53,19 @@ C4::XSLT - Functions for displaying XSLT-generated content
 
 =head1 FUNCTIONS
 
+=head2 GetURI
+
+GetURI file and returns the xslt as a string
+
+=cut
+
+sub GetURI {
+    my ($uri) = @_;
+    my $string;
+    $string = get $uri ;
+    return $string;
+}
+
 =head2 transformMARCXML4XSLT
 
 Replaces codes with authorized values in a MARC::Record object
@@ -121,8 +137,39 @@ sub getAuthorisedValues4MARCSubfields {
 my $stylesheet;
 
 sub XSLTParse4Display {
-    my ( $biblionumber, $orig_record, $xsl_suffix, $interface, $fixamps, $hidden_items ) = @_;
-    $interface = 'opac' unless $interface;
+    my ( $biblionumber, $orig_record, $xslsyspref, $fixamps, $hidden_items ) = @_;
+    my $xslfilename = C4::Context->preference($xslsyspref);
+    if ( $xslfilename =~ /^\s*"?default"?\s*$/i ) {
+        if ($xslsyspref eq "XSLTDetailsDisplay") {
+            $xslfilename = C4::Context->config('intrahtdocs') .
+                        '/' . C4::Context->preference("template") .
+                        '/' . C4::Templates::_current_language() .
+                        '/xslt/' .
+                        C4::Context->preference('marcflavour') .
+                        "slim2intranetDetail.xsl";
+        } elsif ($xslsyspref eq "XSLTResultsDisplay") {
+            $xslfilename = C4::Context->config('intrahtdocs') .
+                        '/' . C4::Context->preference("template") .
+                        '/' . C4::Templates::_current_language() .
+                        '/xslt/' .
+                        C4::Context->preference('marcflavour') .
+                        "slim2intranetResults.xsl";
+        } elsif ($xslsyspref eq "OPACXSLTDetailsDisplay") {
+            $xslfilename = C4::Context->config('opachtdocs') .
+                        '/' . C4::Context->preference("opacthemes") .
+                        '/' . C4::Templates::_current_language() .
+                        '/xslt/' .
+                        C4::Context->preference('marcflavour') .
+                        "slim2OPACDetail.xsl";
+        } elsif ($xslsyspref eq "OPACXSLTResultsDisplay") {
+            $xslfilename = C4::Context->config('opachtdocs') .
+                        '/' . C4::Context->preference("opacthemes") .
+                        '/' . C4::Templates::_current_language() .
+                        '/xslt/' .
+                        C4::Context->preference('marcflavour') .
+                        "slim2OPACResults.xsl";
+        }
+    }
     # grab the XML, run it through our stylesheet, push it out to the browser
     my $record = transformMARCXML4XSLT($biblionumber, $orig_record);
     #return $record->as_formatted();
@@ -153,29 +200,20 @@ sub XSLTParse4Display {
     # don't die when you find &, >, etc
     $parser->recover_silently(0);
     my $source = $parser->parse_string($xmlrecord);
-    unless ( $stylesheet ) {
+    unless ( $stylesheet->{$xslfilename} ) {
         my $xslt = XML::LibXSLT->new();
-        my $xslfile;
-        if ($interface eq 'intranet') {
-            $xslfile = C4::Context->config('intrahtdocs') . 
-                      '/' . C4::Context->preference("template") . 
-                      '/' . C4::Templates::_current_language() .
-                      '/xslt/' .
-                      C4::Context->preference('marcflavour') .
-                      "slim2intranet$xsl_suffix.xsl";
+        my $style_doc;
+        if ( $xslfilename =~ /^https?:\/\// ) {
+            my $xsltstring = GetURI($xslfilename);
+            $style_doc = $parser->parse_string($xsltstring);
         } else {
-            $xslfile = C4::Context->config('opachtdocs') . 
-                      '/' . C4::Context->preference("opacthemes") . 
-                      '/' . C4::Templates::_current_language() .
-                      '/xslt/' .
-                      C4::Context->preference('marcflavour') .
-                      "slim2OPAC$xsl_suffix.xsl";
+            use Cwd;
+            $style_doc = $parser->parse_file($xslfilename);
         }
-        my $style_doc = $parser->parse_file($xslfile);
-        $stylesheet = $xslt->parse_stylesheet($style_doc);
+        $stylesheet->{$xslfilename} = $xslt->parse_stylesheet($style_doc);
     }
-    my $results = $stylesheet->transform($source);
-    my $newxmlrecord = $stylesheet->output_string($results);
+    my $results      = $stylesheet->{$xslfilename}->transform($source);
+    my $newxmlrecord = $stylesheet->{$xslfilename}->output_string($results);
     return $newxmlrecord;
 }
 
diff --git a/catalogue/detail.pl b/catalogue/detail.pl
index da62e07..de355fa 100755
--- a/catalogue/detail.pl
+++ b/catalogue/detail.pl
@@ -85,7 +85,7 @@ my $marcflavour  = C4::Context->preference("marcflavour");
 # XSLT processing of some stuff
 if (C4::Context->preference("XSLTDetailsDisplay") ) {
     $template->param('XSLTDetailsDisplay' =>'1',
-        'XSLTBloc' => XSLTParse4Display($biblionumber, $record, 'Detail','intranet') );
+        'XSLTBloc' => XSLTParse4Display($biblionumber, $record, "XSLTDetailsDisplay") );
 }
 
 $template->param( 'SpineLabelShowPrintOnBibDetails' => C4::Context->preference("SpineLabelShowPrintOnBibDetails") );
diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql
index 3e850b3..21212a0 100644
--- a/installer/data/mysql/sysprefs.sql
+++ b/installer/data/mysql/sysprefs.sql
@@ -219,10 +219,10 @@ INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES
 
 INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('OPACShelfBrowser','1','','Enable/disable Shelf Browser on item details page. WARNING: this feature is very resource consuming on collections with large numbers of items.','YesNo');
 INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES
-('OPACXSLTDetailsDisplay','0','','Enable XSL stylesheet control over details page display on OPAC','YesNo'),
-('OPACXSLTResultsDisplay','0','','Enable XSL stylesheet control over results page display on OPAC','YesNo'),
-('XSLTDetailsDisplay','0','','Enable XSL stylesheet control over details page display on intranet','YesNo'),
-('XSLTResultsDisplay','0','','Enable XSL stylesheet control over results page display on intranet','YesNo');
+('OPACXSLTDetailsDisplay','','','Enable XSL stylesheet control over details page display on OPAC','Free'),
+('OPACXSLTResultsDisplay','','','Enable XSL stylesheet control over results page display on OPAC','Free'),
+('XSLTDetailsDisplay','','','Enable XSL stylesheet control over details page display on intranet','Free'),
+('XSLTResultsDisplay','','','Enable XSL stylesheet control over results page display on intranet','Free');
 INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AdvancedSearchTypes','itemtypes','itemtypes|ccode','Select which set of fields comprise the Type limit in the advanced search','Choice');
 INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowOnShelfHolds', '0', '', 'Allow hold requests to be placed on items that are not on loan', 'YesNo');
 INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowHoldsOnDamagedItems', '1', '', 'Allow hold requests to be placed on damaged items', 'YesNo');
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 8259bf2..4ea83b4 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -5036,6 +5036,36 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     SetVersion($DBversion);
 }
 
+$DBversion = "XXX";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    my $countXSLTDetailsDisplay = 0;
+    my $valueXSLTDetailsDisplay = "";
+    my $valueXSLTResultsDisplay = "";
+    my $valueOPACXSLTDetailsDisplay = "";
+    my $valueOPACXSLTResultsDisplay = "";
+    #the line below test if database comes from a BibLibre's branch
+    $countXSLTDetailsDisplay = $dbh->do('SELECT 1 FROM systempreferences WHERE variable="IntranetXSLTDetailsDisplay"');
+    if ($countXSLTDetailsDisplay > 0)
+    {
+        #the two lines below will only be used to update the databases from the BibLibre's branch. They will not affect the others
+        $dbh->do(q|UPDATE systempreferences SET variable="XSLTDetailsDisplay" WHERE variable="IntranetXSLTDetailsDisplay"|);
+        $dbh->do(q|UPDATE systempreferences SET variable="XSLTResultsDisplay" WHERE variable="IntranetXSLTResultsDisplay"|);
+    }
+    else
+    {
+        $valueXSLTDetailsDisplay = "default" if (C4::Context->preference("XSLTDetailsDisplay"));
+        $valueXSLTResultsDisplay = "default" if (C4::Context->preference("XSLTResultsDisplay"));
+        $valueOPACXSLTDetailsDisplay = "default" if (C4::Context->preference("OPACXSLTDetailsDisplay"));
+        $valueOPACXSLTResultsDisplay = "default" if (C4::Context->preference("OPACXSLTResultsDisplay"));
+        $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTDetailsDisplay\" WHERE variable='XSLTDetailsDisplay'");
+        $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueXSLTResultsDisplay\" WHERE variable='XSLTResultsDisplay'");
+        $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTDetailsDisplay\" WHERE variable='OPACXSLTDetailsDisplay'");
+        $dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTResultsDisplay\" WHERE variable='OPACXSLTResultsDisplay'");
+    }
+    print "XSLT systempreference takes a path to file rather than YesNo\n";
+    SetVersion($DBversion);
+}
+
 =head1 FUNCTIONS
 
 =head2 DropAllForeignKeys($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
index ae6b620..b3bee94 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
@@ -48,17 +48,15 @@ OPAC:
                   no: Show
             - lost items on search and detail pages.
         -
-            - Show biblio records on OPAC result page
+            - 'Display OPAC results using XSLT stylesheet at: '
             - pref: OPACXSLTResultsDisplay
-              choices:
-                  yes: using XSLT stylesheets.
-                  no: normally.
+              class: file
+            - '<br />Options:<br />- leave empty for "no xslt"<br />- enter "default" for the default one<br />- put a path to define a xslt file<br />- put an URL for an external specific stylesheet.'
         -
-            - Show item details pages on the OPAC
+            - 'Display OPAC details using XSLT stylesheet at: '
             - pref: OPACXSLTDetailsDisplay
-              choices:
-                  yes: using XSLT stylesheets.
-                  no: normally.
+              class: file
+            - '<br />Options:<br />- leave empty for "no xslt"<br />- enter "default" for the default one<br />- put a path to define a xslt file<br />- put an URL for an external specific stylesheet.'
         -
             - On pages displayed with XSLT stylesheets on the OPAC,
             - pref: DisplayOPACiconsXSLT
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_client.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_client.pref
index efa33a8..edb9072 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_client.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_client.pref
@@ -51,17 +51,15 @@ Staff Client:
               class: url
             - for the Staff Client's favicon. (This should be a complete URL, starting with <code>http://</code>.)
         -
-            - Show biblio records on result page in the staff client
+            - 'Display results in the staff client using XSLT stylesheet at: '
             - pref: XSLTResultsDisplay
-              choices:
-                  yes: using XSLT stylesheets.
-                  no: normally.
+              class: file
+            - '<br />Options:<br />- leave empty for "no xslt"<br />- enter "default" for the default one<br />- put a path to define a xslt file<br />- put an URL for an external specific stylesheet.'
         -
-            - Show item details pages in the staff client
+            - 'Display details in the staff client using XSLT stylesheet at: '
             - pref: XSLTDetailsDisplay
-              choices:
-                  yes: using XSLT stylesheets.
-                  no: normally.
+              class: file
+            - '<br />Options:<br />- leave empty for "no xslt"<br />- enter "default" for the default one<br />- put a path to define a xslt file<br />- put an URL for an external specific stylesheet.'
         -
             - Use the Yahoo UI libraries
             - pref: yuipath
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index b45250d..f64c794 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -92,7 +92,7 @@ SetUTF8Flag($record);
 
 # XSLT processing of some stuff
 if (C4::Context->preference("OPACXSLTDetailsDisplay") ) {
-    $template->param( 'XSLTBloc' => XSLTParse4Display($biblionumber, $record, 'Detail', 'opac') );
+    $template->param( 'XSLTBloc' => XSLTParse4Display($biblionumber, $record, "OPACXSLTDetailsDisplay" ) );
 }
 
 
-- 
1.7.2.5



More information about the Koha-patches mailing list