Bug 21644: better UNIMARC XSLT display of 210 in intranet
authorFridolin Somers <fridolin.somers@biblibre.com>
Wed, 24 Oct 2018 12:23:02 +0000 (14:23 +0200)
committerJesse Maseto <jesse@bywatersolution.com>
Tue, 18 Dec 2018 13:47:49 +0000 (13:47 +0000)
In intranet default UNIMARC XSLT display of 210 is tricky.
It tests each subfield with a complex conditional prefix.
In OPAC default UNIMARC XSLT display 210 is simply displayed with a loop on all subfields.

I propose to use the same code as OPAC in intranet.
It allows to display $f and removes strange middle-score character.

Test plan:
1) Doni't apply patch
2) Use an UNIMARC database
3) Use default XSLT in all displays
4) Configure a framework to allow 210 subfields from 'a' to 'h'
5) Edit a record with this framework
6) In each 210 subfield enter its letter : $a a, $b b ...
7) Save record
8) Look at record in OPAC, you see : "Publication: a, b : c, d, e, f : g, h"
9) Look at record in intranet
10) You see : ""Publication: a, b : c, d - e : g, h
11) Apply patch
12) Look at record in intranet
13) You see : "Publication: a, b : c, d, e, f : g, h"

Signed-off-by: Andreas Roussos <arouss1980@gmail.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
This patch makes intranet consistent with staff again on this area.
Note that we loose some punctuation like "- e".

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit 7b16603b310212cc42d2e06e4b9bcaefa4b066ea)

Signed-off-by: Jesse Maseto <jesse@bywatersolution.com>

koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl

index 48d50c5..c41777b 100644 (file)
       <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:for-each select="marc:subfield">
+            <xsl:choose>
+              <xsl:when test="@code='c' or @code='g'">
+                <xsl:if test="position()>1">
+                  <xsl:text> : </xsl:text>
+                </xsl:if>
+                <xsl:value-of select="."/>
+              </xsl:when>
+              <xsl:otherwise>
+                <xsl:if test="position()>1">
+                  <xsl:text>, </xsl:text>
+                </xsl:if>
+                <xsl:value-of select="."/>
+              </xsl:otherwise>
+            </xsl:choose>
+          </xsl:for-each>
           <xsl:if test="not (position() = last())">
             <xsl:text> • </xsl:text>
           </xsl:if>