From 9fdc3bd5db11d3020fb5f0747115a0aa1bde98fc Mon Sep 17 00:00:00 2001 From: Alex Arnaud Date: Wed, 6 Apr 2011 11:19:57 +0200 Subject: [PATCH] Bug #6068 - New feature: capability to blanking subfields in BatchMod Signed-off-by: Paul Poulain --- .../prog/en/modules/tools/batchMod-edit.tt | 23 +++++++++ tools/batchMod.pl | 51 +++++++++++++++---- 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt index 67cd6e0..540b141 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt @@ -16,6 +16,27 @@ console.log(allColumns); for( x=0; x @@ -118,6 +139,7 @@ for( x=0; x

Edit Items

+
Checking the box right next the subfield label will disable the entry and delete the values of that subfield on all selected items
    [% FOREACH ite IN item %] @@ -127,6 +149,7 @@ for( x=0; x[% END %] + [% ite.marc_value %] diff --git a/tools/batchMod.pl b/tools/batchMod.pl index 4910dbd..9d4431b 100755 --- a/tools/batchMod.pl +++ b/tools/batchMod.pl @@ -89,13 +89,16 @@ if ($op eq "action") { my @tags = $input->param('tag'); my @subfields = $input->param('subfield'); my @values = $input->param('field_value'); + my @disabled = $input->param('disable_input'); # build indicator hash. my @ind_tag = $input->param('ind_tag'); my @indicator = $input->param('indicator'); # Is there something to modify ? # TODO : We shall use this var to warn the user in case no modification was done to the items - my $something_to_modify = scalar(grep {!/^$/} @values); + my $values_to_modify = scalar(grep {!/^$/} @values); + my $values_to_blank = scalar(@disabled); + my $marcitem; # Once the job is done if ($completedJobID) { @@ -114,8 +117,8 @@ if ($op eq "action") { # Calling the template add_saved_job_results_to_template($template, $completedJobID); - # While the job is getting done } else { + # While the job is getting done # Job size is the number of items we have to process my $job_size = scalar(@itemnumbers); @@ -128,6 +131,24 @@ if ($op eq "action") { $callback = progress_callback($job, $dbh); } + #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'); + } + if ($values_to_blank){ + foreach my $disabledsubf (@disabled){ + if ($marcitem && $marcitem->field($itemtagfield)){ + $marcitem->field($itemtagfield)->update( $disabledsubf => "" ); + } + else { + $marcitem = MARC::Record->new(); + $marcitem->append_fields( MARC::Field->new( $itemtagfield, '', '', $disabledsubf => "" ) ); + } + } + } + # For each item my $i = 1; foreach my $itemnumber(@itemnumbers){ @@ -140,16 +161,19 @@ if ($op eq "action") { $deleted_items++; } else { $not_deleted_items++; - push @not_deleted, { biblionumber => $itemdata->{'biblionumber'}, itemnumber => $itemdata->{'itemnumber'}, barcode => $itemdata->{'barcode'}, title => $itemdata->{'title'}, $return => 1 }; + push @not_deleted, + { biblionumber => $itemdata->{'biblionumber'}, + itemnumber => $itemdata->{'itemnumber'}, + barcode => $itemdata->{'barcode'}, + title => $itemdata->{'title'}, + $return => 1 + }; } } else { - if ($something_to_modify) { - my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM'); - my $marcitem = MARC::Record::new_from_xml($xml, 'UTF-8'); - my $localitem = TransformMarcToKoha( $dbh, $marcitem, "", 'items' ); - my $localmarcitem=Item2Marc($itemdata); - UpdateMarcWith($marcitem,$localmarcitem); - eval{my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItemFromMarc($localmarcitem,$itemdata->{biblionumber},$itemnumber)}; + if ($values_to_modify || $values_to_blank) { + my $localmarcitem = Item2Marc($itemdata); + UpdateMarcWith( $marcitem, $localmarcitem ); + eval{ my ( $oldbiblionumber, $oldbibnum, $oldbibitemnum ) = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) }; } } $i++; @@ -505,7 +529,12 @@ sub UpdateMarcWith { my @fields_to=$marcto->field($itemtag); foreach my $subfield ($fieldfrom->subfields()){ foreach my $field_to_update (@fields_to){ - $field_to_update->update($$subfield[0]=>$$subfield[1]) if ($$subfield[1] != '' or $$subfield[1] == '0'); + if ($subfield->[1]){ + $field_to_update->update($subfield->[0]=>$subfield->[1]); + } + else { + $field_to_update->delete_subfield(code=> $subfield->[0]); + } } } #warn "TO edited:",$marcto->as_formatted; -- 1.7.4.1