Applies change to OPAC and staff detail view.
Chops punctuation. Adds 773g. Strips MARC org code from URL.
Utils code is used as basis for patches #5662 and #5663 too.
Signed-off-by: Jared Camins-Esakov <jcamins@bywatersolutions.com>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
</xsl:choose>
</span>
<xsl:variable name="f773">
- <xsl:call-template name="subfieldSelect">
+ <xsl:call-template name="chopPunctuation"><xsl:with-param name="chopString"><xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">at</xsl:with-param>
- </xsl:call-template>
+ </xsl:call-template></xsl:with-param></xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
- <a href="/cgi-bin/koha/catalogue/search.pl?q=Control-number:{marc:subfield[@code='w']}">
- <xsl:value-of select="translate($f773, '()', '')"/>
+ <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=Control-number:<xsl:call-template name="extractControlNumber"><xsl:with-param name="subfieldW" select="marc:subfield[@code='w']"/></xsl:call-template></xsl:attribute>
+ <xsl:value-of select="translate($f773, '()', '')"/><xsl:if test="marc:subfield[@code='g']"><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/></xsl:if>
</a>
</xsl:when>
<xsl:otherwise>
<a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=Title:<xsl:value-of select="translate($f773, '()', '')"/></xsl:attribute>
- <xsl:value-of select="$f773"/>
+ <xsl:value-of select="$f773"/><xsl:if test="marc:subfield[@code='g']"><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/></xsl:if>
</a>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
</xsl:template>
+ <!-- Function extractControlNumber is used to extract the control number (record number) from MARC tags 773/80/85 [etc.] subfield $w.
+ Parameter: control number string.
+ Assumes LOC convention: (OrgCode)recordNumber.
+ If OrgCode is not present, return full string.
+ Additionally, handle various brackets/parentheses. Chop leading and trailing spaces.
+ -->
+ <xsl:template name="extractControlNumber">
+ <xsl:param name="subfieldW"/>
+ <xsl:variable name="tranW" select="translate($subfieldW,']})>','))))')"/>
+ <xsl:choose>
+ <xsl:when test="contains($tranW,')')">
+ <xsl:value-of select="normalize-space(translate(substring-after($tranW,')'),'[]{}()<>',''))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space($subfieldW)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
<!-- Function m880Select: Display Alternate Graphic Representation (MARC 880) for selected latin "base"tags
- should be called immediately before the corresonding latin tags are processed
</xsl:choose>
</span>
<xsl:variable name="f773">
- <xsl:call-template name="subfieldSelect">
+ <xsl:call-template name="chopPunctuation"><xsl:with-param name="chopString"><xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">at</xsl:with-param>
- </xsl:call-template>
+ </xsl:call-template></xsl:with-param></xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
- <a href="/cgi-bin/koha/opac-search.pl?q=Control-number:{marc:subfield[@code='w']}">
- <xsl:value-of select="translate($f773, '()', '')"/>
+ <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=Control-number:<xsl:call-template name="extractControlNumber"><xsl:with-param name="subfieldW" select="marc:subfield[@code='w']"/></xsl:call-template></xsl:attribute>
+ <xsl:value-of select="translate($f773, '()', '')"/><xsl:if test="marc:subfield[@code='g']"><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/></xsl:if>
</a>
</xsl:when>
<xsl:otherwise>
<a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=Title:<xsl:value-of select="translate($f773, '()', '')"/></xsl:attribute>
- <xsl:value-of select="$f773"/>
+ <xsl:value-of select="$f773"/><xsl:if test="marc:subfield[@code='g']"><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/></xsl:if>
</a>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
</xsl:template>
+ <!-- Function extractControlNumber is used to extract the control number (record number) from MARC tags 773/80/85 [etc.] subfield $w.
+ Parameter: control number string.
+ Assumes LOC convention: (OrgCode)recordNumber.
+ If OrgCode is not present, return full string.
+ Additionally, handle various brackets/parentheses. Chop leading and trailing spaces.
+ -->
+ <xsl:template name="extractControlNumber">
+ <xsl:param name="subfieldW"/>
+ <xsl:variable name="tranW" select="translate($subfieldW,']})>','))))')"/>
+ <xsl:choose>
+ <xsl:when test="contains($tranW,')')">
+ <xsl:value-of select="normalize-space(translate(substring-after($tranW,')'),'[]{}()<>',''))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="normalize-space($subfieldW)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
<!-- Function m880Select: Display Alternate Graphic Representation (MARC 880) for selected latin "base"tags
- should be called immediately before the corresonding latin tags are processed