Bug 16522: (follow-up) MARC display templates and get_marc_host fixes
authorAleisha Amohia <aleishaamohia@hotmail.com>
Thu, 30 Jun 2022 22:28:31 +0000 (10:28 +1200)
committerTomas Cohen Arazi <tomascohen@theke.io>
Mon, 30 Jan 2023 15:10:11 +0000 (12:10 -0300)
Also:
- Show related parts 773$g
- Normalise using 'Host item entry' as title
- Remove 'foreach' because non-xslt views only return first
- If no $w, use $atg, and related tests in
t/db_dependent/Koha/Biblio/host_record.t

Signed-off-by: Heather Hernandez <heather_hernandez@nps.gov>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
20 files changed:
Koha/Biblio.pm
basket/basket.pl
basket/sendbasket.pl
koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt
koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tt
koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/sendshelf.tt
koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetResults.xsl
koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendbasket.tt
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelf.tt
koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slimUtils.xsl
opac/opac-basket.pl
opac/opac-sendbasket.pl
opac/opac-sendshelf.pl
t/db_dependent/Koha/Biblio/host_record.t
virtualshelves/sendshelf.pl

index 5b7541a..4b0c14a 100644 (file)
@@ -1237,6 +1237,12 @@ sub get_marc_host {
             last;
         }
     }
+    if ( !$hostfld and $record->subfield('773','t') ) {
+        # not linked using $w so just return plaintext
+        my $unlinkedf = $record->field('773');
+        my $host = join( ", ", $unlinkedf->subfield('a'), $unlinkedf->subfield('t'), $unlinkedf->subfield('g') );
+        return wantarray ? ( $host, $unlinkedf->subfield('g') ) : $host;
+    }
     return if !$hostfld;
     my $rcn = $hostfld->subfield('w');
 
index c1e76eb..54fabe4 100755 (executable)
@@ -96,7 +96,9 @@ foreach my $biblionumber ( @bibs ) {
     $dat->{MARCSERIES}  = $marcseriesarray;
     $dat->{MARCURLS}    = $marcurlsarray;
     $dat->{HASAUTHORS}  = $hasauthors;
-    $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
+    my ( $host, $relatedparts ) = $biblio->get_marc_host;
+    $dat->{HOSTITEMENTRIES} = $host;
+    $dat->{RELATEDPARTS} = $relatedparts;
 
     push( @results, $dat );
 }
index f6740eb..af47302 100755 (executable)
@@ -86,7 +86,9 @@ if ( $email_add ) {
         $dat->{HASAUTHORS}     = $hasauthors;
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $biblio->items->search_ordered;
-        $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
+        my ( $host, $relatedparts ) = $biblio->get_marc_host;
+        $dat->{HOSTITEMENTRIES} = $host;
+        $dat->{RELATEDPARTS} = $relatedparts;
 
         $iso2709 .= $record->as_usmarc();
 
index 9f8453b..a688679 100644 (file)
 
                                     [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
                                         <tr>
-                                            <th scope="row">Host item entries</th>
+                                            <th scope="row">Host item entry</th>
                                             <td>
-                                                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                                                    <p>
-                                                        [% INCLUDE 'biblio-title.inc' link = 1 biblio=entry %]
-                                                    </p>
+                                                [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                                                    <p>[% INCLUDE 'biblio-title.inc' link = 1 biblio=BIBLIO_RESULT.HOSTITEMENTRIES %] [% BIBLIO_RESULT.RELATEDPARTS | html %]</p>
+                                                [% ELSE %]
+                                                    <p>[% BIBLIO_RESULT.HOSTITEMENTRIES | html %]</p>
                                                 [% END %]
                                             </td>
                                         </tr>
                                                 <p>[% BIBLIO_RESULT.notes | html %]</p>
                                             [% END %]
                                             [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
-                                                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                                                    <p>Host item entry:
-                                                        [% INCLUDE 'biblio-title.inc' link = 1 biblio=entry %]
-                                                    </p>
+                                                <p>Host item entry:
+                                                [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                                                    [% INCLUDE 'biblio-title.inc' link = 1 biblio=BIBLIO_RESULT.HOSTITEMENTRIES %] [% BIBLIO_RESULT.RELATEDPARTS | html %]
+                                                [% ELSE %]
+                                                    [% BIBLIO_RESULT.HOSTITEMENTRIES | html %]
                                                 [% END %]
+                                                </p>
                                             [% END %]
                                             <!-- COinS / Openurl -->
                                             <span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.au=[% BIBLIO_RESULT.author | html %]&amp;rft.btitle=[% BIBLIO_RESULT.title |url %]&amp;rft.date=[% BIBLIO_RESULT.publicationyear | html %]&amp;rft.tpages=[% BIBLIO_RESULT.item('size') | html %]&amp;rft.isbn=[% BIBLIO_RESULT.isbn |url %]&amp;rft.aucorp=&amp;rft.place=[% BIBLIO_RESULT.place | html %]&amp;rft.pub=[% BIBLIO_RESULT.publisher |url %]&amp;rft.edition=[% BIBLIO_RESULT.edition | html %]&amp;rft.series=[% BIBLIO_RESULT.series | html %]&amp;rft.genre="></span>
index 88ec0af..03b703f 100644 (file)
@@ -129,12 +129,14 @@ Your cart
             [% END %]
 
             [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
-                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                    <span>Host item entry:
-                        [% INCLUDE 'biblio-title.inc' link = 1 biblio=entry %]
-                    </span>
-                    <br/>
+            <span>Host item entry:
+                [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                [% INCLUDE 'biblio-title.inc' link = 1 biblio=BIBLIO_RESULT.HOSTITEMENTRIES %] [% BIBLIO_RESULT.RELATEDPARTS | $raw %]
+                [% ELSE %]
+                [% BIBLIO_RESULT.HOSTITEMENTRIES %]
                 [% END %]
+            </span>
+            <br/>
             [% END %]
 
             [% IF ( BIBLIO_RESULT.url ) %]
index a05dfe7..d46591b 100644 (file)
@@ -136,12 +136,14 @@ Your list: [% shelfname | $raw %]
             [% END %]
 
             [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
-                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                    <span>Host item entry:
-                        [% INCLUDE 'biblio-title.inc' link = 1 biblio=entry %]
-                    </span>
-                    <br/>
+            <span>Host item entry:
+                [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                [% INCLUDE 'biblio-title.inc' link = 1 biblio=BIBLIO_RESULT.HOSTITEMENTRIES %] [% BIBLIO_RESULT.RELATEDPARTS | $raw %]
+                [% ELSE %]
+                [% BIBLIO_RESULT.HOSTITEMENTRIES %]
                 [% END %]
+            </span>
+            <br/>
             [% END %]
 
             [% IF ( BIBLIO_RESULT.url ) %]
index dd3cda4..c5fd064 100644 (file)
             </span>
          </xsl:if>
 
-        <!-- 773 -->
-        <xsl:if test="marc:datafield[@tag=773]">
-            <xsl:for-each select="marc:datafield[@tag=773]">
-                <xsl:if test="@ind1 !=1">
-                    <span class="results_summary in"><span class="label">
-                    <xsl:choose>
-                        <xsl:when test="@ind2=' '">
-                            In:
-                        </xsl:when>
-                        <xsl:when test="@ind2=8">
-                            <xsl:if test="marc:subfield[@code='i']">
-                                <xsl:value-of select="marc:subfield[@code='i']"/>
-                            </xsl:if>
-                        </xsl:when>
-                    </xsl:choose>
-                    </span>
-                    <xsl:variable name="f773">
-                        <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: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="translate($f773, '()', '')"/>
-                            </a>
-                        </xsl:when>
-                        <xsl:when test="marc:subfield[@code='0']">
-                            <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
-                            <xsl:value-of select="$f773"/>
-                            </a>
-                        </xsl:when>
-                        <xsl:otherwise>
-                            <xsl:variable name="host_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($host_query, true())" />
-                            </xsl:attribute>
-                                <xsl:value-of select="$f773"/>
-                            </a>
-                        </xsl:otherwise>
-                    </xsl:choose>
-                    <xsl:if test="marc:subfield[@code='g']">
-                        <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
-                    </xsl:if>
-                    </span>
-
-                    <xsl:if test="marc:subfield[@code='n']">
-                        <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
-                    </xsl:if>
-
-                </xsl:if>
-            </xsl:for-each>
-        </xsl:if>
+        <xsl:call-template name="host-item-entries">
+            <xsl:with-param name="UseControlNumber" select="$UseControlNumber"/>
+        </xsl:call-template>
 
         <xsl:if test="marc:datafield[@tag=502]">
             <span class="results_summary diss_note">
index d8091ce..bc3a0ed 100644 (file)
     </span>
     </xsl:if>
 
-    <!-- 773 -->
-    <xsl:if test="marc:datafield[@tag=773]">
-        <xsl:for-each select="marc:datafield[@tag=773]">
-            <xsl:if test="@ind1 !=1">
-                <span class="results_summary in"><span class="label">
-                <xsl:choose>
-                    <xsl:when test="@ind2=' '">
-                        Source:
-                    </xsl:when>
-                    <xsl:when test="@ind2=8">
-                        <xsl:if test="marc:subfield[@code='i']">
-                            <xsl:value-of select="marc:subfield[@code='i']"/>
-                        </xsl:if>
-                    </xsl:when>
-                </xsl:choose>
-                </span>
-                <xsl:variable name="f773">
-                    <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: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="translate($f773, '()', '')"/>
-                        </a>
-                    </xsl:when>
-                    <xsl:when test="marc:subfield[@code='0']">
-                        <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
-                        <xsl:value-of select="$f773"/>
-                        </a>
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=ti,phr:<xsl:value-of select="str:encode-uri(translate($f773, '()', ''), true())"/></xsl:attribute>
-                        <xsl:value-of select="$f773"/>
-                        </a>
-                    </xsl:otherwise>
-                </xsl:choose>
-                <xsl:if test="marc:subfield[@code='g']">
-                    <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
-                </xsl:if>
-                </span>
-
-                <xsl:if test="marc:subfield[@code='n']">
-                    <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
-                </xsl:if>
-
-            </xsl:if>
-        </xsl:for-each>
-    </xsl:if>
+    <xsl:call-template name="host-item-entries">
+        <xsl:with-param name="UseControlNumber" select="$UseControlNumber"/>
+    </xsl:call-template>
 
     <!-- Other Title  Statement: Alternate Graphic Representation (MARC 880) -->
     <xsl:if test="$display880">
index 109d1ad..0fa279a 100644 (file)
         </xsl:choose>
     </xsl:template>
 
+    <xsl:template name="host-item-entries">
+        <xsl:param name="UseControlNumber"/>
+        <!-- 773 -->
+        <xsl:if test="marc:datafield[@tag=773]">
+            <xsl:for-each select="marc:datafield[@tag=773]">
+                <xsl:if test="@ind1 !=1">
+                    <span class="results_summary in"><span class="label">
+                    <xsl:choose>
+                        <xsl:when test="@ind2=' '">
+                            Host item entry:
+                        </xsl:when>
+                        <xsl:when test="@ind2=8">
+                            <xsl:if test="marc:subfield[@code='i']">
+                                <xsl:value-of select="marc:subfield[@code='i']"/>
+                            </xsl:if>
+                        </xsl:when>
+                    </xsl:choose>
+                    </span>
+                    <xsl:variable name="f773">
+                        <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: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="translate($f773, '()', '')"/>
+                            </a>
+                        </xsl:when>
+                        <xsl:when test="marc:subfield[@code='0']">
+                            <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
+                            <xsl:value-of select="$f773"/>
+                            </a>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <xsl:variable name="host_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($host_query, true())" />
+                            </xsl:attribute>
+                                <xsl:value-of select="$f773"/>
+                            </a>
+                        </xsl:otherwise>
+                    </xsl:choose>
+                    <xsl:if test="marc:subfield[@code='g']">
+                        <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
+                    </xsl:if>
+                    </span>
+                    <xsl:if test="marc:subfield[@code='n']">
+                        <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
+                    </xsl:if>
+                </xsl:if>
+            </xsl:for-each>
+        </xsl:if>
+    </xsl:template>
+
 </xsl:stylesheet>
 
 <!-- Stylus Studio meta-information - (c)1998-2002 eXcelon Corp.
index cbec186..8e7f85b 100644 (file)
 
                                         [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
                                             <tr>
-                                                <th scope="row">Host item entries</th>
+                                                <th scope="row">Host item entry</th>
                                                 <td>
-                                                    [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                                                        <p>
-                                                            <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% entry.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=entry %]</a>
-                                                        </p>
-                                                    [% END %]
+                                                    <p>
+                                                        [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                                                            <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=BIBLIO_RESULT.HOSTITEMENTRIES %]</a> [% BIBLIO_RESULT.RELATEDPARTS | html %]
+                                                        [% ELSE %]
+                                                            [% BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                        [% END %]
+                                                    </p>
                                                 </td>
                                             </tr>
                                         [% END %]
                                                 [% END %]
 
                                                 [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
-                                                    [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                                                        <p>Host item entry:
-                                                            <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% entry.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=entry %]</a>
-                                                        </p>
-                                                    [% END %]
+                                                    <p>Host item entry:
+                                                        [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                                                        <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=entry %]</a> [% BIBLIO_RESULT.RELATEDPARTS | html %]
+                                                        [% ELSE %]
+                                                        [% BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                        [% END %]
+                                                    </p>
                                                 [% END %]
                                             </td>
                                             <td>[% BIBLIO_RESULT.author | html %]</td>
index 6c9e0e3..cd89d19 100644 (file)
@@ -134,12 +134,14 @@ Your cart
             [% END %]
 
             [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
-                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
-                    <span>Host item entry:
-                        <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% entry.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=entry %]</a>
-                    </span>
-                    <br/>
+            <span>Host item entry:
+                [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=BIBLIO_RESULT.HOSTITEMENTRIES %]</a> [% BIBLIO_RESULT.RELATEDPARTS | $raw %]
+                [% ELSE %]
+                [% BIBLIO_RESULT.HOSTITEMENTRIES %]
                 [% END %]
+            </span>
+            <br/>
             [% END %]
 
             [% IF ( BIBLIO_RESULT.url ) %]
index 1ed378e..ba4f092 100644 (file)
@@ -137,12 +137,14 @@ Your list : [% shelfname | $raw %]
             [% END %]
 
             [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
-                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
                     <span>Host item entry:
-                        <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% entry.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=entry %]</a>
+                        [% IF BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber %]
+                        <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% BIBLIO_RESULT.HOSTITEMENTRIES.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=BIBLIO_RESULT.HOSTITEMENTRIES %]</a> [% BIBLIO_RESULT.RELATEDPARTS | $raw %]
+                        [% ELSE %]
+                        [% BIBLIO_RESULT.HOSTITEMENTRIES %]
+                        [% END %]
                     </span>
                     <br/>
-                [% END %]
             [% END %]
 
             [% IF ( BIBLIO_RESULT.url ) %]
index 5cd31e0..34a6e0b 100644 (file)
             </span>
         </xsl:if>
 
-        <!-- 773 -->
-        <xsl:if test="marc:datafield[@tag=773]">
-            <xsl:for-each select="marc:datafield[@tag=773]">
-                <xsl:if test="@ind1 !=1">
-                    <span class="results_summary in"><span class="label">
-                    <xsl:choose>
-                        <xsl:when test="@ind2=' '">
-                            In:
-                        </xsl:when>
-                        <xsl:when test="@ind2=8">
-                            <xsl:if test="marc:subfield[@code='i']">
-                                <xsl:value-of select="marc:subfield[@code='i']"/>
-                            </xsl:if>
-                        </xsl:when>
-                    </xsl:choose>
-                    </span>
-                    <xsl:variable name="f773">
-                        <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:choose>
-                        <xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
-                            <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, '()', '')"/>
-                            </a>
-                        </xsl:when>
-                        <xsl:when test="marc:subfield[@code='0']">
-                            <a><xsl:attribute name="href">/cgi-bin/koha/opac-detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
-                            <xsl:value-of select="$f773"/>
-                            </a>
-                        </xsl:when>
-                        <xsl:otherwise>
-                            <xsl:variable name="host_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/opac-search.pl?q=<xsl:value-of select="str:encode-uri($host_query, true())" />
-                            </xsl:attribute>
-                                <xsl:value-of select="$f773"/>
-                            </a>
-                        </xsl:otherwise>
-                    </xsl:choose>
-                    <xsl:if test="marc:subfield[@code='g']">
-                        <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
-                    </xsl:if>
-                    </span>
-
-                    <xsl:if test="marc:subfield[@code='n']">
-                        <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
-                    </xsl:if>
-
-                </xsl:if>
-            </xsl:for-each>
-        </xsl:if>
+        <xsl:call-template name="host-item-entries">
+            <xsl:with-param name="UseControlNumber" select="$UseControlNumber"/>
+        </xsl:call-template>
 
         <xsl:for-each select="marc:datafield[@tag=511]">
             <span class="results_summary perf_note">
index 4dc2a2e..23b0463 100644 (file)
        </div>
     </xsl:if>
 
-    <!-- 773 -->
-    <xsl:if test="marc:datafield[@tag=773]">
-        <xsl:for-each select="marc:datafield[@tag=773]">
-            <xsl:if test="@ind1 !=1">
-                <div class="results_summary in"><span class="label">
-                <xsl:choose>
-                    <xsl:when test="@ind2=' '">
-                        Source:
-                    </xsl:when>
-                    <xsl:when test="@ind2=8">
-                        <xsl:if test="marc:subfield[@code='i']">
-                            <xsl:value-of select="marc:subfield[@code='i']"/>
-                        </xsl:if>
-                    </xsl:when>
-                </xsl:choose>
-                <xsl:variable name="f773">
-                    <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:choose>
-                    <xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
-                        <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, '()', '')"/>
-                        </a>
-                    </xsl:when>
-                    <xsl:when test="marc:subfield[@code='0']">
-                        <a><xsl:attribute name="href">/cgi-bin/koha/opac-detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
-                        <xsl:value-of select="$f773"/>
-                        </a>
-                    </xsl:when>
-                    <xsl:otherwise>
-                        <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=ti,phr:<xsl:value-of select="str:encode-uri(translate($f773, '()', ''), true())"/></xsl:attribute>
-                        <xsl:value-of select="$f773"/>
-                        </a>
-                    </xsl:otherwise>
-                </xsl:choose>
-                <xsl:if test="marc:subfield[@code='g']">
-                    <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
-                </xsl:if>
-                </span>
-                </div>
-
-                <xsl:if test="marc:subfield[@code='n']">
-                    <div class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></div>
-                </xsl:if>
-
-            </xsl:if>
-        </xsl:for-each>
-    </xsl:if>
+    <xsl:call-template name="host-item-entries">
+        <xsl:with-param name="UseControlNumber" select="$UseControlNumber"/>
+    </xsl:call-template>
 
 <xsl:if test="$DisplayOPACiconsXSLT!='0'">
     <div class="results_summary type">
index b1afb43..5b08c73 100644 (file)
         </xsl:choose>
     </xsl:template>
 
+    <xsl:template name="host-item-entries">
+        <xsl:param name="UseControlNumber"/>
+        <!-- 773 -->
+        <xsl:if test="marc:datafield[@tag=773]">
+            <xsl:for-each select="marc:datafield[@tag=773]">
+                <xsl:if test="@ind1 !=1">
+                    <span class="results_summary in"><span class="label">
+                    <xsl:choose>
+                        <xsl:when test="@ind2=' '">
+                            Host item entry:
+                        </xsl:when>
+                        <xsl:when test="@ind2=8">
+                            <xsl:if test="marc:subfield[@code='i']">
+                                <xsl:value-of select="marc:subfield[@code='i']"/>
+                            </xsl:if>
+                        </xsl:when>
+                    </xsl:choose>
+                    </span>
+                    <xsl:variable name="f773">
+                        <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:choose>
+                        <xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
+                            <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, '()', '')"/>
+                            </a>
+                        </xsl:when>
+                        <xsl:when test="marc:subfield[@code='0']">
+                            <a><xsl:attribute name="href">/cgi-bin/koha/opac-detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
+                            <xsl:value-of select="$f773"/>
+                            </a>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <xsl:variable name="host_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/opac-search.pl?q=<xsl:value-of select="str:encode-uri($host_query, true())" />
+                            </xsl:attribute>
+                                <xsl:value-of select="$f773"/>
+                            </a>
+                        </xsl:otherwise>
+                    </xsl:choose>
+                    <xsl:if test="marc:subfield[@code='g']">
+                        <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
+                    </xsl:if>
+                    </span>
+                    <xsl:if test="marc:subfield[@code='n']">
+                        <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
+                    </xsl:if>
+                </xsl:if>
+            </xsl:for-each>
+        </xsl:if>
+    </xsl:template>
+
 </xsl:stylesheet>
 
 <!-- Stylus Studio meta-information - (c)1998-2002 eXcelon Corp.
index 2f7d235..3109633 100755 (executable)
@@ -117,7 +117,9 @@ foreach my $biblionumber ( @bibs ) {
     $dat->{MARCSERIES}  = $marcseriesarray;
     $dat->{MARCURLS}    = $marcurlsarray;
     $dat->{HASAUTHORS}  = $hasauthors;
-    $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
+    my ( $host, $relatedparts ) = $biblio->get_marc_host;
+    $dat->{HOSTITEMENTRIES} = $host;
+    $dat->{RELATEDPARTS} = $relatedparts;
 
     push( @results, $dat );
 }
index 35860f5..278cfd3 100755 (executable)
@@ -97,7 +97,9 @@ if ( $email_add ) {
         $dat->{HASAUTHORS}     = $hasauthors;
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $items;
-        $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
+        my ( $host, $relatedparts ) = $biblio->get_marc_host;
+        $dat->{HOSTITEMENTRIES} = $host;
+        $dat->{RELATEDPARTS} = $relatedparts;
 
         $iso2709 .= $record->as_usmarc();
 
index 96c36c1..3d3d923 100755 (executable)
@@ -102,7 +102,9 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) {
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $items;
         $dat->{HASAUTHORS}     = $dat->{'author'} || @$marcauthorsarray;
-        $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
+        my ( $host, $relatedparts ) = $biblio->get_marc_host;
+        $dat->{HOSTITEMENTRIES} = $host;
+        $dat->{RELATEDPARTS} = $relatedparts;
 
         $iso2709 .= $record->as_usmarc();
 
index 505efe0..d348f96 100755 (executable)
@@ -36,7 +36,7 @@ $schema->storage->txn_begin;
 our $builder = t::lib::TestBuilder->new;
 
 subtest 'get_marc_host' => sub {
-    plan tests => 11;
+    plan tests => 12;
 
     t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' );
     t::lib::Mocks::mock_preference( 'MARCOrgCode', 'xyz' );
@@ -72,6 +72,12 @@ subtest 'get_marc_host' => sub {
     $marc->field('773')->update( w => '(xyz) bad data' ); # causes no results
     $host = $bib1->get_marc_host;
     is( $bib1->get_marc_host, undef, 'No results for bad 773' );
+    # Test plaintext when no $w
+    $marc->field('773')->update( t => 'title' );
+    $marc->field('773')->delete_subfield( code => 'w' );
+    $host = $bib1->get_marc_host;
+    is( $host, "title, relpart", '773$atg returned when no $w' );
+    $marc->field('773')->delete_subfield( code => 't' ); # restore
     # Add second 773
     $marc->append_fields( MARC::Field->new( '773', '', '', g => 'relpart2', w => '234' ) );
     $host = $bib1->get_marc_host;
index d9daa40..d351415 100755 (executable)
@@ -90,7 +90,9 @@ if ($to_address) {
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $items;
         $dat->{HASAUTHORS}     = $dat->{'author'} || @$marcauthorsarray;
-        $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
+        my ( $host, $relatedparts ) = $biblio->get_marc_host;
+        $dat->{HOSTITEMENTRIES} = $host;
+        $dat->{RELATEDPARTS} = $relatedparts;
 
         $iso2709 .= $record->as_usmarc();