X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=cataloguing%2Faddbiblio.pl;h=9013a4e4be3886b4a54856683e6119d46ba615b2;hb=4f60138080cba847a53b7373c0c98ec42766b8df;hp=e2ea1cdf89a826ed5abaae30052e1fe316ce0d0b;hpb=9c0b2e408b496b999cdbede92e651f3aef588209;p=koha.git
diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index e2ea1cdf89..9013a4e4be 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -21,7 +21,7 @@
use strict;
#use warnings; FIXME - Bug 2505
-use CGI;
+use CGI q(-utf8);
use C4::Output;
use C4::Auth;
use C4::Biblio;
@@ -172,10 +172,11 @@ sub build_authorized_values_list {
#---- branch
if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
#Use GetBranches($onlymine)
- my $onlymine=C4::Context->preference('IndependantBranches') &&
- C4::Context->userenv &&
- C4::Context->userenv->{flags} % 2 == 0 &&
- C4::Context->userenv->{branch};
+ my $onlymine =
+ C4::Context->preference('IndependentBranches')
+ && C4::Context->userenv
+ && !C4::Context->IsSuperLibrarian()
+ && C4::Context->userenv->{branch};
my $branches = GetBranches($onlymine);
my @branchloop;
foreach my $thisbranch ( sort keys %$branches ) {
@@ -191,7 +192,8 @@ sub build_authorized_values_list {
"select itemtype,description from itemtypes order by description");
$sth->execute;
push @authorised_values, ""
- unless ( $tagslib->{$tag}->{$subfield}->{defaultvalue} and $tagslib->{$tag}->{$subfield}->{mandatory} );
+ unless ( $tagslib->{$tag}->{$subfield}->{mandatory}
+ && ( $value || $tagslib->{$tag}->{$subfield}->{defaultvalue} ) );
my $itemtype;
@@ -228,7 +230,8 @@ sub build_authorized_values_list {
);
push @authorised_values, ""
- unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+ unless ( $tagslib->{$tag}->{$subfield}->{mandatory}
+ && ( $value || $tagslib->{$tag}->{$subfield}->{defaultvalue} ) );
while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
push @authorised_values, $value;
@@ -236,18 +239,15 @@ sub build_authorized_values_list {
}
}
$authorised_values_sth->finish;
- return CGI::scrolling_list(
- -name => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
- -values => \@authorised_values,
- -default => $value,
- -labels => \%authorised_lib,
- -override => 1,
- -size => 1,
- -multiple => 0,
- -tabindex => 1,
- -id => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
- -class => "input_marceditor",
- );
+ return {
+ type => 'select',
+ id => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
+ name => "tag_".$tag."_subfield_".$subfield."_".$index_tag."_".$index_subfield,
+ default => $value,
+ values => \@authorised_values,
+ labels => \%authorised_lib,
+ };
+
}
=head2 CreateKey
@@ -363,37 +363,33 @@ sub create_input {
defined($tagslib->{$tag}->{'a'}->{authtypecode}) and
$tagslib->{$tag}->{'a'}->{authtypecode} ne '') {
- $subfield_data{marc_value} =
- "";
+ $subfield_data{marc_value} = {
+ type => 'text',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ size => 5,
+ maxlength => $subfield_data{maxlength},
+ readonly => 1,
+ };
# it's a thesaurus / authority field
}
elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
# when authorities auto-creation is allowed, do not set readonly
my $is_readonly = !C4::Context->preference("BiblioAddsAuthorities");
- $subfield_data{marc_value} =
- "
- {$tag}->{$subfield}->{authtypecode}."','biblio'); return false;\" tabindex=\"1\" title=\"Tag Editor\">
- ";
+
+ $subfield_data{marc_value} = {
+ type => 'text',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ size => 67,
+ maxlength => $subfield_data{maxlength},
+ readonly => ($is_readonly) ? 1 : 0,
+ authtype => $tagslib->{$tag}->{$subfield}->{authtypecode},
+ };
+
# it's a plugin field
}
elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) {
@@ -410,46 +406,44 @@ sub create_input {
my $extended_param = plugin_parameters( $dbh, $rec, $tagslib, $subfield_data{id}, $tabloop );
my ( $function_name, $javascript ) = plugin_javascript( $dbh, $rec, $tagslib, $subfield_data{id}, $tabloop );
- $subfield_data{marc_value} =
- "
-
- $javascript";
+ $subfield_data{marc_value} = {
+ type => 'text_complex',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ size => 67,
+ maxlength => $subfield_data{maxlength},
+ function_name => $function_name,
+ index_tag => $index_tag,
+ javascript => $javascript,
+ };
+
} else {
warn "Plugin Failed: $plugin";
# supply default input form
- $subfield_data{marc_value} =
- "
- ";
+ $subfield_data{marc_value} = {
+ type => 'text',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ size => 67,
+ maxlength => $subfield_data{maxlength},
+ readonly => 0,
+ };
+
}
# it's an hidden field
}
elsif ( $tag eq '' ) {
- $subfield_data{marc_value} =
- "
- ";
+ $subfield_data{marc_value} = {
+ type => 'hidden',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ size => 67,
+ maxlength => $subfield_data{maxlength},
+ };
+
}
else {
# it's a standard field
@@ -463,28 +457,25 @@ sub create_input {
&& C4::Context->preference("marcflavour") eq "MARC21" )
)
{
- $subfield_data{marc_value} =
- "
- ";
+ $subfield_data{marc_value} = {
+ type => 'textarea',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ };
+
}
else {
- $subfield_data{marc_value} =
- "
- ";
+ $subfield_data{marc_value} = {
+ type => 'text',
+ id => $subfield_data{id},
+ name => $subfield_data{id},
+ value => $value,
+ size => 67,
+ maxlength => $subfield_data{maxlength},
+ readonly => 0,
+ };
+
}
}
$subfield_data{'index_subfield'} = $index_subfield;
@@ -662,8 +653,8 @@ sub build_tabs {
foreach my $subfield ( sort( keys %{ $tagslib->{$tag} } ) ) {
next if ( length $subfield != 1 );
next
- if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -5 )
- or ( $tagslib->{$tag}->{$subfield}->{hidden} >= 4 ) )
+ if ( ( $tagslib->{$tag}->{$subfield}->{hidden} <= -4 )
+ or ( $tagslib->{$tag}->{$subfield}->{hidden} >= 5 ) )
and not ( $subfield eq "9" and
exists($tagslib->{$tag}->{'a'}->{authtypecode}) and
defined($tagslib->{$tag}->{'a'}->{authtypecode}) and
@@ -724,6 +715,7 @@ my $op = $input->param('op');
my $mode = $input->param('mode');
my $frameworkcode = $input->param('frameworkcode');
my $redirect = $input->param('redirect');
+my $searchid = $input->param('searchid');
my $dbh = C4::Context->dbh;
my $hostbiblionumber = $input->param('hostbiblionumber');
my $hostitemnumber = $input->param('hostitemnumber');
@@ -735,13 +727,15 @@ my $fa_stickyduedate = $input->param('stickyduedate');
my $fa_duedatespec = $input->param('duedatespec');
my $userflags = 'edit_catalogue';
-if ($frameworkcode eq 'FA'){
- $userflags = 'fast_cataloging';
-}
+my $changed_framework = $input->param('changed_framework');
$frameworkcode = &GetFrameworkCode($biblionumber)
if ( $biblionumber and not($frameworkcode) and $op ne 'addbiblio' );
+if ($frameworkcode eq 'FA'){
+ $userflags = 'fast_cataloging';
+}
+
$frameworkcode = '' if ( $frameworkcode eq 'Default' );
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
@@ -819,6 +813,7 @@ if ($hostbiblionumber) {
if ($parentbiblio) {
my $marcflavour = C4::Context->preference('marcflavour');
$record = MARC::Record->new();
+ SetMarcUnicodeFlag($record, $marcflavour);
my $hostfield = prepare_host_field($parentbiblio,$marcflavour);
if ($hostfield) {
$record->append_fields($hostfield);
@@ -829,7 +824,8 @@ $is_a_modif = 0;
if ($biblionumber) {
$is_a_modif = 1;
- $template->param( title => $record->title(), );
+ my $title = C4::Context->preference('marcflavour') eq "UNIMARC" ? $record->subfield('200', 'a') : $record->title;
+ $template->param( title => $title );
# if it's a modif, retrieve bibli and biblioitem numbers for the future modification of old-DB.
( $biblionumbertagfield, $biblionumbertagsubfield ) =
@@ -863,7 +859,7 @@ if ( $op eq "addbiblio" ) {
my $oldbibnum;
my $oldbibitemnum;
if (C4::Context->preference("BiblioAddsAuthorities")){
- my ($countlinked,$countcreated)=BiblioAutoLink($record,$frameworkcode);
+ BiblioAutoLink( $record, $frameworkcode );
}
if ( $is_a_modif ) {
ModBiblioframework( $biblionumber, $frameworkcode );
@@ -872,7 +868,7 @@ 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'){
print $input->redirect(
'/cgi-bin/koha/cataloguing/additem.pl?'
@@ -888,34 +884,40 @@ if ( $op eq "addbiblio" ) {
}
else {
print $input->redirect(
- "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"
+ "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid"
);
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}) {
- print $input->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber");
+ print $input->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber&searchid=$searchid");
} elsif ($defaultview eq 'marc' && $views->{can_view_MARC}) {
- print $input->redirect("/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
+ print $input->redirect("/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid");
} elsif ($defaultview eq 'labeled_marc' && $views->{can_view_labeledMARC}) {
- print $input->redirect("/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=$biblionumber");
+ print $input->redirect("/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=$biblionumber&searchid=$searchid");
} else {
- print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber");
+ print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber&searchid=$searchid");
}
exit;
- }
- else {
+ }
+ elsif ($redirect eq "just_save"){
+ my $tab = $input->param('current_tab');
+ print $input->redirect("/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=$biblionumber&framework=$frameworkcode&tab=$tab&searchid=$searchid");
+ }
+ else {
$template->param(
biblionumber => $biblionumber,
done =>1,
popup =>1
);
- $template->param( title => $record->subfield('200',"a") ) if ($record ne "-1" && C4::Context->preference('marcflavour') =~/unimarc/i);
- $template->param( title => $record->title() ) if ($record ne "-1" && C4::Context->preference('marcflavour') eq "usmarc");
+ if ( $record ne '-1' ) {
+ my $title = C4::Context->preference('marcflavour') eq "UNIMARC" ? $record->subfield('200', 'a') : $record->title;
+ $template->param( title => $title );
+ }
$template->param(
popup => $mode,
itemtype => $frameworkcode,
@@ -959,7 +961,10 @@ elsif ( $op eq "delete" ) {
$biblionumber = "";
}
- if ( $record ne -1 ) {
+ if($changed_framework eq "changed"){
+ $record = TransformHtmlToMarc( $input );
+ }
+ 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
eval {
my $uxml = $record->as_xml;
@@ -982,12 +987,17 @@ elsif ( $op eq "delete" ) {
);
}
-$template->param( title => $record->title() ) if ( $record ne "-1" );
+if ( $record ne '-1' ) {
+ my $title = C4::Context->preference('marcflavour') eq "UNIMARC" ? $record->subfield('200', 'a') : $record->title;
+ $template->param( title => $title );
+}
$template->param(
popup => $mode,
frameworkcode => $frameworkcode,
itemtype => $frameworkcode,
- borrowernumber => $loggedinuser,
+ borrowernumber => $loggedinuser,
+ tab => $input->param('tab')
);
+$template->{'VARS'}->{'searchid'} = $searchid;
output_html_with_http_headers $input, $cookie, $template->output;