[Koha-patches] [PATCH] Bug 5639 (MT #3605) Fix escaping in ILSDI

Chris Cormack chrisc at catalyst.net.nz
Thu Mar 31 22:24:42 CEST 2011


From: Jean-André Santoni <jeanandre.santoni at biblibre.com>

---
 C4/ILSDI/Services.pm                           |   15 ++------
 koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl |   44 ++++++++++++------------
 opac/ilsdi.pl                                  |    1 -
 3 files changed, 26 insertions(+), 34 deletions(-)

diff --git a/C4/ILSDI/Services.pm b/C4/ILSDI/Services.pm
index ba0c429..90f741a 100644
--- a/C4/ILSDI/Services.pm
+++ b/C4/ILSDI/Services.pm
@@ -193,15 +193,12 @@ sub GetRecords {
         # Get the biblioitem from the biblionumber
         my $biblioitem = ( GetBiblioItemByBiblioNumber( $biblionumber, undef ) )[0];
         if ( not $biblioitem->{'biblionumber'} ) {
-            $biblioitem = "RecordNotFound";
+            $biblioitem->{code} = "RecordNotFound";
         }
 
         # We don't want MARC to be displayed
         delete $biblioitem->{'marc'};
 
-        # nor the XML declaration of MARCXML
-        $biblioitem->{'marcxml'} =~ s/<\?xml version="1.0" encoding="UTF-8"\?>//go;
-
         # Get most of the needed data
         my $biblioitemnumber = $biblioitem->{'biblioitemnumber'};
         my @reserves         = GetReservesFromBiblionumber( $biblionumber, undef, undef );
@@ -224,8 +221,6 @@ sub GetRecords {
         $biblioitem->{'reserves'}->{'reserve'} = $reserves[1];
         $biblioitem->{'issues'}->{'issue'}     = $issues;
 
-        map { $biblioitem->{$_} = encode_entities( $biblioitem->{$_}, '&' ) } grep( !/marcxml/, keys %$biblioitem );
-        
         push @records, $biblioitem;
     }
 
@@ -256,18 +251,16 @@ sub GetAuthorityRecords {
         return { code => 'UnsupportedSchema' };
     }
 
-    my $records;
+    my @records;
 
     # Let's loop over the authority IDs
     foreach my $authid ( split( / /, $cgi->param('id') ) ) {
 
         # Get the record as XML string, or error code
-        my $record = GetAuthorityXML($authid) || "<record><code>RecordNotFound</code></record>";
-        $record =~ s/<\?xml(.*)\?>//go;
-        $records .= $record;
+        push @records, GetAuthorityXML($authid) || { code => 'RecordNotFound' };
     }
 
-    return $records;
+    return { record => \@records };
 }
 
 =head2 LookupPatron
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl
index 9ffb236..a067507 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl
@@ -120,6 +120,7 @@
     &lt;biblioitemnumber&gt;1&lt;/biblioitemnumber&gt;
     &lt;isbn&gt;9782862749198&lt;/isbn&gt;
     &lt;marcxml&gt;
+      &lt;?xml version="1.0" encoding="UTF-8" ?&gt;
       &lt;record
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd"
@@ -208,6 +209,7 @@
     &lt;biblioitemnumber&gt;2&lt;/biblioitemnumber&gt;
     &lt;isbn&gt;9782265078031&lt;/isbn&gt;
     &lt;marcxml&gt;
+      &lt;?xml version="1.0" encoding="UTF-8" ?&gt;
       &lt;record
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd"
@@ -316,41 +318,39 @@
                     ilsdi.pl?service=GetAuthorityRecords&id=1+2+99999
                 </a>
                 <h4>Example Response</h4>
-<pre>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
+<pre>&lt;xml version="1.0" encoding="UTF-8"&gt;;
 &lt;GetAuthorityRecords&gt;
+  &lt;record&gt;
+    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
   &lt;record
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd"
     xmlns="http://www.loc.gov/MARC21/slim"&gt;
-    &lt;leader&gt;00126nx  j2200073   4500 &lt;/leader&gt;
+      &lt;leader&gt;00182     2200085   4500&lt;/leader&gt;
     &lt;controlfield tag="001"&gt;1&lt;/controlfield&gt;
-    &lt;datafield tag="250" ind1=" " ind2=" "&gt;
-      &lt;subfield code="a"&gt;TECHNIQUE&lt;/subfield&gt;
+      &lt;datafield tag="200" ind1=" " ind2=" "&gt;
+        &lt;subfield code="a"&gt;Hugo&lt;/subfield&gt;
+        &lt;subfield code="b"&gt;Victor&lt;/subfield&gt;
     &lt;/datafield&gt;
-    &lt;datafield tag="100" ind1=" " ind2=" "&gt;
-      &lt;subfield code="a"&gt;20071210afrey50      ba0&lt;/subfield&gt;
-    &lt;/datafield&gt;
-    &lt;datafield tag="152" ind1=" " ind2=" "&gt;
-      &lt;subfield code="b"&gt;NC&lt;/subfield&gt;
-    &lt;/datafield&gt;
-  &lt;/record&gt;
-  &lt;record
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd"
-    xmlns="http://www.loc.gov/MARC21/slim"&gt;
-    &lt;leader&gt;00130nx  j2200073   4500 &lt;/leader&gt;
-    &lt;controlfield tag="001"&gt;2&lt;/controlfield&gt;
-    &lt;datafield tag="250" ind1=" " ind2=" "&gt;
-      &lt;subfield code="a"&gt;CHEMIN DE FER&lt;/subfield&gt;
+      &lt;datafield tag="801" ind1=" " ind2=" "&gt;
+        &lt;subfield code="a"&gt;France&lt;/subfield&gt;
+        &lt;subfield code="b"&gt;Nimes&lt;/subfield&gt;
+        &lt;subfield code="c"&gt;2010/04/13&lt;/subfield&gt;
     &lt;/datafield&gt;
     &lt;datafield tag="100" ind1=" " ind2=" "&gt;
-      &lt;subfield code="a"&gt;20071210afrey50      ba0&lt;/subfield&gt;
+        &lt;subfield code="a"&gt;20100413     50                    &lt;/subfield&gt;
     &lt;/datafield&gt;
     &lt;datafield tag="152" ind1=" " ind2=" "&gt;
-      &lt;subfield code="b"&gt;NC&lt;/subfield&gt;
+        &lt;subfield code="b"&gt;NP&lt;/subfield&gt;
     &lt;/datafield&gt;
   &lt;/record&gt;
-  &lt;record&gt;RecordNotFound&lt;/record&gt;
+  &lt;/record&gt;
+  &lt;record&gt;
+    &lt;code&gt;RecordNotFound&lt;/code&gt;
+  &lt;/record&gt;
+  &lt;record&gt;
+    &lt;code&gt;RecordNotFound&lt;/code&gt;
+  &lt;/record&gt;
 &lt;/GetAuthorityRecords&gt;</pre>
 
 <!-- TMPL_ELSIF NAME="LookupPatron" -->
diff --git a/opac/ilsdi.pl b/opac/ilsdi.pl
index 56058f0..48fd7ba 100755
--- a/opac/ilsdi.pl
+++ b/opac/ilsdi.pl
@@ -233,7 +233,6 @@ print CGI::header('-type'=>'text/xml', '-charset'=>'utf-8');
 print XMLout(
     $out,
     noattr        => 1,
-    noescape      => 1,
     nosort        => 1,
     xmldecl       => '<?xml version="1.0" encoding="UTF-8" ?>',
     RootName      => $service,
-- 
1.7.1



More information about the Koha-patches mailing list