bugfixes on unimarc 100 handling (the field used for encoding)
[koha_gimpoz] / cataloguing / addbiblio.pl
index 95cc348..a5ceee7 100755 (executable)
@@ -23,13 +23,13 @@ use strict;
 use CGI;
 use C4::Auth;
 use C4::Output;
-use C4::Interface::CGI::Output;
 use C4::Biblio;
 use C4::Search;
 use C4::Context;
 use MARC::Record;
 use C4::Log;
 use C4::Koha; # XXX subfield_is_koha_internal_p
+use Date::Calc qw(Today);
 
 use MARC::File::USMARC;
 use MARC::File::XML;
@@ -97,37 +97,34 @@ sub MARCfindbreeding {
     my ($file,$marc,$encoding) = $sth->fetchrow;
     if ($marc) {
         my $record = MARC::Record->new_from_usmarc($marc);
-       if ($record->field('010')){ 
-       foreach my $field ($record->field('010'))
-               {
-                       foreach my $subfield ($field->subfield('a')){
-                               my $newisbn = $field->subfield('a');
-                               $newisbn =~ s/-//g;
-                               $field->update( 'a' => $newisbn );
-                               
-                                               
-                       }
-#                      $record->insert_fields_ordered($record->field('010'));
-               }               
-       }
-       
-    if ($record->subfield(100,'a')){
-       my $f100a=$record->subfield(100,'a');
-       my $f100 = $record->field(100);
-       my $f100temp = $f100->as_string;
-       $record->delete_field($f100);
-       if (length($f100temp)>28){
-       substr($f100temp,26,2,"50");
-       $f100->update('a' => $f100temp);
-       my $f100 = MARC::Field->new('100','','','a' => $f100temp);
-       $record->insert_fields_ordered($f100);
-       }
-    }
+        if ($record->field('010')){ 
+            foreach my $field ($record->field('010'))
+            {
+                foreach my $subfield ($field->subfield('a')){
+                    my $newisbn = $field->subfield('a');
+                    $newisbn =~ s/-//g;
+                    $field->update( 'a' => $newisbn );
+                }
+    #                  $record->insert_fields_ordered($record->field('010'));
+            }          
+        }
+        if ($record->subfield(100,'a')) {
+            my $f100a=$record->subfield(100,'a');
+            my $f100 = $record->field(100);
+            my $f100temp = $f100->as_string;
+            $record->delete_field($f100);
+            if (length($f100temp)>28) {
+                substr($f100temp,26,2,"50");
+                $f100->update('a' => $f100temp);
+                my $f100 = MARC::Field->new('100','','','a' => $f100temp);
+                $record->insert_fields_ordered($f100);
+            }
+        }
         if (ref($record) eq undef) {
             return -1;
         } else {
             if (C4::Context->preference("z3950NormalizeAuthor") and C4::Context->preference("z3950AuthorAuthFields")){
-                my ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,"biblio.author");
+                my ($tag,$subfield) = GetMarcFromKohaField("biblio.author");
 #                 my $summary = C4::Context->preference("z3950authortemplate");
                 my $auth_fields = C4::Context->preference("z3950AuthorAuthFields");
                 my @auth_fields= split /,/,$auth_fields;
@@ -239,6 +236,18 @@ sub create_input () {
         #use Encode;
         #$value = encode('utf-8', $value);
     $value =~ s/"/"/g;
+    # if there is no value provided but a default value in parameters, get it 
+    unless ($value) {
+        $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
+        # get today date & replace YYYY, MM, DD if provided in the default value
+        my ($year,$month,$day) = Today();
+        $month = sprintf("%02d",$month);
+        $day = sprintf("%02d",$day);
+        $value =~ s/YYYY/$year/g;
+        $value =~ s/MM/$month/g;
+        $value =~ s/DD/$day/g;
+        
+    }
     my $dbh = C4::Context->dbh;
     my %subfield_data;
     $subfield_data{tag}=$tag;
@@ -457,7 +466,7 @@ my $op = $input->param('op');
 my $frameworkcode = $input->param('frameworkcode');
 my $dbh = C4::Context->dbh;
 
-$frameworkcode = &MARCfind_frameworkcode($biblionumber) if ($biblionumber and not ($frameworkcode));
+$frameworkcode = &GetFrameworkCode($biblionumber) if ($biblionumber and not ($frameworkcode));
 
 $frameworkcode='' if ($frameworkcode eq 'Default');
 my ($template, $loggedinuser, $cookie)
@@ -493,7 +502,7 @@ my $framework=CGI::scrolling_list(
             -multiple => 0 );
 $template->param( framework => $framework, breedingid => $breedingid);
 
-$tagslib = &MARCgettagslib($dbh,1,$frameworkcode);
+$tagslib = &GetMarcStructure(1,$frameworkcode);
 my $record=-1;
 my $encoding="";
 $record = GetMarcBiblio( $biblionumber ) if ($biblionumber);
@@ -506,8 +515,8 @@ my ($biblioitemnumtagfield,$biblioitemnumtagsubfield,$bibitem,$biblioitemnumber)
 if ($biblionumber) {
     $is_a_modif=1;
     # if it's a modif, retrieve bibli and biblioitem numbers for the future modification of old-DB.
-    ($biblionumtagfield,$biblionumtagsubfield) = &MARCfind_marc_from_kohafield($dbh,"biblio.biblionumber",$frameworkcode);
-    ($biblioitemnumtagfield,$biblioitemnumtagsubfield) = &MARCfind_marc_from_kohafield($dbh,"biblioitems.biblioitemnumber",$frameworkcode);
+    ($biblionumtagfield,$biblionumtagsubfield) = &GetMarcFromKohaField("biblio.biblionumber",$frameworkcode);
+    ($biblioitemnumtagfield,$biblioitemnumtagsubfield) = &GetMarcFromKohaField("biblioitems.biblioitemnumber",$frameworkcode);
     # search biblioitems value
     my $sth=$dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=?");
     $sth->execute($biblionumber);
@@ -524,9 +533,9 @@ if ($op eq "addbiblio") {
     my @ind_tag = $input->param('ind_tag');
     my @indicator = $input->param('indicator');
     if (C4::Context->preference('TemplateEncoding') eq "iso-8859-1") {
-        $record = MARChtml2marc($dbh,\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
+        $record = TransformHtmlToMarc($dbh,\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
     } else {
-        my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
+        my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
         $record=MARC::Record->new_from_xml($xml,C4::Context->preference('TemplateEncoding'),C4::Context->preference('marcflavour'));
 #         warn "MARC :".$record->as_formatted;
 #         die;
@@ -547,7 +556,7 @@ if ($op eq "addbiblio") {
             ($biblionumber,$oldbibitemnum) = AddBiblio($record,$frameworkcode);
         }
     # now, redirect to additem page
-        print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
+        print $input->redirect("/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
         exit;
     } else {
     # it may be a duplicate, warn the user and do nothing
@@ -578,16 +587,16 @@ if ($op eq "addbiblio") {
     # build indicator hash.
     my @ind_tag = $input->param('ind_tag');
     my @indicator = $input->param('indicator');
-    my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
+    my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
     my $record;
     if (C4::Context->preference('TemplateEncoding') eq "iso-8859-1") {
         my %indicators;
         for (my $i=0;$i<=$#ind_tag;$i++) {
             $indicators{$ind_tag[$i]} = $indicator[$i];
         }
-        $record = MARChtml2marc($dbh,\@tags,\@subfields,\@values,%indicators);
+        $record = TransformHtmlToMarc($dbh,\@tags,\@subfields,\@values,%indicators);
     } else {
-        my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
+        my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
         $record=MARC::Record->new_from_xml($xml,C4::Context->preference('TemplateEncoding'),C4::Context->preference('marcflavour'));
     }
     for (my $i=1;$i<=$cntrepeatfield;$i++){