X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FSearch.pm;h=9bc0af2842abf02238435d2bc79e2ad04d158af5;hb=bb35b608282e670e1bb07bf4cea324fc16b6ec90;hp=04ce112a544b5117e0fe3f37fd29f4c6569c57f9;hpb=5207699f98612193c47b3ef7a3a3b6da5444b859;p=koha_gimpoz diff --git a/C4/Search.pm b/C4/Search.pm index 04ce112a54..9bc0af2842 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -71,6 +71,7 @@ This module provides searching functions for Koha's bibliographic databases &AddSearchHistory &GetDistinctValues &enabled_staff_search_views + &SimpleSearch ); # make all your functions, whether exported or not; @@ -469,46 +470,39 @@ sub getRecords { if ( !$scan && $servers[ $i - 1 ] =~ /biblioserver/ ) { my $jmax = $size>$facets_maxrecs? $facets_maxrecs: $size; - - for ( my $k = 0 ; $k <= @$facets ; $k++ ) { - ($facets->[$k]) or next; - my @fcodes = @{$facets->[$k]->{'tags'}}; - my $sfcode = $facets->[$k]->{'subfield'}; - + for my $facet ( @$facets ) { for ( my $j = 0 ; $j < $jmax ; $j++ ) { my $render_record = $results[ $i - 1 ]->record($j)->render(); my @used_datas = (); - - foreach my $fcode (@fcodes) { - + foreach my $tag ( @{$facet->{tags}} ) { # avoid first line - my $field_pattern = '\n'.$fcode.' ([^\n]+)'; + my $tag_num = substr($tag, 0, 3); + my $letters = substr($tag, 3); + my $field_pattern = '\n' . $tag_num . ' ([^\n]+)'; my @field_tokens = ( $render_record =~ /$field_pattern/g ) ; - foreach my $field_token (@field_tokens) { - my $subfield_pattern = '\$'.$sfcode.' ([^\$]+)'; - my @subfield_values = ( $field_token =~ /$subfield_pattern/g ); - - foreach my $subfield_value (@subfield_values) { - - my $data = $subfield_value; - $data =~ s/^\s+//; # trim left - $data =~ s/\s+$//; # trim right - - unless ( $data ~~ @used_datas ) { - $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++; - push @used_datas, $data; + my @subf = ( $field_token =~ /\$([a-zA-Z0-9]) ([^\$]+)/g ); + my @values; + for (my $i = 0; $i < @subf; $i += 2) { + if ( $letters =~ $subf[$i] ) { + my $value = $subf[$i+1]; + $value =~ s/^ *//; + $value =~ s/ *$//; + push @values, $value; } - } # subfields + } + my $data = join($facet->{sep}, @values); + unless ( $data ~~ @used_datas ) { + $facets_counter->{ $facet->{idx} }->{$data}++; + push @used_datas, $data; + } } # fields } # field codes } # records - - $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} = $facets->[$k]->{'label_value'}; - $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} = $facets->[$k]->{'expanded'}; + $facets_info->{ $facet->{idx} }->{label_value} = $facet->{label}; + $facets_info->{ $facet->{idx} }->{expanded} = $facet->{expanded}; } # facets } - # End PROGILONE } # warn "connection ", $i-1, ": $size hits"; @@ -1303,7 +1297,7 @@ sub buildQuery { warn "QUERY BEFORE LIMITS: >$query<" if $DEBUG; # add limits - my $group_OR_limits; + my %group_OR_limits; my $availability_limit; foreach my $this_limit (@limits) { if ( $this_limit =~ /available/ ) { @@ -1320,17 +1314,16 @@ sub buildQuery { # group_OR_limits, prefixed by mc- # OR every member of the group elsif ( $this_limit =~ /mc/ ) { - - if ( $this_limit =~ /mc-ccode:/ ) { + my ($k,$v) = split(/:/, $this_limit,2); + if ( $k !~ /mc-i(tem)?type/ ) { # in case the mc-ccode value has complicating chars like ()'s inside it we wrap in quotes $this_limit =~ tr/"//d; - my ($k,$v) = split(/:/, $this_limit,2); $this_limit = $k.":\"".$v."\""; } - $group_OR_limits .= " or " if $group_OR_limits; - $limit_desc .= " or " if $group_OR_limits; - $group_OR_limits .= "$this_limit"; + $group_OR_limits{$k} .= " or " if $group_OR_limits{$k}; + $limit_desc .= " or " if $group_OR_limits{$k}; + $group_OR_limits{$k} .= "$this_limit"; $limit_cgi .= "&limit=$this_limit"; $limit_desc .= " $this_limit"; } @@ -1353,9 +1346,9 @@ sub buildQuery { } } } - if ($group_OR_limits) { + foreach my $k (keys (%group_OR_limits)) { $limit .= " and " if ( $query || $limit ); - $limit .= "($group_OR_limits)"; + $limit .= "($group_OR_limits{$k})"; } if ($availability_limit) { $limit .= " and " if ( $query || $limit ); @@ -1627,6 +1620,7 @@ sub searchResults { foreach my $code ( keys %subfieldstosearch ) { $item->{$code} = $field->subfield( $subfieldstosearch{$code} ); } + $item->{description} = $itemtypes{ $item->{itype} }{description}; # Hidden items if ($is_opac) { @@ -1657,6 +1651,7 @@ sub searchResults { $onloan_items->{$key}->{branchname} = $item->{branchname}; $onloan_items->{$key}->{location} = $shelflocations->{ $item->{location} }; $onloan_items->{$key}->{itemcallnumber} = $item->{itemcallnumber}; + $onloan_items->{$key}->{description} = $item->{description}; $onloan_items->{$key}->{imageurl} = getitemtypeimagelocation( $search_context, $itemtypes{ $item->{itype} }->{imageurl} ); # if something's checked out and lost, mark it as 'long overdue' if ( $item->{itemlost} ) { @@ -1741,6 +1736,7 @@ sub searchResults { $other_items->{$key}->{notforloan} = GetAuthorisedValueDesc('','',$item->{notforloan},'','',$notforloan_authorised_value) if $notforloan_authorised_value; $other_items->{$key}->{count}++ if $item->{$hbranch}; $other_items->{$key}->{location} = $shelflocations->{ $item->{location} }; + $other_items->{$key}->{description} = $item->{description}; $other_items->{$key}->{imageurl} = getitemtypeimagelocation( $search_context, $itemtypes{ $item->{itype} }->{imageurl} ); } # item is available @@ -1748,7 +1744,7 @@ sub searchResults { $can_place_holds = 1; $available_count++; $available_items->{$prefix}->{count}++ if $item->{$hbranch}; - foreach (qw(branchname itemcallnumber hideatopac)) { + foreach (qw(branchname itemcallnumber hideatopac description)) { $available_items->{$prefix}->{$_} = $item->{$_}; } $available_items->{$prefix}->{location} = $shelflocations->{ $item->{location} };