use C4::Debug;
use YAML;
use URI::Escape;
+use C4::Charset;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
&FindDuplicate
&SimpleSearch
&searchResults
+ &SearchAcquisitions
&getRecords
&buildQuery
&NZgetRecords
# not an index scan
else {
$record = $results[ $i - 1 ]->record($j)->raw();
+ warn $results[$i-1]->record($j)->render() ;
# warn "RECORD $j:".$record;
$results_hash->{'RECORDS'}[$j] = $record;
'holdingbranch',
'homebranch',
'issues',
+ 'item',
'itemnumber',
'itype',
'Local-classification',
my ( $searchdesc, $hits, $results_per_page, $offset, $scan, @marcresults ) = @_;
my $dbh = C4::Context->dbh;
my @newresults;
-
#Build branchnames hash
#find branchname
#get branch information.....
# loop through all of the records we've retrieved
for ( my $i = $offset ; $i <= $times - 1 ; $i++ ) {
my $marcrecord = MARC::File::USMARC::decode( $marcresults[$i] );
+ SetUTF8Flag($marcrecord);
my $biblionumber;
-
+
if(not $scan){
if ($bibliotag<10){
- $biblionumber = $marcrecord->field($bibliotag)->data;
+ $biblionumber = $marcrecord->field($bibliotag) ? $marcrecord->field($bibliotag)->data : undef;
}else{
$biblionumber = $marcrecord->subfield($bibliotag,$bibliosubf);
}
- $fw = GetFrameworkCode($biblionumber);
+ $fw = (defined $biblionumber) ? GetFrameworkCode($biblionumber) : '';
}
my $oldbiblio = TransformMarcToKoha( $dbh, $marcrecord, $fw );
$onloan_items->{$key}->{itemcallnumber} = $item->{itemcallnumber};
$onloan_items->{$key}->{imageurl} = getitemtypeimagelocation( 'opac', $itemtypes{ $item->{itype} }->{imageurl} );
$onloan_items->{$key}->{barcode} = $item->{barcode};
+ $onloan_items->{$key}->{reserved} = $item->{reserved};
# if something's checked out and lost, mark it as 'long overdue'
if ( $item->{itemlost} ) {
$onloan_items->{$prefix}->{longoverdue}++;
# XSLT processing of some stuff
if (C4::Context->preference("XSLTResultsDisplay") && !$scan) {
$oldbiblio->{XSLTResultsRecord} = XSLTParse4Display(
- $oldbiblio->{biblionumber}, $marcrecord, 'Results' );
+ $oldbiblio->{biblionumber}, $marcrecord, C4::Context->preference("XSLTResultsDisplay") );
}
# last check for norequest : if itemtype is notforloan, it can't be reserved either, whatever the items
return @newresults;
}
+=head2 SearchAcquisitions
+ Search for acquisitions
+=cut
+
+sub SearchAcquisitions{
+ my ($datebegin, $dateend, $itemtypes,$criteria, $orderby) = @_;
+
+ my $dbh=C4::Context->dbh;
+ # Variable initialization
+ my $str=qq|
+ SELECT marcxml
+ FROM biblio
+ LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber
+ LEFT JOIN items ON items.biblionumber=biblio.biblionumber
+ WHERE dateaccessioned BETWEEN ? AND ?
+ |;
+
+ my (@params,@loopcriteria);
+
+ push @params, $datebegin->output("iso");
+ push @params, $dateend->output("iso");
+
+ if (scalar(@$itemtypes)>0 and $criteria ne "itemtype" ){
+ if(C4::Context->preference("item-level_itypes")){
+ $str .= "AND items.itype IN (?".( ',?' x scalar @$itemtypes - 1 ).") ";
+ }else{
+ $str .= "AND biblioitems.itemtype IN (?".( ',?' x scalar @$itemtypes - 1 ).") ";
+ }
+ push @params, @$itemtypes;
+ }
+
+ if ($criteria =~/itemtype/){
+ if(C4::Context->preference("item-level_itypes")){
+ $str .= "AND items.itype=? ";
+ }else{
+ $str .= "AND biblioitems.itemtype=? ";
+ }
+
+ if(scalar(@$itemtypes) == 0){
+ my $itypes = GetItemTypes();
+ for my $key (keys %$itypes){
+ push @$itemtypes, $key;
+ }
+ }
+
+ @loopcriteria= @$itemtypes;
+ }elsif ($criteria=~/itemcallnumber/){
+ $str .= "AND (items.itemcallnumber LIKE CONCAT(?,'%')
+ OR items.itemcallnumber is NULL
+ OR items.itemcallnumber = '')";
+
+ @loopcriteria = ("AA".."ZZ", "") unless (scalar(@loopcriteria)>0);
+ }else {
+ $str .= "AND biblio.title LIKE CONCAT(?,'%') ";
+ @loopcriteria = ("A".."z") unless (scalar(@loopcriteria)>0);
+ }
+
+ if ($orderby =~ /date_desc/){
+ $str.=" ORDER BY dateaccessioned DESC";
+ } else {
+ $str.=" ORDER BY title";
+ }
+
+ my $qdataacquisitions=$dbh->prepare($str);
+
+ my @loopacquisitions;
+ foreach my $value(@loopcriteria){
+ push @params,$value;
+ my %cell;
+ $cell{"title"}=$value;
+ $cell{"titlecode"}=$value;
+
+ eval{$qdataacquisitions->execute(@params);};
+
+ if ($@){ warn "recentacquisitions Error :$@";}
+ else {
+ my @loopdata;
+ while (my $data=$qdataacquisitions->fetchrow_hashref){
+ push @loopdata, {"summary"=>GetBiblioSummary( $data->{'marcxml'} ) };
+ }
+ $cell{"loopdata"}=\@loopdata;
+ }
+ push @loopacquisitions,\%cell if (scalar(@{$cell{loopdata}})>0);
+ pop @params;
+ }
+ $qdataacquisitions->finish;
+ return \@loopacquisitions;
+}
+
#----------------------------------------------------------------------
#
# Non-Zebra GetRecords#
);
# split each word, query the DB and build the biblionumbers result
- foreach ( split / /, $string ) {
+ foreach ( split (/ /, $string )) {
next if C4::Context->stopwords->{ uc($_) }; # skip if stopword
warn "search on all indexes on $_" if $DEBUG;
my $biblionumbers;
sub NZoperatorAND{
my ($rightresult, $leftresult)=@_;
- my @leftresult = split /;/, $leftresult;
+ my @leftresult = split (/;/, $leftresult);
warn " @leftresult / $rightresult \n" if $DEBUG;
# my @rightresult = split /;/,$leftresult;
# popularity is not in MARC record, it's builded from a specific query
my $sth =
$dbh->prepare("select sum(issues) from items where biblionumber=?");
- foreach ( split /;/, $biblionumbers ) {
- my ( $biblionumber, $title ) = split /,/, $_;
+ foreach ( split (/;/, $biblionumbers )) {
+ my ( $biblionumber, $title ) = split (/,/, $_);
$result{$biblionumber} = GetMarcBiblio($biblionumber);
$sth->execute($biblionumber);
my $popularity = $sth->fetchrow || 0;
}
elsif ( $ordering =~ /author/ ) {
my %result;
- foreach ( split /;/, $biblionumbers ) {
- my ( $biblionumber, $title ) = split /,/, $_;
+ foreach ( split (/;/, $biblionumbers )) {
+ my ( $biblionumber, $title ) = split (/,/, $_);
my $record = GetMarcBiblio($biblionumber);
my $author;
if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
}
elsif ( $ordering =~ /callnumber/ ) {
my %result;
- foreach ( split /;/, $biblionumbers ) {
- my ( $biblionumber, $title ) = split /,/, $_;
+ foreach ( split (/;/, $biblionumbers )) {
+ my ( $biblionumber, $title ) = split (/,/, $_);
my $record = GetMarcBiblio($biblionumber);
my $callnumber;
my ( $callnumber_tag, $callnumber_subfield ) =
}
elsif ( $ordering =~ /pubdate/ ) { #pub year
my %result;
- foreach ( split /;/, $biblionumbers ) {
- my ( $biblionumber, $title ) = split /,/, $_;
+ foreach ( split (/;/, $biblionumbers )) {
+ my ( $biblionumber, $title ) = split (/,/, $_);
my $record = GetMarcBiblio($biblionumber);
my ( $publicationyear_tag, $publicationyear_subfield ) =
GetMarcFromKohaField( 'biblioitems.publicationyear', '' );
# the title is in the biblionumbers string, so we just need to build a hash, sort it and return
my %result;
- foreach ( split /;/, $biblionumbers ) {
- my ( $biblionumber, $title ) = split /,/, $_;
+ foreach ( split (/;/, $biblionumbers )) {
+ my ( $biblionumber, $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 !!!
);
}
+=head2 enabled_opac_search_views
+
+%hash = enabled_opac_search_views()
+
+This function returns a hash that contains two flags obtained from the system
+preferences, used to determine whether a particular opac search results view
+is enabled.
+
+=over 2
+
+=item C<Output arg:>
+
+ * $hash{can_view_MARC} is true only if the MARC view is enabled
+ * $hash{can_view_ISBD} is true only if the ISBD view is enabled
+
+=item C<usage in the script:>
+
+=back
+
+$template->param ( C4::Search::enabled_opac_search_views );
+
+=cut
+
+sub enabled_opac_search_views
+{
+ return (
+ can_opac_view_MARC => C4::Context->preference('OPACviewMARC'), # 1 if the opac search allows the MARC view
+ can_opac_view_ISBD => C4::Context->preference('OPACviewISBD'), # 1 if the opac search allows the ISBD view
+ );
+}
+
=head2 z3950_search_args