- if (C4::Context->preference('NoZebra')) {
-
- #
- # build the query
- #
- my $query;
- my @auths=split / /,$authtypecode ;
- foreach my $auth (@auths){
- $query .="AND auth_type= $auth ";
- }
- $query =~ s/^AND //;
- my $dosearch;
- for(my $i = 0 ; $i <= $#{$value} ; $i++)
- {
- if (@$value[$i]){
- if (@$tags[$i] =~/mainentry|mainmainentry/) {
- $query .= qq( AND @$tags[$i] );
- } else {
- $query .=" AND ";
- }
- if (@$operator[$i] eq 'is') {
- $query.=(@$tags[$i]?"=":""). '"'.@$value[$i].'"';
- }elsif (@$operator[$i] eq "="){
- $query.=(@$tags[$i]?"=":""). '"'.@$value[$i].'"';
- }elsif (@$operator[$i] eq "start"){
- $query.=(@$tags[$i]?"=":"").'"'.@$value[$i].'%"';
- } else {
- $query.=(@$tags[$i]?"=":"").'"'.@$value[$i].'%"';
- }
- $dosearch=1;
- }#if value
- }
- #
- # do the query (if we had some search term
- #
- if ($dosearch) {
-# warn "QUERY : $query";
- my $result = C4::Search::NZanalyse($query,'authorityserver');
-# warn "result : $result";
- my %result;
- foreach (split /;/,$result) {
- my ($authid,$title) = split /,/,$_;
- # hint : the result is sorted by title.biblionumber because we can have X biblios with the same title
- # and we don't want to get only 1 result for each of them !!!
- # hint & speed improvement : we can order without reading the record
- # so order, and read records only for the requested page !
- $result{$title.$authid}=$authid;
- }
- # sort the hash and return the same structure as GetRecords (Zebra querying)
- my @listresult = ();
- my $numbers=0;
- if ($sortby eq 'HeadingDsc') { # sort by mainmainentry desc
- foreach my $key (sort {$b cmp $a} (keys %result)) {
- push @listresult, $result{$key};
-# warn "push..."$#finalresult;
- $numbers++;
- }
- } else { # sort by mainmainentry ASC
- foreach my $key (sort (keys %result)) {
- push @listresult, $result{$key};
-# warn "push..."$#finalresult;
- $numbers++;
- }
- }
- # limit the $results_per_page to result size if it's more
- $length = $numbers-$offset if $numbers < ($offset+$length);
- # for the requested page, replace authid by the complete record
- # speed improvement : avoid reading too much things
- my @finalresult;
- for (my $counter=$offset;$counter<=$offset+$length-1;$counter++) {
-# $finalresult[$counter] = GetAuthority($finalresult[$counter])->as_usmarc;
- my $separator=C4::Context->preference('authoritysep');
- my $authrecord =GetAuthority($listresult[$counter]);
- my $authid=$listresult[$counter];
- my $summary=BuildSummary($authrecord,$authid,$authtypecode);
- my $query_auth_tag = "SELECT auth_tag_to_report FROM auth_types WHERE authtypecode=?";
- my $sth = $dbh->prepare($query_auth_tag);
- $sth->execute($authtypecode);
- my $auth_tag_to_report = $sth->fetchrow;
- my %newline;
- $newline{used}=CountUsage($authid);
- $newline{summary} = $summary;
- $newline{authid} = $authid;
- $newline{even} = $counter % 2;
- push @finalresult, \%newline;
- }
- return (\@finalresult, $numbers);
- } else {
- return;
- }
- } else {
- my $query;
- my $attr;
- # the marclist may contain "mainentry". In this case, search the tag_to_report, that depends on
- # the authtypecode. Then, search on $a of this tag_to_report
- # also store main entry MARC tag, to extract it at end of search
- my $mainentrytag;
- ##first set the authtype search and may be multiple authorities