[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:28:42 CET 2012


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.

> 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