Bug 16522: Adding 773 to cart and list displays and emails
authorAleisha Amohia <aleishaamohia@hotmail.com>
Fri, 4 Dec 2020 03:00:31 +0000 (16:00 +1300)
committerTomas Cohen Arazi <tomascohen@theke.io>
Mon, 30 Jan 2023 15:10:10 +0000 (12:10 -0300)
This enhancement adds information from a host item entry and a link if
applicable to the host record in the following places:
- staff client list
- staff client cart
- staff client send list email
- staff client send cart email
- staff client search results
- staff client detail page
- opac list
- opac cart
- opac send list email email
- opac send cart email
- opac search results
- opac detail page

To test:

1. apply patch, restart services
2. log into the staff client and enable the syspref EasyAnalyticalRecords
3. find a record with an item. take note of the barcode.
4. go to another record (biblio 2). click Edit -> Link to host record
5. enter the barcode in the input and submit.
6. click the MARC tab and confirm the host record has been linked under
MARC field 773.
7. add biblio 2 to your cart, and to a list.
8. go to your cart. confirm you see the 'host item entry' link.
9. click on 'more details' and confirm you see the 'host item entries'
link.
10. click 'send' to email the cart. confirm the email contains the host
item entry and the link sends you to the catalogue page for the record
in the OPAC.
11. go to the list you added the record to. confirm you see the 'source'
link for the host item entry.
12. click 'send list' to email the list. confirm the email contains the
host item entry and the link sends you to the catalogue page for the
record in the OPAC.
13. log into the OPAC. repeat steps 7 to 12 on the OPAC and confirm they
all pass as expected.
14. Confirm host item info also shows correctly on the
OPAC and staff client search results, and the OPAC and staff client
detail pages (where XSLT is used)
15. Delete the 773$w and confirm host item info still shows correctly
but no longer links to biblio
16. confirm tests pass t/db_dependent/Koha/Biblio/host_record.t

Sponsored-by: Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
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>
14 files changed:
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/MARC21slim2intranetResults.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/MARC21slim2OPACResults.xsl
opac/opac-basket.pl
opac/opac-sendbasket.pl
opac/opac-sendshelf.pl
virtualshelves/sendshelf.pl

index 7aeed4d..c1e76eb 100755 (executable)
@@ -96,6 +96,7 @@ foreach my $biblionumber ( @bibs ) {
     $dat->{MARCSERIES}  = $marcseriesarray;
     $dat->{MARCURLS}    = $marcurlsarray;
     $dat->{HASAUTHORS}  = $hasauthors;
+    $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
 
     push( @results, $dat );
 }
index 21e4205..f6740eb 100755 (executable)
@@ -86,6 +86,7 @@ if ( $email_add ) {
         $dat->{HASAUTHORS}     = $hasauthors;
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $biblio->items->search_ordered;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
 
         $iso2709 .= $record->as_usmarc();
 
index 50c8375..9f8453b 100644 (file)
                                         </tr>
                                     [% END %]
 
+                                    [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                        <tr>
+                                            <th scope="row">Host item entries</th>
+                                            <td>
+                                                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                    <p>
+                                                        [% INCLUDE 'biblio-title.inc' link = 1 biblio=entry %]
+                                                    </p>
+                                                [% END %]
+                                            </td>
+                                        </tr>
+                                    [% END %]
+
                                     <tr>
                                         <th scope="row">Location(s)</th>
                                         <td>
                                             [% IF ( BIBLIO_RESULT.notes ) %]
                                                 <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>
+                                                [% END %]
+                                            [% 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>
                                         </td>
index c608278..88ec0af 100644 (file)
@@ -127,6 +127,16 @@ Your cart
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% 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/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
index b0c4fb8..a05dfe7 100644 (file)
@@ -134,6 +134,16 @@ Your list: [% shelfname | $raw %]
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% 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/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
index 94fd5e4..d8091ce 100644 (file)
     </span>
     </xsl:if>
 
+    <!-- 773 -->
     <xsl:if test="marc:datafield[@tag=773]">
         <xsl:for-each select="marc:datafield[@tag=773]">
-            <xsl:if test="marc:subfield[@code='t']">
-    <span class="results_summary source">
-    <span class="label">Source: </span>
-            <xsl:value-of select="marc:subfield[@code='t']"/>
-    </span>
+            <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>
index 23d8c10..cbec186 100644 (file)
                                             </tr>
                                         [% END %]
 
+                                        [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                            <tr>
+                                                <th scope="row">Host item entries</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 %]
+                                                </td>
+                                            </tr>
+                                        [% END %]
+
                                         <tr>
                                             <th scope="row">Location(s) (Status)</th>
                                             <td>
                                                 [% IF ( TagsInputEnabled && loggedinusername ) %]
                                                 <span id="newtag[% BIBLIO_RESULT.biblionumber | html %]_status" class="tagstatus results_summary" style="display:none">Tag status here.</span>
                                                 [% 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 %]
+                                                [% END %]
                                             </td>
                                             <td>[% BIBLIO_RESULT.author | html %]</td>
                                             <td>
index b753205..6c9e0e3 100644 (file)
@@ -132,6 +132,16 @@ Your cart
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% 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/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
index 872e188..1ed378e 100644 (file)
@@ -135,6 +135,16 @@ Your list : [% shelfname | $raw %]
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% 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/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
index bccaaee..4dc2a2e 100644 (file)
        </div>
     </xsl:if>
 
+    <!-- 773 -->
     <xsl:if test="marc:datafield[@tag=773]">
         <xsl:for-each select="marc:datafield[@tag=773]">
-            <xsl:if test="marc:subfield[@code='t']">
-    <div class="results_summary source">
-    <span class="label">Source: </span>
-            <xsl:value-of select="marc:subfield[@code='t']"/>
-    </div>
+            <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>
index d6b11ac..2f7d235 100755 (executable)
@@ -117,6 +117,7 @@ foreach my $biblionumber ( @bibs ) {
     $dat->{MARCSERIES}  = $marcseriesarray;
     $dat->{MARCURLS}    = $marcurlsarray;
     $dat->{HASAUTHORS}  = $hasauthors;
+    $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
 
     push( @results, $dat );
 }
index 1500446..35860f5 100755 (executable)
@@ -97,6 +97,7 @@ if ( $email_add ) {
         $dat->{HASAUTHORS}     = $hasauthors;
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $items;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_marc_host;
 
         $iso2709 .= $record->as_usmarc();
 
index b9cec96..96c36c1 100755 (executable)
@@ -102,6 +102,7 @@ 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;
 
         $iso2709 .= $record->as_usmarc();
 
index 0dd51b7..d9daa40 100755 (executable)
@@ -90,6 +90,7 @@ if ($to_address) {
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = $items;
         $dat->{HASAUTHORS}     = $dat->{'author'} || @$marcauthorsarray;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
         $iso2709 .= $record->as_usmarc();