(bug #4052) fix mandatory field/subfield deletion
[koha.git] / catalogue / MARCdetail.pl
index b0854f0..5b209a6 100755 (executable)
@@ -44,7 +44,7 @@ the items attached to the biblio
 =cut
 
 use strict;
-require Exporter;
+
 use C4::Auth;
 use C4::Context;
 use C4::Output;
@@ -52,49 +52,17 @@ use CGI;
 use C4::Koha;
 use MARC::Record;
 use C4::Biblio;
+use C4::Items;
 use C4::Acquisition;
 use C4::Serials;    #uses getsubscriptionsfrombiblionumber GetSubscriptionsFromBiblionumber
+use C4::Search;                # enabled_staff_search_views
 
-#---- Internal function ---
-sub get_authorised_value_desc ($$$$$$) {
-    my ( $tagslib, $tag, $subfield, $value, $framework, $dbh ) = @_;
-
-    #---- branch
-    if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
-
-        #       return GetBranchDetail($value)->{branchname};
-    }
-
-    #---- itemtypes
-    if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "itemtypes" ) {
-
-        #          my $itemtypedef = getitemtypeinfo($itemtype);
-        #      return $itemtypedef->{description};
-    }
-
-    #---- "true" authorized value
-    my $category = $tagslib->{$tag}->{$subfield}->{'authorised_value'};
-
-    if ( $category ne "" ) {
-        my $sth =
-          $dbh->prepare(
-"select lib from authorised_values where category = ? and authorised_value = ?"
-          );
-        $sth->execute( $category, $value );
-        my $data = $sth->fetchrow_hashref;
-        return $data->{'lib'};
-    }
-    else {
-        return $value;    # if nothing is found return the original value
-    }
-}
-
-#---------
 
 my $query        = new CGI;
 my $dbh          = C4::Context->dbh;
 my $biblionumber = $query->param('biblionumber');
-my $frameworkcode = GetFrameworkCode( $biblionumber );
+my $frameworkcode = $query->param('frameworkcode');
+$frameworkcode = GetFrameworkCode( $biblionumber ) unless ($frameworkcode);
 my $popup        =
   $query->param('popup')
   ;    # if set to 1, then don't insert links, it's just to show the biblio
@@ -103,7 +71,7 @@ my $subscriptionid = $query->param('subscriptionid');
 my $tagslib = &GetMarcStructure(1,$frameworkcode);
 
 my $record = GetMarcBiblio($biblionumber);
-
+my $biblio = GetBiblioData($biblionumber);
 # open template
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
@@ -118,7 +86,8 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
 
 #count of item linked
 my $itemcount = GetItemsCount($biblionumber);
-$template->param( count => $itemcount);
+$template->param( count => $itemcount,
+                                       bibliotitle => $biblio->{title}, );
 
 #Getting the list of all frameworks
 my $queryfwk =
@@ -158,7 +127,7 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
 
     # deal with leader
     unless ( $tagslib->{'000'}->{'@'}->{tab} ne $tabloop )
-    {    #  or ($tagslib->{'000'}->{'@'}->{hidden}==(-7|-4|-3|-2|2|3|5|8))) {
+    {    #  or ($tagslib->{'000'}->{'@'}->{hidden} =~ /-7|-4|-3|-2|2|3|5|8/ )) {
         my %subfield_data;
         $subfield_data{marc_lib}      = $tagslib->{'000'}->{'@'}->{lib};
         $subfield_data{marc_value}    = $record->leader();
@@ -180,7 +149,7 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
             next
               if (
                 $tagslib->{ $fields[$x_i]->tag() }->{'@'}->{tab} ne $tabloop );
-            next if ( $tagslib->{ $fields[$x_i]->tag() }->{'@'}->{hidden} );
+            next if ( $tagslib->{ $fields[$x_i]->tag() }->{'@'}->{hidden} =~ /-7|-4|-3|-2|2|3|5|8/);
             my %subfield_data;
             $subfield_data{marc_lib} =
               $tagslib->{ $fields[$x_i]->tag() }->{'@'}->{lib};
@@ -201,12 +170,9 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
                     ne $tabloop );
                 next
                   if ( $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }
-                    ->{hidden} );
+                    ->{hidden} =~ /-7|-4|-3|-2|2|3|5|8/);
                 my %subfield_data;
-                $subfield_data{short_desc} = substr(
-                    $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }->{lib},
-                    0, 20
-                );
+                $subfield_data{short_desc} = $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }->{lib};
                 $subfield_data{long_desc} =
                   $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }->{lib};
                 $subfield_data{link} =
@@ -216,15 +182,15 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
                 if ( $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }
                     ->{isurl} )
                 {
-                    $subfield_data{marc_value} =
-                      "<a href=\"$subf[$i][1]\">$subf[$i][1]</a>";
+                    $subfield_data{marc_value} = $subf[$i][1];
+                                       $subfield_data{is_url} = 1;
                 }
                 elsif ( $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }
                     ->{kohafield} eq "biblioitems.isbn" )
                 {
 
 #                    warn " tag : ".$tagslib->{$fields[$x_i]->tag()}." subfield :".$tagslib->{$fields[$x_i]->tag()}->{$subf[$i][0]}. "ISBN : ".$subf[$i][1]."PosttraitementISBN :".DisplayISBN($subf[$i][1]);
-                    $subfield_data{marc_value} = DisplayISBN( $subf[$i][1] );
+                    $subfield_data{marc_value} = $subf[$i][1];
                 }
                 else {
                     if ( $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }
@@ -233,8 +199,9 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
                         $subfield_data{authority} = $fields[$x_i]->subfield(9);
                     }
                     $subfield_data{marc_value} =
-                      get_authorised_value_desc( $tagslib, $fields[$x_i]->tag(),
-                        $subf[$i][0], $subf[$i][1], '', $dbh );
+                      GetAuthorisedValueDesc( $fields[$x_i]->tag(),
+                        $subf[$i][0], $subf[$i][1], '', $tagslib) || $subf[$i][1];
+
                 }
                 $subfield_data{marc_subfield} = $subf[$i][0];
                 $subfield_data{marc_tag}      = $fields[$x_i]->tag();
@@ -243,11 +210,11 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
         }
         if ( $#subfields_data == 0 ) {
             $subfields_data[0]->{marc_lib}      = '';
-            $subfields_data[0]->{marc_subfield} = '';
+#            $subfields_data[0]->{marc_subfield} = '';
         }
-        if ( $#subfields_data >= 0 ) {
+        if ( $#subfields_data >= 0) {
             my %tag_data;
-            if ( $fields[$x_i]->tag() eq $fields[ $x_i - 1 ]->tag() ) {
+            if ( $fields[$x_i]->tag() eq $fields[ $x_i - 1 ]->tag() && (C4::Context->preference('LabelMARCView') eq 'economical')) {
                 $tag_data{tag} = "";
             }
             else {
@@ -256,7 +223,10 @@ for ( my $tabloop = 0 ; $tabloop <= 10 ; $tabloop++ ) {
                 }
                 else {
                     $tag_data{tag} =
-                        $fields[$x_i]->tag() . ' -'
+                        $fields[$x_i]->tag() 
+                      . ' '
+                      . C4::Koha::display_marc_indicators($fields[$x_i])
+                      . ' - '
                       . $tagslib->{ $fields[$x_i]->tag() }->{lib};
                 }
             }
@@ -278,6 +248,7 @@ my @fields = $record->fields();
 my %witness
   ; #---- stores the list of subfields used at least once, with the "meaning" of the code
 my @big_array;
+my $norequests = 1;
 foreach my $field (@fields) {
     next if ( $field->tag() < 10 );
     my @subf = $field->subfields;
@@ -286,15 +257,18 @@ foreach my $field (@fields) {
     # loop through each subfield
     for my $i ( 0 .. $#subf ) {
         next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{tab} ne 10 );
-        next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{hidden} );
+        next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{hidden} =~ /-7|-4|-3|-2|2|3|5|8/);
         $witness{ $subf[$i][0] } =
-          $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib};
-        $this_row{ $subf[$i][0] } = $subf[$i][1];
+        $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib};
+        $this_row{ $subf[$i][0] } = GetAuthorisedValueDesc( $field->tag(),
+                        $subf[$i][0], $subf[$i][1], '', $tagslib) || $subf[$i][1];
+        $norequests = 0 if $subf[$i][1] ==0 and $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{kohafield} eq 'items.notforloan';
     }
     if (%this_row) {
         push( @big_array, \%this_row );
     }
 }
+
 my ($holdingbrtagf,$holdingbrtagsubf) = &GetMarcFromKohaField("items.holdingbranch",$frameworkcode);
 @big_array = sort {$a->{$holdingbrtagsubf} cmp $b->{$holdingbrtagsubf}} @big_array;
 
@@ -324,28 +298,27 @@ foreach my $subfield_code ( keys(%witness) ) {
     push( @header_value_loop, \%header_value );
 }
 
-my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
+my $subscriptionscount = CountSubscriptionFromBiblionumber($biblionumber);
 
-if ($subscriptionsnumber) {
+if ($subscriptionscount) {
     my $subscriptions = GetSubscriptionsFromBiblionumber($biblionumber);
     my $subscriptiontitle = $subscriptions->[0]{'bibliotitle'};
     $template->param(
         subscriptiontitle   => $subscriptiontitle,
-        subscriptionsnumber => $subscriptionsnumber,
+        subscriptionsnumber => $subscriptionscount,
     );
 }
 
 $template->param (
+    norequests              => $norequests, 
     item_loop               => \@item_value_loop,
     item_header_loop        => \@header_value_loop,
     biblionumber            => $biblionumber,
     popup                   => $popup,
     hide_marc               => C4::Context->preference('hide_marc'),
-    intranetcolorstylesheet =>
-      C4::Context->preference("intranetcolorstylesheet"),
-    intranetstylesheet => C4::Context->preference("intranetstylesheet"),
-    IntranetNav        => C4::Context->preference("IntranetNav"),
-
+       marcview => 1,
+       z3950_search_params             => C4::Search::z3950_search_args($biblio),
+       C4::Search::enabled_staff_search_views,
 );
 
 output_html_with_http_headers $query, $cookie, $template->output;