4 # Copyright 2000-2002 Katipo Communications
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it under the
9 # terms of the GNU General Public License as published by the Free Software
10 # Foundation; either version 2 of the License, or (at your option) any later
13 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License along with
18 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19 # Suite 330, Boston, MA 02111-1307 USA
27 use C4
::AuthoritiesMarc
;
31 use C4
::Koha
; # XXX subfield_is_koha_internal_p
32 use C4
::Branch
; # XXX subfield_is_koha_internal_p
36 use Date
::Calc
qw(Today);
37 use MARC
::File
::USMARC
;
40 if ( C4
::Context
->preference('marcflavour') eq 'UNIMARC' ) {
41 MARC
::File
::XML
->default_record_format('UNIMARC');
44 our($tagslib,$authorised_values_sth,$is_a_modif,$usedTagsLib,$mandatory_z3950);
46 =item MARCfindbreeding
48 $record = MARCfindbreeding($breedingid);
50 Look up the import record repository for the record with
51 record with id $breedingid. If found, returns the decoded
52 MARC::Record; otherwise, -1 is returned (FIXME).
53 Returns as second parameter the character encoding.
57 sub MARCfindbreeding
{
59 my ($marc, $encoding) = GetImportRecordMarc
($id);
60 # remove the - in isbn, koha store isbn without any -
62 my $record = MARC
::Record
->new_from_usmarc($marc);
63 my ($isbnfield,$isbnsubfield) = GetMarcFromKohaField
('biblioitems.isbn','');
64 if ( $record->field($isbnfield) ) {
65 foreach my $field ( $record->field($isbnfield) ) {
66 foreach my $subfield ( $field->subfield($isbnsubfield) ) {
67 my $newisbn = $field->subfield($isbnsubfield);
69 $field->update( $isbnsubfield => $newisbn );
73 # fix the unimarc 100 coded field (with unicode information)
74 if (C4
::Context
->preference('marcflavour') eq 'UNIMARC' && $record->subfield(100,'a')) {
75 my $f100a=$record->subfield(100,'a');
76 my $f100 = $record->field(100);
77 my $f100temp = $f100->as_string;
78 $record->delete_field($f100);
79 if ( length($f100temp) > 28 ) {
80 substr( $f100temp, 26, 2, "50" );
81 $f100->update( 'a' => $f100temp );
82 my $f100 = MARC
::Field
->new( '100', '', '', 'a' => $f100temp );
83 $record->insert_fields_ordered($f100);
87 if ( ref($record) eq undef ) {
91 # normalize author : probably UNIMARC specific...
92 if ( C4
::Context
->preference("z3950NormalizeAuthor")
93 and C4
::Context
->preference("z3950AuthorAuthFields") )
95 my ( $tag, $subfield ) = GetMarcFromKohaField
("biblio.author");
97 # my $summary = C4::Context->preference("z3950authortemplate");
99 C4
::Context
->preference("z3950AuthorAuthFields");
100 my @auth_fields = split /,/, $auth_fields;
103 if ( $record->field($tag) ) {
104 foreach my $tmpfield ( $record->field($tag)->subfields ) {
106 # foreach my $subfieldcode ($tmpfield->subfields){
107 my $subfieldcode = shift @
$tmpfield;
108 my $subfieldvalue = shift @
$tmpfield;
110 $field->add_subfields(
111 "$subfieldcode" => $subfieldvalue )
112 if ( $subfieldcode ne $subfield );
116 MARC
::Field
->new( $tag, "", "",
117 $subfieldcode => $subfieldvalue )
118 if ( $subfieldcode ne $subfield );
122 $record->delete_field( $record->field($tag) );
123 foreach my $fieldtag (@auth_fields) {
124 next unless ( $record->field($fieldtag) );
125 my $lastname = $record->field($fieldtag)->subfield('a');
126 my $firstname = $record->field($fieldtag)->subfield('b');
127 my $title = $record->field($fieldtag)->subfield('c');
128 my $number = $record->field($fieldtag)->subfield('d');
131 # $field->add_subfields("$subfield"=>"[ ".ucfirst($title).ucfirst($firstname)." ".$number." ]");
132 $field->add_subfields(
133 "$subfield" => ucfirst($title) . " "
134 . ucfirst($firstname) . " "
139 # $field->add_subfields("$subfield"=>"[ ".ucfirst($firstname).", ".ucfirst($lastname)." ]");
140 $field->add_subfields(
141 "$subfield" => ucfirst($firstname) . ", "
142 . ucfirst($lastname) );
145 $record->insert_fields_ordered($field);
147 return $record, $encoding;
153 =item build_authorized_values_list
157 sub build_authorized_values_list
($$$$$$$) {
158 my ( $tag, $subfield, $value, $dbh, $authorised_values_sth,$index_tag,$index_subfield ) = @_;
160 my @authorised_values;
163 # builds list, depending on authorised value...
166 if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
167 #Use GetBranches($onlymine)
168 my $onlymine=C4
::Context
->preference('IndependantBranches') &&
169 C4
::Context
->userenv &&
170 C4
::Context
->userenv->{flags
}!=1 &&
171 C4
::Context
->userenv->{branch
};
172 my $branches = GetBranches
($onlymine);
174 foreach my $thisbranch ( sort keys %$branches ) {
175 push @authorised_values, $thisbranch;
176 $authorised_lib{$thisbranch} = $branches->{$thisbranch}->{'branchname'};
181 elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value
} eq "itemtypes" ) {
184 "select itemtype,description from itemtypes order by description");
186 push @authorised_values, ""
187 unless ( $tagslib->{$tag}->{$subfield}->{mandatory
} );
191 while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
192 push @authorised_values, $itemtype;
193 $authorised_lib{$itemtype} = $description;
195 $value = $itemtype unless ($value);
199 elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value
} eq "cn_source" ) {
200 push @authorised_values, ""
201 unless ( $tagslib->{$tag}->{$subfield}->{mandatory
} );
203 my $class_sources = GetClassSources
();
205 my $default_source = C4
::Context
->preference("DefaultClassificationSource");
207 foreach my $class_source (sort keys %$class_sources) {
208 next unless $class_sources->{$class_source}->{'used'} or
209 ($value and $class_source eq $value) or
210 ($class_source eq $default_source);
211 push @authorised_values, $class_source;
212 $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
213 $value = $class_source unless ($value);
214 $value = $default_source unless ($value);
216 #---- "true" authorised value
219 $authorised_values_sth->execute(
220 $tagslib->{$tag}->{$subfield}->{authorised_value
} );
222 push @authorised_values, ""
223 unless ( $tagslib->{$tag}->{$subfield}->{mandatory
} );
225 while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
226 push @authorised_values, $value;
227 $authorised_lib{$value} = $lib;
230 return CGI
::scrolling_list
(
231 -name
=> "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
232 -values => \
@authorised_values,
234 -labels
=> \
%authorised_lib,
239 -id
=> "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
240 -class => "input_marceditor",
246 Create a random value to set it into the input name
251 return int(rand(1000000));
254 =item GetMandatoryFieldZ3950
256 This function return an hashref which containts all mandatory field
257 to search with z3950 server.
261 sub GetMandatoryFieldZ3950
($){
262 my $frameworkcode = shift;
263 my @isbn = GetMarcFromKohaField
('biblioitems.isbn',$frameworkcode);
264 my @title = GetMarcFromKohaField
('biblio.title',$frameworkcode);
265 my @author = GetMarcFromKohaField
('biblio.author',$frameworkcode);
266 my @issn = GetMarcFromKohaField
('biblioitems.issn',$frameworkcode);
267 my @lccn = GetMarcFromKohaField
('biblioitems.lccn',$frameworkcode);
270 $isbn[0].$isbn[1] => 'isbn',
271 $title[0].$title[1] => 'title',
272 $author[0].$author[1] => 'author',
273 $issn[0].$issn[1] => 'issn',
274 $lccn[0].$lccn[1] => 'lccn',
280 builds the <input ...> entry for a subfield.
285 my ( $tag, $subfield, $value, $index_tag, $tabloop, $rec, $authorised_values_sth,$cgi ) = @_;
287 my $index_subfield = CreateKey
(); # create a specifique key for each subfield
289 $value =~ s/"/"/g;
291 # if there is no value provided but a default value in parameters, get it
293 $value = $tagslib->{$tag}->{$subfield}->{defaultvalue
};
295 # get today date & replace YYYY, MM, DD if provided in the default value
296 my ( $year, $month, $day ) = Today
();
297 $month = sprintf( "%02d", $month );
298 $day = sprintf( "%02d", $day );
299 $value =~ s/YYYY/$year/g;
300 $value =~ s/MM/$month/g;
301 $value =~ s/DD/$day/g;
303 my $dbh = C4
::Context
->dbh;
305 # map '@' as "subfield" label for fixed fields
306 # to something that's allowed in a div id.
307 my $id_subfield = $subfield;
308 $id_subfield = "00" if $id_subfield eq "@";
310 my %subfield_data = (
312 subfield
=> $id_subfield,
313 marc_lib
=> substr( $tagslib->{$tag}->{$subfield}->{lib
}, 0, 22 ),
314 marc_lib_plain
=> $tagslib->{$tag}->{$subfield}->{lib
},
315 tag_mandatory
=> $tagslib->{$tag}->{mandatory
},
316 mandatory
=> $tagslib->{$tag}->{$subfield}->{mandatory
},
317 repeatable
=> $tagslib->{$tag}->{$subfield}->{repeatable
},
318 kohafield
=> $tagslib->{$tag}->{$subfield}->{kohafield
},
320 id
=> "tag_".$tag."_subfield_".$id_subfield."_".$index_tag."_".$index_subfield,
322 random
=> CreateKey
(),
325 if(exists $mandatory_z3950->{$tag.$subfield}){
326 $subfield_data{z3950_mandatory
} = $mandatory_z3950->{$tag.$subfield};
328 # decide if the subfield must be expanded (visible) by default or not
329 # if it is mandatory, then expand. If it is hidden explicitly by the hidden flag, hidden anyway
330 $subfield_data{visibility
} = "display:none;"
331 if ( ($tagslib->{$tag}->{$subfield}->{hidden
} % 2 == 1) and $value ne ''
332 or ($value eq '' and !$tagslib->{$tag}->{$subfield}->{mandatory
})
334 # always expand all subfields of a mandatory field
335 $subfield_data{visibility
} = "" if $tagslib->{$tag}->{mandatory
};
336 # it's an authorised field
337 if ( $tagslib->{$tag}->{$subfield}->{authorised_value
} ) {
338 $subfield_data{marc_value
} =
339 build_authorized_values_list
( $tag, $subfield, $value, $dbh,
340 $authorised_values_sth,$index_tag,$index_subfield );
342 # it's a thesaurus / authority field
344 elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode
} ) {
345 $subfield_data{marc_value
} =
346 "<input type=\"text\"
347 id=\"".$subfield_data{id
}."\"
348 name=\"".$subfield_data{id
}."\"
350 class=\"input_marceditor\"
355 <a href=\"#\" class=\"buttonDot\"
356 onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode
}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
358 # it's a plugin field
360 elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) {
362 # opening plugin. Just check wether we are on a developper computer on a production one
363 # (the cgidir differs)
364 my $cgidir = C4
::Context
->intranetdir . "/cgi-bin/cataloguing/value_builder";
365 unless ( opendir( DIR
, "$cgidir" ) ) {
366 $cgidir = C4
::Context
->intranetdir . "/cataloguing/value_builder";
369 my $plugin = $cgidir . "/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
371 my $extended_param = plugin_parameters
( $dbh, $rec, $tagslib, $subfield_data{id
}, $tabloop );
372 my ( $function_name, $javascript ) = plugin_javascript
( $dbh, $rec, $tagslib, $subfield_data{id
}, $tabloop );
374 $subfield_data{marc_value
} =
375 "<input tabindex=\"1\"
377 id=\"".$subfield_data{id
}."\"
378 name=\"".$subfield_data{id
}."\"
380 class=\"input_marceditor\"
381 onfocus=\"Focus$function_name($index_tag)\"
384 onblur=\"Blur$function_name($index_tag); \" \/>
385 <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
388 warn "Plugin Failed: $plugin";
389 # supply default input form
390 $subfield_data{marc_value
} =
391 "<input type=\"text\"
392 id=\"".$subfield_data{id
}."\"
393 name=\"".$subfield_data{id
}."\"
398 class=\"input_marceditor\"
402 # it's an hidden field
404 elsif ( $tag eq '' ) {
405 $subfield_data{marc_value
} =
406 "<input tabindex=\"1\"
408 id=\"".$subfield_data{id
}."\"
409 name=\"".$subfield_data{id
}."\"
415 elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) {
416 $subfield_data{marc_value
} =
417 "<input type=\"text\"
418 id=\"".$subfield_data{id
}."\"
419 name=\"".$subfield_data{id
}."\"
420 class=\"input_marceditor\"
427 # it's a standard field
433 ( C4
::Context
->preference("marcflavour") eq "UNIMARC" && $tag >= 300
434 and $tag < 400 && $subfield eq 'a' )
437 && C4
::Context
->preference("marcflavour") eq "MARC21" )
440 $subfield_data{marc_value
} =
441 "<textarea cols=\"70\"
443 id=\"".$subfield_data{id
}."\"
444 name=\"".$subfield_data{id
}."\"
445 class=\"input_marceditor\"
451 $subfield_data{marc_value
} =
452 "<input type=\"text\"
453 id=\"".$subfield_data{id
}."\"
454 name=\"".$subfield_data{id
}."\"
459 class=\"input_marceditor\"
464 $subfield_data{'index_subfield'} = $index_subfield;
465 return \
%subfield_data;
468 sub build_tabs
($$$$$) {
469 my ( $template, $record, $dbh, $encoding,$input ) = @_;
475 my $authorised_values_sth = $dbh->prepare(
476 "select authorised_value,lib
477 from authorised_values
478 where category=? order by lib"
481 # in this array, we will push all the 10 tabs
482 # to avoid having 10 tabs in the template : they will all be in the same BIG_LOOP
485 my @tab_data; # all tags to display
487 foreach my $used ( @
$usedTagsLib ){
488 push @tab_data,$used->{tagfield
} if not $seen{$used->{tagfield
}};
489 $seen{$used->{tagfield
}}++;
493 foreach(@
$usedTagsLib){
494 if($_->{tab
} > -1 && $_->{tab
} >= $max_num_tab && $_->{tagfield
} != '995'){ # FIXME : MARC21 ?
495 $max_num_tab = $_->{tab
};
498 if($max_num_tab >= 9){
501 # loop through each tab 0 through 9
502 for ( my $tabloop = 0 ; $tabloop <= $max_num_tab ; $tabloop++ ) {
503 my @loop_data = (); #innerloop in the template.
505 foreach my $tag (@tab_data) {
509 my $index_tag = CreateKey
;
511 # if MARC::Record is not empty =>use it as master loop, then add missing subfields that should be in the tab.
512 # if MARC::Record is empty => use tab as master loop.
513 if ( $record ne -1 && ( $record->field($tag) || $tag eq '000' ) ) {
515 if ( $tag ne '000' ) {
516 @fields = $record->field($tag);
519 push @fields, $record->leader(); # if tag == 000
521 # loop through each field
522 foreach my $field (@fields) {
526 my ( $value, $subfield );
527 if ( $tag ne '000' ) {
528 $value = $field->data();
535 next if ( $tagslib->{$tag}->{$subfield}->{tab
} ne $tabloop );
537 if ( $tagslib->{$tag}->{$subfield}->{kohafield
} eq
538 'biblio.biblionumber' );
542 $tag, $subfield, $value, $index_tag, $tabloop, $record,
543 $authorised_values_sth,$input
548 my @subfields = $field->subfields();
549 foreach my $subfieldcount ( 0 .. $#subfields ) {
550 my $subfield = $subfields[$subfieldcount][0];
551 my $value = $subfields[$subfieldcount][1];
552 next if ( length $subfield != 1 );
553 next if ( $tagslib->{$tag}->{$subfield}->{tab
} ne $tabloop );
557 $tag, $subfield, $value, $index_tag, $tabloop,
558 $record, $authorised_values_sth,$input
564 # now, loop again to add parameter subfield that are not in the MARC::Record
565 foreach my $subfield ( sort( keys %{ $tagslib->{$tag} } ) )
567 next if ( length $subfield != 1 );
568 next if ( $tagslib->{$tag}->{$subfield}->{tab
} ne $tabloop );
569 next if ( $tag < 10 );
571 if ( ( $tagslib->{$tag}->{$subfield}->{hidden
} <= -4 )
572 or ( $tagslib->{$tag}->{$subfield}->{hidden
} >= 5 )
573 ); #check for visibility flag
574 next if ( defined( $field->subfield($subfield) ) );
578 $tag, $subfield, '', $index_tag, $tabloop, $record,
579 $authorised_values_sth,$input
583 if ( $#subfields_data >= 0 ) {
584 # build the tag entry.
585 # note that the random() field is mandatory. Otherwise, on repeated fields, you'll
586 # have twice the same "name" value, and cgi->param() will return only one, making
587 # all subfields to be merged in a single field.
591 tag_lib
=> $tagslib->{$tag}->{lib
},
592 repeatable
=> $tagslib->{$tag}->{repeatable
},
593 subfield_loop
=> \
@subfields_data,
594 fixedfield
=> $tag < 10?
1:0,
597 if ($tag >= 010){ # no indicator for theses tag
598 $tag_data{indicator
} = $field->indicator(1).$field->indicator(2);
600 push( @loop_data, \
%tag_data );
602 } # foreach $field end
604 # if breeding is empty
608 foreach my $subfield ( sort( keys %{ $tagslib->{$tag} } ) ) {
609 next if ( length $subfield != 1 );
611 if ( ( $tagslib->{$tag}->{$subfield}->{hidden
} <= -5 )
612 or ( $tagslib->{$tag}->{$subfield}->{hidden
} >= 4 ) )
613 ; #check for visibility flag
615 if ( $tagslib->{$tag}->{$subfield}->{tab
} ne $tabloop );
619 $tag, $subfield, '', $index_tag, $tabloop, $record,
620 $authorised_values_sth,$input
624 if ( $#subfields_data >= 0 ) {
628 tag_lib
=> $tagslib->{$tag}->{lib
},
629 repeatable
=> $tagslib->{$tag}->{repeatable
},
630 indicator
=> $indicator,
631 subfield_loop
=> \
@subfields_data,
632 tagfirstsubfield
=> $subfields_data[0],
633 fixedfield
=> $tag < 10?
1:0,
636 push @loop_data, \
%tag_data ;
640 if ( $#loop_data >= 0 ) {
643 innerloop
=> \
@loop_data,
647 $template->param( BIG_LOOP
=> \
@BIG_LOOP );
651 # sub that tries to find authorities linked to the biblio
653 # - search in the authority DB for the same authid (in $9 of the biblio)
654 # - search in the authority DB for the same 001 (in $3 of the biblio in UNIMARC)
655 # - search in the authority DB for the same values (exactly) (in all subfields of the biblio)
656 # if the authority is found, the biblio is modified accordingly to be connected to the authority.
657 # if the authority is not found, it's added, and the biblio is then modified to be connected to the authority.
660 sub BiblioAddAuthorities
{
661 my ( $record, $frameworkcode ) = @_;
662 my $dbh=C4
::Context
->dbh;
663 my $query=$dbh->prepare(qq|
664 SELECT authtypecode
,tagfield
665 FROM marc_subfield_structure
666 WHERE frameworkcode
=?
667 AND
(authtypecode IS NOT NULL AND authtypecode
<>\"\")|);
668 # SELECT authtypecode,tagfield
669 # FROM marc_subfield_structure
670 # WHERE frameworkcode=?
671 # AND (authtypecode IS NOT NULL OR authtypecode<>\"\")|);
672 $query->execute($frameworkcode);
673 my ($countcreated,$countlinked);
674 while (my $data=$query->fetchrow_hashref){
675 foreach my $field ($record->field($data->{tagfield
})){
676 next if ($field->subfield('3')||$field->subfield('9'));
677 # No authorities id in the tag.
678 # Search if there is any authorities to link to.
679 my $query='at='.$data->{authtypecode
}.' ';
680 map {$query.= ' and he,ext="'.$_->[1].'"' if ($_->[0]=~/[A-z]/)} $field->subfields();
681 my ($error,$results)=SimpleSearch
($query,"authorityserver");
682 # there is only 1 result
684 warn "BIBLIOADDSAUTHORITIES: $error";
687 if ($results && scalar(@
$results)==1) {
688 my $marcrecord = MARC
::File
::USMARC
::decode
($results->[0]);
689 $field->add_subfields('9'=>$marcrecord->field('001')->data);
691 } elsif (scalar(@
$results)>1) {
692 #More than One result
693 #This can comes out of a lack of a subfield.
694 # my $marcrecord = MARC::File::USMARC::decode($results->[0]);
695 # $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data);
698 #There are no results, build authority record, add it to Authorities, get authid and add it to 9
699 ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode
700 ###NOTICE : This can be a problem. We should also look into other types and rejected forms.
701 my $authtypedata=GetAuthType
($data->{authtypecode
});
702 my $marcrecordauth=MARC
::Record
->new();
703 my $authfield=MARC
::Field
->new($authtypedata->{auth_tag_to_report
},'','',"a"=>"".$field->subfield('a'));
704 map { $authfield->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $field->subfields();
705 $marcrecordauth->insert_fields_ordered($authfield);
706 # warn "AUTH RECORD ADDED : ".$marcrecordauth->as_formatted;
707 my $authid=AddAuthority
($marcrecordauth,'',$data->{authtypecode
});
709 $field->add_subfields('9'=>$authid);
713 return ($countlinked,$countcreated);
716 # ========================
718 #=========================
720 my $error = $input->param('error');
721 my $biblionumber = $input->param('biblionumber'); # if biblionumber exists, it's a modif, not a new biblio.
722 my $breedingid = $input->param('breedingid');
723 my $z3950 = $input->param('z3950');
724 my $op = $input->param('op');
725 my $mode = $input->param('mode');
726 my $frameworkcode = $input->param('frameworkcode');
727 my $dbh = C4
::Context
->dbh;
729 $frameworkcode = &GetFrameworkCode
($biblionumber)
730 if ( $biblionumber and not($frameworkcode) );
732 $frameworkcode = '' if ( $frameworkcode eq 'Default' );
733 my ( $template, $loggedinuser, $cookie ) = get_template_and_user
(
735 template_name
=> "cataloguing/addbiblio.tmpl",
738 authnotrequired
=> 0,
739 flagsrequired
=> { editcatalogue
=> 1 },
743 # Getting the list of all frameworks
745 my $frameworks = getframeworks
;
746 my @frameworkcodeloop;
747 foreach my $thisframeworkcode ( keys %$frameworks ) {
749 value
=> $thisframeworkcode,
750 frameworktext
=> $frameworks->{$thisframeworkcode}->{'frameworktext'},
752 if ($frameworkcode eq $thisframeworkcode){
753 $row{'selected'}="selected=\"selected\"";
755 push @frameworkcodeloop, \
%row;
757 $template->param( frameworkcodeloop
=> \
@frameworkcodeloop,
758 breedingid
=> $breedingid );
761 $tagslib = &GetMarcStructure
( 1, $frameworkcode );
762 $usedTagsLib = &GetUsedMarcStructure
( $frameworkcode );
763 $mandatory_z3950 = GetMandatoryFieldZ3950
($frameworkcode);
769 $biblionumbertagfield,
770 $biblionumbertagsubfield,
771 $biblioitemnumtagfield,
772 $biblioitemnumtagsubfield,
777 if (($biblionumber) && !($breedingid)){
778 $record = GetMarcBiblio
($biblionumber);
781 ( $record, $encoding ) = MARCfindbreeding
( $breedingid ) ;
789 # if it's a modif, retrieve bibli and biblioitem numbers for the future modification of old-DB.
790 ( $biblionumbertagfield, $biblionumbertagsubfield ) =
791 &GetMarcFromKohaField
( "biblio.biblionumber", $frameworkcode );
792 ( $biblioitemnumtagfield, $biblioitemnumtagsubfield ) =
793 &GetMarcFromKohaField
( "biblioitems.biblioitemnumber", $frameworkcode );
795 # search biblioitems value
796 my $sth = $dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=?");
797 $sth->execute($biblionumber);
798 ($biblioitemnumber) = $sth->fetchrow;
801 #-------------------------------------------------------------------------------------
802 if ( $op eq "addbiblio" ) {
803 #-------------------------------------------------------------------------------------
805 my @params = $input->param();
806 $record = TransformHtmlToMarc
( \
@params , $input );
807 # check for a duplicate
808 my ($duplicatebiblionumber,$duplicatetitle) = FindDuplicate
($record) if (!$is_a_modif);
809 my $confirm_not_duplicate = $input->param('confirm_not_duplicate');
810 # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate)
811 if ( !$duplicatebiblionumber or $confirm_not_duplicate ) {
814 if (C4
::Context
->preference("BiblioAddsAuthorities")){
815 my ($countlinked,$countcreated)=BiblioAddAuthorities
($record,$frameworkcode);
818 ModBiblioframework
( $biblionumber, $frameworkcode );
819 ModBiblio
( $record, $biblionumber, $frameworkcode );
822 ( $biblionumber, $oldbibitemnum ) = AddBiblio
( $record, $frameworkcode );
825 if ($mode ne "popup"){
826 print $input->redirect(
827 "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"
832 biblionumber
=> $biblionumber,
836 $template->param( title
=> $record->subfield('200',"a") ) if ($record ne "-1" && C4
::Context
->preference('marcflavour') =~/unimarc/i);
837 $template->param( title
=> $record->title() ) if ($record ne "-1" && C4
::Context
->preference('marcflavour') eq "usmarc");
840 itemtype
=> $frameworkcode,
842 output_html_with_http_headers
$input, $cookie, $template->output;
846 # it may be a duplicate, warn the user and do nothing
847 build_tabs
($template, $record, $dbh,$encoding,$input);
849 biblionumber
=> $biblionumber,
850 biblioitemnumber
=> $biblioitemnumber,
851 duplicatebiblionumber
=> $duplicatebiblionumber,
852 duplicatebibid
=> $duplicatebiblionumber,
853 duplicatetitle
=> $duplicatetitle,
857 elsif ( $op eq "delete" ) {
859 my $error = &DelBiblio
($biblionumber);
861 warn "ERROR when DELETING BIBLIO $biblionumber : $error";
862 print "Content-Type: text/html\n\n<html><body><h1>ERROR when DELETING BIBLIO $biblionumber : $error</h1></body></html>";
866 print $input->redirect('/cgi-bin/koha/catalogue/search.pl');
870 #----------------------------------------------------------------------------
871 # If we're in a duplication case, we have to set to "" the biblionumber
872 # as we'll save the biblio as a new one.
873 if ( $op eq "duplicate" ) {
877 #FIXME: it's kind of silly to go from MARC::Record to MARC::File::XML and then back again just to fix the encoding
879 my $uxml = $record->as_xml;
880 MARC
::Record
::default_record_format
("UNIMARC")
881 if ( C4
::Context
->preference("marcflavour") eq "UNIMARC" );
882 my $urecord = MARC
::Record
::new_from_xml
( $uxml, 'UTF-8' );
885 build_tabs
( $template, $record, $dbh, $encoding,$input );
887 biblionumber
=> $biblionumber,
888 biblionumbertagfield
=> $biblionumbertagfield,
889 biblionumbertagsubfield
=> $biblionumbertagsubfield,
890 biblioitemnumtagfield
=> $biblioitemnumtagfield,
891 biblioitemnumtagsubfield
=> $biblioitemnumtagsubfield,
892 biblioitemnumber
=> $biblioitemnumber,
896 $template->param( title
=> $record->title() ) if ( $record ne "-1" );
899 frameworkcode
=> $frameworkcode,
900 itemtype
=> $frameworkcode,
903 output_html_with_http_headers
$input, $cookie, $template->output;