[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