From 80094743d318bec29b57111727439bf1dd3cb43e Mon Sep 17 00:00:00 2001 From: LMSCloudPaulD Date: Thu, 22 Dec 2022 14:38:54 +0100 Subject: [PATCH] Bug 32418 - Can't call method 'unblessed' on an undefined value at cataloguing/additem.pl Check whether the current op is edititem or dupeitem and if so check whether the itemnumber supplied as a query param actually exists. If it doesn't, redirect to the additem op and hide all UI elements except for a dialog that gives options to add a new item to the record or to view the records holdings. This behaviour was adapted from the addbiblio view, as suggested by Fridolin. To test: 1. Go to any record 2. Hit the edit button on an item in the holdings table 3. Modify the URL so that the query param for the itemnumber is either 3.1 empty: /cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=384&itemnumber= 3.2 an itemnumber that doesn't exist: /cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=384&itemnumber=9999999999 3.3 whatever else you come up with.. 4. Check the same thing for the dupe option (op=dupeitem) 5. Sign off --- cataloguing/additem.pl | 33 ++++++++++++------- .../prog/en/modules/cataloguing/additem.tt | 15 ++++++++- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index ed31390663..d180823d45 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -156,6 +156,13 @@ my ($template, $loggedinuser, $cookie) flagsrequired => {editcatalogue => $userflags}, }); +if ( $op eq "edititem" || $op eq "dupeitem" ) { + my $item = Koha::Items->find($itemnumber); + if ( !$item ) { + $itemnumber = undef; + $template->param( item_doesnt_exist => 1 ); + } +} # Does the user have a restricted item editing permission? my $uid = Koha::Patrons->find( $loggedinuser )->userid; @@ -462,21 +469,25 @@ if ($op eq "additem") { } elsif ($op eq "edititem") { #------------------------------------------------------------------------------- # retrieve item if exist => then, it's a modif - $current_item = Koha::Items->find($itemnumber)->unblessed; - # FIXME Handle non existent item - $nextop = "saveitem"; + $nextop = "additem"; + if ($itemnumber) { + $current_item = Koha::Items->find($itemnumber)->unblessed; + $nextop = "saveitem"; + } #------------------------------------------------------------------------------- } elsif ($op eq "dupeitem") { #------------------------------------------------------------------------------- # retrieve item if exist => then, it's a modif - $current_item = Koha::Items->find($itemnumber)->unblessed; - # FIXME Handle non existent item - if (C4::Context->preference('autoBarcode') eq 'incremental') { - my ( $barcode ) = C4::Barcodes::ValueBuilder::incremental::get_barcode; - $current_item->{barcode} = $barcode; - } - else { - $current_item->{barcode} = undef; # Don't save it! + if ($itemnumber) { + $current_item = Koha::Items->find($itemnumber)->unblessed; + if ( C4::Context->preference('autoBarcode') eq 'incremental' ) { + my ($barcode) = + C4::Barcodes::ValueBuilder::incremental::get_barcode; + $current_item->{barcode} = $barcode; + } + else { + $current_item->{barcode} = undef; # Don't save it! + } } $nextop = "additem"; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt index e9a512c60e..7a6f88a1ac 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt @@ -25,7 +25,14 @@ [% INCLUDE 'str/cataloging_additem.inc' %] [% Asset.js("js/cataloging_additem.js") | $raw %] @@ -70,6 +77,12 @@ [% IF ( linked_analytics ) %]
Cannot delete: item has linked analytics..
[% END %] [% IF last_item_for_hold %]
Cannot delete: Last item for bibliographic record with biblio-level hold on it.
[% END %] [% IF item_not_found %]
Cannot delete: Item not found.
[% END %] +[% IF item_doesnt_exist %] +
+The item you are trying to access doesn't exist.
+Add a new item or go to the records holdings. +
+[% END %]
[% IF items %] -- 2.34.1