[Koha-patches] [PATCH 2/2] Bug 6018 : MT3269 Fixing tools/batchMod.pl tags/subfields display
Chris Cormack
chrisc at catalyst.net.nz
Thu Mar 31 04:13:53 CEST 2011
From: Henri-Damien LAURENT <henridamien.laurent at biblibre.com>
display all the subfields used in framework no matter if they are hidden or shown
---
tools/batchMod.pl | 237 +++++++++++++++++++++++++++++------------------------
1 files changed, 131 insertions(+), 106 deletions(-)
diff --git a/tools/batchMod.pl b/tools/batchMod.pl
index 358125a..9ef1593 100755
--- a/tools/batchMod.pl
+++ b/tools/batchMod.pl
@@ -27,7 +27,7 @@ use C4::Biblio;
use C4::Items;
use C4::Context;
use C4::Koha; # XXX subfield_is_koha_internal_p
-use C4::Branch; # XXX subfield_is_koha_internal_p
+use C4::Branch;
use C4::BackgroundJob;
use C4::ClassSource;
use C4::Dates;
@@ -73,7 +73,7 @@ my $nextop="";
my @errors; # store errors found while checking data BEFORE saving item.
my $items_display_hashref;
my $frameworkcode="";
-my $tagslib = &GetMarcStructure(1,$frameworkcode);
+my $tagslib = &GetMarcStructure(1,'');
my $deleted_items = 0; # Numbers of deleted items
my $not_deleted_items = 0; # Numbers of items that could not be deleted
@@ -82,6 +82,7 @@ my @not_deleted; # List of the itemnumbers that could not be deleted
my %cookies = parse CGI::Cookie($cookie);
my $sessionID = $cookies{'CGISESSID'}->value;
+my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumber", "");
#--- ----------------------------------------------------------------------------
if ($op eq "action") {
@@ -133,7 +134,6 @@ if ($op eq "action") {
}
#initializing values for updates
- my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumber", "");
if ($values_to_modify){
my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM');
$marcitem = MARC::Record::new_from_xml($xml, 'UTF-8');
@@ -246,13 +246,13 @@ unshift (@$branches, $nochange_branch);
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
-
foreach my $tag (sort keys %{$tagslib}) {
# loop through each subfield
+ next if ($tag ne $itemtagfield);
foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
next if subfield_is_koha_internal_p($subfield);
- next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
- # barcode and stocknumber are not meant to be batch-modified
+ #field disabled
+ next if (!defined ($tagslib->{$tag}->{$subfield}->{'tab'}) || $tagslib->{$tag}->{$subfield}->{'tab'} eq -1);
next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode';
next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.stocknumber';
my %subfield_data;
@@ -280,121 +280,146 @@ foreach my $tag (sort keys %{$tagslib}) {
$value =~ s/MM/$month/g;
$value =~ s/DD/$day/g;
}
- $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4));
+ #$subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4));
# testing branch value if IndependantBranches.
- my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" );
- my $attributes = qq($attributes_no_value value="$value" );
+ my $attributes_no_value;
+ my $not_editable = 0;
+
+ my $attributes_no_value;
+ my $not_editable = 0;
+ # Disable barcode and stock numbers batch editing
+ my @not_editable_koha_fields = ( 'items.barcode', 'items.stocknumber' );
+ foreach (@not_editable_koha_fields) {
+ my ($bctag, $bcsubfield) = GetMarcFromKohaField($_, $frameworkcode);
+ if (($bctag eq $subfield_data{tag}) && ($bcsubfield eq $subfield_data{subfield})) {
+ $not_editable = 1;
+ }
+
+ }
+
+ my $attributes;
+ # If a field is found to be non-editable,
+ if ($not_editable) {
+ # We mark it as disabled, so the user won't be able to edit it
+ $attributes_no_value = qq(disabled="disabled");
+ $attributes = $attributes_no_value;
+ # We also remove it's data, so it won't be modified
+ undef($subfield_data{tag});
+ undef($subfield_data{subfield});
+ } else {
+ $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" );
+ $attributes = qq($attributes_no_value value="$value" );
+ }
if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
my @authorised_values;
my %authorised_lib;
# builds list, depending on authorised value...
-
- if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) {
- foreach my $thisbranch (@$branches) {
- push @authorised_values, $thisbranch->{value};
- $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname};
- }
- $value = "";
- }
- elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
- push @authorised_values, "";
- my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description");
- $sth->execute;
- while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
- push @authorised_values, $itemtype;
- $authorised_lib{$itemtype} = $description;
- }
- $value = "";
-
- #---- class_sources
- }
- elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
- push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-
- my $class_sources = GetClassSources();
- my $default_source = C4::Context->preference("DefaultClassificationSource");
-
- foreach my $class_source (sort keys %$class_sources) {
- next unless $class_sources->{$class_source}->{'used'} or
- ($value and $class_source eq $value) or
- ($class_source eq $default_source);
- push @authorised_values, $class_source;
- $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
+ my @not_editable_koha_fields = ( 'items.barcode', 'items.stocknumber' );
+ foreach (@not_editable_koha_fields) {
+ my ($bctag, $bcsubfield) = GetMarcFromKohaField($_, $frameworkcode);
+ if (($bctag eq $subfield_data{tag}) && ($bcsubfield eq $subfield_data{subfield})) {
+ $not_editable = 1;
}
- $value = '';
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
+ push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+ my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description");
+ $sth->execute;
+ while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
+ push @authorised_values, $itemtype;
+ $authorised_lib{$itemtype} = $description;
+ }
#---- "true" authorised value
}
- else {
- push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
- $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} );
- while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
- push @authorised_values, $value;
- $authorised_lib{$value} = $lib;
+ elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
+ push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+
+ my $class_sources = GetClassSources();
+ my $default_source = C4::Context->preference("DefaultClassificationSource");
+
+ foreach my $class_source (sort keys %$class_sources) {
+ next unless $class_sources->{$class_source}->{'used'} or
+ ($value and $class_source eq $value) or
+ ($class_source eq $default_source);
+ push @authorised_values, $class_source;
+ $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
+ }
+ $value = $default_source unless ($value);
+
+ #---- "true" authorised value
}
- }
- $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list
- -name => "field_value",
- -values => \@authorised_values,
- -default => $value,
- -labels => \%authorised_lib,
- -override => 1,
- -size => 1,
- -multiple => 0,
- -tabindex => 1,
- -id => "tag_".$tag."_subfield_".$subfield."_".$index_subfield,
- -class => "input_marceditor",
- );
- # it's a thesaurus / authority field
- }
- elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
- $subfield_data{marc_value} = "<input type=\"text\" $attributes />
- <a href=\"#\" class=\"buttonDot\"
- 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>
- ";
- # it's a plugin field
- }
- elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) {
- # opening plugin
- my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
- if (do $plugin) {
- my $temp;
- my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
- my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
- $subfield_data{marc_value} = qq[<input $attributes
- onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
- onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
- <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
- $javascript];
+ else {
+ push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+ $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} );
+ while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
+ push @authorised_values, $value;
+ $authorised_lib{$value} = $lib;
+ }
+ }
+ $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list
+ -name => "field_value",
+ -values => \@authorised_values,
+ -default => $value,
+ -labels => \%authorised_lib,
+ -override => 1,
+ -size => 1,
+ -multiple => 0,
+ -tabindex => 1,
+ -id => "tag_".$tag."_subfield_".$subfield."_".$index_subfield,
+ -class => "input_marceditor",
+ );
+ # it's a thesaurus / authority field
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
+ $subfield_data{marc_value} = "<input type=\"text\" $attributes />
+ <a href=\"#\" class=\"buttonDot\"
+ 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>
+ ";
+ # it's a plugin field
+ }
+ elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) {
+ # opening plugin
+ my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
+ if (do $plugin) {
+ my $temp;
+ my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
+ my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
+ $subfield_data{marc_value} = qq[<input $attributes
+ onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
+ onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
+ <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
+ $javascript];
+ } else {
+ warn "Plugin Failed: $plugin";
+ $subfield_data{marc_value} = "<input $attributes />"; # supply default input form
+ }
+ }
+# Donot hide any field in edit
+# elsif ( $tag eq '' ) { # it's an hidden field
+# $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
+# }
+# elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ?
+# $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
+# }
+ elsif ( length($value) > 100
+ or (C4::Context->preference("marcflavour") eq "UNIMARC" and
+ 300 <= $tag && $tag < 400 && $subfield eq 'a' )
+ or (C4::Context->preference("marcflavour") eq "MARC21" and
+ 500 <= $tag && $tag < 600 )
+ ) {
+ # oversize field (textarea)
+ $subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n";
} else {
- warn "Plugin Failed: $plugin";
- $subfield_data{marc_value} = "<input $attributes />"; # supply default input form
+ # it's a standard field
+ $subfield_data{marc_value} = "<input $attributes />";
}
+ # $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">";
+ push (@loop_data, \%subfield_data);
+ $i++
}
- elsif ( $tag eq '' ) { # it's an hidden field
- $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
- }
- elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ?
- $subfield_data{marc_value} = qq(<input type="text" $attributes />);
- }
- elsif ( length($value) > 100
- or (C4::Context->preference("marcflavour") eq "UNIMARC" and
- 300 <= $tag && $tag < 400 && $subfield eq 'a' )
- or (C4::Context->preference("marcflavour") eq "MARC21" and
- 500 <= $tag && $tag < 600 )
- ) {
- # oversize field (textarea)
- $subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n";
- } else {
- # it's a standard field
- $subfield_data{marc_value} = "<input $attributes />";
- }
-# $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">";
- push (@loop_data, \%subfield_data);
- $i++
- }
} # -- End foreach tag
--
1.7.1
More information about the Koha-patches
mailing list