Bug 18376 - authority framework creation fails under Plack

With plack, when creating a new authority framework from another, you get the error :
Can't call method "prepare" on an undefined value at (...)/src/admin/auth_tag_structure.pl line 267.

Looks like plack does not like when the var $dbh from the script is called inside a sub.

This patch adds a local var $dbh inside sub duplicate_auth_framework(), like in sub StringSearch().

Also correctes a redefine of my $sth.

Test plan:
- Go to Administration > Authority types
- Create a new type
- On this new type click on Actions > MARC Structure
- Select another type and click OK
=> You must get a table filled with the tag structure
Check with and without plack
You may not be able to reproduce the error with plack.

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Fridolin Somers 2017-04-04 14:17:15 +02:00 committed by Kyle M Hall
parent 4c631a0824
commit 6a82ff4b89

View file

@ -160,10 +160,10 @@ if ($op eq 'add_form') {
# called by delete_confirm, used to effectively confirm deletion of data in DB
} elsif ($op eq 'delete_confirmed') {
unless (C4::Context->config('demo') eq 1) {
my $sth = $dbh->prepare("delete from auth_tag_structure where tagfield=? and authtypecode=?");
$sth->execute($searchfield,$authtypecode);
my $sth = $dbh->prepare("delete from auth_subfield_structure where tagfield=? and authtypecode=?");
$sth->execute($searchfield,$authtypecode);
my $sth_tag = $dbh->prepare("delete from auth_tag_structure where tagfield=? and authtypecode=?");
$sth_tag->execute($searchfield,$authtypecode);
my $sth_sub = $dbh->prepare("delete from auth_subfield_structure where tagfield=? and authtypecode=?");
$sth_sub->execute($searchfield,$authtypecode);
}
my $tagfield = $input->param('tagfield');
print $input->redirect("/cgi-bin/koha/admin/auth_tag_structure.pl?searchfield=$tagfield&amp;authtypecode=$authtypecode");
@ -248,6 +248,7 @@ sub StringSearch {
sub duplicate_auth_framework {
my ($newauthtype,$oldauthtype) = @_;
# warn "TO $newauthtype FROM $oldauthtype";
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory,authorised_value from auth_tag_structure where authtypecode=?");
$sth->execute($oldauthtype);
my $sth_insert = $dbh->prepare("insert into auth_tag_structure (tagfield, liblibrarian, libopac, repeatable, mandatory, authorised_value, authtypecode) values (?,?,?,?,?,?,?)");