adding XSLT for intranet (UNIMARC only, MARC21 will be done by kf)
authorPaul Poulain <paul.poulain@biblibre.com>
Tue, 10 Nov 2009 16:00:37 +0000 (17:00 +0100)
committerHenri-Damien LAURENT <henridamien.laurent@biblibre.com>
Tue, 10 Nov 2009 21:23:50 +0000 (22:23 +0100)
- the XSLTParse4Display sub now has a new parameter : the interface (intranet or opac)
- the XSLTdisplay sysprefs is common to staff & opac (Auth.pm)
- added UNIMARC xslt in intranet templates (modified to deal with staff/opac differences)

C4/Auth.pm
C4/XSLT.pm
catalogue/detail.pl
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl [new file with mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl [new file with mode: 0644]
opac/opac-detail.pl

index 9fd298f..b96f796 100755 (executable)
@@ -330,6 +330,8 @@ sub get_template_and_user {
             'item-level_itypes'          => C4::Context->preference('item-level_itypes'),
             patronimages                 => C4::Context->preference("patronimages"),
             singleBranchMode             => C4::Context->preference("singleBranchMode"),
+            XSLTDetailsDisplay        => C4::Context->preference("XSLTDetailsDisplay"),
+            XSLTResultsDisplay        => C4::Context->preference("XSLTResultsDisplay"),
                  );
 
     if ( $in->{'type'} eq "intranet" ) {
@@ -352,11 +354,11 @@ sub get_template_and_user {
             intranetreadinghistory      => C4::Context->preference("intranetreadinghistory"),
             intranetstylesheet          => C4::Context->preference("intranetstylesheet"),
             intranetuserjs              => C4::Context->preference("intranetuserjs"),
-           intranetbookbag             => C4::Context->preference("intranetbookbag"),
+            intranetbookbag             => C4::Context->preference("intranetbookbag"),
             noItemTypeImages            => C4::Context->preference("noItemTypeImages"),
             suggestion                  => C4::Context->preference("suggestion"),
             virtualshelves              => C4::Context->preference("virtualshelves"),
-                       StaffSerialIssueDisplayCount => C4::Context->preference("StaffSerialIssueDisplayCount"),
+            StaffSerialIssueDisplayCount => C4::Context->preference("StaffSerialIssueDisplayCount"),
             NoZebra                     => C4::Context->preference('NoZebra'),
         );
     }
@@ -408,8 +410,6 @@ sub get_template_and_user {
             RequestOnOpac             => C4::Context->preference("RequestOnOpac"),
             TemplateEncoding          => "". C4::Context->preference("TemplateEncoding"),
             'Version'                 => C4::Context->preference('Version'),
-            XSLTDetailsDisplay        => C4::Context->preference("XSLTDetailsDisplay"),
-            XSLTResultsDisplay        => C4::Context->preference("XSLTResultsDisplay"),
             hidelostitems             => C4::Context->preference("hidelostitems"),
             mylibraryfirst            => (C4::Context->preference("SearchMyLibraryFirst") && C4::Context->userenv) ? C4::Context->userenv->{'branch'} : '',
             opaclayoutstylesheet      => "" . C4::Context->preference("opaclayoutstylesheet"),
index 98b06da..fb427c3 100644 (file)
@@ -118,7 +118,8 @@ sub getAuthorisedValues4MARCSubfields {
 my $stylesheet;
 
 sub XSLTParse4Display {
-    my ( $biblionumber, $orig_record, $xsl_suffix ) = @_;
+    my ( $biblionumber, $orig_record, $xsl_suffix, $interface ) = @_;
+    $interface = 'opac' unless $interface;
     # grab the XML, run it through our stylesheet, push it out to the browser
     my $record = transformMARCXML4XSLT($biblionumber, $orig_record);
     #return $record->as_formatted();
@@ -139,10 +140,18 @@ sub XSLTParse4Display {
     my $source = $parser->parse_string($xmlrecord);
     unless ( $stylesheet ) {
         my $xslt = XML::LibXSLT->new();
-        my $xslfile = C4::Context->config('opachtdocs') . 
+        my $xslfile;
+        if ($interface eq 'intranet') {
+            $xslfile = C4::Context->config('intrahtdocs') . 
+                      "/prog/en/xslt/" .
+                      C4::Context->preference('marcflavour') .
+                      "slim2intranet$xsl_suffix.xsl";
+        } else {
+            $xslfile = C4::Context->config('opachtdocs') . 
                       "/prog/en/xslt/" .
                       C4::Context->preference('marcflavour') .
                       "slim2OPAC$xsl_suffix.xsl";
+        }
         my $style_doc = $parser->parse_file($xslfile);
         $stylesheet = $xslt->parse_stylesheet($style_doc);
     }
index 16cf460..1a17752 100755 (executable)
@@ -36,6 +36,7 @@ use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn);
 use C4::External::Amazon;
 use C4::Search;                # enabled_staff_search_views
 use C4::VirtualShelves;
+use C4::XSLT;
 
 # use Smart::Comments;
 
@@ -57,6 +58,12 @@ my $fw = GetFrameworkCode($biblionumber);
 my $marcflavour      = C4::Context->preference("marcflavour");
 my $record           = GetMarcBiblio($biblionumber);
 
+# XSLT processing of some stuff
+if (C4::Context->preference("XSLTDetailsDisplay") ) {
+    $template->param('XSLTDetailsDisplay' =>'1',
+        'XSLTBloc' => XSLTParse4Display($biblionumber, $record, 'Detail','intranet') );
+}
+
 # some useful variables for enhanced content;
 # in each case, we're grabbing the first value we find in
 # the record and normalizing it
index 9c0cc32..e7eecd2 100644 (file)
@@ -55,7 +55,10 @@ function verify_images() {
 <!-- TMPL_INCLUDE NAME="cat-toolbar.inc" -->
     <!-- TMPL_IF NAME="AmazonEnabled" --><div class="yui-gb"><!-- TMPL_ELSE --><div class="yui-g"><!-- /TMPL_IF -->
     <div id="catalogue_detail_biblio" class="yui-u first">
-        
+        <!-- TMPL_IF NAME="XSLTDetailsDisplay" -->
+        <!-- TMPL_VAR NAME="XSLTBloc" -->
+    <!-- TMPL_ELSE -->
+
     <h3><!-- TMPL_VAR NAME="title" escape="html"--></h3>
     <!-- TMPL_LOOP NAME="subtitle" -->
        <h4><!-- TMPL_VAR NAME="subfield" --></h4>
@@ -165,6 +168,7 @@ function verify_images() {
                </li>
         <!-- /TMPL_IF -->
         </ul>
+        <!-- /TMPL_IF -->
 </div>
 </div>
 
diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl
new file mode 100644 (file)
index 0000000..479ffa0
--- /dev/null
@@ -0,0 +1,561 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+  xmlns:marc="http://www.loc.gov/MARC21/slim"
+  xmlns:items="http://www.koha.org/items"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  exclude-result-prefixes="marc items">
+
+<xsl:import href="UNIMARCslimUtils.xsl"/>
+<xsl:output method = "xml" indent="yes" omit-xml-declaration = "yes" />
+<xsl:template match="/">
+  <xsl:apply-templates/>
+</xsl:template>
+
+<xsl:template match="marc:record">
+  <xsl:variable name="leader" select="marc:leader"/>
+  <xsl:variable name="leader6" select="substring($leader,7,1)"/>
+  <xsl:variable name="leader7" select="substring($leader,8,1)"/>
+  <xsl:variable name="biblionumber" select="marc:datafield[@tag=090]/marc:subfield[@code='a']"/>
+  
+
+  <xsl:if test="marc:datafield[@tag=200]">
+    <xsl:for-each select="marc:datafield[@tag=200]">
+      <h1>
+        <xsl:call-template name="addClassRtl" />
+        <xsl:variable name="title" select="marc:subfield[@code='a']"/>
+        <xsl:variable name="ntitle"
+         select="translate($title, '&#x0098;&#x009C;','')"/>
+        <xsl:value-of select="$ntitle" />
+        <xsl:if test="marc:subfield[@code='e']">
+          <xsl:text> : </xsl:text>
+          <xsl:for-each select="marc:subfield[@code='e']">
+            <xsl:value-of select="."/>
+          </xsl:for-each>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='b']">
+          <xsl:text> [</xsl:text>
+          <xsl:value-of select="marc:subfield[@code='b']"/>
+          <xsl:text>]</xsl:text>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='f']">
+          <xsl:text> / </xsl:text>
+          <xsl:value-of select="marc:subfield[@code='f']"/>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='g']">
+          <xsl:text> ; </xsl:text>
+          <xsl:value-of select="marc:subfield[@code='g']"/>
+        </xsl:if>
+      </h1>
+    </xsl:for-each>
+  </xsl:if>
+  <xsl:call-template name="tag_4xx" />
+
+  <xsl:call-template name="tag_7xx">
+    <xsl:with-param name="tag">700</xsl:with-param>
+    <xsl:with-param name="label">Auteur principal</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_7xx">
+    <xsl:with-param name="tag">710</xsl:with-param>
+    <xsl:with-param name="label">Collectivité principale</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_7xx">
+    <xsl:with-param name="tag">701</xsl:with-param>
+    <xsl:with-param name="label">Co-auteur</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_7xx">
+    <xsl:with-param name="tag">702</xsl:with-param>
+    <xsl:with-param name="label">Auteur</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_7xx">
+    <xsl:with-param name="tag">711</xsl:with-param>
+    <xsl:with-param name="label">Collectivité co-auteur</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_7xx">
+    <xsl:with-param name="tag">712</xsl:with-param>
+    <xsl:with-param name="label">Collectivité secondaire</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:if test="marc:datafield[@tag=101]">
+    <li>
+      <strong>Langue: </strong>
+      <xsl:for-each select="marc:datafield[@tag=101]">
+        <xsl:for-each select="marc:subfield">
+          <xsl:choose>
+            <xsl:when test="@code='b'">de la trad. intermédiaire, </xsl:when>
+            <xsl:when test="@code='c'">de l'œuvre originale, </xsl:when>
+            <xsl:when test="@code='d'">du résumé, </xsl:when>
+            <xsl:when test="@code='e'">de la table des matières, </xsl:when>
+            <xsl:when test="@code='f'">de la page de titre, </xsl:when>
+            <xsl:when test="@code='g'">du titre propre, </xsl:when>
+            <xsl:when test="@code='h'">d'un livret, </xsl:when>
+            <xsl:when test="@code='i'">des textes d'accompagnement, </xsl:when>
+            <xsl:when test="@code='j'">des sous-titres, </xsl:when>
+          </xsl:choose>
+          <xsl:value-of select="text()"/>
+          <xsl:choose>
+            <xsl:when test="position()=last()">
+              <xsl:text>.</xsl:text>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text> ; </xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:for-each>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=102]">
+    <li>
+      <strong>Pays: </strong>
+      <xsl:for-each select="marc:datafield[@tag=102]">
+        <xsl:for-each select="marc:subfield">
+          <xsl:value-of select="text()"/>
+          <xsl:choose>
+            <xsl:when test="position()=last()">
+              <xsl:text>.</xsl:text>
+            </xsl:when>
+              <xsl:otherwise><xsl:text>, </xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:for-each>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:call-template name="tag_210" />
+
+  <xsl:call-template name="tag_215" />
+
+  <abbr class="unapi-id" title="koha:biblionumber:{marc:datafield[@tag=090]/marc:subfield[@code='a']}"><!-- unAPI --></abbr>
+
+<xsl:if test="marc:controlfield[@tag=005]">
+    <li><strong>PPN: </strong>
+      <xsl:value-of select="marc:controlfield[@tag=005]"/>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=010]/marc:subfield[@code='a']">
+    <li><strong>ISBN: </strong>
+    <xsl:for-each select="marc:datafield[@tag=010]">
+      <xsl:variable name="isbn" select="marc:subfield[@code='a']"/>
+      <xsl:value-of select="marc:subfield[@code='a']"/>
+      <xsl:choose>
+        <xsl:when test="position()=last()">
+          <xsl:text>.</xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text> ; </xsl:text>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=011]">
+    <li>
+      <strong>ISSN: </strong>
+      <xsl:for-each select="marc:datafield[@tag=011]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:choose>
+          <xsl:when test="position()=last()">
+            <xsl:text>.</xsl:text>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:text>; </xsl:text>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:call-template name="tag_title">
+    <xsl:with-param name="tag">225</xsl:with-param>
+    <xsl:with-param name="label">Collection</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:if test="marc:datafield[@tag=676]">
+    <li>
+    <strong>Dewey: </strong>
+      <xsl:for-each select="marc:datafield[@tag=676]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:if test="marc:subfield[@code='v']">
+          <xsl:text>, </xsl:text>
+          <xsl:value-of select="marc:subfield[@code='v']"/>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='z']">
+          <xsl:text>, </xsl:text>
+          <xsl:value-of select="marc:subfield[@code='z']"/>
+        </xsl:if>
+        <xsl:if test="not (position()=last())">
+          <xsl:text> ; </xsl:text>
+        </xsl:if>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=686]">
+    <li>
+    <strong>Classification: </strong>
+      <xsl:for-each select="marc:datafield[@tag=686]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:if test="marc:subfield[@code='b']">
+          <xsl:text>, </xsl:text>
+          <xsl:value-of select="marc:subfield[@code='b']"/>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='c']">
+          <xsl:text>, </xsl:text>
+          <xsl:value-of select="marc:subfield[@code='c']"/>
+        </xsl:if>
+        <xsl:if test="not (position()=last())"><xsl:text> ; </xsl:text></xsl:if>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=327]">
+    <li>
+      <strong>Note de contenu: </strong>
+      <xsl:for-each select="marc:datafield[@tag=327]">
+        <xsl:call-template name="chopPunctuation">
+          <xsl:with-param name="chopString">
+            <xsl:call-template name="subfieldSelect">
+                <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
+                <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
+                <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
+            </xsl:call-template>
+          </xsl:with-param>
+        </xsl:call-template>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=330]">
+    <li>
+      <strong>Résumé: </strong>
+      <xsl:for-each select="marc:datafield[@tag=330]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:choose>
+          <xsl:when test="position()=last()">
+            <xsl:text>.</xsl:text>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:text>; </xsl:text>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=317]">
+    <li>
+      <strong>Note sur la provenance: </strong>
+      <xsl:for-each select="marc:datafield[@tag=317]">
+          <xsl:value-of select="marc:subfield[@code='a']"/>      
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=320]">
+    <li>
+      <strong>Bibliographie: </strong>
+      <xsl:for-each select="marc:datafield[@tag=320]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=328]">
+    <li>
+      <strong>Thèse: </strong>
+      <xsl:for-each select="marc:datafield[@tag=328]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:if test="marc:datafield[@tag=333]">
+    <li>
+      <strong>Public: </strong>
+      <xsl:for-each select="marc:datafield[@tag=333]">
+        <xsl:value-of select="marc:subfield[@code='a']"/>
+        <xsl:choose><xsl:when test="position()=last()"><xsl:text>.</xsl:text></xsl:when><xsl:otherwise><xsl:text>; </xsl:text></xsl:otherwise></xsl:choose>
+      </xsl:for-each>
+    </li>
+  </xsl:if>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">600</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Nom de personne</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">601</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Collectivité</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">602</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Famille</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">604</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Auteur/titre</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">606</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Nom commun</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">607</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Nom géographique</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">608</xsl:with-param>
+    <xsl:with-param name="label">Sujet - Forme</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">610</xsl:with-param>
+    <xsl:with-param name="label">Sujet</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">615</xsl:with-param>
+    <xsl:with-param name="label">Catégorie sujet</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:call-template name="tag_subject">
+    <xsl:with-param name="tag">616</xsl:with-param>
+    <xsl:with-param name="label">Marque déposée</xsl:with-param>
+  </xsl:call-template>
+
+  <xsl:if test="marc:datafield[@tag=856]">
+    <li>
+      <strong>Online Resources: </strong>
+      <xsl:for-each select="marc:datafield[@tag=856]">
+        <a>
+          <xsl:attribute name="href">
+            <xsl:value-of select="marc:subfield[@code='u']"/>
+          </xsl:attribute>
+          <xsl:choose>
+            <xsl:when test="marc:subfield[@code='y' or @code='3' or @code='z']">
+              <xsl:call-template name="subfieldSelect">
+                <xsl:with-param name="codes">y3z</xsl:with-param>
+              </xsl:call-template>
+            </xsl:when>
+            <xsl:when test="not(marc:subfield[@code='y']) and not(marc:subfield[@code='3']) and not(marc:subfield[@code='z'])">
+              Click here to access online
+            </xsl:when>
+          </xsl:choose>
+        </a>
+        <xsl:choose>
+          <xsl:when test="position()=last()"></xsl:when>
+          <xsl:otherwise> | </xsl:otherwise>
+        </xsl:choose>      
+      </xsl:for-each>
+    </strong>
+  </xsl:if>
+
+        <!-- 780 -->
+        <xsl:if test="marc:datafield[@tag=780]">
+        <xsl:for-each select="marc:datafield[@tag=780]">
+        <li><strong>
+        <xsl:choose>
+        <xsl:when test="@ind2=0">
+            Continues:
+        </xsl:when>
+        <xsl:when test="@ind2=1">
+            Continues in part:
+        </xsl:when>
+        <xsl:when test="@ind2=2">
+            Supersedes:
+        </xsl:when>
+        <xsl:when test="@ind2=3">
+            Supersedes in part:
+        </xsl:when>
+        <xsl:when test="@ind2=4">
+            Formed by the union: ... and: ...
+        </xsl:when>
+        <xsl:when test="@ind2=5">
+            Absorbed:
+        </xsl:when>
+        <xsl:when test="@ind2=6">
+            Absorbed in part:
+        </xsl:when>
+        <xsl:when test="@ind2=7">
+            Separated from:
+        </xsl:when>
+        </xsl:choose>
+        </strong>
+                <xsl:variable name="f780">
+                    <xsl:call-template name="subfieldSelect">
+                        <xsl:with-param name="codes">at</xsl:with-param>
+                    </xsl:call-template>
+                </xsl:variable>
+             <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=<xsl:value-of select="translate($f780, '()', '')"/></xsl:attribute>
+                <xsl:value-of select="translate($f780, '()', '')"/>
+            </a>
+        </li>
+        <xsl:choose>
+        <xsl:when test="@ind1=0">
+            <li><xsl:value-of select="marc:subfield[@code='n']"/></li>
+        </xsl:when>
+        </xsl:choose>
+
+        </xsl:for-each>
+        </xsl:if>
+
+        <!-- 785 -->
+        <xsl:if test="marc:datafield[@tag=785]">
+        <xsl:for-each select="marc:datafield[@tag=785]">
+        <li><strong>
+        <xsl:choose>
+        <xsl:when test="@ind2=0">
+            Continued by:
+        </xsl:when>
+        <xsl:when test="@ind2=1">
+            Continued in part by:
+        </xsl:when>
+        <xsl:when test="@ind2=2">
+            Superseded by:
+        </xsl:when>
+        <xsl:when test="@ind2=3">
+            Superseded in part by:
+        </xsl:when>
+        <xsl:when test="@ind2=4">
+            Absorbed by:
+        </xsl:when>
+        <xsl:when test="@ind2=5">
+            Absorbed in part by:
+        </xsl:when>
+        <xsl:when test="@ind2=6">
+            Split into .. and ...:
+        </xsl:when>
+        <xsl:when test="@ind2=7">
+            Merged with ... to form ...
+        </xsl:when>
+        <xsl:when test="@ind2=8">
+            Changed back to:
+        </xsl:when>
+
+        </xsl:choose>
+        </strong>
+                   <xsl:variable name="f785">
+                    <xsl:call-template name="subfieldSelect">
+                        <xsl:with-param name="codes">at</xsl:with-param>
+                    </xsl:call-template>
+                </xsl:variable>
+
+                <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=<xsl:value-of select="translate($f785, '()', '')"/></xsl:attribute>
+                <xsl:value-of select="translate($f785, '()', '')"/>
+            </a>
+
+        </li>
+        </xsl:for-each>
+        </xsl:if>
+
+    </xsl:template>
+
+    <xsl:template name="nameABCDQ">
+            <xsl:call-template name="chopPunctuation">
+                <xsl:with-param name="chopString">
+                    <xsl:call-template name="subfieldSelect">
+                        <xsl:with-param name="codes">aq</xsl:with-param>
+                    </xsl:call-template>
+                </xsl:with-param>
+                <xsl:with-param name="punctuation">
+                    <xsl:text>:,;/ </xsl:text>
+                </xsl:with-param>
+            </xsl:call-template>
+        <xsl:call-template name="termsOfAddress"/>
+    </xsl:template>
+
+    <xsl:template name="nameABCDN">
+        <xsl:for-each select="marc:subfield[@code='a']">
+                <xsl:call-template name="chopPunctuation">
+                    <xsl:with-param name="chopString" select="."/>
+                </xsl:call-template>
+        </xsl:for-each>
+        <xsl:for-each select="marc:subfield[@code='b']">
+                <xsl:value-of select="."/>
+        </xsl:for-each>
+        <xsl:if test="marc:subfield[@code='c'] or marc:subfield[@code='d'] or marc:subfield[@code='n']">
+                <xsl:call-template name="subfieldSelect">
+                    <xsl:with-param name="codes">cdn</xsl:with-param>
+                </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template name="nameACDEQ">
+            <xsl:call-template name="subfieldSelect">
+                <xsl:with-param name="codes">acdeq</xsl:with-param>
+            </xsl:call-template>
+    </xsl:template>
+    <xsl:template name="termsOfAddress">
+        <xsl:if test="marc:subfield[@code='b' or @code='c']">
+            <xsl:call-template name="chopPunctuation">
+                <xsl:with-param name="chopString">
+                    <xsl:call-template name="subfieldSelect">
+                        <xsl:with-param name="codes">bc</xsl:with-param>
+                    </xsl:call-template>
+                </xsl:with-param>
+            </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template name="part">
+        <xsl:variable name="partNumber">
+            <xsl:call-template name="specialSubfieldSelect">
+                <xsl:with-param name="axis">n</xsl:with-param>
+                <xsl:with-param name="anyCodes">n</xsl:with-param>
+                <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
+            </xsl:call-template>
+        </xsl:variable>
+        <xsl:variable name="partName">
+            <xsl:call-template name="specialSubfieldSelect">
+                <xsl:with-param name="axis">p</xsl:with-param>
+                <xsl:with-param name="anyCodes">p</xsl:with-param>
+                <xsl:with-param name="afterCodes">fghkdlmor</xsl:with-param>
+            </xsl:call-template>
+        </xsl:variable>
+        <xsl:if test="string-length(normalize-space($partNumber))">
+                <xsl:call-template name="chopPunctuation">
+                    <xsl:with-param name="chopString" select="$partNumber"/>
+                </xsl:call-template>
+        </xsl:if>
+        <xsl:if test="string-length(normalize-space($partName))">
+                <xsl:call-template name="chopPunctuation">
+                    <xsl:with-param name="chopString" select="$partName"/>
+                </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template name="specialSubfieldSelect">
+        <xsl:param name="anyCodes"/>
+        <xsl:param name="axis"/>
+        <xsl:param name="beforeCodes"/>
+        <xsl:param name="afterCodes"/>
+        <xsl:variable name="str">
+            <xsl:for-each select="marc:subfield">
+                <xsl:if test="contains($anyCodes, @code)      or (contains($beforeCodes,@code) and following-sibling::marc:subfield[@code=$axis])      or (contains($afterCodes,@code) and preceding-sibling::marc:subfield[@code=$axis])">
+                    <xsl:value-of select="text()"/>
+                    <xsl:text> </xsl:text>
+                </xsl:if>
+            </xsl:for-each>
+        </xsl:variable>
+        <xsl:value-of select="substring($str,1,string-length($str)-1)"/>
+    </xsl:template>
+
+</xsl:stylesheet>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl
new file mode 100644 (file)
index 0000000..07d755b
--- /dev/null
@@ -0,0 +1,299 @@
+<?xml version='1.0'?>
+<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+  <xsl:template name="datafield">
+    <xsl:param name="tag"/>
+    <xsl:param name="ind1"><xsl:text> </xsl:text></xsl:param>
+    <xsl:param name="ind2"><xsl:text> </xsl:text></xsl:param>
+    <xsl:param name="subfields"/>
+    <xsl:element name="datafield">
+      <xsl:attribute name="tag">
+        <xsl:value-of select="$tag"/>
+      </xsl:attribute>
+      <xsl:attribute name="ind1">
+        <xsl:value-of select="$ind1"/>
+      </xsl:attribute>
+      <xsl:attribute name="ind2">
+       <xsl:value-of select="$ind2"/>
+         </xsl:attribute>
+       <xsl:copy-of select="$subfields"/>
+    </xsl:element>
+  </xsl:template>
+
+  <xsl:template name="tag_210">
+    <li>
+      <strong>Édition: </strong>
+      <xsl:for-each select="marc:datafield[@tag=210]">
+        <span>
+          <xsl:call-template name="addClassRtl" />
+          <xsl:value-of select="marc:subfield[@code='a']"/>
+          <xsl:if test="marc:subfield[@code='b']">
+            <xsl:if test="marc:subfield[@code='a']">, </xsl:if>
+            <xsl:value-of select="marc:subfield[@code='b']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='a' or @code='b']">
+            <xsl:if test="marc:subfield[@code='a']"> : </xsl:if>
+            <xsl:value-of select="marc:subfield[@code='c']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='d']">
+            <xsl:if test="marc:subfield[@code='a' or @code='c']">, </xsl:if>
+            <xsl:value-of select="marc:subfield[@code='d']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='e']">
+            <xsl:if test="marc:subfield[@code='a' or @code='c' or @code='d']"> — </xsl:if>
+            <xsl:value-of select="marc:subfield[@code='e']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='g']">
+            <xsl:if test="marc:subfield[@code='e']"> : </xsl:if>
+            <xsl:value-of select="marc:subfield[@code='g']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='h']">
+            <xsl:if test="marc:subfield[@code='e' or @code='g']">, </xsl:if>
+            <xsl:value-of select="marc:subfield[@code='h']"/>
+          </xsl:if>
+          <xsl:if test="not (position() = last())">
+            <xsl:text> • </xsl:text>
+          </xsl:if>
+        </span>
+      </xsl:for-each>
+    </li>
+  </xsl:template>
+
+       <xsl:template name="tag_215">
+    <xsl:for-each select="marc:datafield[@tag=215]">
+      <li>
+        <strong>Description: </strong>
+        <xsl:if test="marc:subfield[@code='a']">
+          <xsl:value-of select="marc:subfield[@code='a']"/>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='c']"> :
+          <xsl:value-of select="marc:subfield[@code='c']"/>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='d']"> ;
+          <xsl:value-of select="marc:subfield[@code='d']"/>
+        </xsl:if>
+        <xsl:if test="marc:subfield[@code='e']"> +
+          <xsl:value-of select="marc:subfield[@code='e']"/>
+        </xsl:if>
+      </li>
+    </xsl:for-each>
+  </xsl:template>
+
+       <xsl:template name="tag_4xx">
+    <xsl:for-each select="marc:datafield[@tag=464 or @tag=461]">
+        <li>
+        <strong>Extrait de: </strong>
+        <span>
+          <xsl:call-template name="addClassRtl" />
+          <xsl:if test="marc:subfield[@code='t']">
+            <xsl:value-of select="marc:subfield[@code='t']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='e']"> :
+            <xsl:value-of select="marc:subfield[@code='e']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='f']"> /
+            <xsl:value-of select="marc:subfield[@code='f']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='v']">,
+            <xsl:value-of select="marc:subfield[@code='v']"/>
+          </xsl:if>
+        </span>
+      </li>
+    </xsl:for-each>
+  </xsl:template>
+
+       <xsl:template name="subfieldSelect">
+               <xsl:param name="codes"/>
+               <xsl:param name="delimeter"><xsl:text> </xsl:text></xsl:param>
+               <xsl:param name="subdivCodes"/>
+               <xsl:param name="subdivDelimiter"/>
+               <xsl:variable name="str">
+                       <xsl:for-each select="marc:subfield">
+                               <xsl:if test="contains($codes, @code)">
+                    <xsl:if test="contains($subdivCodes, @code)">
+                        <xsl:value-of select="$subdivDelimiter"/>
+                    </xsl:if>
+                                       <xsl:value-of select="text()"/><xsl:value-of select="$delimeter"/>
+                               </xsl:if>
+                       </xsl:for-each>
+               </xsl:variable>
+               <xsl:value-of select="substring($str,1,string-length($str)-string-length($delimeter))"/>
+       </xsl:template>
+
+       <xsl:template name="buildSpaces">
+               <xsl:param name="spaces"/>
+               <xsl:param name="char"><xsl:text> </xsl:text></xsl:param>
+               <xsl:if test="$spaces>0">
+                       <xsl:value-of select="$char"/>
+                       <xsl:call-template name="buildSpaces">
+                               <xsl:with-param name="spaces" select="$spaces - 1"/>
+                               <xsl:with-param name="char" select="$char"/>
+                       </xsl:call-template>
+               </xsl:if>
+       </xsl:template>
+
+       <xsl:template name="chopPunctuation">
+               <xsl:param name="chopString"/>
+               <xsl:variable name="length" select="string-length($chopString)"/>
+               <xsl:choose>
+                       <xsl:when test="$length=0"/>
+                       <xsl:when test="contains('.:,;/ ', substring($chopString,$length,1))">
+                               <xsl:call-template name="chopPunctuation">
+                                       <xsl:with-param name="chopString" select="substring($chopString,1,$length - 1)"/>
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:when test="not($chopString)"/>
+                       <xsl:otherwise><xsl:value-of select="$chopString"/></xsl:otherwise>
+               </xsl:choose>
+    <xsl:text> </xsl:text>
+       </xsl:template>
+
+       <xsl:template name="addClassRtl">
+    <xsl:variable name="lang" select="marc:subfield[@code='7']" />
+    <xsl:if test="$lang = 'ha' or $lang = 'Hebrew' or $lang = 'fa' or $lang = 'Arabe'">
+      <xsl:attribute name="class">rtl</xsl:attribute>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="tag_title">
+    <xsl:param name="tag" />
+    <xsl:param name="label" />
+    <xsl:if test="marc:datafield[@tag=$tag]">
+      <li>
+        <strong><xsl:value-of select="$label"/>: </strong>
+        <xsl:for-each select="marc:datafield[@tag=$tag]">
+          <xsl:value-of select="marc:subfield[@code='a']" />
+          <xsl:if test="marc:subfield[@code='d']">
+            <xsl:text> : </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='e']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='e']">
+            <xsl:for-each select="marc:subfield[@code='e']">
+              <xsl:text> </xsl:text>
+              <xsl:value-of select="."/>
+            </xsl:for-each>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='f']">
+            <xsl:text> / </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='f']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='h']">
+            <xsl:text>, </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='h']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='i']">
+            <xsl:text>, </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='i']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='v']">
+            <xsl:text>, </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='v']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='x']">
+            <xsl:text>, </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='x']"/>
+          </xsl:if>
+          <xsl:if test="marc:subfield[@code='z']">
+            <xsl:text>, </xsl:text>
+            <xsl:value-of select="marc:subfield[@code='z']"/>
+          </xsl:if>
+        </xsl:for-each>
+      </li>
+    </xsl:if>
+  </xsl:template>
+
+
+  <xsl:template name="tag_subject">
+    <xsl:param name="tag" />
+    <xsl:param name="label" />
+    <xsl:if test="marc:datafield[@tag=$tag]">
+      <li>
+        <strong><xsl:value-of select="$label"/>: </strong>
+        <xsl:for-each select="marc:datafield[@tag=$tag]">
+          <a>
+            <xsl:choose>
+              <xsl:when test="marc:subfield[@code=9]">
+                <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
+              </xsl:when>
+              <xsl:otherwise>
+                <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=su:<xsl:value-of select="marc:subfield[@code='a']"/></xsl:attribute>
+              </xsl:otherwise>
+            </xsl:choose>
+            <xsl:call-template name="chopPunctuation">
+              <xsl:with-param name="chopString">
+                <xsl:call-template name="subfieldSelect">
+                    <xsl:with-param name="codes">abcdjpvxyz</xsl:with-param>
+                    <xsl:with-param name="subdivCodes">jpxyz</xsl:with-param>
+                    <xsl:with-param name="subdivDelimiter">-- </xsl:with-param>
+                </xsl:call-template>
+              </xsl:with-param>
+            </xsl:call-template>
+          </a>
+          <xsl:if test="not (position()=last())">
+            <xsl:text> | </xsl:text>
+          </xsl:if>
+        </xsl:for-each>
+      </li>
+    </xsl:if>
+  </xsl:template>
+
+
+  <xsl:template name="tag_7xx">
+    <xsl:param name="tag" />
+    <xsl:param name="label" />
+    <xsl:if test="marc:datafield[@tag=$tag]">
+      <li>
+        <strong><xsl:value-of select="$label" />: </strong>
+        <xsl:for-each select="marc:datafield[@tag=$tag]">
+          <span>
+            <xsl:call-template name="addClassRtl" />
+            <a>
+              <xsl:choose>
+                <xsl:when test="marc:subfield[@code=9]">
+                  <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=an:<xsl:value-of select="marc:subfield[@code=9]"/></xsl:attribute>
+                </xsl:when>
+                <xsl:otherwise>
+                  <xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='b']"/></xsl:attribute>
+                </xsl:otherwise>
+              </xsl:choose>
+              <xsl:if test="marc:subfield[@code='a']">
+                <xsl:value-of select="marc:subfield[@code='a']"/>
+              </xsl:if>
+              <xsl:if test="marc:subfield[@code='b']">
+                <xsl:text>, </xsl:text>
+                <xsl:value-of select="marc:subfield[@code='b']"/>
+              </xsl:if>
+              <xsl:if test="marc:subfield[@code='c']">
+                <xsl:text>, </xsl:text>
+                <xsl:value-of select="marc:subfield[@code='c']"/>
+              </xsl:if>
+              <xsl:if test="marc:subfield[@code='d']">
+                <xsl:text> </xsl:text>
+                <xsl:value-of select="marc:subfield[@code='d']"/>
+              </xsl:if>
+              <xsl:if test="marc:subfield[@code='f']">
+                <span dir="ltr">
+                <xsl:text> (</xsl:text>
+                <xsl:value-of select="marc:subfield[@code='f']"/>
+                <xsl:text>)</xsl:text>
+                </span>
+              </xsl:if>
+              <xsl:if test="marc:subfield[@code='g']">
+                <xsl:text> </xsl:text>
+                <xsl:value-of select="marc:subfield[@code='g']"/>
+              </xsl:if>
+              <xsl:if test="marc:subfield[@code='p']">
+                <xsl:text> </xsl:text>
+                <xsl:value-of select="marc:subfield[@code='p']"/>
+              </xsl:if>
+            </a>
+          </span>
+          <xsl:if test="not (position() = last())">
+            <xsl:text> ; </xsl:text>
+          </xsl:if>
+        </xsl:for-each>
+      </li>
+    </xsl:if>
+  </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
index 0dfe23c..cc67947 100755 (executable)
@@ -70,7 +70,7 @@ $template->param( biblionumber => $biblionumber );
 # XSLT processing of some stuff
 if (C4::Context->preference("XSLTDetailsDisplay") ) {
     $template->param(
-        'XSLTBloc' => XSLTParse4Display($biblionumber, $record, 'Detail') );
+        'XSLTBloc' => XSLTParse4Display($biblionumber, $record, 'Detail'),'opac' );
 }
 
 $template->param('OPACShowCheckoutName' => C4::Context->preference("OPACShowCheckoutName") );