|
Lines 27-33
use C4::Biblio;
Link Here
|
| 27 |
use C4::Items; |
27 |
use C4::Items; |
| 28 |
use C4::Context; |
28 |
use C4::Context; |
| 29 |
use C4::Koha; # XXX subfield_is_koha_internal_p |
29 |
use C4::Koha; # XXX subfield_is_koha_internal_p |
| 30 |
use C4::Branch; # XXX subfield_is_koha_internal_p |
30 |
use C4::Branch; |
| 31 |
use C4::BackgroundJob; |
31 |
use C4::BackgroundJob; |
| 32 |
use C4::ClassSource; |
32 |
use C4::ClassSource; |
| 33 |
use C4::Dates; |
33 |
use C4::Dates; |
|
Lines 73-79
my $nextop="";
Link Here
|
| 73 |
my @errors; # store errors found while checking data BEFORE saving item. |
73 |
my @errors; # store errors found while checking data BEFORE saving item. |
| 74 |
my $items_display_hashref; |
74 |
my $items_display_hashref; |
| 75 |
my $frameworkcode=""; |
75 |
my $frameworkcode=""; |
| 76 |
my $tagslib = &GetMarcStructure(1,$frameworkcode); |
76 |
my $tagslib = &GetMarcStructure(1,''); |
| 77 |
|
77 |
|
| 78 |
my $deleted_items = 0; # Numbers of deleted items |
78 |
my $deleted_items = 0; # Numbers of deleted items |
| 79 |
my $not_deleted_items = 0; # Numbers of items that could not be deleted |
79 |
my $not_deleted_items = 0; # Numbers of items that could not be deleted |
|
Lines 82-87
my @not_deleted; # List of the itemnumbers that could not be deleted
Link Here
|
| 82 |
my %cookies = parse CGI::Cookie($cookie); |
82 |
my %cookies = parse CGI::Cookie($cookie); |
| 83 |
my $sessionID = $cookies{'CGISESSID'}->value; |
83 |
my $sessionID = $cookies{'CGISESSID'}->value; |
| 84 |
|
84 |
|
|
|
85 |
my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumber", ""); |
| 85 |
|
86 |
|
| 86 |
#--- ---------------------------------------------------------------------------- |
87 |
#--- ---------------------------------------------------------------------------- |
| 87 |
if ($op eq "action") { |
88 |
if ($op eq "action") { |
|
Lines 133-139
if ($op eq "action") {
Link Here
|
| 133 |
} |
134 |
} |
| 134 |
|
135 |
|
| 135 |
#initializing values for updates |
136 |
#initializing values for updates |
| 136 |
my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumber", ""); |
|
|
| 137 |
if ($values_to_modify){ |
137 |
if ($values_to_modify){ |
| 138 |
my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM'); |
138 |
my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM'); |
| 139 |
$marcitem = MARC::Record::new_from_xml($xml, 'UTF-8'); |
139 |
$marcitem = MARC::Record::new_from_xml($xml, 'UTF-8'); |
|
Lines 246-258
unshift (@$branches, $nochange_branch);
Link Here
|
| 246 |
|
246 |
|
| 247 |
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); |
247 |
my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); |
| 248 |
|
248 |
|
| 249 |
|
|
|
| 250 |
foreach my $tag (sort keys %{$tagslib}) { |
249 |
foreach my $tag (sort keys %{$tagslib}) { |
| 251 |
# loop through each subfield |
250 |
# loop through each subfield |
|
|
251 |
next if ($tag ne $itemtagfield); |
| 252 |
foreach my $subfield (sort keys %{$tagslib->{$tag}}) { |
252 |
foreach my $subfield (sort keys %{$tagslib->{$tag}}) { |
| 253 |
next if subfield_is_koha_internal_p($subfield); |
253 |
next if subfield_is_koha_internal_p($subfield); |
| 254 |
next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10"); |
254 |
#field disabled |
| 255 |
# barcode and stocknumber are not meant to be batch-modified |
255 |
next if (!defined ($tagslib->{$tag}->{$subfield}->{'tab'}) || $tagslib->{$tag}->{$subfield}->{'tab'} eq -1); |
| 256 |
next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode'; |
256 |
next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.barcode'; |
| 257 |
next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.stocknumber'; |
257 |
next if $tagslib->{$tag}->{$subfield}->{'kohafield'} eq 'items.stocknumber'; |
| 258 |
my %subfield_data; |
258 |
my %subfield_data; |
|
Lines 280-400
foreach my $tag (sort keys %{$tagslib}) {
Link Here
|
| 280 |
$value =~ s/MM/$month/g; |
280 |
$value =~ s/MM/$month/g; |
| 281 |
$value =~ s/DD/$day/g; |
281 |
$value =~ s/DD/$day/g; |
| 282 |
} |
282 |
} |
| 283 |
$subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4)); |
283 |
#$subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4)); |
| 284 |
# testing branch value if IndependantBranches. |
284 |
# testing branch value if IndependantBranches. |
| 285 |
|
285 |
|
| 286 |
my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" ); |
286 |
my $attributes_no_value; |
| 287 |
my $attributes = qq($attributes_no_value value="$value" ); |
287 |
my $not_editable = 0; |
|
|
288 |
|
| 289 |
my $attributes_no_value; |
| 290 |
my $not_editable = 0; |
| 291 |
# Disable barcode and stock numbers batch editing |
| 292 |
my @not_editable_koha_fields = ( 'items.barcode', 'items.stocknumber' ); |
| 293 |
foreach (@not_editable_koha_fields) { |
| 294 |
my ($bctag, $bcsubfield) = GetMarcFromKohaField($_, $frameworkcode); |
| 295 |
if (($bctag eq $subfield_data{tag}) && ($bcsubfield eq $subfield_data{subfield})) { |
| 296 |
$not_editable = 1; |
| 297 |
} |
| 298 |
|
| 299 |
} |
| 300 |
|
| 301 |
my $attributes; |
| 302 |
# If a field is found to be non-editable, |
| 303 |
if ($not_editable) { |
| 304 |
# We mark it as disabled, so the user won't be able to edit it |
| 305 |
$attributes_no_value = qq(disabled="disabled"); |
| 306 |
$attributes = $attributes_no_value; |
| 307 |
# We also remove it's data, so it won't be modified |
| 308 |
undef($subfield_data{tag}); |
| 309 |
undef($subfield_data{subfield}); |
| 310 |
} else { |
| 311 |
$attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" ); |
| 312 |
$attributes = qq($attributes_no_value value="$value" ); |
| 313 |
} |
| 288 |
|
314 |
|
| 289 |
if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { |
315 |
if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { |
| 290 |
my @authorised_values; |
316 |
my @authorised_values; |
| 291 |
my %authorised_lib; |
317 |
my %authorised_lib; |
| 292 |
# builds list, depending on authorised value... |
318 |
# builds list, depending on authorised value... |
| 293 |
|
319 |
my @not_editable_koha_fields = ( 'items.barcode', 'items.stocknumber' ); |
| 294 |
if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) { |
320 |
foreach (@not_editable_koha_fields) { |
| 295 |
foreach my $thisbranch (@$branches) { |
321 |
my ($bctag, $bcsubfield) = GetMarcFromKohaField($_, $frameworkcode); |
| 296 |
push @authorised_values, $thisbranch->{value}; |
322 |
if (($bctag eq $subfield_data{tag}) && ($bcsubfield eq $subfield_data{subfield})) { |
| 297 |
$authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname}; |
323 |
$not_editable = 1; |
| 298 |
} |
|
|
| 299 |
$value = ""; |
| 300 |
} |
| 301 |
elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { |
| 302 |
push @authorised_values, ""; |
| 303 |
my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description"); |
| 304 |
$sth->execute; |
| 305 |
while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { |
| 306 |
push @authorised_values, $itemtype; |
| 307 |
$authorised_lib{$itemtype} = $description; |
| 308 |
} |
| 309 |
$value = ""; |
| 310 |
|
| 311 |
#---- class_sources |
| 312 |
} |
| 313 |
elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) { |
| 314 |
push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); |
| 315 |
|
| 316 |
my $class_sources = GetClassSources(); |
| 317 |
my $default_source = C4::Context->preference("DefaultClassificationSource"); |
| 318 |
|
| 319 |
foreach my $class_source (sort keys %$class_sources) { |
| 320 |
next unless $class_sources->{$class_source}->{'used'} or |
| 321 |
($value and $class_source eq $value) or |
| 322 |
($class_source eq $default_source); |
| 323 |
push @authorised_values, $class_source; |
| 324 |
$authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; |
| 325 |
} |
324 |
} |
| 326 |
$value = ''; |
325 |
} |
|
|
326 |
elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { |
| 327 |
push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); |
| 328 |
my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description"); |
| 329 |
$sth->execute; |
| 330 |
while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { |
| 331 |
push @authorised_values, $itemtype; |
| 332 |
$authorised_lib{$itemtype} = $description; |
| 333 |
} |
| 327 |
|
334 |
|
| 328 |
#---- "true" authorised value |
335 |
#---- "true" authorised value |
| 329 |
} |
336 |
} |
| 330 |
else { |
337 |
elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) { |
| 331 |
push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); |
338 |
push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); |
| 332 |
$authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} ); |
339 |
|
| 333 |
while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { |
340 |
my $class_sources = GetClassSources(); |
| 334 |
push @authorised_values, $value; |
341 |
my $default_source = C4::Context->preference("DefaultClassificationSource"); |
| 335 |
$authorised_lib{$value} = $lib; |
342 |
|
|
|
343 |
foreach my $class_source (sort keys %$class_sources) { |
| 344 |
next unless $class_sources->{$class_source}->{'used'} or |
| 345 |
($value and $class_source eq $value) or |
| 346 |
($class_source eq $default_source); |
| 347 |
push @authorised_values, $class_source; |
| 348 |
$authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; |
| 349 |
} |
| 350 |
$value = $default_source unless ($value); |
| 351 |
|
| 352 |
#---- "true" authorised value |
| 336 |
} |
353 |
} |
| 337 |
} |
354 |
else { |
| 338 |
$subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list |
355 |
push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); |
| 339 |
-name => "field_value", |
356 |
$authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} ); |
| 340 |
-values => \@authorised_values, |
357 |
while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { |
| 341 |
-default => $value, |
358 |
push @authorised_values, $value; |
| 342 |
-labels => \%authorised_lib, |
359 |
$authorised_lib{$value} = $lib; |
| 343 |
-override => 1, |
360 |
} |
| 344 |
-size => 1, |
361 |
} |
| 345 |
-multiple => 0, |
362 |
$subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list |
| 346 |
-tabindex => 1, |
363 |
-name => "field_value", |
| 347 |
-id => "tag_".$tag."_subfield_".$subfield."_".$index_subfield, |
364 |
-values => \@authorised_values, |
| 348 |
-class => "input_marceditor", |
365 |
-default => $value, |
| 349 |
); |
366 |
-labels => \%authorised_lib, |
| 350 |
# it's a thesaurus / authority field |
367 |
-override => 1, |
| 351 |
} |
368 |
-size => 1, |
| 352 |
elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) { |
369 |
-multiple => 0, |
| 353 |
$subfield_data{marc_value} = "<input type=\"text\" $attributes /> |
370 |
-tabindex => 1, |
| 354 |
<a href=\"#\" class=\"buttonDot\" |
371 |
-id => "tag_".$tag."_subfield_".$subfield."_".$index_subfield, |
| 355 |
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> |
372 |
-class => "input_marceditor", |
| 356 |
"; |
373 |
); |
| 357 |
# it's a plugin field |
374 |
# it's a thesaurus / authority field |
| 358 |
} |
375 |
} |
| 359 |
elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) { |
376 |
elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) { |
| 360 |
# opening plugin |
377 |
$subfield_data{marc_value} = "<input type=\"text\" $attributes /> |
| 361 |
my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'}; |
378 |
<a href=\"#\" class=\"buttonDot\" |
| 362 |
if (do $plugin) { |
379 |
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> |
| 363 |
my $temp; |
380 |
"; |
| 364 |
my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data ); |
381 |
# it's a plugin field |
| 365 |
my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data ); |
382 |
} |
| 366 |
$subfield_data{marc_value} = qq[<input $attributes |
383 |
elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) { |
| 367 |
onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');" |
384 |
# opening plugin |
| 368 |
onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" /> |
385 |
my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'}; |
| 369 |
<a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a> |
386 |
if (do $plugin) { |
| 370 |
$javascript]; |
387 |
my $temp; |
|
|
388 |
my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data ); |
| 389 |
my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data ); |
| 390 |
$subfield_data{marc_value} = qq[<input $attributes |
| 391 |
onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');" |
| 392 |
onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" /> |
| 393 |
<a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a> |
| 394 |
$javascript]; |
| 395 |
} else { |
| 396 |
warn "Plugin Failed: $plugin"; |
| 397 |
$subfield_data{marc_value} = "<input $attributes />"; # supply default input form |
| 398 |
} |
| 399 |
} |
| 400 |
# Donot hide any field in edit |
| 401 |
# elsif ( $tag eq '' ) { # it's an hidden field |
| 402 |
# $subfield_data{marc_value} = qq(<input type="hidden" $attributes />); |
| 403 |
# } |
| 404 |
# elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? |
| 405 |
# $subfield_data{marc_value} = qq(<input type="hidden" $attributes />); |
| 406 |
# } |
| 407 |
elsif ( length($value) > 100 |
| 408 |
or (C4::Context->preference("marcflavour") eq "UNIMARC" and |
| 409 |
300 <= $tag && $tag < 400 && $subfield eq 'a' ) |
| 410 |
or (C4::Context->preference("marcflavour") eq "MARC21" and |
| 411 |
500 <= $tag && $tag < 600 ) |
| 412 |
) { |
| 413 |
# oversize field (textarea) |
| 414 |
$subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n"; |
| 371 |
} else { |
415 |
} else { |
| 372 |
warn "Plugin Failed: $plugin"; |
416 |
# it's a standard field |
| 373 |
$subfield_data{marc_value} = "<input $attributes />"; # supply default input form |
417 |
$subfield_data{marc_value} = "<input $attributes />"; |
| 374 |
} |
418 |
} |
|
|
419 |
# $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">"; |
| 420 |
push (@loop_data, \%subfield_data); |
| 421 |
$i++ |
| 375 |
} |
422 |
} |
| 376 |
elsif ( $tag eq '' ) { # it's an hidden field |
|
|
| 377 |
$subfield_data{marc_value} = qq(<input type="hidden" $attributes />); |
| 378 |
} |
| 379 |
elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) { # FIXME: shouldn't input type be "hidden" ? |
| 380 |
$subfield_data{marc_value} = qq(<input type="text" $attributes />); |
| 381 |
} |
| 382 |
elsif ( length($value) > 100 |
| 383 |
or (C4::Context->preference("marcflavour") eq "UNIMARC" and |
| 384 |
300 <= $tag && $tag < 400 && $subfield eq 'a' ) |
| 385 |
or (C4::Context->preference("marcflavour") eq "MARC21" and |
| 386 |
500 <= $tag && $tag < 600 ) |
| 387 |
) { |
| 388 |
# oversize field (textarea) |
| 389 |
$subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n"; |
| 390 |
} else { |
| 391 |
# it's a standard field |
| 392 |
$subfield_data{marc_value} = "<input $attributes />"; |
| 393 |
} |
| 394 |
# $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">"; |
| 395 |
push (@loop_data, \%subfield_data); |
| 396 |
$i++ |
| 397 |
} |
| 398 |
} # -- End foreach tag |
423 |
} # -- End foreach tag |
| 399 |
|
424 |
|
| 400 |
|
425 |
|
| 401 |
- |
|
|