From: Jared Camins-Esakov To: dev@bywatersolutions.com Cc: Jared Camins-Esakov Subject: [PATCH] Bug 3326: Work around Zebra's handling of & entities Date: Mon, 14 Mar 2011 12:23:33 -0400 Message-Id: <1300119813-2109-1-git-send-email-jcamins@bywatersolutions.com> X-Mailer: git-send-email 1.7.2.3 X-Original-Sender: jcamins@bywatersolutions.com X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.216.170 is neither permitted nor denied by best guess record for domain of jcamins@bywatersolutions.com) smtp.mail=jcamins@bywatersolutions.com Precedence: list Mailing-list: list dev@bywatersolutions.com; contact dev+owners@bywatersolutions.com List-ID: X-Google-Group-Id: 274270250429 List-Help: , Content-Type: text/plain; charset="utf-8" When using XSLT mode, the OPAC results display will show "&" instead of "&" when Zebra is indexing in XML mode. This patch works around this by replacing "&" with "&" and then extends the previous fix to apply to all occurrences of "& " instead of just the first. --- C4/Search.pm | 4 +++- C4/XSLT.pm | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index 26dc67f..c486df9 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -1687,7 +1687,9 @@ sub searchResults { # FIXME note that XSLTResultsDisplay (use of XSLT to format staff interface bib search results) # is not implemented yet $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, 'Results', - $search_context); + $search_context, 1); + # the last parameter tells Koha to clean up the problematic ampersand entities that Zebra outputs + } # last check for norequest : if itemtype is notforloan, it can't be reserved either, whatever the items diff --git a/C4/XSLT.pm b/C4/XSLT.pm index 348930f..d602688 100644 --- a/C4/XSLT.pm +++ b/C4/XSLT.pm @@ -120,7 +120,7 @@ sub getAuthorisedValues4MARCSubfields { my $stylesheet; sub XSLTParse4Display { - my ( $biblionumber, $orig_record, $xsl_suffix, $interface ) = @_; + my ( $biblionumber, $orig_record, $xsl_suffix, $interface, $fixamps ) = @_; $interface = 'opac' unless $interface; # grab the XML, run it through our stylesheet, push it out to the browser my $record = transformMARCXML4XSLT($biblionumber, $orig_record); @@ -139,8 +139,11 @@ sub XSLTParse4Display { } $sysxml .= "\n"; $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml\<\/record\>/; + if ($fixamps) { # We need to correct the ampersand entities that Zebra outputs + $xmlrecord =~ s/\&/\&/g; + } $xmlrecord =~ s/\& /\&\; /; - $xmlrecord=~ s/\&\;amp\; /\&\; /; + $xmlrecord =~ s/\&\;amp\; /\&\; /; my $parser = XML::LibXML->new(); # don't die when you find &, >, etc -- 1.7.2.3