Bug 27526: Fix PrefillItem

We are basically adding:
  $current_item = $item->unblessed;

Other changes are for readability

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Jonathan Druart 2021-07-09 09:24:19 +02:00
parent 6ed29bccef
commit 9d6fc598a4

View file

@ -331,6 +331,26 @@ sub generate_subfield_form {
return \%subfield_data;
}
sub get_item_from_cookie {
my ( $input ) = @_;
my $item_from_cookie;
my $lastitemcookie = $input->cookie('LastCreatedItem');
if ($lastitemcookie) {
$lastitemcookie = decode_base64url($lastitemcookie);
eval {
if ( thaw($lastitemcookie) ) {
$item_from_cookie = thaw($lastitemcookie);
}
};
if ($@) {
$lastitemcookie ||= 'undef';
warn "Storable::thaw failed to thaw LastCreatedItem-cookie. Cookie value '".encode_base64url($lastitemcookie)."'. Caught error follows: '$@'";
}
}
return $item_from_cookie;
}
my $input = CGI->new;
my $error = $input->param('error');
@ -399,22 +419,6 @@ my @errors; # store errors found while checking data BEFORE saving item.
# Getting last created item cookie
my $prefillitem = C4::Context->preference('PrefillItem');
my $item_from_cookie;
if ($prefillitem) {
my $lastitemcookie = $input->cookie('LastCreatedItem');
if ($lastitemcookie) {
$lastitemcookie = decode_base64url($lastitemcookie);
eval {
if ( thaw($lastitemcookie) ) {
$item_from_cookie = thaw($lastitemcookie);
}
};
if ($@) {
$lastitemcookie = 'undef' unless $lastitemcookie;
warn "Storable::thaw failed to thaw LastCreatedItem-cookie. Cookie value '".encode_base64url($lastitemcookie)."'. Caught error follows: '$@'";
}
}
}
#-------------------------------------------------------------------------------
if ($op eq "additem") {
@ -476,10 +480,9 @@ if ($op eq "additem") {
# force the use of "add and duplicate" feature, so the form will be filled with
# correct values.
# FIXME This need to be rewritten, we must store $item->unblessed instead
# Pushing the last created item cookie back
if ( $prefillitem ) {
$item_from_cookie = $input->cookie(
my $last_created_item_cookie = $input->cookie(
-name => 'LastCreatedItem',
# We encode_base64url the whole freezed structure so we're sure we won't have any encoding problems
-value => encode_base64url( freeze( { %{$item->unblessed}, itemnumber => undef } ) ),
@ -487,7 +490,7 @@ if ($op eq "additem") {
-expires => ''
);
$cookie = [ $cookie, $item_from_cookie ];
$cookie = [ $cookie, $last_created_item_cookie ];
}
}
@ -497,6 +500,9 @@ if ($op eq "additem") {
# If we have to add & duplicate
if ($prefillitem) {
$current_item = $item->unblessed;
if (C4::Context->preference('autoBarcode') eq 'incremental') {
my ( $barcode ) = C4::Barcodes::ValueBuilder::incremental::get_barcode;
$current_item->{barcode} = $barcode;
@ -794,11 +800,13 @@ for my $library ( @$libraries ) {
# Using last created item if it exists
$current_item = $item_from_cookie
if $item_from_cookie
&& $prefillitem
if ( $prefillitem
&& $op ne "additem"
&& $op ne "edititem";
&& $op ne "edititem" )
{
my $item_from_cookie = get_item_from_cookie($input);
$current_item = $item_from_cookie if $item_from_cookie;
}
my @subfields_to_prefill = split ' ', C4::Context->preference('SubfieldsToUseWhenPrefill');