[Koha-patches] [PATCH 1/2] Bug 4032:XSLT systempreference takes a path to file rather than YesNo
Marc Balmer
marc at msys.ch
Sat Mar 24 18:50:17 CET 2012
Am 24.03.12 18:48, schrieb Dobrica Pavlinusic:
> 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.
Many thanks! I owe you a favour.
>
> 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.
I am really doing all my best so that we can run on PostgreSQL as soon
as possible. It is a bit of work, and I really appreciate that you
changed the diff to not add yet another MySQLism.
Thanks,
Marc
>
>>>> 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