my $paz = C4::Search::PazPar2->new('http://localhost:10006/search.pz2');
$paz->init();
- #die $simple_query;
$paz->search($simple_query);
sleep 1;
my $results_hashref = {};
my $stats = XMLin($paz->stat);
$results_hashref->{'biblioserver'}->{'hits'} = $stats->{'hits'};
- my $results = XMLin($paz->show($offset, $results_per_page), forcearray => 1);
- #die Dumper($results);
+ my $results = XMLin($paz->show($offset, $results_per_page, 'work-title:1'), forcearray => 1);
+
HIT: foreach my $hit (@{ $results->{'hit'} }) {
- warn "hit";
my $recid = $hit->{recid}->[0];
+
my $work_title = $hit->{'md-work-title'}->[0];
- #if ($recid =~ /[\200-\377]/) {
- if ($recid =~ /sodot/) {
- #die "bad $recid\n";
- #probably do not want non-ASCII in record ID
- last HIT;
+ my $work_author;
+ if (exists $hit->{'md-work-author'}) {
+ $work_author = $hit->{'md-work-author'}->[0];
}
+ my $group_label = (defined $work_author) ? "$work_title / $work_author" : $work_title;
+
+ my $result_group = {};
+ $result_group->{'group_label'} = $group_label;
+ $result_group->{'group_merge_key'} = $recid;
+
my $count = 1;
if (exists $hit->{count}) {
$count = $hit->{count}->[0];
}
- #die $count;
+ $result_group->{'group_count'} = $count;
+
for (my $i = 0; $i < $count; $i++) {
- warn "look for $recid offset = $i";
+ # FIXME -- may need to worry about diacritics here
my $rec = $paz->record($recid, $i);
- warn "got record $i";
- push @{ $results_hashref->{'biblioserver'}->{$work_title}->{'RECORDS'} }, $paz->record($recid, $i);
+ push @{ $result_group->{'RECORDS'} }, $paz->record($recid, $i);
}
+
+ push @{ $results_hashref->{'biblioserver'}->{'GROUPS'} }, $result_group;
}
- warn "past hits";
# pass through facets
my $termlist_xml = $paz->termlist('author,subject');
my $self = shift;
my $start = shift;
my $count = shift;
+ my $sort = shift;
my $uri = URI->new($self->{'endpoint'});
$uri->query_param(command => 'show');
$uri->query_param(num => $count);
$uri->query_param(block => 1);
$uri->query_param(session => $self->{'session'});
+ $uri->query_param(sort => $sort);
my $response = $self->{'ua'}->get($uri);
if ($response->is_success) {
return $response->content;
my $template_name;
my $template_type;
my @params = $cgi->param("limit");
-if ((@params>=1) || ($cgi->param("q")) || ($cgi->param('multibranchlimit')) || ($cgi->param('limit-yr')) ) {
+
+my $build_grouped_results = C4::Context->preference('OPACGroupResults');
+if ($build_grouped_results) {
+ $template_name = 'opac-results-grouped.tmpl';
+}
+elsif ((@params>=1) || ($cgi->param("q")) || ($cgi->param('multibranchlimit')) || ($cgi->param('limit-yr')) ) {
$template_name = 'opac-results.tmpl';
}
else {
eval {
($error, $results_hashref, $facets) = NZgetRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
};
-} else {
+} elsif ($build_grouped_results) {
eval {
($error, $results_hashref, $facets) = C4::Search::pazGetRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
};
+} else {
+ eval {
+ ($error, $results_hashref, $facets) = getRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
+ };
}
if ($@ || $error) {
$template->param(query_error => $error.$@);
$hits = $results_hashref->{$server}->{"hits"};
my $page = $cgi->param('page') || 0;
my @newresults;
- for my $work_title (keys %{ $results_hashref->{$server} }) {
- next if $work_title eq "hits";
- push @newresults, searchResults( $query_desc,$hits,$results_per_page,$offset,@{$results_hashref->{$server}->{$work_title}->{"RECORDS"}});
+ if ($build_grouped_results) {
+ foreach my $group (@{ $results_hashref->{$server}->{"GROUPS"} }) {
+ my @group_results = searchResults( $query_desc, $group->{'group_count'},$results_per_page,$offset,
+ @{ $group->{"RECORDS"} });
+ push @newresults, { group_label => $group->{'group_label'}, GROUP_RESULTS => \@group_results };
+ }
+ } else {
+ @newresults = searchResults( $query_desc,$hits,$results_per_page,$offset,@{$results_hashref->{$server}->{"RECORDS"}});
}
$total = $total + $results_hashref->{$server}->{"hits"};
if ($hits) {