Bug 8948: Display MARC 787 relationship field

This field is defined similar to 775, as a related work:
https://www.loc.gov/marc/bibliographic/bd787.html

This patch adds a display of this field, linking to the referenced record as the 775 does

It also tests for 580 field, and displays the text there if present, using the 787 a and t subfields otherwise

To test:
1 - Edit the default framework to make 787atw and 580a visible in editor
2 - Add a 787 to a record:
    $tThe ideas behind the chess openings
    $aFine, Reuben<
    $w2470231
3 - Confirm there is no display
4 - Apply patch / restart all
5 - 'Other related works' now shows
6 - Link should be using title of record
7 - Set system preference UseControlNumber to Use
8 - Reload details, link should now use control number
9 - Add a 580 to the record:
    $a This is a friendly work to this one
10 - Confirm the text of the link now displays before the link
11 - Add a second 580, confirm it displays as well
   - there is no seperator as each should end with a period or other punctuation according to MARC
   - there is a dpan with a class surrounding each so styling can be added as desired
12 - Add a second 787
   - confirm seperator present and wrapped in a span with a class
   - confirm each 787 is shown with a span/class for styling

Signed-off-by: Andrew Fuerste-Henry <andrewfh@dubcolib.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Nick Clemens 2022-10-28 16:38:22 +00:00 committed by Tomas Cohen Arazi
parent 36dc3d448c
commit 18ad260608
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F

View file

@ -1435,6 +1435,69 @@
</xsl:for-each>
</xsl:if>
<!-- 787 Other Relationship Entry -->
<xsl:if test="marc:datafield[@tag=787]">
<span class="results_summary other_relationship_entry"><span class="label">Other related works: </span>
<xsl:for-each select="marc:datafield[@tag=580]">
<span class="linking_complexity_note">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">a</xsl:with-param>
</xsl:call-template>
<xsl:text> </xsl:text>
</span>
</xsl:for-each>
<xsl:for-each select="marc:datafield[@tag=787]">
<span class="other_relationship_entry">
<xsl:variable name="f787">
<xsl:call-template name="chopPunctuation"><xsl:with-param name="chopString"><xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">a_t</xsl:with-param>
</xsl:call-template></xsl:with-param></xsl:call-template>
</xsl:variable>
<xsl:if test="marc:subfield[@code='i']">
<xsl:call-template name="subfieldSelect">
<xsl:with-param name="codes">i</xsl:with-param>
</xsl:call-template>
<xsl:text>: </xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
<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="$f787"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="relation_query">
<xsl:text>ti,phr:(</xsl:text>
<xsl:call-template name="quote_search_term">
<xsl:with-param name="term"><xsl:value-of select="marc:subfield[@code='t']"/></xsl:with-param>
</xsl:call-template>
<xsl:text>)</xsl:text>
<xsl:if test="marc:subfield[@code='a']">
<xsl:text> AND au:(</xsl:text>
<xsl:call-template name="quote_search_term">
<xsl:with-param name="term">
<xsl:value-of select="marc:subfield[@code='a']"/>
</xsl:with-param>
</xsl:call-template>
<xsl:text>)</xsl:text>
</xsl:if>
</xsl:variable>
<a>
<xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=<xsl:value-of select="str:encode-uri($relation_query, true())" />
</xsl:attribute>
<xsl:value-of select="$f787"/>
</a>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="position()=last()"></xsl:when>
<xsl:otherwise><span class="separator"><xsl:text>; </xsl:text></span></xsl:otherwise>
</xsl:choose>
</span>
</xsl:for-each>
</span>
</xsl:if>
<!-- Indicate if record is suppressed in OPAC -->
<xsl:choose>
<xsl:when test="$OpacSuppression = 1 and marc:datafield[@tag=942][marc:subfield[@code='n'] = '1']">