Lines 669-680
Returns a query which can be used to search for all component parts of MARC21 bi
Link Here
|
669 |
sub get_components_query { |
669 |
sub get_components_query { |
670 |
my ($self) = @_; |
670 |
my ($self) = @_; |
671 |
|
671 |
|
672 |
my $builder = Koha::SearchEngine::QueryBuilder->new( |
672 |
# MARC21 Only for now |
673 |
{ index => $Koha::SearchEngine::BIBLIOS_INDEX } ); |
673 |
return if ( C4::Context->preference('marcflavour') ne 'MARC21' ); |
674 |
my $marc = $self->metadata->record; |
674 |
|
|
|
675 |
# If the marc cannot be loaded, do not build the query |
676 |
# the staff interface should already be displaying an error message in this case |
677 |
# so we don't need to return the error |
678 |
my $marc; |
679 |
eval { $marc = $self->metadata->record }; |
680 |
return unless $marc; |
681 |
|
682 |
my $builder = Koha::SearchEngine::QueryBuilder->new( { index => $Koha::SearchEngine::BIBLIOS_INDEX } ); |
675 |
my $component_sort_field = C4::Context->preference('ComponentSortField') // "title"; |
683 |
my $component_sort_field = C4::Context->preference('ComponentSortField') // "title"; |
676 |
my $component_sort_order = C4::Context->preference('ComponentSortOrder') // "asc"; |
684 |
my $component_sort_order = C4::Context->preference('ComponentSortOrder') // "asc"; |
677 |
my $sort = $component_sort_field . "_" . $component_sort_order; |
685 |
my $sort = $component_sort_field . "_" . $component_sort_order; |
678 |
|
686 |
|
679 |
my $searchstr; |
687 |
my $searchstr; |
680 |
if ( C4::Context->preference('UseControlNumber') ) { |
688 |
if ( C4::Context->preference('UseControlNumber') ) { |
Lines 685-695
sub get_components_query {
Link Here
|
685 |
my $pf003 = $marc->field('003') || undef; |
693 |
my $pf003 = $marc->field('003') || undef; |
686 |
|
694 |
|
687 |
if ( !defined($pf003) ) { |
695 |
if ( !defined($pf003) ) { |
|
|
696 |
|
688 |
# search for 773$w='Host001' |
697 |
# search for 773$w='Host001' |
689 |
$searchstr .= "rcn:\"" . $pf001->data()."\""; |
698 |
$searchstr .= "rcn:\"" . $pf001->data() . "\""; |
690 |
} |
699 |
} else { |
691 |
else { |
|
|
692 |
$searchstr .= "("; |
700 |
$searchstr .= "("; |
|
|
701 |
|
693 |
# search for (773$w='Host001' and 003='Host003') or 773$w='(Host003)Host001' |
702 |
# search for (773$w='Host001' and 003='Host003') or 773$w='(Host003)Host001' |
694 |
$searchstr .= "(rcn:\"" . $pf001->data() . "\" AND cni:\"" . $pf003->data() . "\")"; |
703 |
$searchstr .= "(rcn:\"" . $pf001->data() . "\" AND cni:\"" . $pf003->data() . "\")"; |
695 |
$searchstr .= " OR rcn:\"" . $pf003->data() . " " . $pf001->data() . "\""; |
704 |
$searchstr .= " OR rcn:\"" . $pf003->data() . " " . $pf001->data() . "\""; |
Lines 700-719
sub get_components_query {
Link Here
|
700 |
$searchstr .= " AND (bib-level:a OR bib-level:b)"; |
709 |
$searchstr .= " AND (bib-level:a OR bib-level:b)"; |
701 |
$searchstr .= ")"; |
710 |
$searchstr .= ")"; |
702 |
} |
711 |
} |
703 |
} |
712 |
} else { |
704 |
else { |
713 |
my $cleaned_title = $marc->subfield( '245', "a" ); |
705 |
my $cleaned_title = $marc->subfield('245', "a"); |
|
|
706 |
$cleaned_title =~ tr|/||; |
714 |
$cleaned_title =~ tr|/||; |
707 |
$cleaned_title = $builder->clean_search_term($cleaned_title); |
715 |
$cleaned_title = $builder->clean_search_term($cleaned_title); |
708 |
$searchstr = qq#Host-item:("$cleaned_title")#; |
716 |
$searchstr = qq#Host-item:("$cleaned_title")#; |
709 |
} |
717 |
} |
710 |
my ($error, $query ,$query_str) = $builder->build_query_compat( undef, [$searchstr], undef, undef, [$sort], 0 ); |
718 |
my ( $error, $query, $query_str ) = $builder->build_query_compat( undef, [$searchstr], undef, undef, [$sort], 0 ); |
711 |
if( $error ){ |
719 |
if ($error) { |
712 |
warn $error; |
720 |
warn $error; |
713 |
return; |
721 |
return; |
714 |
} |
722 |
} |
715 |
|
723 |
|
716 |
return ($query, $query_str, $sort); |
724 |
return ( $query, $query_str, $sort ); |
717 |
} |
725 |
} |
718 |
|
726 |
|
719 |
=head3 get_marc_volumes |
727 |
=head3 get_marc_volumes |
Lines 771-777
sub get_volumes_query {
Link Here
|
771 |
# the staff interface should already be displaying an error message in this case |
779 |
# the staff interface should already be displaying an error message in this case |
772 |
# so we don't need to return the error |
780 |
# so we don't need to return the error |
773 |
my $marc; |
781 |
my $marc; |
774 |
eval { $marc = $self->metadata->record;}; |
782 |
eval { $marc = $self->metadata->record; }; |
775 |
return unless $marc; |
783 |
return unless $marc; |
776 |
|
784 |
|
777 |
# Only build volumes query if we're in a 'Set' record |
785 |
# Only build volumes query if we're in a 'Set' record |