@@ -, +, @@ --- admin/itemtypes.pl | 331 ++++-------- .../prog/en/modules/admin/itemtypes.tt | 576 +++++++++++---------- 2 files changed, 407 insertions(+), 500 deletions(-) --- a/admin/itemtypes.pl +++ a/admin/itemtypes.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl # Copyright 2000-2002 Katipo Communications +# Copyright 2002 Paul Poulain # # This file is part of Koha. # @@ -19,32 +20,11 @@ =head1 admin/itemtypes.pl -script to administer the categories table -written 20/02/2002 by paul.poulain@free.fr - This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) - - ALGO : - this script use an $op to know what to do. - if $op is empty or none of the above values, - - the default screen is build (with all records, or filtered datas). - - the user can clic on add, modify or delete record. - if $op=add_form - - if primkey exists, this is a modification,so we read the $primkey record - - builds the add/modify form - if $op=add_validate - - the user has just send datas, so we create/modify the record - if $op=delete_form - - we show the record having primkey=$primkey and ask for deletion validation form - if $op=delete_confirm - - we delete the record having primkey=$primkey - =cut -use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; use CGI qw ( -utf8 ); -use List::Util qw/min/; use File::Spec; use C4::Koha; @@ -52,18 +32,17 @@ use C4::Context; use C4::Auth; use C4::Output; +use Koha::ItemTypes; use Koha::Localizations; -my $input = new CGI; -my $searchfield = $input->param('description'); -my $script_name = "/cgi-bin/koha/admin/itemtypes.pl"; -my $itemtype = $input->param('itemtype'); -my $op = $input->param('op') // 'list'; +my $input = new CGI; +my $searchfield = $input->param('description'); +my $itemtype_code = $input->param('itemtype'); +my $op = $input->param('op') // 'list'; my @messages; -$searchfield =~ s/\,//g; +$searchfield =~ s/\,//g if $searchfield; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { - template_name => "admin/itemtypes.tt", + { template_name => "admin/itemtypes.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -72,228 +51,130 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( } ); -$template->param(script_name => $script_name); -if ($op) { - $template->param($op => 1); # we show only the TMPL_VAR names $op -} - my $dbh = C4::Context->dbh; my $sip_media_type = $input->param('sip_media_type'); undef($sip_media_type) if defined($sip_media_type) and $sip_media_type =~ /^\s*$/; -################## ADD_FORM ################################## -# called by default. Used to create form to add or modify a record if ( $op eq 'add_form' ) { - #---- if primkey exists, it's a modify action, so read values to modify... - my $data; - if ($itemtype) { - my $sth = $dbh->prepare(q| - SELECT - itemtypes.itemtype, - itemtypes.description, - itemtypes.rentalcharge, - itemtypes.notforloan, - itemtypes.imageurl, - itemtypes.summary, - itemtypes.checkinmsg, - itemtypes.checkinmsgtype, - itemtypes.sip_media_type, - itemtypes.hideinopac, - itemtypes.searchcategory, - COALESCE( localization.translation, itemtypes.description ) AS translated_description - FROM itemtypes - LEFT JOIN localization ON itemtypes.itemtype = localization.code - AND localization.entity='itemtypes' - AND localization.lang = ? - WHERE itemtype = ? - |); - my $language = C4::Languages::getlanguage(); - $sth->execute($language, $itemtype); - $data = $sth->fetchrow_hashref; - } - - my $imagesets = C4::Koha::getImageSets( checked => $data->{'imageurl'} ); - - my $remote_image = undef; - if ( defined $data->{imageurl} and $data->{imageurl} =~ /^http/i ) { - $remote_image = $data->{imageurl}; - } - - my $searchcategory = GetAuthorisedValues("ITEMTYPECAT", $data->{'searchcategory'}); - + my $itemtype = Koha::ItemTypes->find($itemtype_code); + my $imagesets = C4::Koha::getImageSets( checked => ( $itemtype ? $itemtype->imageurl : undef ) ); + my $searchcategory = GetAuthorisedValues("ITEMTYPECAT", ( $itemtype ? $itemtype->searchcategory : '' ) ); $template->param( - itemtype => $itemtype, - description => $data->{'description'}, - rentalcharge => sprintf( "%.2f", $data->{'rentalcharge'} ), - notforloan => $data->{'notforloan'}, - imageurl => $data->{'imageurl'}, - template => C4::Context->preference('template'), - summary => $data->{summary}, - checkinmsg => $data->{'checkinmsg'}, - checkinmsgtype => $data->{'checkinmsgtype'}, - imagesets => $imagesets, - remote_image => $remote_image, - sip_media_type => $data->{sip_media_type}, - hideinopac => $data->{'hideinopac'}, - searchcategory => $searchcategory, + itemtype => $itemtype, + imagesets => $imagesets, + searchcategory => $searchcategory, ); - - # END $OP eq ADD_FORM -################## ADD_VALIDATE ################################## - # called by add_form, used to insert/modify data in DB -} -elsif ( $op eq 'add_validate' ) { - my $is_a_modif = $input->param('is_a_modif'); - my ( $already_exists ) = $dbh->selectrow_array(q| - SELECT itemtype - FROM itemtypes - WHERE itemtype = ? - |, undef, $itemtype ); - if ( $already_exists and $is_a_modif ) { # it's a modification - my $query2 = ' - UPDATE itemtypes - SET description = ? - , rentalcharge = ? - , notforloan = ? - , imageurl = ? - , summary = ? - , checkinmsg = ? - , checkinmsgtype = ? - , sip_media_type = ? - , hideinopac = ? - , searchcategory = ? - WHERE itemtype = ? - '; - my $sth = $dbh->prepare($query2); - $sth->execute( - $input->param('description'), - $input->param('rentalcharge'), - ( $input->param('notforloan') ? 1 : 0 ), - ( - $input->param('image') eq 'removeImage' ? '' : ( - $input->param('image') eq 'remoteImage' - ? $input->param('remoteImage') - : $input->param('image') . "" - ) - ), - $input->param('summary'), - $input->param('checkinmsg'), - $input->param('checkinmsgtype'), - $sip_media_type, - $input->param('hideinopac') ? 1 : 0, - $input->param('searchcategory'), - $input->param('itemtype') - ); - } - elsif ( not $already_exists and not $is_a_modif ) { - my $query = " - INSERT INTO itemtypes - (itemtype,description,rentalcharge, notforloan, imageurl, summary, checkinmsg, checkinmsgtype, sip_media_type, hideinopac, searchcategory) - VALUES - (?,?,?,?,?,?,?,?,?,?,?); - "; - my $sth = $dbh->prepare($query); - my $image = $input->param('image'); - $sth->execute( - $input->param('itemtype'), - $input->param('description'), - $input->param('rentalcharge'), - $input->param('notforloan') ? 1 : 0, - $image eq 'removeImage' ? '' : - $image eq 'remoteImage' ? $input->param('remoteImage') : - $image, - $input->param('summary'), - $input->param('checkinmsg'), - $input->param('checkinmsgtype'), - $sip_media_type, - $input->param('hideinopac') ? 1 : 0, - $input->param('searchcategory'), +} elsif ( $op eq 'add_validate' ) { + my $is_a_modif = $input->param('is_a_modif'); + my $itemtype = Koha::ItemTypes->find($itemtype_code); + my $description = $input->param('description'); + my $rentalcharge = $input->param('rentalcharge'); + my $image = $input->param('image') || q||; + + my $notforloan = $input->param('notforloan') ? 1 : 0; + my $imageurl = + $image eq 'removeImage' ? '' + : ( + $image eq 'remoteImage' ? $input->param('remoteImage') + : $image + ); + my $summary = $input->param('summary'); + my $checkinmsg = $input->param('checkinmsg'); + my $checkinmsgtype = $input->param('checkinmsgtype'); + my $hideinopac = $input->param('hideinopac') // 0; + my $searchcategory = $input->param('searchcategory'); + + if ( $itemtype and $is_a_modif ) { # it's a modification + $itemtype->description($description); + $itemtype->rentalcharge($rentalcharge); + $itemtype->notforloan($notforloan); + $itemtype->imageurl($imageurl); + $itemtype->summary($summary); + $itemtype->checkinmsg($checkinmsg); + $itemtype->checkinmsgtype($checkinmsgtype); + $itemtype->sip_media_type($sip_media_type); + $itemtype->hideinopac($hideinopac); + $itemtype->searchcategory($searchcategory); + + eval { $itemtype->store; }; + + if ($@) { + push @messages, { type => 'error', code => 'error_on_update' }; + } else { + push @messages, { type => 'message', code => 'success_on_update' }; + } + } elsif ( not $itemtype and not $is_a_modif ) { + my $itemtype = Koha::ItemType->new( + { itemtype => $itemtype_code, + description => $description, + rentalcharge => $rentalcharge, + notforloan => $notforloan, + imageurl => $imageurl, + summary => $summary, + checkinmsg => $checkinmsg, + checkinmsgtype => $checkinmsgtype, + sip_media_type => $sip_media_type, + hideinopac => $hideinopac, + searchcategory => $searchcategory, + } ); - } - else { - push @messages, { - type => 'error', + eval { $itemtype->store; }; + + if ($@) { + push @messages, { type => 'error', code => 'error_on_insert' }; + } else { + push @messages, { type => 'message', code => 'success_on_insert' }; + } + } else { + push @messages, + { type => 'error', code => 'already_exists', - }; + }; } $searchfield = ''; - $op = 'list'; - # END $OP eq ADD_VALIDATE -################## DELETE_CONFIRM ################################## - # called by default form, used to confirm deletion of data in DB -} -elsif ( $op eq 'delete_confirm' ) { + $op = 'list'; +} elsif ( $op eq 'delete_confirm' ) { + # Check both items and biblioitems - my $sth = $dbh->prepare(' + my ($total) = $dbh->selectrow_array( ' SELECT COUNT(*) AS total FROM ( SELECT itemtype AS t FROM biblioitems UNION ALL SELECT itype AS t FROM items ) AS tmp WHERE tmp.t=? - '); - $sth->execute($itemtype); - my $total = $sth->fetchrow_hashref->{'total'}; + ', {}, $itemtype_code ); + + if ($total) { + push @messages, { type => 'error', code => 'cannot_be_deleted', total => $total }; + $op = 'list'; + } else { + my $itemtype = Koha::ItemTypes->find($itemtype_code); + $template->param( itemtype => $itemtype, ); + } - my $sth = - $dbh->prepare( -"select itemtype,description,rentalcharge from itemtypes where itemtype=?" - ); - $sth->execute($itemtype); - my $data = $sth->fetchrow_hashref; - $template->param( - itemtype => $itemtype, - description => $data->{description}, - rentalcharge => sprintf( "%.2f", $data->{rentalcharge} ), - imageurl => $data->{imageurl}, - total => $total - ); +} elsif ( $op eq 'delete_confirmed' ) { + my $itemtype = Koha::ItemTypes->find($itemtype_code); + my $deleted = eval { $itemtype->delete }; + if ( $@ or not $deleted ) { + push @messages, { type => 'error', code => 'error_on_delete' }; + } else { + push @messages, { type => 'message', code => 'success_on_delete' }; + } - # END $OP eq DELETE_CONFIRM -################## DELETE_CONFIRMED ################################## - # called by delete_confirm, used to effectively confirm deletion of data in DB -} -elsif ( $op eq 'delete_confirmed' ) { - my $itemtype = uc( $input->param('itemtype') ); - my $sth = $dbh->prepare("delete from itemtypes where itemtype=?"); - $sth->execute($itemtype); - $sth = $dbh->prepare("delete from issuingrules where itemtype=?"); - $sth->execute($itemtype); - print $input->redirect('itemtypes.pl'); - exit; - # END $OP eq DELETE_CONFIRMED -################## DEFAULT ################################## + $op = 'list'; } if ( $op eq 'list' ) { - my $results = C4::Koha::GetItemTypes( style => 'array' ); - my @loop; - foreach my $itemtype ( @{$results} ) { - $itemtype->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtype->{imageurl} ); - $itemtype->{rentalcharge} = sprintf( '%.2f', $itemtype->{rentalcharge} ); - - my @translated_descriptions = Koha::Localizations->search( - { entity => 'itemtypes', - code => $itemtype->{itemtype}, - } - ); - $itemtype->{translated_descriptions} = [ map { - { - lang => $_->lang, - translation => $_->translation, - } - } @translated_descriptions ]; - - push( @loop, $itemtype ); - } - + my $itemtypes = Koha::ItemTypes->search; $template->param( - loop => \@loop, - else => 1, - messages => \@messages, + itemtypes => $itemtypes, + messages => \@messages, ); } +$template->param( op => $op ); + output_html_with_http_headers $input, $cookie, $template->output; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt @@ -1,20 +1,22 @@ +[% USE Koha %] [% USE AuthorisedValues %] +[% USE Price %] [% INCLUDE 'doc-head-open.inc' %] -Koha › Administration › Item types [% IF ( add_form ) %]› +<title>Koha › Administration › Item types [% IF op == 'add_form' %]› [% IF ( itemtype ) %] -Modify item type '[% itemtype %]' +Modify item type '[% itemtype.itemtype %]' [% ELSE %] Add item type [% END %] [% END %] -[% IF ( delete_confirm ) %]› +[% IF op == 'delete_confirm' %]› [% IF ( total ) %] -Cannot delete item type '[% itemtype %]' +Cannot delete item type '[% itemtype.itemtype %]' [% ELSE %] -Delete item type '[% itemtype %]'? +Delete item type '[% itemtype.itemtype %]'? [% END %] [% END %] -[% IF ( delete_confirmed ) %]› +[% IF op == 'delete_confirmed' %]› Data deleted [% END %] @@ -55,312 +57,336 @@ Data deleted [% INCLUDE 'header.inc' %] [% INCLUDE 'cat-search.inc' %] -