X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=serials%2Fsubscription-bib-search.pl;h=089b31b07a80e3e2ce37b7db3878646ed585d484;hb=788bf6e86c0a7cdecda4a6e011bffa6013abf6ac;hp=c37934621edb45c81b0dcb619732ef3c81d9a62b;hpb=a481fad4b7e84e1571fb2750ee99d1edf234b796;p=koha_fer diff --git a/serials/subscription-bib-search.pl b/serials/subscription-bib-search.pl index c37934621e..089b31b07a 100755 --- a/serials/subscription-bib-search.pl +++ b/serials/subscription-bib-search.pl @@ -2,6 +2,7 @@ # WARNING: 4-character tab stops here # Copyright 2000-2002 Katipo Communications +# Parts Copyright 2010 Biblibre # # This file is part of Koha. # @@ -14,10 +15,9 @@ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA - +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. =head1 NAME @@ -46,145 +46,184 @@ to multipage gestion. =cut - use strict; -require Exporter; +use warnings; + use CGI; use C4::Koha; use C4::Auth; use C4::Context; use C4::Output; -use C4::Interface::CGI::Output; use C4::Search; use C4::Biblio; +use C4::Debug; -my $input=new CGI; -# my $type=$query->param('type'); -my $op = $input->param('op'); +my $input = new CGI; +my $op = $input->param('op') || q{}; my $dbh = C4::Context->dbh; -my $startfrom=$input->param('startfrom'); -$startfrom=0 unless $startfrom; -my ($template, $loggedinuser, $cookie); +my $startfrom = $input->param('startfrom'); +$startfrom = 0 unless $startfrom; +my ( $template, $loggedinuser, $cookie ); my $resultsperpage; -if ($op eq "do_search") { - my $query = $input->param('q'); +my $itype_or_itemtype = + ( C4::Context->preference("item-level_itypes") ) ? 'itype' : 'itemtype'; - $resultsperpage= $input->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); +my $query = $input->param('q'); + +# don't run the search if no search term ! +if ( $op eq "do_search" && $query ) { + + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "serials/result.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { catalogue => 1, serials => '*' }, + debug => 1, + } + ); - my ($error,$marcrecords) = SimpleSearch($query); - my $total = scalar @$marcrecords; + # add the limits if applicable + my $itemtypelimit = $input->param('itemtypelimit'); + my $ccodelimit = $input->param('ccodelimit'); + my $op = C4::Context->preference('UseQueryParser') ? '&&' : 'and'; + $query .= " $op $itype_or_itemtype:$itemtypelimit" if $itemtypelimit; + $query .= " $op ccode:$ccodelimit" if $ccodelimit; + $debug && warn $query; + $resultsperpage = $input->param('resultsperpage'); + $resultsperpage = 20 if ( !defined $resultsperpage ); + + my ( $error, $marcrecords, $total_hits ) = + SimpleSearch( $query, $startfrom * $resultsperpage, $resultsperpage ); + my $total = 0; + if ( defined $marcrecords ) { + $total = scalar @{$marcrecords}; + } - if (defined $error) { - $template->param(query_error => $error); - warn "error: ".$error; + if ( defined $error ) { + $template->param( query_error => $error ); + warn "error: " . $error; output_html_with_http_headers $input, $cookie, $template->output; exit; } my @results; - warn "total=".$total; - - for(my $i=0;$i<$total;$i++) { + + for ( my $i = 0 ; $i < $total ; $i++ ) { my %resultsloop; - my $marcrecord = MARC::File::USMARC::decode($marcrecords->[$i]); - my $biblio = TransformMarcToKoha(C4::Context->dbh,$marcrecord,''); + my $marcrecord = C4::Search::new_record_from_zebra( 'biblioserver', $marcrecords->[$i] ); + my $biblio = TransformMarcToKoha( C4::Context->dbh, $marcrecord, '' ); #build the hash for the template. - $resultsloop{highlight} = ($i % 2)?(1):(0); + $resultsloop{highlight} = ( $i % 2 ) ? (1) : (0); $resultsloop{title} = $biblio->{'title'}; $resultsloop{subtitle} = $biblio->{'subtitle'}; $resultsloop{biblionumber} = $biblio->{'biblionumber'}; $resultsloop{author} = $biblio->{'author'}; $resultsloop{publishercode} = $biblio->{'publishercode'}; $resultsloop{publicationyear} = $biblio->{'publicationyear'}; + $resultsloop{issn} = $biblio->{'issn'}; push @results, \%resultsloop; } - - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "serials/result.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {serials => 1}, - flagsrequired => {catalogue => 1}, - debug => 1, - }); # multi page display gestion - my $displaynext=0; - my $displayprev=$startfrom; - if(($total - (($startfrom+1)*($resultsperpage))) > 0 ){ + my $displaynext = 0; + my $displayprev = $startfrom; + if ( ( $total_hits - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) { $displaynext = 1; } - my @numbers = (); - if ($total>$resultsperpage) - { - for (my $i=1; $i<$total/$resultsperpage+1; $i++) - { - if ($i<16) - { - my $highlight=0; - ($startfrom==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - searchdata=> \@results, - startfrom => ($i-1)}; + if ( $total_hits > $resultsperpage ) { + for ( my $i = 1 ; $i < $total / $resultsperpage + 1 ; $i++ ) { + if ( $i < 16 ) { + my $highlight = 0; + ( $startfrom == ( $i - 1 ) ) && ( $highlight = 1 ); + push @numbers, + { + number => $i, + highlight => $highlight, + searchdata => \@results, + startfrom => ( $i - 1 ) + }; } } } - my $from = $startfrom*$resultsperpage+1; + my $from = 0; + $from = $startfrom * $resultsperpage + 1 if ( $total_hits > 0 ); my $to; - if($total < (($startfrom+1)*$resultsperpage)) - { + if ( $total_hits < ( ( $startfrom + 1 ) * $resultsperpage ) ) { $to = $total; - } else { - $to = (($startfrom+1)*$resultsperpage); + } + else { + $to = ( ( $startfrom + 1 ) * $resultsperpage ); } $template->param( - query => $query, - resultsloop => \@results, - startfrom=> $startfrom, - displaynext=> $displaynext, - displayprev=> $displayprev, - resultsperpage => $resultsperpage, - startfromnext => $startfrom+1, - startfromprev => $startfrom-1, - total=>$total, - from=>$from, - to=>$to, - numbers=>\@numbers, - ); -} # end of if ($op eq "do_search") - else { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "serials/subscription-bib-search.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {catalogue => 1, serials=>1}, - debug => 1, - }); - - my %itemtypes = GetItemTypes(); - my @values = values %itemtypes; - my $CGIitemtype=CGI::scrolling_list( - -name => 'value', - -values => \@values, - -labels => \%itemtypes, - -size => 1, - -multiple => 0 + query => $query, + resultsloop => \@results, + startfrom => $startfrom, + displaynext => $displaynext, + displayprev => $displayprev, + resultsperpage => $resultsperpage, + startfromnext => $startfrom + 1, + startfromprev => $startfrom - 1, + total => $total_hits, + from => $from, + to => $to, + numbers => \@numbers, + ); +} # end of if ($op eq "do_search" & $query) +else { + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "serials/subscription-bib-search.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { catalogue => 1, serials => '*' }, + debug => 1, + } ); + # load the itemtypes + my $itemtypes = GetItemTypes(); + my @itemtypesloop; + foreach my $thisitemtype ( + sort { + $itemtypes->{$a}->{'description'} + cmp $itemtypes->{$b}->{'description'} + } keys %$itemtypes + ) + { + my %row = ( + code => $thisitemtype, + description => $itemtypes->{$thisitemtype}->{'description'}, + ); + push @itemtypesloop, \%row; + } + + # load Collection Codes + my $authvalues = GetAuthorisedValues('CCODE'); + my @ccodesloop; + for my $thisauthvalue ( sort { $a->{'lib'} cmp $b->{'lib'} } @$authvalues ) + { + my %row = ( + code => $thisauthvalue->{'authorised_value'}, + description => $thisauthvalue->{'lib'}, + ); + push @ccodesloop, \%row; + } + $template->param( - CGIitemtype => $CGIitemtype, + itemtypeloop => \@itemtypesloop, + ccodeloop => \@ccodesloop, + no_query => $op eq "do_search" ? 1 : 0, ); }