View | Details | Raw Unified | Return to bug 26314
Collapse All | Expand All

(-)a/C4/XSLT.pm (-1 / +11 lines)
Lines 250-258 sub XSLTParse4Display { Link Here
250
    my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour'));
250
    my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour'));
251
251
252
    $variables ||= {};
252
    $variables ||= {};
253
    my $biblio;
253
    if (C4::Context->preference('OPACShowOpenURL')) {
254
    if (C4::Context->preference('OPACShowOpenURL')) {
254
        my @biblio_itemtypes;
255
        my @biblio_itemtypes;
255
        my $biblio = Koha::Biblios->find($biblionumber);
256
        $biblio //= Koha::Biblios->find($biblionumber);
256
        if (C4::Context->preference('item-level_itypes')) {
257
        if (C4::Context->preference('item-level_itypes')) {
257
            @biblio_itemtypes = $biblio->items->get_column("itype");
258
            @biblio_itemtypes = $biblio->items->get_column("itype");
258
        } else {
259
        } else {
Lines 265-270 sub XSLTParse4Display { Link Here
265
            $variables->{OpenURLResolverURL} = $biblio->get_openurl;
266
            $variables->{OpenURLResolverURL} = $biblio->get_openurl;
266
        }
267
        }
267
    }
268
    }
269
270
    # possibly show volumes link in Detail views
271
    if ($xslsyspref =~ m/Details/) {
272
        $biblio //= Koha::Biblios->find( $biblionumber );
273
        my $components = $biblio->get_marc_volumes();
274
        $variables->{show_volumes_link} = ( scalar @{$components} == 0 ) ? 0 : 1;
275
    }
276
   
277
    # embed variables
268
    my $varxml = "<variables>\n";
278
    my $varxml = "<variables>\n";
269
    while (my ($key, $value) = each %$variables) {
279
    while (my ($key, $value) = each %$variables) {
270
        $varxml .= "<variable name=\"$key\">$value</variable>\n";
280
        $varxml .= "<variable name=\"$key\">$value</variable>\n";
(-)a/Koha/Biblio.pm (+70 lines)
Lines 952-957 sub get_marc_host { Link Here
952
    }
952
    }
953
}
953
}
954
954
955
=head3 get_marc_volumes
956
957
  my $volumes = $self->get_marc_volumes();
958
959
Returns an array of MARCXML data, which are analytic parts of
960
this object (MARC21 773$w points to this)
961
962
=cut
963
964
sub get_marc_volumes {
965
    my ($self, $max_results) = @_;
966
967
    return [] if (C4::Context->preference('marcflavour') ne 'MARC21');
968
969
    my $searchstr = $self->get_volumes_query;
970
971
    if (defined($searchstr)) {
972
        my $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX});
973
        my ( $errors, $results, $total_hits ) = $searcher->simple_search_compat( $searchstr, 0, $max_results );
974
        $self->{_marc_volumes} = $results if ( defined($results) && scalar(@$results) );
975
    }
976
977
    return $self->{_marc_volumes} || [];
978
}
979
980
=head2 get_volumes_query
981
982
Returns a query which can be used to search for all component parts of MARC21 biblios
983
984
=cut
985
986
sub get_volumes_query {
987
    my ($self) = @_;
988
989
    my $marc = $self->metadata->record;
990
991
    my $searchstr;
992
    if ( C4::Context->preference('UseControlNumber') ) {
993
        my $pf001 = $marc->field('001') || undef;
994
995
        if ( defined($pf001) ) {
996
            $searchstr = "(";
997
            my $pf003 = $marc->field('003') || undef;
998
999
            if ( !defined($pf003) ) {
1000
                # search for 773$w='Host001'
1001
                $searchstr .= "rcn:" . $pf001->data();
1002
            }
1003
            else {
1004
                $searchstr .= "(";
1005
                # search for (773$w='Host001' and 003='Host003') or 773$w='(Host003)Host001'
1006
                $searchstr .= "(rcn:" . $pf001->data() . " AND cni:" . $pf003->data() . ")";
1007
                $searchstr .= " OR rcn:\"" . $pf003->data() . " " . $pf001->data() . "\"";
1008
                $searchstr .= ")";
1009
            }
1010
1011
            # exclude monograph and serial component part records
1012
            $searchstr .= " NOT (bib-level:a OR bib-level:b)";
1013
            $searchstr .= ")";
1014
        }
1015
    }
1016
    else {
1017
        my $cleaned_title = $marc->title;
1018
        $cleaned_title =~ tr|/||;
1019
        $searchstr = "ti,phr:($cleaned_title)";
1020
    }
1021
1022
    return $searchstr;
1023
}
1024
955
=head2 Internal methods
1025
=head2 Internal methods
956
1026
957
=head3 type
1027
=head3 type
(-)a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl (-1 / +2 lines)
Lines 231-237 Link Here
231
        </xsl:if>
231
        </xsl:if>
232
232
233
        <!-- Volumes of sets and traced series -->
233
        <!-- Volumes of sets and traced series -->
234
        <xsl:if test="$materialTypeCode='ST' or substring($controlField008,22,1)='m'">
234
        <xsl:variable name="show_volumes_link" select="marc:variables/marc:variable[@name='show_volumes_link']" />
235
        <xsl:if test="$show_volumes_link='1' and ($materialTypeCode='ST' or substring($controlField008,22,1)='m')">
235
        <span class="results_summary volumes"><span class="label">Volumes: </span>
236
        <span class="results_summary volumes"><span class="label">Volumes: </span>
236
            <a>
237
            <a>
237
            <xsl:choose>
238
            <xsl:choose>
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl (-2 / +2 lines)
Lines 266-272 Link Here
266
        </xsl:if>
266
        </xsl:if>
267
267
268
        <!-- Volumes of sets and traced series -->
268
        <!-- Volumes of sets and traced series -->
269
        <xsl:if test="$materialTypeCode='ST' or substring($controlField008,22,1)='m'">
269
        <xsl:variable name="show_volumes_link" select="marc:variables/marc:variable[@name='show_volumes_link']" />
270
        <xsl:if test="$show_volumes_link='1' and ($materialTypeCode='ST' or substring($controlField008,22,1)='m')">
270
        <span class="results_summary volumes"><span class="label">Volumes: </span>
271
        <span class="results_summary volumes"><span class="label">Volumes: </span>
271
            <a>
272
            <a>
272
            <xsl:choose>
273
            <xsl:choose>
273
- 

Return to bug 26314