[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