X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=cataloguing%2Faddbiblio.pl;h=7fabb776ce30c1e806366df5d8aa7d5d5957d152;hb=4913d3a1d7a024b846bbeafe98bbd133d2798533;hp=e912c667cbbca04c2f0ce289bfaf71a585686ac9;hpb=bd73c9f9ce8d161a1ed0f2e1205e5c0c8eecb0ae;p=koha.git diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index e912c667cb..7fabb776ce 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -159,7 +159,7 @@ sub MARCfindbreeding { =cut -sub build_authorized_values_list ($$$$$$$) { +sub build_authorized_values_list { my ( $tag, $subfield, $value, $dbh, $authorised_values_sth,$index_tag,$index_subfield ) = @_; my @authorised_values; @@ -252,7 +252,7 @@ sub build_authorized_values_list ($$$$$$$) { =cut -sub CreateKey(){ +sub CreateKey { return int(rand(1000000)); } @@ -263,7 +263,7 @@ sub CreateKey(){ =cut -sub GetMandatoryFieldZ3950($){ +sub GetMandatoryFieldZ3950 { my $frameworkcode = shift; my @isbn = GetMarcFromKohaField('biblioitems.isbn',$frameworkcode); my @title = GetMarcFromKohaField('biblio.title',$frameworkcode); @@ -349,6 +349,10 @@ sub create_input { $value eq '' && !$tdef->{$subfield}->{mandatory} && !$tdef->{mandatory}; + # expand all subfields of 773 if there is a host item provided in the input + $subfield_data{visibility} ="" if ($tag eq 773 and $cgi->param('hostitemnumber')); + + # it's an authorised field if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { $subfield_data{marc_value} = @@ -388,8 +392,8 @@ sub create_input { size=\"67\" maxlength=\"$max_length\" \/> - {$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">... + {$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">\"Tag "; } else { $subfield_data{marc_value} = @@ -402,15 +406,15 @@ sub create_input { size=\"67\" maxlength=\"$max_length\" readonly=\"readonly\" - \/>{$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">... + \/>{$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">\"Tag "; } # it's a plugin field } elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) { - # opening plugin. Just check wether we are on a developper computer on a production one + # opening plugin. Just check whether we are on a developer computer on a production one # (the cgidir differs) my $cgidir = C4::Context->intranetdir . "/cgi-bin/cataloguing/value_builder"; unless ( opendir( DIR, "$cgidir" ) ) { @@ -433,7 +437,7 @@ sub create_input { size=\"67\" maxlength=\"$max_length\" onblur=\"Blur$function_name($index_tag); \" \/> - ... + \"Tag $javascript"; } else { warn "Plugin Failed: $plugin"; @@ -463,21 +467,8 @@ sub create_input { value=\"$value\" \/> "; } - elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { - $subfield_data{marc_value} = - ""; - - # it's a standard field - } else { + # it's a standard field if ( length($value) > 100 or @@ -532,7 +523,7 @@ sub format_indicator { return $ind_value; } -sub build_tabs ($$$$$) { +sub build_tabs { my ( $template, $record, $dbh, $encoding,$input ) = @_; # fill arrays @@ -696,7 +687,7 @@ sub build_tabs ($$$$$) { # always include in the form regardless of the hidden setting - bug 2206 next if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); - push( + push( @subfields_data, &create_input( $tag, $subfield, '', $index_tag, $tabloop, $record, @@ -732,95 +723,6 @@ sub build_tabs ($$$$$) { $template->param( BIG_LOOP => \@BIG_LOOP ); } -# -# sub that tries to find authorities linked to the biblio -# the sub : -# - search in the authority DB for the same authid (in $9 of the biblio) -# - search in the authority DB for the same 001 (in $3 of the biblio in UNIMARC) -# - search in the authority DB for the same values (exactly) (in all subfields of the biblio) -# if the authority is found, the biblio is modified accordingly to be connected to the authority. -# if the authority is not found, it's added, and the biblio is then modified to be connected to the authority. -# - -sub BiblioAddAuthorities{ - my ( $record, $frameworkcode ) = @_; - my $dbh=C4::Context->dbh; - my $query=$dbh->prepare(qq| -SELECT authtypecode,tagfield -FROM marc_subfield_structure -WHERE frameworkcode=? -AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|); -# SELECT authtypecode,tagfield -# FROM marc_subfield_structure -# WHERE frameworkcode=? -# AND (authtypecode IS NOT NULL OR authtypecode<>\"\")|); - $query->execute($frameworkcode); - my ($countcreated,$countlinked); - while (my $data=$query->fetchrow_hashref){ - foreach my $field ($record->field($data->{tagfield})){ - next if ($field->subfield('3') || $field->subfield('9')); - # No authorities id in the tag. - # Search if there is any authorities to link to. - my $query='at='.$data->{authtypecode}.' '; - map {$query.= ' and he,ext="'.$_->[1].'"' if ($_->[0]=~/[A-z]/)} $field->subfields(); - my ($error, $results, $total_hits)=SimpleSearch( $query, undef, undef, [ "authorityserver" ] ); - # there is only 1 result - if ( $error ) { - warn "BIBLIOADDSAUTHORITIES: $error"; - return (0,0) ; - } - if ( @{$results} == 1) { - my $marcrecord = MARC::File::USMARC::decode($results->[0]); - $field->add_subfields('9'=>$marcrecord->field('001')->data); - $countlinked++; - } elsif (@{$results} > 1) { - #More than One result - #This can comes out of a lack of a subfield. -# my $marcrecord = MARC::File::USMARC::decode($results->[0]); -# $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data); - $countlinked++; - } else { - #There are no results, build authority record, add it to Authorities, get authid and add it to 9 - ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode - ###NOTICE : This can be a problem. We should also look into other types and rejected forms. - my $authtypedata=GetAuthType($data->{authtypecode}); - next unless $authtypedata; - my $marcrecordauth=MARC::Record->new(); - if (C4::Context->preference('marcflavour') eq 'MARC21') { - $marcrecordauth->leader(' nz a22 o 4500'); - SetMarcUnicodeFlag($marcrecordauth, 'MARC21'); - } - my $authfield=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$field->subfield('a')); - map { $authfield->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $field->subfields(); - $marcrecordauth->insert_fields_ordered($authfield); - - # bug 2317: ensure new authority knows it's using UTF-8; currently - # only need to do this for MARC21, as MARC::Record->as_xml_record() handles - # automatically for UNIMARC (by not transcoding) - # FIXME: AddAuthority() instead should simply explicitly require that the MARC::Record - # use UTF-8, but as of 2008-08-05, did not want to introduce that kind - # of change to a core API just before the 3.0 release. - - if (C4::Context->preference('marcflavour') eq 'MARC21') { - $marcrecordauth->insert_fields_ordered(MARC::Field->new('667','','','a'=>"Machine generated authority record.")); - my $cite = $record->author() . ", " . $record->title_proper() . ", " . $record->publication_date() . " "; - $cite =~ s/^[\s\,]*//; - $cite =~ s/[\s\,]*$//; - $cite = "Work cat.: (" . C4::Context->preference('MARCOrgCode') . ")". $record->subfield('999','c') . ": " . $cite; - $marcrecordauth->insert_fields_ordered(MARC::Field->new('670','','','a'=>$cite)); - } - -# warn "AUTH RECORD ADDED : ".$marcrecordauth->as_formatted; - - my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode}); - $countcreated++; - $field->add_subfields('9'=>$authid); - } - } - } - return ($countlinked,$countcreated); -} - # ======================== # MAIN #========================= @@ -834,8 +736,14 @@ my $mode = $input->param('mode'); my $frameworkcode = $input->param('frameworkcode'); my $redirect = $input->param('redirect'); my $dbh = C4::Context->dbh; +my $hostbiblionumber = $input->param('hostbiblionumber'); +my $hostitemnumber = $input->param('hostitemnumber'); -my $userflags = ($frameworkcode eq 'FA') ? "fast_cataloging" : "edit_catalogue"; + +my $userflags = 'edit_catalogue'; +if ($frameworkcode eq 'FA'){ + $userflags = 'fast_cataloging'; +} $frameworkcode = &GetFrameworkCode($biblionumber) if ( $biblionumber and not($frameworkcode) and $op ne 'addbiblio' ); @@ -843,7 +751,7 @@ $frameworkcode = &GetFrameworkCode($biblionumber) $frameworkcode = '' if ( $frameworkcode eq 'Default' ); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "cataloguing/addbiblio.tmpl", + template_name => "cataloguing/addbiblio.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -851,6 +759,15 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +if ($frameworkcode eq 'FA'){ + # We need to grab and set some variables in the template for use on the additems screen + $template->{VARS}->{'circborrowernumber'} = $input->param('borrowernumber'); + $template->{VARS}->{'barcode'} = $input->param('barcode'); + $template->{VARS}->{'branch'} = $input->param('branch'); + $template->{VARS}->{'stickyduedate'} = $input->param('stickyduedate'); + $template->{VARS}->{'duedatespec'} = $input->param('duedatespec'); +} + # Getting the list of all frameworks # get framework list my $frameworks = getframeworks; @@ -861,7 +778,7 @@ foreach my $thisframeworkcode ( keys %$frameworks ) { frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, ); if ($frameworkcode eq $thisframeworkcode){ - $row{'selected'}="selected=\"selected\""; + $row{'selected'} = 1; } push @frameworkcodeloop, \%row; } @@ -891,6 +808,14 @@ if (($biblionumber) && !($breedingid)){ if ($breedingid) { ( $record, $encoding ) = MARCfindbreeding( $breedingid ) ; } +#populate hostfield if hostbiblionumber is available +if ($hostbiblionumber){ + my $marcflavour = C4::Context->preference("marcflavour"); + $record=MARC::Record->new(); + $record->leader(''); + my $field = PrepHostMarcField($hostbiblionumber, $hostitemnumber,$marcflavour); + $record->append_fields($field); +} $is_a_modif = 0; @@ -918,7 +843,7 @@ if ( $op eq "addbiblio" ) { ); # getting html input my @params = $input->param(); - $record = TransformHtmlToMarc( \@params , $input ); + $record = TransformHtmlToMarc( $input ); # check for a duplicate my ( $duplicatebiblionumber, $duplicatetitle ); if ( !$is_a_modif ) { @@ -930,7 +855,7 @@ if ( $op eq "addbiblio" ) { my $oldbibnum; my $oldbibitemnum; if (C4::Context->preference("BiblioAddsAuthorities")){ - my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode); + my ($countlinked,$countcreated)=BiblioAutoLink($record,$frameworkcode); } if ( $is_a_modif ) { ModBiblioframework( $biblionumber, $frameworkcode ); @@ -940,12 +865,25 @@ if ( $op eq "addbiblio" ) { ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); } if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view")){ - print $input->redirect( + if ($frameworkcode eq 'FA'){ + my $borrowernumber = $input->param('circborrowernumber'); + my $barcode = $input->param('barcode'); + my $branch = $input->param('branch'); + my $stickyduedate = $input->param('stickyduedate'); + my $duedatespec = $input->param('duedatespec'); + print $input->redirect( + "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&borrowernumber=$borrowernumber&branch=$branch&barcode=$barcode&stickyduedate=$stickyduedate&duedatespec=$duedatespec" + ); + exit; + } + else { + print $input->redirect( "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode" - ); - exit; + ); + exit; + } } - elsif($is_a_modif || $redirect eq "view"){ + elsif($is_a_modif || $redirect eq "view"){ my $defaultview = C4::Context->preference('IntranetBiblioDefaultView'); my $views = { C4::Search::enabled_staff_search_views }; if ($defaultview eq 'isbd' && $views->{can_view_ISBD}) { @@ -959,7 +897,8 @@ if ( $op eq "addbiblio" ) { } exit; - }else { + } + else { $template->param( biblionumber => $biblionumber, done =>1, @@ -1010,14 +949,16 @@ elsif ( $op eq "delete" ) { $biblionumber = ""; } + if ( $record ne -1 ) { #FIXME: it's kind of silly to go from MARC::Record to MARC::File::XML and then back again just to fix the encoding - eval { - my $uxml = $record->as_xml; - MARC::Record::default_record_format("UNIMARC") - if ( C4::Context->preference("marcflavour") eq "UNIMARC" ); - my $urecord = MARC::Record::new_from_xml( $uxml, 'UTF-8' ); - $record = $urecord; - }; + eval { + my $uxml = $record->as_xml; + MARC::Record::default_record_format("UNIMARC") + if ( C4::Context->preference("marcflavour") eq "UNIMARC" ); + my $urecord = MARC::Record::new_from_xml( $uxml, 'UTF-8' ); + $record = $urecord; + }; + } build_tabs( $template, $record, $dbh, $encoding,$input ); $template->param( biblionumber => $biblionumber, @@ -1026,20 +967,18 @@ elsif ( $op eq "delete" ) { biblioitemnumtagfield => $biblioitemnumtagfield, biblioitemnumtagsubfield => $biblioitemnumtagsubfield, biblioitemnumber => $biblioitemnumber, + hostbiblionumber => $hostbiblionumber, + hostitemnumber => $hostitemnumber ); } $template->param( title => $record->title() ) if ( $record ne "-1" ); -if (C4::Context->preference("marcflavour") eq "MARC21"){ - $template->param(MARC21 => 1); -} - - $template->param( popup => $mode, frameworkcode => $frameworkcode, itemtype => $frameworkcode, - borrowernumber => $loggedinuser + borrowernumber => $loggedinuser, + marcflavour => C4::Context->preference("marcflavour"), ); output_html_with_http_headers $input, $cookie, $template->output;