Followup Adding system preference XSLT*FileName
[koha.git] / C4 / XSLT.pm
index cd53e31..5374521 100644 (file)
@@ -133,16 +133,28 @@ sub getAuthorisedValues4MARCSubfields {
 my $stylesheet;
 
 sub XSLTParse4Display {
-    my ( $biblionumber, $orig_record, $xslfilename ) = @_;
+    my ( $biblionumber, $orig_record, $type ) = @_;
+    my $xslfilename=C4::Context->preference("XSLT$type"."Filename")||_buildfilename($type);
     # grab the XML, run it through our stylesheet, push it out to the browser
     my $record = transformMARCXML4XSLT($biblionumber, $orig_record);
     #return $record->as_formatted();
     my $itemsxml  = buildKohaItemsNamespace($biblionumber);
-    my $xmlrecord = $record->as_xml();
-    $xmlrecord =~ s/\<\/record\>/$itemsxml\<\/record\>/;
+    my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour'));
+    my $sysxml = "";
+    foreach my $syspref ( qw/OPACURLOpenInNewWindow DisplayOPACiconsXSLT URLLinkText/ ) {
+        if (C4::Context->preference( $syspref ) ){
+        $sysxml .= "<syspref name=\"$syspref\">" .
+                   C4::Context->preference( $syspref ) .
+                   "</syspref>\n";
+        }
+    }
+    $sysxml = "<sysprefs>\n".$sysxml."</sysprefs>\n" if length($sysxml);
+    $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml\<\/record\>/;
+    $xmlrecord =~ s/\& /\&amp\; /;
+
     my $parser = XML::LibXML->new();
     # don't die when you find &, >, etc
-    $parser->recover_silently(1);
+    $parser->recover_silently(0);
     my $source = $parser->parse_string($xmlrecord);
     unless ( $stylesheet->{$xslfilename} ) {
         my $xslt = XML::LibXSLT->new();
@@ -163,6 +175,15 @@ sub XSLTParse4Display {
     return $newxmlrecord;
 }
 
+
+sub _buildfilename{
+    my $type=shift;
+    return C4::Context->config('opachtdocs') .
+                          "/prog/en/xslt/" .
+                          C4::Context->preference('marcflavour') .
+                          "slim2OPAC$type.xsl";
+}
+
 sub buildKohaItemsNamespace {
     my ($biblionumber) = @_;
     my @items = C4::Items::GetItemsInfo($biblionumber);