Bug 25082: Make 041 descriptions display, if authorised value list is used
authorKatrin Fischer <katrin.fischer.83@web.de>
Sun, 12 Apr 2020 16:30:05 +0000 (16:30 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 11 May 2020 08:46:02 +0000 (09:46 +0100)
When 041$a or another subfield is linked to an authorised value list,
Koha will replace the codes with the descriptions from the authorised
value in the MARCXML before passing it to the XSLT.

The XSLT was made to translate codes into descriptions - as there is
no code now, this fails and 'unknown language' is shown.

The patch changes the handling so that when the XSLT is handled something
that doesn't match a known code, it displays the subfield without
processing.

To test:
- Create some records with 041.
  Examples: http://www.loc.gov/marc/bibliographic/bd041.html
- Verify this displays nicely in staff and OPAC
- Apply patch
- Verify display is unchanged
- Remove the patch
- Change one of your MARC frameworks (use another framework than
  for your first test records)
  and link the 041 subfields to the LANG authorised value list
- Go to administration and create some entries for LANG with language
  codes and descriptions
- Catalog a 041 using the normal editor (not advanced)
- You can now use a pull down to select the values you want
- Verify the display is now 'Unknown language' for this record
- Apply patch
- Verify all records display the language descriptions now, using
  an authorised value or not
- Run misc/maintenance/generate_MARC21Languages.pl

Verify the output at the end reads like:
<xsl:otherwise>
    <!-- when 041\$a is mapped to an authorised value list, this will show the description -->
    <xsl:value-of select="\$code" />
</xsl:otherwise>

Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21Languages.xsl
koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl
koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21Languages.xsl
koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slimUtils.xsl
misc/maintenance/generate_MARC21Languages.pl

index a0889a4..bf70ed9 100644 (file)
             <xsl:when test="$code='zul'"><xsl:text>Zulu</xsl:text></xsl:when>
             <xsl:when test="$code='zun'"><xsl:text>Zuni</xsl:text></xsl:when>
             <xsl:otherwise>
-                <xsl:text>Unknown language code</xsl:text>
+                <!-- when 041$a is mapped to an authorised value list, this will show the description -->
+                <xsl:value-of select="$code" />
             </xsl:otherwise>
         </xsl:choose>
     </xsl:template>
index 0e1f4a1..acb122b 100644 (file)
          <span class="label"><xsl:value-of select="$langLabel"/></span>
          <xsl:for-each select="$langNode">
            <span>
-             <xsl:attribute name="class">lang_code-<xsl:value-of select="substring(translate(., ' .-;|#', '_'),1,3)"/></xsl:attribute>
+             <xsl:attribute name="class">lang_code-<xsl:value-of select="translate(., ' .-;|#', '_')"/></xsl:attribute>
              <xsl:call-template name="languageCodeText">
-               <xsl:with-param name="code" select="substring(.,1,3)"/>
+               <xsl:with-param name="code" select="translate(., ' .-;|#', '')"/>
              </xsl:call-template>
              <xsl:if test="position() != last()">
                <span class="sep"><xsl:text>, </xsl:text></span>
index a0889a4..bf70ed9 100644 (file)
             <xsl:when test="$code='zul'"><xsl:text>Zulu</xsl:text></xsl:when>
             <xsl:when test="$code='zun'"><xsl:text>Zuni</xsl:text></xsl:when>
             <xsl:otherwise>
-                <xsl:text>Unknown language code</xsl:text>
+                <!-- when 041$a is mapped to an authorised value list, this will show the description -->
+                <xsl:value-of select="$code" />
             </xsl:otherwise>
         </xsl:choose>
     </xsl:template>
index 07b20dd..4b83326 100644 (file)
         <span class="label"><xsl:value-of select="$langLabel"/></span>
         <xsl:for-each select="$langNode">
         <span>
-            <xsl:attribute name="class">lang_code-<xsl:value-of select="substring(translate(., ' .-;|#', '_'),1,3)"/></xsl:attribute>
+            <xsl:attribute name="class">lang_code-<xsl:value-of select="translate(., ' .-;|#', '_')"/></xsl:attribute>
             <xsl:call-template name="languageCodeText">
-        <xsl:with-param name="code" select="substring(.,1,3)"/>
+        <xsl:with-param name="code" select="translate(., ' .-;|#', '')"/>
             </xsl:call-template>
             <xsl:if test="position() != last()">
             <span class="separator"><xsl:text>, </xsl:text></span>
index 2394ada..e5a1516 100755 (executable)
@@ -101,7 +101,8 @@ sub generate_footer {
     my ($file_handle) = @_;
     print {$file_handle} <<"FOOTER";
             <xsl:otherwise>
-                <xsl:text>Unknown language code</xsl:text>
+                <!-- when 041\$a is mapped to an authorised value list, this will show the description -->
+                <xsl:value-of select="\$code" />
             </xsl:otherwise>
         </xsl:choose>
     </xsl:template>