From 29d63557770d2e17ca23bede758d4e72723a95cf Mon Sep 17 00:00:00 2001
From: Fridolin Somers <fridolin.somers@biblibre.com>
Date: Wed, 6 Sep 2017 13:44:41 +0200
Subject: [PATCH] Bug 19261 - never hide biblionumber field in view policy

Since Bug 15870 fields defined as hidden in frameworks are not present in MARC.
Some libraries may have/want field containing biblionumber hidden.
This generates an error in OPAC detail view.

I propose that field linked to biblionumber is not removed from MARC even if hidden.

Test plan :
- Use XSLT for OPAC and intranet
- Create a biblio record using default framework
- Go to delail page in OPAC and intranet
- Edit in default framework
- In (sub)field linked to biblionumber, go to Advanced constraints
- Uncheck OPAC and intranet in visibility and save
=> Check delail page in OPAC and intranet
---
 Koha/Filter/MARC/ViewPolicy.pm | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/Koha/Filter/MARC/ViewPolicy.pm b/Koha/Filter/MARC/ViewPolicy.pm
index e69b730..6826e1b 100644
--- a/Koha/Filter/MARC/ViewPolicy.pm
+++ b/Koha/Filter/MARC/ViewPolicy.pm
@@ -125,7 +125,8 @@ sub _filter_field {
             my $visibility =
               $marcsubfieldstructure->{$tag}->{$subtag}->{hidden};
             $visibility //= 0;
-            if ( $hide->{$interface}->{$visibility} ) {
+            my $kohafield = $marcsubfieldstructure->{$tag}->{$subtag}->{kohafield} // '';
+            if ( $hide->{$interface}->{$visibility} && $kohafield ne 'biblio.biblionumber' ) {
 
                 # deleting last subfield doesn't delete field, so
                 # this detects that case to delete the field.
@@ -145,7 +146,8 @@ sub _filter_field {
         # -8 is flagged, and 9/-9 are not implemented.
         my $visibility = $marcsubfieldstructure->{$tag}->{q{@}}->{hidden};
         $visibility //= 0;
-        if ( $hide->{$interface}->{$visibility} ) {
+        my $kohafield = $marcsubfieldstructure->{$tag}->{q{@}}->{kohafield} // '';
+        if ( $hide->{$interface}->{$visibility} && $kohafield ne 'biblio.biblionumber' ) {
             $result->delete_fields($field);
         }
 
-- 
2.7.4