- #
- # 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
- if ($authtypecode) {
- my $n=0;
- my @authtypecode;
- my @auths=split / /,$authtypecode ;
- foreach my $auth (@auths){
- $query .=" \@attr 1=authtype \@attr 5=100 ".$auth; ##No truncation on authtype
- push @authtypecode ,$auth;
- $n++;
- }
- if ($n>1){
- while ($n>1){$query= "\@or ".$query;$n--;}
- }