MARCXML only. No more MARC record. No more non-marc handling
[koha.git] / cataloguing / addbiblio.pl
1 #!/usr/bin/perl
2
3 # $Id$
4
5 # Copyright 2000-2002 Katipo Communications
6 #
7 # This file is part of Koha.
8 #
9 # Koha is free software; you can redistribute it and/or modify it under the
10 # terms of the GNU General Public License as published by the Free Software
11 # Foundation; either version 2 of the License, or (at your option) any later
12 # version.
13 #
14 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License along with
19 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
20 # Suite 330, Boston, MA  02111-1307 USA
21
22 use strict;
23 use CGI;
24 use C4::Auth;
25 use C4::Output;
26 use C4::Interface::CGI::Output;
27 use C4::Biblio;
28 use C4::Search; # also includes Biblio.pm, Search is used to FindDuplicate
29 use C4::Context;
30 use C4::Koha; # XXX subfield_is_koha_internal_p
31 use MARC::Record;
32 use Encode;
33 use vars qw( $tagslib);
34 use vars qw( $authorised_values_sth);
35 use vars qw( $is_a_modif );
36 my $input = new CGI;
37 my $z3950 = $input->param('z3950');
38 #my $logstatus=C4::Context->preference('Activate_log');
39 my $xml;
40 my $itemtype; # created here because it can be used in build_authorized_values_list sub
41
42
43 =item MARCfindbreeding
44
45     $record = MARCfindbreeding($dbh, $breedingid,$frameworkcode);
46
47 Look up the breeding farm with database handle $dbh, for the
48 record with id $breedingid.  If found, returns the decoded
49 MARC::Record; otherwise, -1 is returned (FIXME).
50 Returns as second parameter the character encoding.
51
52 =cut
53
54 sub MARCfindbreeding {
55         my ($dbh,$id,$oldbiblionumber) = @_;
56         my $sth = $dbh->prepare("select marc,encoding from marc_breeding where id=?");
57         $sth->execute($id);
58         my ($marc,$encoding) = $sth->fetchrow;
59         $sth->finish;
60         if ($marc) {
61                 my $record = MARC::File::USMARC::decode($marc);
62                 if (ref($record) eq undef) {
63                         return -1;
64                 } 
65         
66 ##Delete biblionumber tag in case a similar tag is used in imported MARC
67         my  (  $tagfield,  $tagsubfield )  =MARCfind_marc_from_kohafield("biblionumber","biblios");
68                 my $old_field = $record->field($tagfield);
69                 $record->delete_field($old_field);
70                 ##add the old biblionumber if a modif but coming from breedingfarm
71                 if ($oldbiblionumber){
72                         my $newfield;
73                         if ($tagfield<10){
74                         $newfield = MARC::Field->new($tagfield,  $oldbiblionumber);
75                         }else{
76                         $newfield = MARC::Field->new($tagfield, '', '', "$tagsubfield" => $oldbiblionumber);
77                         }       
78                 $record->insert_fields_ordered($newfield);
79                 }
80         my $xml=  $record->as_xml_record();
81         $xml=Encode::encode('utf8',$xml);
82         my $xmlhash=XML_xml2hash_onerecord($xml);
83                 return $xmlhash,$encoding;
84                 
85         }
86         return -1;
87 }
88
89
90 =item build_authorized_values_list
91
92 =cut
93
94 sub build_authorized_values_list ($$$$$) {
95         my($tag, $subfield, $value, $dbh,$authorised_values_sth) = @_;
96
97         my @authorised_values;
98         my %authorised_lib;
99
100         # builds list, depending on authorised value...
101
102         #---- branch
103         if ($tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
104         my $sth=$dbh->prepare("select branchcode,branchname from branches order by branchname");
105         $sth->execute;
106         push @authorised_values, ""
107                 unless ($tagslib->{$tag}->{$subfield}->{mandatory});
108
109         while (my ($branchcode,$branchname) = $sth->fetchrow_array) {
110                 push @authorised_values, $branchcode;
111                 $authorised_lib{$branchcode}=$branchname;
112         }
113
114         #----- itemtypes
115         } elsif ($tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes") {
116                 my $sth=$dbh->prepare("select itemtype,description from itemtypes order by description");
117                 $sth->execute;
118                 push @authorised_values, "" unless ($tagslib->{$tag}->{$subfield}->{mandatory});
119         
120                 while (my ($itemtype,$description) = $sth->fetchrow_array) {
121                         push @authorised_values, $itemtype;
122                         $authorised_lib{$itemtype}=$description;
123                 }
124                 $value=$itemtype unless ($value);
125
126         #---- "true" authorised value
127         } else {
128                 $authorised_values_sth->execute($tagslib->{$tag}->{$subfield}->{authorised_value});
129
130                 push @authorised_values, "" unless ($tagslib->{$tag}->{$subfield}->{mandatory});
131         
132                 while (my ($value,$lib) = $authorised_values_sth->fetchrow_array) {
133                         push @authorised_values, $value;
134                         $authorised_lib{$value}=$lib;
135                 }
136     }
137     return CGI::scrolling_list( -name     => 'field_value',
138                                 -values   => \@authorised_values,
139                                 -default  => $value,
140                                 -labels   => \%authorised_lib,
141                                 -override => 1,
142                                 -size     => 1,
143                                 -multiple => 0 );
144 }
145
146 =item create_input
147  builds the <input ...> entry for a subfield.
148 =cut
149 sub create_input () {
150         my ($tag,$subfield,$value,$i,$tabloop,$rec,$authorised_values_sth,$id) = @_;    
151         $value =~ s/"/&quot;/g;
152         my $dbh = C4::Context->dbh;
153         my %subfield_data;
154         $subfield_data{id}=$id;
155         $subfield_data{tag}=$tag;
156         $subfield_data{subfield}=$subfield;
157         $subfield_data{marc_lib}="<span id=\"error$i\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>";
158         $subfield_data{marc_lib_plain}=$tagslib->{$tag}->{$subfield}->{lib};
159         $subfield_data{tag_mandatory}=$tagslib->{$tag}->{mandatory};
160         $subfield_data{mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory};
161         $subfield_data{repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable};
162         $subfield_data{index} = $i;
163         $subfield_data{visibility} = "display:none" if (substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "0") ; #check parity
164         if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
165                 $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh,$authorised_values_sth);
166         # it's a thesaurus / authority field
167         } elsif ($tagslib->{$tag}->{$subfield}->{authtypecode}) {
168                 
169                 $subfield_data{marc_value}="<input onblur=\"this.style.backgroundColor='#ffffff';\" onfocus=\"this.style.backgroundColor='#ffffff;'\"\" tabindex=\"1\" type=\"text\"   name=\"field_value\" id=\"field_value$id\" value=\"$value\" size=\"40\" maxlength=\"255\" DISABLE READONLY> <a  style=\"cursor: help;\" href=\"javascript:Dopop('../authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$id',$id);\">...</a>";
170         # it's a plugin field
171         } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
172                 # opening plugin. Just check wether we are on a developper computer on a production one
173                 # (the cgidir differs)
174                 my $cgidir = C4::Context->intranetdir ."/cgi-bin/value_builder";
175                 unless (opendir(DIR, "$cgidir")) {
176                         $cgidir = C4::Context->intranetdir."/value_builder";
177                 } 
178                 my $plugin=$cgidir."/".$tagslib->{$tag}->{$subfield}->{'value_builder'}; 
179                 require $plugin;
180                 my $extended_param = plugin_parameters($dbh,$rec,$tagslib,$i,$tabloop);
181                 my ($function_name,$javascript) = plugin_javascript($dbh,$rec,$tagslib,$i,$tabloop);
182                 $subfield_data{marc_value}="<input tabindex=\"1\" type=\"text\"  name=\"field_value\" id=\"field_value$id\"  value=\"$value\" size=\"40\" maxlength=\"255\" DISABLE READONLY OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i); \"> <a  style=\"cursor: help;\" href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
183         # it's an hidden field
184         } elsif  ($tag eq '') {
185                 $subfield_data{marc_value}="<input onblur=\"this.style.backgroundColor='#ffffff';\" onfocus=\"this.style.backgroundColor='#ffffff'; \" tabindex=\"1\" type=\"hidden\" name=\"field_value\" id=\"field_value$id\"  value=\"$value\">";
186         } elsif  (substr($tagslib->{$tag}->{$subfield}->{'hidden'},2,1) gt "1") {
187
188                 $subfield_data{marc_value}="<input onblur=\"this.style.backgroundColor='#ffffff';\" onfocus=\"this.style.backgroundColor='#ffffff'; \" tabindex=\"1\" type=\"text\" name=\"field_value\" id=\"field_value$id\"   value=\"$value\" size=\"40\" maxlength=\"255\" >";
189         # it's a standard field
190         } else {
191                 if (length($value) >100) {
192                         $subfield_data{marc_value}="<textarea tabindex=\"1\" name=\"field_value\" id=\"field_value$id\"  cols=\"40\" rows=\"5\" >$value</textarea>";
193                 } else {
194                         $subfield_data{marc_value}="<input onblur=\"this.style.backgroundColor='#ffffff';\" onfocus=\"this.style.backgroundColor='#ffffff'; \" tabindex=\"1\" type=\"text\" name=\"field_value\" id=\"field_value$id\"  value=\"$value\" size=\"50\">"; #"
195                 }
196         }
197         return \%subfield_data;
198 }
199
200 sub build_tabs  ($$$;$){
201     my($template, $xmlhash, $dbh,$addedfield) = @_;
202     # fill arrays
203     my @loop_data =();
204     my $tag;
205     my $i=0;
206 my $id=100;
207         my $authorised_values_sth = $dbh->prepare("select authorised_value,lib
208                 from authorised_values
209                 where category=? order by lib");
210
211 # loop through each tab 0 through 9
212         for (my $tabloop = 0; $tabloop <= 9; $tabloop++) {
213                 my @loop_data = ();
214                 foreach my $tag (sort(keys (%{$tagslib}))) {
215                         my $indicator;
216                                 # if MARC::Record is not empty => use it as master loop, then add missing subfields that should be in the tab.
217                                 # if MARC::Record is empty => use tab as master loop.
218                         if ($xmlhash) {
219                         ####
220                         my @subfields_data;
221                         my %definedsubfields;
222                         my $hiddenrequired;
223                         my ($ind1,$ind2);
224                         my $biblio=$xmlhash->{'datafield'};
225                         my $controlfields=$xmlhash->{'controlfield'};
226                         my $leader=$xmlhash->{'leader'};
227                          if ($tag>9){
228                                         foreach my $data (@$biblio){
229                                            if ($data->{'tag'} eq $tag){
230                                             $ind1="  ";
231                                               $ind2="  ";               
232                                               foreach my $subfield ( $data->{'subfield'}){
233                                                  foreach my $code ( @$subfield){
234                                                         if (@$subfield>1){$hiddenrequired=1;}
235                                                         my $subfield=$code->{'code'}  ;
236                                                         my $value=$code->{'content'};
237                                                         $definedsubfields{$tag}{$code->{'code'}}=1 ;
238                                                         next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
239                                                         push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id));
240                                                         $i++;
241                                                 }
242                                               }
243                                             $ind1=$data->{'ind1'};
244                                             $ind2=      $data->{'ind2'};
245                                           }
246                                 }
247                          }else{
248                                 if ($tag eq "000" || $tag eq "LDR"){
249                                         my $subfield="@";
250                                         my $value=$leader->[0] if $leader->[0];
251                                         $definedsubfields{$tag}{'@'}=1;
252                                         next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
253                                         push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id));                                    
254                                         $i++;
255                                  }else{
256                                  foreach my $control (@$controlfields){
257                                         if ($control->{'tag'} eq $tag){
258                                         my $subfield="@";
259                                         my $value=$control->{'content'} ;
260                                         $definedsubfields{$tag}{'@'}=1;
261                                         next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
262                                         push(@subfields_data, &create_input($tag,$subfield,$value,$i,$tabloop,$xmlhash,$authorised_values_sth,$id));                                    
263                                         $i++;
264                                         }
265                                  }
266                                }
267                         }##tag >9
268
269
270                         #####
271                                 
272                                 # now, loop again to add parameter subfield that are not in the MARC::Record
273                                         foreach my $subfield (sort( keys %{$tagslib->{$tag}})) {
274                                                 next if (length $subfield !=1);
275                                                 next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
276                                                 next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1")  ); #check for visibility flag
277                                                 next if ($definedsubfields{$tag}{$subfield} );
278                                                 push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id));
279                                                 $i++;
280                                         }
281                                         if ($#subfields_data >= 0) {
282                                                 my %tag_data;
283                                                 $tag_data{tag} = $tag;
284                                                 $tag_data{tag_lib} = $tagslib->{$tag}->{lib};
285                                                 $tag_data{repeatable} = $tagslib->{$tag}->{repeatable};
286                                                 $tag_data{indicator} = $ind1.$ind2 if ($tag>=10);
287                                                 $tag_data{subfield_loop} = \@subfields_data;
288                                                 if ($tag<10) {
289                                                                         $tag_data{fixedfield} = 1;
290                                                                         }
291
292                                                 push (@loop_data, \%tag_data);
293                                         }
294
295                                         
296 # If there is more than 1 field, add an empty hidden field as separator.
297                                         if ($hiddenrequired && $#loop_data >=0 && $loop_data[$#loop_data]->{'tag'} eq $tag) {
298                                                 my @subfields_data;
299                                                 my %tag_data;
300                                                 push(@subfields_data, &create_input('','','',$i,$tabloop,$xmlhash,$authorised_values_sth,$id));
301                                                 $tag_data{tag} = '';
302                                                 $tag_data{tag_lib} = '';
303                                                 $tag_data{indicator} = '';
304                                                 $tag_data{subfield_loop} = \@subfields_data;
305                                                 if ($tag<10) {
306                                                                  $tag_data{fixedfield} = 1;
307                                                         }
308                                                 push (@loop_data, \%tag_data);
309                                                 $i++;
310                                         }
311                                         if ($addedfield eq $tag) {
312                                                 my %tag_data;
313                                                 my @subfields_data;
314                                                         foreach my $subfield (sort( keys %{$tagslib->{$tag}})) {
315                                                 next if (length $subfield !=1);
316                                                 next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
317                                                 next if ($tag<10);
318                                                 next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1")  ); #check for visibility flag
319                                                 push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id));
320                                                 $i++;
321                                                         }
322                                                 $tag_data{tag} = $tag;
323                                                 $tag_data{tag_lib} = $tagslib->{$tag}->{lib};
324                                                 $tag_data{repeatable} = $tagslib->{$tag}->{repeatable};
325                                                 $tag_data{indicator} = $ind1.$ind2 if ($tag>=10);
326                                                 $tag_data{subfield_loop} = \@subfields_data;
327                                                 if ($tag<10) {
328                                                                         $tag_data{fixedfield} = 1;
329                                                                         }
330                                                 push (@loop_data, \%tag_data);
331                                                 $i++;
332                                         }
333                                 
334         # if breeding is empty
335                         } else {
336                                 my @subfields_data;
337                                 foreach my $subfield (sort(keys %{$tagslib->{$tag}})) {
338                                         next if (length $subfield !=1);
339                                         next if ((substr($tagslib->{$tag}->{$subfield}->{hidden},2,1) gt "1")  ); #check for visibility flag
340                                         next if ($tagslib->{$tag}->{$subfield}->{tab} ne $tabloop);
341                                         push(@subfields_data, &create_input($tag,$subfield,'',$i,$tabloop,$xmlhash,$authorised_values_sth,$id));
342                                         $i++;
343                                 }
344                                 if ($#subfields_data >= 0) {
345                                         my %tag_data;
346                                         $tag_data{tag} = $tag;
347                                         $tag_data{tag_lib} = $tagslib->{$tag}->{lib};
348                                         $tag_data{repeatable} = $tagslib->{$tag}->{repeatable};
349                                         $tag_data{indicator} = $indicator;
350                                         $tag_data{subfield_loop} = \@subfields_data;
351                                         $tag_data{tagfirstsubfield} = $tag_data{subfield_loop}[0];
352                                         if ($tag<10) {
353                                                 $tag_data{fixedfield} = 1;
354                                         }
355                                         push (@loop_data, \%tag_data);
356                                 }
357                         }
358                 $id++;
359                 }       
360                 $template->param($tabloop."XX" =>\@loop_data);
361         }
362 }
363
364
365 sub build_hidden_data () {
366     # build hidden data =>
367     # we store everything, even if we show only requested subfields.
368
369     my @loop_data =();
370     my $i=0;
371     foreach my $tag (keys %{$tagslib}) {
372         my $previous_tag = '';
373
374         # loop through each subfield
375         foreach my $subfield (keys %{$tagslib->{$tag}}) {
376             next if ($subfield eq 'lib');
377             next if ($subfield eq 'tab');
378             next if ($subfield eq 'mandatory');
379                 next if ($subfield eq 'repeatable');
380             next if ($tagslib->{$tag}->{$subfield}->{'tab'}  ne "-1");
381             my %subfield_data;
382             $subfield_data{marc_lib}=$tagslib->{$tag}->{$subfield}->{lib};
383             $subfield_data{marc_mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory};
384             $subfield_data{marc_repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable};
385             $subfield_data{marc_value}="<input type=\"hidden\"  name=\"field_value[]\">";
386             push(@loop_data, \%subfield_data);
387             $i++
388         }
389     }
390 }
391
392
393 # ======================== 
394 #          MAIN 
395 #=========================
396 my $input = new CGI;
397 my $error = $input->param('error');
398 my $oldbiblionumber=$input->param('oldbiblionumber'); # if bib exists, it's a modif, not a new biblio.
399 my $breedingid = $input->param('breedingid');
400 my $z3950 = $input->param('z3950');
401 my $op = $input->param('op');
402 my $duplicateok = $input->param('duplicateok');
403
404 my $frameworkcode = $input->param('frameworkcode');
405 my $dbh = C4::Context->dbh;
406 my $biblionumber;
407
408 $biblionumber=$oldbiblionumber if $oldbiblionumber;
409
410 $frameworkcode='' if ($frameworkcode eq 'Default');
411 my ($template, $loggedinuser, $cookie)
412     = get_template_and_user({template_name => "cataloguing/addbiblio.tmpl",
413                              query => $input,
414                              type => "intranet",
415                              authnotrequired => 0,
416                              flagsrequired => {editcatalogue => 1},
417                              debug => 1,
418                              });
419
420 #Getting the list of all frameworks
421 my $queryfwk =$dbh->prepare("select frameworktext, frameworkcode from biblios_framework");
422 $queryfwk->execute;
423 my %select_fwk;
424 my @select_fwk;
425 my $curfwk;
426 push @select_fwk,"Default";
427 $select_fwk{"Default"} = "Default";
428 while (my ($description, $fwk) =$queryfwk->fetchrow) {
429         push @select_fwk, $fwk;
430         $select_fwk{$fwk} = $description;
431 }
432 $curfwk=$frameworkcode;
433 my $framework=CGI::scrolling_list( -name     => 'Frameworks',
434                         -id => 'Frameworks',
435                         -default => $curfwk,
436                         -OnChange => 'Changefwk(this);',
437                         -values   => \@select_fwk,
438                         -labels   => \%select_fwk,
439                         -size     => 1,
440                         -multiple => 0 );
441 $template->param( framework => $framework);
442 my $xmlhash;
443 my $xml;
444 #####DO NOT RETRIVE FROM ZEBRA######
445 my $record =XMLgetbiblio($dbh,$biblionumber) if ($biblionumber);
446 $xmlhash=XML_xml2hash_onerecord($record) if ($biblionumber);
447 $frameworkcode=MARCfind_frameworkcode( $dbh, $biblionumber );
448 ###########
449 $tagslib = &MARCgettagslib($dbh,1,$frameworkcode);
450
451 my $encoding="";
452 ($xmlhash,$encoding) = MARCfindbreeding($dbh,$breedingid,$oldbiblionumber) if ($breedingid);
453
454 $is_a_modif=0;
455 $is_a_modif=1 if $oldbiblionumber; 
456 my ($oldbiblionumtagfield,$oldbiblionumtagsubfield);
457 if ($biblionumber  && !$z3950) {
458         $is_a_modif=1;
459         # if it's a modif, retrieve old biblionumber for the future modification of old-DB.
460         ($oldbiblionumtagfield,$oldbiblionumtagsubfield) = &MARCfind_marc_from_kohafield($dbh,"biblionumber","biblios");
461
462         
463 }
464 #------------------------------------------------------------------------------------------------------------------------------
465 if ($op eq "addbiblio") {
466 #------------------------------------------------------------------------------------------------------------------------------
467         # rebuild
468         my @tags = $input->param('tag');
469         my @subfields =$input->param('subfield');
470         my @values=$input->param('field_value');
471         # build indicator hash.
472         my @ind_tag = $input->param('ind_tag');
473         my @indicator = $input->param('indicator');
474         
475         
476         
477 ## check for malformed xml -- non UTF-8 like (MARC8) will break xml without warning
478 ### This usually happens with data coming from other Z3950 servers
479 ## Slows the saving process so comment out at your own risk
480 eval{
481  $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);        
482 };
483  if ($@){
484 warn $@;
485  $template->param(error             =>1,xmlerror=>1,);
486 goto FINAL;
487   };
488 my $xmlhash=XML_xml2hash_onerecord($xml);
489         my ($duplicatebiblionumber,$duplicatetitle) = FindDuplicate($xmlhash) if (($op eq "addbiblio") && (!$is_a_modif) && (!$duplicateok));
490         my $confirm_not_duplicate = $input->param('confirm_not_duplicate');
491         # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate)
492         if (!$duplicatebiblionumber or $confirm_not_duplicate) {
493                 # MARC::Record built => now, record in DB
494                 my $oldbibnum;
495                 my $oldbibitemnum;
496                 if ($is_a_modif) {
497                         NEWmodbiblio($dbh,$biblionumber,$xmlhash,$frameworkcode);
498
499                 } else {
500
501                         ($biblionumber) = NEWnewbiblio($dbh,$xmlhash,$frameworkcode);
502
503                 }
504         # now, redirect to additem page
505                 print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
506                 exit;
507         } else {
508 FINAL:
509         # it may be a duplicate, warn the user and do nothing
510                 build_tabs ($template, $xmlhash, $dbh);
511                 build_hidden_data;
512                 $template->param(
513                         oldbiblionumber             => $oldbiblionumber,
514                         biblionumber                      => $biblionumber,
515                         oldbiblionumtagfield        => $oldbiblionumtagfield,
516                         oldbiblionumtagsubfield     => $oldbiblionumtagsubfield,
517                         duplicatebiblionumber           => $duplicatebiblionumber,
518                         duplicatetitle                          => $duplicatetitle,
519                          );
520         }
521 #------------------------------------------------------------------------------------------------------------------------------
522 } elsif ($op eq "addfield") {
523 #------------------------------------------------------------------------------------------------------------------------------
524         my $addedfield = $input->param('addfield_field');
525         my @tags = $input->param('tag');
526         my @subfields = $input->param('subfield');
527         my @values = $input->param('field_value');
528         # build indicator hash.
529         my @ind_tag = $input->param('ind_tag');
530         my @indicator = $input->param('indicator');
531         my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
532         my $xmlhash=XML_xml2hash_onerecord($xml);
533         # adding an empty field
534         build_tabs ($template, $xmlhash, $dbh,$addedfield);
535         build_hidden_data;
536         $template->param(
537                 oldbiblionumber             => $oldbiblionumber,
538                 biblionumber                     => $biblionumber,
539                 oldbiblionumtagfield        => $oldbiblionumtagfield,
540                 oldbiblionumtagsubfield     => $oldbiblionumtagsubfield,
541                  );
542 } elsif ($op eq "delete") {
543 #------------------------------------------------------------------------------------------------------------------------------
544 my $sth=$dbh->prepare("select iss.itemnumber from items i ,issues iss where iss.itemnumber=i.itemnumber and iss.returndate is null and  i.biblionumber=?");
545  $sth->execute($biblionumber);
546 my $onloan=$sth->fetchrow;
547
548         if (!$onloan){  
549         NEWdelbiblio($dbh,$biblionumber);
550 print   $input->redirect("/cgi-bin/koha/catalogue/catalogue-search.pl");
551         exit;
552         }else{
553
554 $template->param(error            => 1, onloan=>1,);
555
556 goto OUT;
557         }
558 #------------------------------------------------------------------------------------------------------------------------------
559 #------------------------------------------------------------------------------------------------------------------------------
560 } else {
561 #------------------------------------------------------------------------------------------------------------------------------
562
563         # If we're in a duplication case, we have to set to "" the  biblionumber
564         # as we'll save the biblio as a new one.
565         if ($op eq "duplicate")
566         {
567                 $biblionumber = "";
568                 $oldbiblionumber= "";
569         $template->param(duplicateok            => 1);
570         }
571         build_tabs ($template, $xmlhash, $dbh);
572         build_hidden_data;
573         $template->param(
574                 oldbiblionumber             => $oldbiblionumber,
575                 biblionumber                       => $biblionumber,
576                 oldbiblionumtagfield        => $oldbiblionumtagfield,
577                 oldbiblionumtagsubfield     => $oldbiblionumtagsubfield                 
578                 );
579 }
580 $template->param(
581                 frameworkcode => $frameworkcode,
582                 itemtype => $frameworkcode, # HINT: if the library has itemtype = framework, itemtype is auto filled !
583                 hide_marc => C4::Context->preference('hide_marc'),
584                 intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
585                 intranetstylesheet => C4::Context->preference("intranetstylesheet"),
586                 IntranetNav => C4::Context->preference("IntranetNav"),
587                 advancedMARCEditor => C4::Context->preference("advancedMARCEditor"),
588                 );
589
590 output_html_with_http_headers $input, $cookie, $template->output;