X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=cataloguing%2Faddbiblio.pl;h=3a5b7c5f827543990a86962ffc0e6cd860dc1122;hb=3285261d0150113e597d48a5a78aee5fdc1ebd94;hp=22d1b8d2682a0915d32eb89704a811e53358a4d7;hpb=adb3777e2e4940a842e0d33a22121b1db762aeba;p=koha_fer diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 22d1b8d268..3a5b7c5f82 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -39,6 +39,7 @@ use C4::Charset; use Date::Calc qw(Today); use MARC::File::USMARC; use MARC::File::XML; +use URI::Escape; if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) { MARC::File::XML->default_record_format('UNIMARC'); @@ -93,9 +94,10 @@ sub MARCfindbreeding { return -1; } else { - # normalize author : probably UNIMARC specific... + # normalize author : UNIMARC specific... if ( C4::Context->preference("z3950NormalizeAuthor") - and C4::Context->preference("z3950AuthorAuthFields") ) + and C4::Context->preference("z3950AuthorAuthFields") + and C4::Context->preference("marcflavour") eq 'UNIMARC' ) { my ( $tag, $subfield ) = GetMarcFromKohaField("biblio.author", ''); @@ -170,7 +172,7 @@ sub build_authorized_values_list { #---- branch if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { #Use GetBranches($onlymine) - my $onlymine=C4::Context->preference('IndependantBranches') && + my $onlymine=C4::Context->preference('IndependentBranches') && C4::Context->userenv && C4::Context->userenv->{flags} % 2 == 0 && C4::Context->userenv->{branch}; @@ -215,14 +217,15 @@ sub build_authorized_values_list { ($class_source eq $default_source); push @authorised_values, $class_source; $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; - $value = $class_source unless ($value); - $value = $default_source unless ($value); } - #---- "true" authorised value + $value = $default_source unless $value; } else { + my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; $authorised_values_sth->execute( - $tagslib->{$tag}->{$subfield}->{authorised_value} ); + $tagslib->{$tag}->{$subfield}->{authorised_value}, + $branch_limit ? $branch_limit : (), + ); push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); @@ -232,6 +235,7 @@ sub build_authorized_values_list { $authorised_lib{$value} = $lib; } } + $authorised_values_sth->finish; return CGI::scrolling_list( -name => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield, -values => \@authorised_values, @@ -293,14 +297,6 @@ sub create_input { $value =~ s/"/"/g; - # determine maximum length; 9999 bytes per ISO 2709 except for leader and MARC21 008 - my $max_length = 9999; - if ($tag eq '000') { - $max_length = 24; - } elsif ($tag eq '008' and C4::Context->preference('marcflavour') eq 'MARC21') { - $max_length = 40; - } - # if there is no value provided but a default value in parameters, get it if ( $value eq '' ) { $value = $tagslib->{$tag}->{$subfield}->{defaultvalue}; @@ -335,6 +331,7 @@ sub create_input { index => $index_tag, id => "tag_".$tag."_subfield_".$id_subfield."_".$index_tag."_".$index_subfield, value => $value, + maxlength => $tagslib->{$tag}->{$subfield}->{maxlength}, random => CreateKey(), ); @@ -374,14 +371,15 @@ sub create_input { class=\"input_marceditor readonly\" tabindex=\"1\" size=\"5\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" readonly=\"readonly\" \/>"; # it's a thesaurus / authority field } elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) { - if (C4::Context->preference("BiblioAddsAuthorities")) { + # when authorities auto-creation is allowed, do not set readonly + my $is_readonly = !C4::Context->preference("BiblioAddsAuthorities"); $subfield_data{marc_value} = " + maxlength=\"".$subfield_data{maxlength}."\"". + ($is_readonly ? "readonly=\"readonly\"" : ""). + "\/> {$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">\"Tag - "; - } else { - $subfield_data{marc_value} = - "{$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">\"Tag + onclick=\"openAuth(this.parentNode.parentNode.getElementsByTagName('input')[1].id,'".$tagslib->{$tag}->{$subfield}->{authtypecode}."','biblio'); return false;\" tabindex=\"1\" title=\"Tag Editor\">\"Tag "; - } # it's a plugin field } elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) { @@ -435,7 +419,7 @@ sub create_input { class=\"input_marceditor\" onfocus=\"Focus$function_name($index_tag)\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" onblur=\"Blur$function_name($index_tag); \" \/> \"Tag $javascript"; @@ -449,7 +433,7 @@ sub create_input { value=\"$value\" tabindex=\"1\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" class=\"input_marceditor\" \/> "; @@ -463,7 +447,7 @@ sub create_input { id=\"".$subfield_data{id}."\" name=\"".$subfield_data{id}."\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" value=\"$value\" \/> "; } @@ -497,7 +481,7 @@ sub create_input { value=\"$value\" tabindex=\"1\" size=\"67\" - maxlength=\"$max_length\" + maxlength=\"".$subfield_data{maxlength}."\" class=\"input_marceditor\" \/> "; @@ -530,12 +514,15 @@ sub build_tabs { my @loop_data = (); my $tag; - my $authorised_values_sth = $dbh->prepare( - "select authorised_value,lib - from authorised_values - where category=? order by lib" - ); - + my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; + my $query = "SELECT authorised_value, lib + FROM authorised_values"; + $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"; + my $authorised_values_sth = $dbh->prepare( $query ); + # in this array, we will push all the 10 tabs # to avoid having 10 tabs in the template : they will all be in the same BIG_LOOP my @BIG_LOOP; @@ -720,6 +707,7 @@ sub build_tabs { }; } } + $authorised_values_sth->finish; $template->param( BIG_LOOP => \@BIG_LOOP ); } @@ -739,8 +727,13 @@ my $redirect = $input->param('redirect'); my $dbh = C4::Context->dbh; my $hostbiblionumber = $input->param('hostbiblionumber'); my $hostitemnumber = $input->param('hostitemnumber'); +# fast cataloguing datas in transit +my $fa_circborrowernumber = $input->param('circborrowernumber'); +my $fa_barcode = $input->param('barcode'); +my $fa_branch = $input->param('branch'); +my $fa_stickyduedate = $input->param('stickyduedate'); +my $fa_duedatespec = $input->param('duedatespec'); - my $userflags = 'edit_catalogue'; if ($frameworkcode eq 'FA'){ $userflags = 'fast_cataloging'; @@ -762,11 +755,13 @@ 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'); + $template->param( + 'circborrowernumber' => $fa_circborrowernumber, + 'barcode' => $fa_barcode, + 'branch' => $fa_branch, + 'stickyduedate' => $fa_stickyduedate, + 'duedatespec' => $fa_duedatespec, + ); } # Getting the list of all frameworks @@ -877,15 +872,17 @@ if ( $op eq "addbiblio" ) { else { ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode ); } - if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view")){ + if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view" && $redirect ne "just_save")){ 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" + '/cgi-bin/koha/cataloguing/additem.pl?' + .'biblionumber='.$biblionumber + .'&frameworkcode='.$frameworkcode + .'&circborrowernumber='.$fa_circborrowernumber + .'&branch='.$fa_branch + .'&barcode='.uri_escape($fa_barcode) + .'&stickyduedate='.$fa_stickyduedate + .'&duedatespec='.$fa_duedatespec ); exit; } @@ -896,7 +893,7 @@ if ( $op eq "addbiblio" ) { exit; } } - elsif($is_a_modif || $redirect eq "view"){ + elsif(($is_a_modif || $redirect eq "view") && $redirect ne "just_save"){ my $defaultview = C4::Context->preference('IntranetBiblioDefaultView'); my $views = { C4::Search::enabled_staff_search_views }; if ($defaultview eq 'isbd' && $views->{can_view_ISBD}) { @@ -910,8 +907,11 @@ if ( $op eq "addbiblio" ) { } exit; - } - else { + } + elsif ($redirect eq "just_save"){ + print $input->redirect("/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=$biblionumber&framework=$frameworkcode"); + } + else { $template->param( biblionumber => $biblionumber, done =>1, @@ -991,16 +991,6 @@ $template->param( frameworkcode => $frameworkcode, itemtype => $frameworkcode, borrowernumber => $loggedinuser, - marcflavour => C4::Context->preference("marcflavour"), ); output_html_with_http_headers $input, $cookie, $template->output; - -sub get_host_control_num { - my $host_biblio_nr = shift; - my $host = GetMarcBiblio($host_biblio_nr); - my $control_num = GetMarcControlnumber($host, C4::Context->preference('marcflavour')); - $host = GetBiblioData($host_biblio_nr); - $host->{control_number} = $control_num; - return $host; -}