+my $patron = Koha::Patrons->find( $loggedinuser );
+my $borcat = q{};
+if ( $patron && C4::Context->preference('OpacHiddenItemsExceptions') ) {
+ $borcat = $patron->categorycode;
+}
+
+my $record = GetMarcBiblio({
+ biblionumber => $biblionumber,
+ embed_items => 1,
+ opac => 1,
+ borcat => $borcat });
+if ( ! $record ) {
+ print $query->redirect("/cgi-bin/koha/errors/404.pl");
+ exit;
+}
+
+my @all_items = GetItemsInfo($biblionumber);
+my $biblio = Koha::Biblios->find( $biblionumber );
+my $framework = $biblio ? $biblio->frameworkcode : q{};
+my ($tag_itemnumber, $subtag_itemnumber) = &GetMarcFromKohaField('items.itemnumber',$framework);
+my @nonhiddenitems = $record->field($tag_itemnumber);
+if (scalar @all_items >= 1 && scalar @nonhiddenitems == 0) {
+ print $query->redirect('/cgi-bin/koha/errors/404.pl'); # escape early
+ exit;
+}
+
+my $record_processor = Koha::RecordProcessor->new({
+ filters => 'ViewPolicy',
+ options => {
+ interface => 'opac',
+ frameworkcode => $framework
+ }
+});
+$record_processor->process($record);