[Koha-patches] [PATCH 1/2] Bug 4032:XSLT systempreference takes a path to file rather than YesNo
Dobrica Pavlinusic
dpavlin at rot13.org
Sat Mar 24 18:48:01 CET 2012
On Sat, Mar 24, 2012 at 06:31:23PM +0100, Marc Balmer wrote:
> Am 24.03.12 18:28, schrieb Dobrica Pavlinusic:
> > On Sat, Mar 24, 2012 at 06:18:35PM +0100, Marc Balmer wrote:
> >> Please don't use backquotes in SQL statements, they break PostgrSQL.
> >
> > I would totally agree, but this is 4032 which is allready signed off
> > with nasty backquotes which I sent to patches list (again) by mistake.
>
>
> Please, please, please, no more backquotes. Rewrite the patch. Put it
> back. It is against the guidelines and it is really not very funny to
> work on the PostgreSQL support when at the same time folks keep putting
> MySQLisms in.
>
> Please correct that patch, it is easy enough to do.
Done.
FWIW, I would really *love* to run Koha on PostgreSQL, but I was
reluctant to touch patch which is not mine, so I'm to blame.
> >> Am 24.03.2012 um 18:12 schrieb Dobrica Pavlinusic <dpavlin at rot13.org>:
> >>
> >>> 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.
> >>> ---
> >>> 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..f43bfba 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
> >>>
> >>> _______________________________________________
> >>> Koha-patches mailing list
> >>> Koha-patches at lists.koha-community.org
> >>> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches
> >>> website : http://www.koha-community.org/
> >>> git : http://git.koha-community.org/
> >>> bugs : http://bugs.koha-community.org/
More information about the Koha-patches
mailing list