X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=cataloguing%2Faddbiblio.pl;h=92abe81082cd6d231fa58180e2d10df813875816;hb=48bf9b1d91dbbc336f859ac1a83d7d25b0e6a3c1;hp=b6805c94fe32095882bdf0ca9d3c2364efc36216;hpb=7030945d6c81934fb333486da6951e320df4e782;p=koha-ffzg.git diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index b6805c94fe..92abe81082 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -19,27 +19,43 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -#use warnings; FIXME - Bug 2505 -use CGI q(-utf8); -use C4::Output; -use C4::Auth; -use C4::Biblio; -use C4::Search; -use C4::AuthoritiesMarc; +use Modern::Perl; + +use CGI; +use C4::Output qw( output_html_with_http_headers ); +use C4::Auth qw( get_template_and_user haspermission ); +use C4::Biblio qw( + AddBiblio + DelBiblio + GetFrameworkCode + GetMarcFromKohaField + GetMarcStructure + GetUsedMarcStructure + ModBiblio + prepare_host_field + PrepHostMarcField + TransformHtmlToMarc +); +use C4::Search qw( FindDuplicate enabled_staff_search_views ); +use C4::Auth qw( get_template_and_user haspermission ); use C4::Context; use MARC::Record; -use C4::Log; -use C4::Koha; # XXX subfield_is_koha_internal_p -use C4::Branch; # XXX subfield_is_koha_internal_p -use C4::ClassSource; -use C4::ImportBatch; -use C4::Charset; - -use Date::Calc qw(Today); +use C4::ClassSource qw( GetClassSources ); +use C4::ImportBatch qw( GetImportRecordMarc ); +use C4::Charset qw( SetMarcUnicodeFlag ); +use Koha::BiblioFrameworks; +use Koha::DateUtils qw( dt_from_string ); + +use Koha::Biblios; +use Koha::ItemTypes; +use Koha::Libraries; + +use Koha::BiblioFrameworks; +use Koha::Patrons; + use MARC::File::USMARC; use MARC::File::XML; -use URI::Escape; +use URI::Escape qw( uri_escape_utf8 ); if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) { MARC::File::XML->default_record_format('UNIMARC'); @@ -66,7 +82,7 @@ sub MARCfindbreeding { # remove the - in isbn, koha store isbn without any - if ($marc) { my $record = MARC::Record->new_from_usmarc($marc); - my ($isbnfield,$isbnsubfield) = GetMarcFromKohaField('biblioitems.isbn',''); + my ($isbnfield,$isbnsubfield) = GetMarcFromKohaField( 'biblioitems.isbn' ); if ( $record->field($isbnfield) ) { foreach my $field ( $record->field($isbnfield) ) { foreach my $subfield ( $field->subfield($isbnsubfield) ) { @@ -99,9 +115,8 @@ sub MARCfindbreeding { and C4::Context->preference("z3950AuthorAuthFields") and C4::Context->preference("marcflavour") eq 'UNIMARC' ) { - my ( $tag, $subfield ) = GetMarcFromKohaField("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; @@ -110,7 +125,6 @@ sub MARCfindbreeding { if ( $record->field($tag) ) { foreach my $tmpfield ( $record->field($tag)->subfields ) { - # foreach my $subfieldcode ($tmpfield->subfields){ my $subfieldcode = shift @$tmpfield; my $subfieldvalue = shift @$tmpfield; if ($field) { @@ -134,16 +148,12 @@ sub MARCfindbreeding { my $title = $record->field($fieldtag)->subfield('c'); my $number = $record->field($fieldtag)->subfield('d'); if ($title) { - -# $field->add_subfields("$subfield"=>"[ ".ucfirst($title).ucfirst($firstname)." ".$number." ]"); $field->add_subfields( "$subfield" => ucfirst($title) . " " . ucfirst($firstname) . " " . $number ); } else { - -# $field->add_subfields("$subfield"=>"[ ".ucfirst($firstname).", ".ucfirst($lastname)." ]"); $field->add_subfields( "$subfield" => ucfirst($firstname) . ", " . ucfirst($lastname) ); @@ -170,36 +180,27 @@ sub build_authorized_values_list { # builds list, depending on authorised value... #---- branch - if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { - #Use GetBranches($onlymine) - my $onlymine = - C4::Context->preference('IndependentBranches') - && C4::Context->userenv - && !C4::Context->IsSuperLibrarian() - && C4::Context->userenv->{branch}; - my $branches = GetBranches($onlymine); - foreach my $thisbranch ( sort keys %$branches ) { - push @authorised_values, $thisbranch; - $authorised_lib{$thisbranch} = $branches->{$thisbranch}->{'branchname'}; + my $category = $tagslib->{$tag}->{$subfield}->{authorised_value}; + if ( $category eq "branches" ) { + my $libraries = Koha::Libraries->search_filtered({}, {order_by => ['branchname']}); + while ( my $l = $libraries->next ) { + push @authorised_values, $l->branchcode;; + $authorised_lib{$l->branchcode} = $l->branchname; } - } - elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} - && ( $value || $tagslib->{$tag}->{$subfield}->{defaultvalue} ) ); + elsif ( $category eq "itemtypes" ) { + push @authorised_values, ""; my $itemtype; - my $itemtypes = GetItemTypes( style => 'array' ); - for my $itemtype ( @$itemtypes ) { - push @authorised_values, $itemtype->{itemtype}; - $authorised_lib{$itemtype->{itemtype}} = $itemtype->{translated_description}; + my $itemtypes = Koha::ItemTypes->search_with_localization; + while ( $itemtype = $itemtypes->next ) { + push @authorised_values, $itemtype->itemtype; + $authorised_lib{$itemtype->itemtype} = $itemtype->translated_description; } $value = $itemtype unless ($value); } - elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) { - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + elsif ( $category eq "cn_source" ) { + push @authorised_values, ""; my $class_sources = GetClassSources(); @@ -221,9 +222,7 @@ sub build_authorized_values_list { $branch_limit ? $branch_limit : (), ); - push @authorised_values, "" - unless ( $tagslib->{$tag}->{$subfield}->{mandatory} - && ( $value || $tagslib->{$tag}->{$subfield}->{defaultvalue} ) ); + push @authorised_values, ""; while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { push @authorised_values, $value; @@ -231,6 +230,7 @@ sub build_authorized_values_list { } } $authorised_values_sth->finish; + return { type => 'select', id => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield, @@ -238,6 +238,7 @@ sub build_authorized_values_list { default => $value, values => \@authorised_values, labels => \%authorised_lib, + ( ( grep { $_ eq $category } ( qw(branches itemtypes cn_source) ) ) ? () : ( category => $category ) ), }; } @@ -254,18 +255,18 @@ sub CreateKey { =head2 GetMandatoryFieldZ3950 - This function return an hashref which containts all mandatory field + This function returns a hashref which contains all mandatory field to search with z3950 server. =cut sub GetMandatoryFieldZ3950 { my $frameworkcode = shift; - my @isbn = GetMarcFromKohaField('biblioitems.isbn',$frameworkcode); - my @title = GetMarcFromKohaField('biblio.title',$frameworkcode); - my @author = GetMarcFromKohaField('biblio.author',$frameworkcode); - my @issn = GetMarcFromKohaField('biblioitems.issn',$frameworkcode); - my @lccn = GetMarcFromKohaField('biblioitems.lccn',$frameworkcode); + my @isbn = GetMarcFromKohaField( 'biblioitems.isbn' ); + my @title = GetMarcFromKohaField( 'biblio.title' ); + my @author = GetMarcFromKohaField( 'biblio.author' ); + my @issn = GetMarcFromKohaField( 'biblioitems.issn' ); + my @lccn = GetMarcFromKohaField( 'biblioitems.lccn' ); return { $isbn[0].$isbn[1] => 'isbn', @@ -283,27 +284,30 @@ sub GetMandatoryFieldZ3950 { =cut sub create_input { - my ( $tag, $subfield, $value, $index_tag, $tabloop, $rec, $authorised_values_sth,$cgi ) = @_; + my ( $tag, $subfield, $value, $index_tag, $rec, $authorised_values_sth,$cgi ) = @_; my $index_subfield = CreateKey(); # create a specifique key for each subfield - $value =~ s/"/"/g; - - # if there is no value provided but a default value in parameters, get it - if ( $value eq '' ) { - $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 $username=(C4::Context->userenv?C4::Context->userenv->{'surname'}:"superlibrarian"); - $value=~s/user/$username/g; - + # Apply optional framework default value when it is a new record + # Substitute date parts, user name + if ( $value eq '' && !$cgi->param('biblionumber') ) { + $value = $tagslib->{$tag}->{$subfield}->{defaultvalue} // q{}; + + # get today date & replace <>, <>, <>, <
> if provided in the default value + my $today_dt = dt_from_string; + my $year = $today_dt->strftime('%Y'); + my $shortyear = $today_dt->strftime('%y'); + my $month = $today_dt->strftime('%m'); + my $day = $today_dt->strftime('%d'); + $value =~ s/<>/$year/g; + $value =~ s/<>/$shortyear/g; + $value =~ s/<>/$month/g; + $value =~ s/<
>/$day/g; + # And <> with surname (?) + my $username=(C4::Context->userenv?C4::Context->userenv->{'surname'}:"superlibrarian"); + $value=~s/<>/$username/g; } + my $dbh = C4::Context->dbh; # map '@' as "subfield" label for fixed fields @@ -317,6 +321,7 @@ sub create_input { marc_lib => $tagslib->{$tag}->{$subfield}->{lib}, tag_mandatory => $tagslib->{$tag}->{mandatory}, mandatory => $tagslib->{$tag}->{$subfield}->{mandatory}, + important => $tagslib->{$tag}->{$subfield}->{important}, repeatable => $tagslib->{$tag}->{$subfield}->{repeatable}, kohafield => $tagslib->{$tag}->{$subfield}->{kohafield}, index => $index_tag, @@ -330,13 +335,15 @@ sub create_input { $subfield_data{z3950_mandatory} = $mandatory_z3950->{$tag.$subfield}; } # Subfield is hidden depending of hidden and mandatory flag, and is always - # shown if it contains anything or if its field is mandatory. + # shown if it contains anything or if its field is mandatory or important. my $tdef = $tagslib->{$tag}; $subfield_data{visibility} = "display:none;" if $tdef->{$subfield}->{hidden} % 2 == 1 && $value eq '' && !$tdef->{$subfield}->{mandatory} && - !$tdef->{mandatory}; + !$tdef->{mandatory} && + !$tdef->{$subfield}->{important} && + !$tdef->{important}; # 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')); @@ -347,13 +354,14 @@ sub create_input { build_authorized_values_list( $tag, $subfield, $value, $dbh, $authorised_values_sth,$index_tag,$index_subfield ); - # it's a subfield $9 linking to an authority record - see bug 2206 + # it's a subfield $9 linking to an authority record - see bug 2206 and 28022 } elsif ($subfield eq "9" and exists($tagslib->{$tag}->{'a'}->{authtypecode}) and defined($tagslib->{$tag}->{'a'}->{authtypecode}) and - $tagslib->{$tag}->{'a'}->{authtypecode} ne '') { - + $tagslib->{$tag}->{'a'}->{authtypecode} ne '' and + $tagslib->{$tag}->{'a'}->{hidden} > -4 and + $tagslib->{$tag}->{'a'}->{hidden} < 5) { $subfield_data{marc_value} = { type => 'text', id => $subfield_data{id}, @@ -388,7 +396,7 @@ sub create_input { name => $tagslib->{$tag}->{$subfield}->{'value_builder'}, }); my $pars= { dbh => $dbh, record => $rec, tagslib => $tagslib, - id => $subfield_data{id}, tabloop => $tabloop }; + id => $subfield_data{id} }; $plugin->build( $pars ); if( !$plugin->errstr ) { $subfield_data{marc_value} = { @@ -399,6 +407,7 @@ sub create_input { size => 67, maxlength => $subfield_data{maxlength}, javascript => $plugin->javascript, + plugin => $plugin->name, noclick => $plugin->noclick, }; } else { @@ -493,7 +502,7 @@ sub build_tabs { $query .= qq{ LEFT JOIN authorised_values_branches ON ( id = av_id )} if $branch_limit; $query .= " WHERE category = ?"; $query .= " AND ( branchcode = ? OR branchcode IS NULL )" if $branch_limit; - $query .= " GROUP BY lib ORDER BY lib, lib_opac"; + $query .= " GROUP BY authorised_value,lib ORDER BY lib, lib_opac"; my $authorised_values_sth = $dbh->prepare( $query ); # in this array, we will push all the 10 tabs @@ -501,16 +510,19 @@ sub build_tabs { my @BIG_LOOP; my %seen; my @tab_data; # all tags to display - + + my $max_num_tab=-1; + my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" ); foreach my $used ( @$usedTagsLib ){ + push @tab_data,$used->{tagfield} if not $seen{$used->{tagfield}}; $seen{$used->{tagfield}}++; - } - - my $max_num_tab=-1; - foreach(@$usedTagsLib){ - if($_->{tab} > -1 && $_->{tab} >= $max_num_tab && $_->{tagfield} != '995'){ # FIXME : MARC21 ? - $max_num_tab = $_->{tab}; + + if ( $used->{tab} > -1 + && $used->{tab} >= $max_num_tab + && $used->{tagfield} ne $itemtag ) + { + $max_num_tab = $used->{tab}; } } if($max_num_tab >= 9){ @@ -520,7 +532,7 @@ sub build_tabs { for ( my $tabloop = 0 ; $tabloop <= $max_num_tab ; $tabloop++ ) { my @loop_data = (); #innerloop in the template. my $i = 0; - foreach my $tag (@tab_data) { + foreach my $tag (sort @tab_data) { $i++; next if ! $tag; my ($indicator1, $indicator2); @@ -557,7 +569,7 @@ sub build_tabs { push( @subfields_data, &create_input( - $tag, $subfield, $value, $index_tag, $tabloop, $record, + $tag, $subfield, $value, $index_tag, $record, $authorised_values_sth,$input ) ); @@ -568,11 +580,11 @@ sub build_tabs { my $subfield = $subfields[$subfieldcount][0]; my $value = $subfields[$subfieldcount][1]; next if ( length $subfield != 1 ); - next if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); + next if ( !defined $tagslib->{$tag}->{$subfield} || $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); push( @subfields_data, &create_input( - $tag, $subfield, $value, $index_tag, $tabloop, + $tag, $subfield, $value, $index_tag, $record, $authorised_values_sth,$input ) ); @@ -591,16 +603,18 @@ sub build_tabs { and not ( $subfield eq "9" and exists($tagslib->{$tag}->{'a'}->{authtypecode}) and defined($tagslib->{$tag}->{'a'}->{authtypecode}) and - $tagslib->{$tag}->{'a'}->{authtypecode} ne "" + $tagslib->{$tag}->{'a'}->{authtypecode} ne "" and + $tagslib->{$tag}->{'a'}->{hidden} > -4 and + $tagslib->{$tag}->{'a'}->{hidden} < 5 ) ; #check for visibility flag # if subfield is $9 in a field whose $a is authority-controlled, - # always include in the form regardless of the hidden setting - bug 2206 + # always include in the form regardless of the hidden setting - bug 2206 and 28022 next if ( defined( $field->subfield($subfield) ) ); push( @subfields_data, &create_input( - $tag, $subfield, '', $index_tag, $tabloop, $record, + $tag, $subfield, '', $index_tag, $record, $authorised_values_sth,$input ) ); @@ -616,6 +630,7 @@ sub build_tabs { tag_lib => $tagslib->{$tag}->{lib}, repeatable => $tagslib->{$tag}->{repeatable}, mandatory => $tagslib->{$tag}->{mandatory}, + important => $tagslib->{$tag}->{important}, subfield_loop => \@subfields_data, fixedfield => $tag < 10?1:0, random => CreateKey, @@ -632,25 +647,30 @@ sub build_tabs { } else { my @subfields_data; - foreach my $subfield ( sort( keys %{ $tagslib->{$tag} } ) ) { - next if ( length $subfield != 1 ); + foreach my $subfield ( + sort { $a->{display_order} <=> $b->{display_order} || $a->{subfield} cmp $b->{subfield} } + grep { ref($_) && %$_ } # Not a subfield (values for "important", "lib", "mandatory", etc.) or empty + values %{ $tagslib->{$tag} } ) + { next - if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -4 ) - or ( $tagslib->{$tag}->{$subfield}->{hidden} >= 5 ) ) - and not ( $subfield eq "9" and + if ( ( $subfield->{hidden} <= -4 ) + or ( $subfield->{hidden} >= 5 ) ) + and not ( $subfield->{subfield} eq "9" and exists($tagslib->{$tag}->{'a'}->{authtypecode}) and defined($tagslib->{$tag}->{'a'}->{authtypecode}) and - $tagslib->{$tag}->{'a'}->{authtypecode} ne "" + $tagslib->{$tag}->{'a'}->{authtypecode} ne "" and + $tagslib->{$tag}->{'a'}->{hidden} > -4 and + $tagslib->{$tag}->{'a'}->{hidden} < 5 ) ; #check for visibility flag # if subfield is $9 in a field whose $a is authority-controlled, - # always include in the form regardless of the hidden setting - bug 2206 + # always include in the form regardless of the hidden setting - bug 2206 and 28022 next - if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop ); + if ( $subfield->{tab} ne $tabloop ); push( @subfields_data, &create_input( - $tag, $subfield, '', $index_tag, $tabloop, $record, + $tag, $subfield->{subfield}, '', $index_tag, $record, $authorised_values_sth,$input ) ); @@ -662,8 +682,9 @@ sub build_tabs { tag_lib => $tagslib->{$tag}->{lib}, repeatable => $tagslib->{$tag}->{repeatable}, mandatory => $tagslib->{$tag}->{mandatory}, - indicator1 => $indicator1, - indicator2 => $indicator2, + important => $tagslib->{$tag}->{important}, + indicator1 => ( $indicator1 || $tagslib->{$tag}->{ind1_defaultvalue} ), #if not set, try to load the default value + indicator2 => ( $indicator2 || $tagslib->{$tag}->{ind2_defaultvalue} ), #use short-circuit operator for efficiency subfield_loop => \@subfields_data, tagfirstsubfield => $subfields_data[0], fixedfield => $tag < 10?1:0, @@ -687,17 +708,17 @@ sub build_tabs { # ======================== # MAIN #========================= -my $input = new CGI; +my $input = CGI->new; my $error = $input->param('error'); my $biblionumber = $input->param('biblionumber'); # if biblionumber exists, it's a modif, not a new biblio. my $parentbiblio = $input->param('parentbiblionumber'); my $breedingid = $input->param('breedingid'); my $z3950 = $input->param('z3950'); -my $op = $input->param('op'); +my $op = $input->param('op') // q{}; my $mode = $input->param('mode'); my $frameworkcode = $input->param('frameworkcode'); my $redirect = $input->param('redirect'); -my $searchid = $input->param('searchid'); +my $searchid = $input->param('searchid') // ""; my $dbh = C4::Context->dbh; my $hostbiblionumber = $input->param('hostbiblionumber'); my $hostitemnumber = $input->param('hostitemnumber'); @@ -710,9 +731,9 @@ my $fa_duedatespec = $input->param('duedatespec'); my $userflags = 'edit_catalogue'; -my $changed_framework = $input->param('changed_framework'); +my $changed_framework = $input->param('changed_framework') // q{}; $frameworkcode = &GetFrameworkCode($biblionumber) - if ( $biblionumber and not($frameworkcode) and $op ne 'addbiblio' ); + if ( $biblionumber and not( defined $frameworkcode) and $op ne 'addbiblio' ); if ($frameworkcode eq 'FA'){ $userflags = 'fast_cataloging'; @@ -724,11 +745,19 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "cataloguing/addbiblio.tt", query => $input, type => "intranet", - authnotrequired => 0, flagsrequired => { editcatalogue => $userflags }, } ); +my $biblio; +if ($biblionumber){ + $biblio = Koha::Biblios->find($biblionumber); + unless ( $biblio ) { + $biblionumber = undef; + $template->param( bib_doesnt_exist => 1 ); + } +} + if ($frameworkcode eq 'FA'){ # We need to grab and set some variables in the template for use on the additems screen $template->param( @@ -738,30 +767,23 @@ if ($frameworkcode eq 'FA'){ 'stickyduedate' => $fa_stickyduedate, 'duedatespec' => $fa_duedatespec, ); -} elsif ( C4::Context->preference('EnableAdvancedCatalogingEditor') && $input->cookie( 'catalogue_editor_' . $loggedinuser ) eq 'advanced' && !$breedingid ) { +} elsif ( $op ne "delete" && + C4::Context->preference('EnableAdvancedCatalogingEditor') && + C4::Auth::haspermission(C4::Context->userenv->{id},{'editcatalogue'=>'advanced_editor'}) && + $input->cookie( 'catalogue_editor_' . $loggedinuser ) eq 'advanced' && + !$breedingid ) { # Only use the advanced editor for non-fast-cataloging. # breedingid is not handled because those would only come off a Z39.50 # search initiated by the basic editor. - print $input->redirect( '/cgi-bin/koha/cataloguing/editor.pl' . ( $biblionumber ? ( '#catalog/' . $biblionumber ) : '' ) ); + print $input->redirect( '/cgi-bin/koha/cataloguing/editor.pl' . ( $biblionumber ? ( ($op eq 'duplicate'?'#duplicate/':'#catalog/') . $biblionumber ) : '' ) ); + exit; } - -# Getting the list of all frameworks -# get framework list -my $frameworks = getframeworks; -my @frameworkcodeloop; -foreach my $thisframeworkcode ( keys %$frameworks ) { - my %row = ( - value => $thisframeworkcode, - frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'}, - ); - if ($frameworkcode eq $thisframeworkcode){ - $row{'selected'} = 1; - } - push @frameworkcodeloop, \%row; -} -$template->param( frameworkcodeloop => \@frameworkcodeloop, - breedingid => $breedingid ); +my $frameworks = Koha::BiblioFrameworks->search({}, { order_by => ['frameworktext'] }); +$template->param( + frameworks => $frameworks, + breedingid => $breedingid, +); # ++ Global $tagslib = &GetMarcStructure( 1, $frameworkcode ); @@ -779,8 +801,8 @@ my ( $biblioitemnumber ); -if (($biblionumber) && !($breedingid)){ - $record = GetMarcBiblio($biblionumber); +if ( $biblio && !$breedingid ) { + $record = $biblio->metadata->record; } if ($breedingid) { ( $record, $encoding ) = MARCfindbreeding( $breedingid ) ; @@ -808,7 +830,7 @@ if ($parentbiblio) { } $is_a_modif = 0; - + if ($biblionumber) { $is_a_modif = 1; my $title = C4::Context->preference('marcflavour') eq "UNIMARC" ? $record->subfield('200', 'a') : $record->title; @@ -816,10 +838,10 @@ if ($biblionumber) { # if it's a modif, retrieve bibli and biblioitem numbers for the future modification of old-DB. ( $biblionumbertagfield, $biblionumbertagsubfield ) = - &GetMarcFromKohaField( "biblio.biblionumber", $frameworkcode ); + &GetMarcFromKohaField( "biblio.biblionumber" ); ( $biblioitemnumtagfield, $biblioitemnumtagsubfield ) = - &GetMarcFromKohaField( "biblioitems.biblioitemnumber", $frameworkcode ); - + &GetMarcFromKohaField( "biblioitems.biblioitemnumber" ); + # search biblioitems value my $sth = $dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=?"); $sth->execute($biblionumber); @@ -833,8 +855,8 @@ if ( $op eq "addbiblio" ) { biblionumberdata => $biblionumber, ); # getting html input - my @params = $input->param(); - $record = TransformHtmlToMarc( $input ); + my @params = $input->multi_param(); + $record = TransformHtmlToMarc( $input, 1 ); # check for a duplicate my ( $duplicatebiblionumber, $duplicatetitle ); if ( !$is_a_modif ) { @@ -844,12 +866,20 @@ if ( $op eq "addbiblio" ) { # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate) if ( !$duplicatebiblionumber or $confirm_not_duplicate ) { my $oldbibitemnum; - if (C4::Context->preference("BiblioAddsAuthorities")){ - BiblioAutoLink( $record, $frameworkcode ); - } if ( $is_a_modif ) { - ModBiblioframework( $biblionumber, $frameworkcode ); - ModBiblio( $record, $biblionumber, $frameworkcode ); + my $member = Koha::Patrons->find($loggedinuser); + ModBiblio( + $record, + $biblionumber, + $frameworkcode, + { + overlay_context => { + source => $z3950 ? 'z39.50' : 'intranet', + categorycode => $member->categorycode, + userid => $member->userid + } + } + ); } else { ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); @@ -932,7 +962,7 @@ elsif ( $op eq "delete" ) { exit; } - print $input->redirect('/cgi-bin/koha/catalogue/search.pl'); + print $input->redirect('/cgi-bin/koha/catalogue/search.pl' . ($searchid ? "?searchid=$searchid" : "")); exit; } else { @@ -942,13 +972,14 @@ elsif ( $op eq "delete" ) { $template->param( biblionumberdata => $biblionumber, op => $op, + z3950 => $z3950 ); if ( $op eq "duplicate" ) { $biblionumber = ""; } if($changed_framework eq "changed"){ - $record = TransformHtmlToMarc( $input ); + $record = TransformHtmlToMarc( $input, 1 ); } elsif( $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 @@ -982,7 +1013,7 @@ $template->param( frameworkcode => $frameworkcode, itemtype => $frameworkcode, borrowernumber => $loggedinuser, - tab => $input->param('tab') + tab => scalar $input->param('tab') ); $template->{'VARS'}->{'searchid'} = $searchid;