my @resultitems;
my $yaml = C4::Context->preference('OpacHiddenItems');
+ $yaml = "$yaml\n"; # YAML is anal on ending \n. Surplus does not hurt
my $hidingrules;
eval {
- $hidingrules = YAML::Load($yaml);
+ $hidingrules = YAML::Load($yaml);
};
if ($@) {
- warn "Unable to parse OpacHiddenItems syspref : $@";
- return ();
- } else {
+ warn "Unable to parse OpacHiddenItems syspref : $@";
+ return ();
+ }
my $dbh = C4::Context->dbh;
- # For each item
- foreach my $item (@items) {
+ # For each item
+ foreach my $item (@items) {
- # We check each rule
- foreach my $field (keys %$hidingrules) {
- my $query = "SELECT $field from items where itemnumber = ?";
- my $sth = $dbh->prepare($query);
- $sth->execute($item->{'itemnumber'});
- my ($result) = $sth->fetchrow;
+ # We check each rule
+ foreach my $field (keys %$hidingrules) {
+ my $val;
+ if (exists $item->{$field}) {
+ $val = $item->{$field};
+ }
+ else {
+ my $query = "SELECT $field from items where itemnumber = ?";
+ $val = $dbh->selectrow_array($query, undef, $item->{'itemnumber'});
+ }
+ $val = '' unless defined $val;
- # If the results matches the values in the yaml file
- if (any { $result eq $_ } @{$hidingrules->{$field}}) {
+ # If the results matches the values in the yaml file
+ if (any { $val eq $_ } @{$hidingrules->{$field}}) {
- # We add the itemnumber to the list
- push @resultitems, $item->{'itemnumber'};
+ # We add the itemnumber to the list
+ push @resultitems, $item->{'itemnumber'};
- # If at least one rule matched for an item, no need to test the others
- last;
- }
- }
- }
- return @resultitems;
+ # If at least one rule matched for an item, no need to test the others
+ last;
+ }
+ }
}
-
- }
+ return @resultitems;
+}
=head3 get_item_authorised_values
use C4::Reserves; # CheckReserves
use C4::Debug;
use C4::Items;
+use C4::Charset;
use YAML;
use URI::Escape;
# IMO this subroutine is pretty messy still -- it's responsible for
# building the HTML output for the template
sub searchResults {
- my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, @marcresults, $hidelostitems ) = @_;
+ my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, $marcresults ) = @_;
my $dbh = C4::Context->dbh;
my @newresults;
- $search_context = 'opac' unless $search_context eq 'opac' or $search_context eq 'intranet';
+ $search_context = 'opac' if !$search_context || $search_context ne 'intranet';
+ my ($is_opac, $hidelostitems);
+ if ($search_context eq 'opac') {
+ $hidelostitems = C4::Context->preference('hidelostitems');
+ $is_opac = 1;
+ }
#Build branchnames hash
#find branchname
my $marcflavour = C4::Context->preference("marcflavour");
# We get the biblionumber position in MARC
my ($bibliotag,$bibliosubf)=GetMarcFromKohaField('biblio.biblionumber','');
- my $fw;
# 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] );
- $fw = $scan
+ my $marcrecord = MARC::File::USMARC::decode( $marcresults->[$i] );
+ my $fw = $scan
? undef
: $bibliotag < 10
? GetFrameworkCode($marcrecord->field($bibliotag)->data)
my $other_count = 0;
my $wthdrawn_count = 0;
my $itemlost_count = 0;
+ my $hideatopac_count = 0;
my $itembinding_count = 0;
my $itemdamaged_count = 0;
my $item_in_transit_count = 0;
my $can_place_holds = 0;
- my $item_onhold_count = 0;
+ my $item_onhold_count = 0;
my $items_count = scalar(@fields);
- my $maxitems =
- ( C4::Context->preference('maxItemsinSearchResults') )
- ? C4::Context->preference('maxItemsinSearchResults') - 1
- : 1;
+ my $maxitems_pref = C4::Context->preference('maxItemsinSearchResults');
+ my $maxitems = $maxitems_pref ? $maxitems_pref - 1 : 1;
# loop through every item
+ my @hiddenitems;
foreach my $field (@fields) {
my $item;
}
# Hidden items
- my @items = ($item);
- my (@hiddenitems) = GetHiddenItemnumbers(@items);
- $item->{'hideatopac'} = 1 if (@hiddenitems);
+ if ($is_opac) {
+ my @hi = GetHiddenItemnumbers($item);
+ $item->{'hideatopac'} = @hi;
+ push @hiddenitems, @hi;
+ }
my $hbranch = C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch' ? 'homebranch' : 'holdingbranch';
my $otherbranch = C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch' ? 'holdingbranch' : 'homebranch';
$wthdrawn_count++ if $item->{wthdrawn};
$itemlost_count++ if $item->{itemlost};
$itemdamaged_count++ if $item->{damaged};
+ $hideatopac_count++ if $item->{hideatopac};
$item_in_transit_count++ if $transfertwhen ne '';
$item_onhold_count++ if $reservestatus eq 'Waiting';
$item->{status} = $item->{wthdrawn} . "-" . $item->{itemlost} . "-" . $item->{damaged} . "-" . $item->{notforloan};
}
}
} # notforloan, item level and biblioitem level
+
+ next if $is_opac && $hideatopac_count >= $items_count;
+ next if $hidelostitems && $itemlost_count >= $items_count;
+
my ( $availableitemscount, $onloanitemscount, $otheritemscount );
- $maxitems =
- ( C4::Context->preference('maxItemsinSearchResults') )
- ? C4::Context->preference('maxItemsinSearchResults') - 1
- : 1;
for my $key ( sort keys %$onloan_items ) {
(++$onloanitemscount > $maxitems) and last;
push @onloan_items_loop, $onloan_items->{$key};
push @available_items_loop, $available_items->{$key}
}
- # XSLT processing of some stuff
- use C4::Charset;
- SetUTF8Flag($marcrecord);
- $debug && warn $marcrecord->as_formatted;
- if (!$scan && $search_context eq 'opac' && C4::Context->preference("OPACXSLTResultsDisplay")) {
- # FIXME note that XSLTResultsDisplay (use of XSLT to format staff interface bib search results)
- # is not implemented yet
- $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, 'Results',
- $search_context, 1);
- # the last parameter tells Koha to clean up the problematic ampersand entities that Zebra outputs
-
- }
-
- # if biblio level itypes are used and itemtype is notforloan, it can't be reserved either
+ # if biblio level itypes are used and itemtype is notforloan, it can't be reserved either
if (!C4::Context->preference("item-level_itypes")) {
if ($itemtypes{ $oldbiblio->{itemtype} }->{notforloan}) {
$can_place_holds = 0;
$oldbiblio->{intransitcount} = $item_in_transit_count;
$oldbiblio->{onholdcount} = $item_onhold_count;
$oldbiblio->{orderedcount} = $ordered_count;
- $oldbiblio->{isbn} =~
- s/-//g; # deleting - in isbn to enable amazon content
+ # deleting - in isbn to enable amazon content
+ $oldbiblio->{isbn} =~ s/-//g;
if (C4::Context->preference("AlternateHoldingsField") && $items_count == 0) {
my $fieldspec = C4::Context->preference("AlternateHoldingsField");
$oldbiblio->{'alternateholdings_count'} = $alternateholdingscount;
}
- push( @newresults, $oldbiblio )
- if(not $hidelostitems
- or (($items_count > $itemlost_count )
- && $hidelostitems));
+ # XSLT processing of some stuff
+ if (!$scan && $search_context eq 'opac' && C4::Context->preference("OPACXSLTResultsDisplay")) {
+ SetUTF8Flag($marcrecord);
+ $debug && warn $marcrecord->as_formatted;
+ # FIXME note that XSLTResultsDisplay (use of XSLT to format staff interface bib search results)
+ # is not implemented yet
+ $oldbiblio->{XSLTResultsRecord}
+ = XSLTParse4Display($oldbiblio->{biblionumber},
+ $marcrecord,
+ 'Results',
+ $search_context,
+ 1, # clean up the problematic ampersand entities that Zebra outputs
+ \@hiddenitems
+ );
+
+ }
+
+ push( @newresults, $oldbiblio );
}
return @newresults;
my $stylesheet;
sub XSLTParse4Display {
- my ( $biblionumber, $orig_record, $xsl_suffix, $interface, $fixamps ) = @_;
+ my ( $biblionumber, $orig_record, $xsl_suffix, $interface, $fixamps, $hidden_items ) = @_;
$interface = 'opac' unless $interface;
# grab the XML, run it through our stylesheet, push it out to the browser
my $record = transformMARCXML4XSLT($biblionumber, $orig_record);
#return $record->as_formatted();
- my $itemsxml = buildKohaItemsNamespace($biblionumber);
+ my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items);
my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour'));
my $sysxml = "<sysprefs>\n";
foreach my $syspref ( qw/ hidelostitems OPACURLOpenInNewWindow
}
sub buildKohaItemsNamespace {
- my ($biblionumber) = @_;
+ my ($biblionumber, $hidden_items) = @_;
+
my @items = C4::Items::GetItemsInfo($biblionumber);
+ if ($hidden_items && @$hidden_items) {
+ my %hi = map {$_ => 1} @$hidden_items;
+ @items = grep { !$hi{$_->{itemnumber}} } @items;
+ }
my $branches = GetBranches();
my $itemtypes = GetItemTypes();
my $xml = '';