[Koha-patches] [PATCH] Bug #6068 - New feature: capability to blanking subfields in BatchMod
Alex Arnaud
alex.arnaud at biblibre.com
Wed Apr 6 11:22:42 CEST 2011
---
.../prog/en/modules/tools/batchMod-edit.tmpl | 22 ++++++++
tools/batchMod.pl | 51 +++++++++++++++----
2 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tmpl
index 1d6216a..a4d07f8 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tmpl
@@ -15,6 +15,26 @@ var allColumns = new Array(<!-- TMPL_LOOP NAME="item_header_loop" -->'<!-- TMPL_
for( x=0; x<allColumns.length; x++ ){
allColumns[x] = Number(allColumns[x]) + 2;
}
+$("#itemst").tablesorter({ widgets : ['zebra'], headers: {0:{sorter: false}} });
+$("#selectallbutton").click(function() {
+ $("#itemst").find("input:checkbox").each(function() {
+ $(this).attr("checked", true);
+ });
+});
+$("#clearallbutton").click(function() {
+ $("#itemst").find("input:checkbox").each(function() {
+ $(this).attr("checked", false);
+ });
+});
+$("input[name='disable_input']").click(function() {
+ if ($(this).is(":checked")){
+ $(this).val($(this).siblings("[name='subfield']").val());
+ $(this).siblings().attr('disabled',true);
+ }
+ else {
+ $(this).siblings().removeAttr('disabled');
+ }
+});
//]]>
</script>
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/js/pages/batchMod.js"></script>
@@ -117,6 +137,7 @@ for( x=0; x<allColumns.length; x++ ){
<div id="cataloguing_additem_newitem">
<h2>Edit Items</h2>
+ <div class="hint">Checking the box right next the subfield label will disable the entry and delete the values of that subfield on all selected items</div>
<fieldset class="rows">
<ol>
<!-- TMPL_LOOP NAME="item" -->
@@ -126,6 +147,7 @@ for( x=0; x<allColumns.length; x++ ){
<!-- TMPL_VAR NAME="marc_lib" -->
<!-- TMPL_IF name="mandatory" --> *</b><!-- /TMPL_IF -->
</label>
+ <input type="checkbox" title="check to delete subfield <!-- TMPL_VAR NAME="subfield" -->" name="disable_input" value="<!-- TMPL_VAR NAME="subfield" -->" />
<!-- TMPL_VAR NAME="marc_value" -->
<input type="hidden" name="tag" value="<!-- TMPL_VAR NAME="tag" -->" />
<input type="hidden" name="subfield" value="<!-- TMPL_VAR NAME="subfield" -->" />
diff --git a/tools/batchMod.pl b/tools/batchMod.pl
index d9a0b76..27a0ce3 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.6.3.3
More information about the Koha-patches
mailing list