Merge remote branch 'kc/new/bug_4991' into kcmaster
authorChris Cormack <chrisc@catalyst.net.nz>
Wed, 3 Nov 2010 01:48:37 +0000 (14:48 +1300)
committerChris Cormack <chrisc@catalyst.net.nz>
Wed, 3 Nov 2010 01:49:13 +0000 (14:49 +1300)
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
C4/AuthoritiesMarc.pm
C4/Koha.pm
C4/XSLT.pm
etc/zebradb/biblios/etc/bib1.att
etc/zebradb/ccl.properties
etc/zebradb/marc_defs/marc21/biblios/record.abs
installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql
installer/data/mysql/en/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql
koha-tmpl/intranet-tmpl/prog/en/includes/search_indexes.inc
koha-tmpl/opac-tmpl/prog/en/modules/opac-advsearch.tmpl
t/Koha.t

index b4a0d78..d07cca4 100644 (file)
@@ -901,7 +901,7 @@ sub FindDuplicateAuthority {
         $_->[1]=~s/$filtervalues/ /g; $query.= " and he,wrdl=\"".$_->[1]."\"" if ($_->[0]=~/[A-z]/);
       }
     }
-    my ($error, $results, $total_hits)=SimpleSearch( $query, 0, 1, [ "authorityserver" ] );
+    my ($error, $results, $total_hits) = C4::Search::SimpleSearch( $query, 0, 1, [ "authorityserver" ] );
     # there is at least 1 result => return the 1st one
     if (@$results>0) {
       my $marcrecord = MARC::File::USMARC::decode($results->[0]);
index d7ba1af..e746f83 100644 (file)
@@ -62,6 +62,7 @@ BEGIN {
                &GetNormalizedISBN
                &GetNormalizedEAN
                &GetNormalizedOCLCNumber
+        &xml_escape
 
                $DEBUG
        );
@@ -1194,6 +1195,25 @@ sub GetKohaAuthorisedValuesFromField {
   }
 }
 
+=head2 xml_escape
+
+  my $escaped_string = C4::Koha::xml_escape($string);
+
+Convert &, <, >, ', and " in a string to XML entities
+
+=cut
+
+sub xml_escape {
+    my $str = shift;
+    return '' unless defined $str;
+    $str =~ s/&/&amp;/g;
+    $str =~ s/</&lt;/g;
+    $str =~ s/>/&gt;/g;
+    $str =~ s/'/&apos;/g;
+    $str =~ s/"/&quot;/g;
+    return $str;
+}
+
 =head2 display_marc_indicators
 
   my $display_form = C4::Koha::display_marc_indicators($field);
index 1c45e44..ddc9077 100644 (file)
@@ -210,9 +210,8 @@ sub buildKohaItemsNamespace {
         } else {
             $status = "available";
         }
-        my $homebranch = $branches->{$item->{homebranch}}->{'branchname'};
-        my $itemcallnumber = $item->{itemcallnumber} || '';
-        $itemcallnumber =~ s/\&/\&amp\;/g;
+        my $homebranch = xml_escape($branches->{$item->{homebranch}}->{'branchname'});
+           my $itemcallnumber = xml_escape($item->{itemcallnumber});
         $xml.= "<item><homebranch>$homebranch</homebranch>".
                "<status>$status</status>".
                "<itemcallnumber>".$itemcallnumber."</itemcallnumber>"
index d47b2a3..97c3d68 100644 (file)
@@ -189,3 +189,6 @@ att 9903    lex
 att 9904    arl
 att 9013    arp
 att 9520    Item
+# Curriculum
+att 9658    curriculum
+
index b780925..4bca55e 100644 (file)
@@ -1052,6 +1052,8 @@ arl 1=9904 r=r
 
 #Accelerated Reader Point
 arp 1=9013 r=r
+# Curriculum
+curriculum 1=9658
 
 ## Statuses
 popularity 1=issues
index 6cf37ba..4874bfd 100644 (file)
@@ -188,6 +188,9 @@ melm 656$9      Koha-Auth-Number
 melm 656        Subject
 melm 657$9      Koha-Auth-Number    
 melm 657        Subject
+melm 658$a     curriculum:w,curriculum:p
+melm 658$b     curriculum:w,curriculum:p
+melm 658$c     curriculum:w,curriculum:p
 melm 690$9      Koha-Auth-Number    
 melm 690        Subject,Subject:p
 
index a5e7d77..3cbc997 100644 (file)
@@ -1895,9 +1895,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -6, '', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, '', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, '', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, '', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, 0, '', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, '', '', '', NULL),
index 8821aa2..78a18d6 100644 (file)
@@ -1920,9 +1920,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'BKS', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'BKS', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'BKS', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'BKS', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'BKS', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'BKS', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'BKS', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'BKS', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'BKS', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'BKS', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'BKS', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'BKS', '', '', NULL),
@@ -5841,9 +5841,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'CF', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'CF', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'CF', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'CF', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'CF', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'CF', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'CF', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'CF', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'CF', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'CF', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'CF', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'CF', '', '', NULL),
@@ -9761,9 +9761,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'SR', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'SR', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'SR', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'SR', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'SR', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'SR', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'SR', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'SR', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'SR', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'SR', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'SR', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'SR', '', '', NULL),
@@ -13681,9 +13681,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'VR', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'VR', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'VR', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'VR', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'VR', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'VR', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'VR', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'VR', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'VR', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'VR', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'VR', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'VR', '', '', NULL),
@@ -17599,9 +17599,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'AR', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'AR', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'AR', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'AR', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'AR', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'AR', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'AR', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'AR', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'AR', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'AR', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'AR', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'AR', '', '', NULL),
@@ -21517,9 +21517,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'KT', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'KT', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'KT', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'KT', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'KT', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'KT', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'KT', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'KT', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'KT', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'KT', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'KT', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'KT', '', '', NULL),
@@ -25436,9 +25436,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'IR', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'IR', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'IR', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'IR', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'IR', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'IR', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'IR', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'IR', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'IR', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'IR', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'IR', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'IR', '', '', NULL),
@@ -29351,9 +29351,9 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
                ('658', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -1, 'SER', '', '', NULL),
                ('658', '6', 'Linkage', 'Linkage', 0, 0, '', 6, '', '', '', NULL, -6, 'SER', '', '', NULL),
                ('658', '8', 'Field link and sequence number', 'Field link and sequence number', 1, 0, '', 6, '', '', '', NULL, -6, 'SER', '', '', NULL),
-               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, -1, 'SER', '', '', NULL),
-               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, -1, 'SER', '', '', NULL),
-               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, -1, 'SER', '', '', NULL),
+               ('658', 'a', 'Main curriculum objective', 'Main curriculum objective', 0, 0, '', 6, '', 'TOPIC_TERM', '', NULL, 0, 'SER', '', '', NULL),
+               ('658', 'b', 'Subordinate curriculum objective', 'Subordinate curriculum objective', 1, 0, '', 6, '', '', '', NULL, 0, 'SER', '', '', NULL),
+               ('658', 'c', 'Curriculum code', 'Curriculum code', 0, 0, '', 6, '', '', '', NULL, 0, 'SER', '', '', NULL),
                ('658', 'd', 'Correlation factor', 'Correlation factor', 0, 0, '', 6, '', '', '', NULL, -1, 'SER', '', '', NULL),
                ('662', '2', 'Source of term', 'Source of term', 0, 0, '', 6, '', '', '', NULL, -6, 'SER', '', '', NULL),
                ('662', '3', 'Materials specified', 'Materials specified', 0, 0, '', 6, '', '', '', NULL, -6, 'SER', '', '', NULL),
index cd3226c..fe58c61 100644 (file)
@@ -20,6 +20,7 @@
     <option value="callnum">&nbsp;&nbsp;&nbsp;&nbsp; Call Number</option>
     <option value="ln,rtrn">Language</option>
     <option value="nt">Notes/Comments</option>
+    <option value="curriculum">Curriculum</option>
     <option value="pb">Publisher</option>
     <option value="pl">Publisher Location</option>
     <option value="yr">Publication Date (yyyy)</option>
index 52b00e7..1ee82d0 100644 (file)
@@ -82,6 +82,7 @@
 <!-- /TMPL_IF -->
 <!-- TMPL_IF NAME="expanded_options" -->
             <option value="nt">Notes/Comments</option>
+            <option value="curriculum">Curriculum</option>
 <!-- /TMPL_IF -->
             <option value="pb,wrdl">Publisher</option>
             <option value="pl,wrdl">Publisher Location</option>
index c06a406..a042f47 100755 (executable)
--- a/t/Koha.t
+++ b/t/Koha.t
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 2;
+use Test::More tests => 5;
 
 use_ok('C4::Koha');
 
@@ -13,3 +13,9 @@ my $date = "01/01/2002";
 my $newdate = &slashifyDate("2002-01-01");
 
 ok($date eq $newdate, 'slashifyDate');
+
+my $undef = undef;
+is(xml_escape($undef), '', 'xml_escape() returns empty string on undef input');
+my $str = q{'"&<>'};
+is(xml_escape($str), '&apos;&quot;&amp;&lt;&gt;&apos;', 'xml_escape() works as expected');
+is($str, q{'"&<>'}, '... and does not change input in place');