X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fitemtypes.pl;h=d397fee4f957c20f3aff17a4c1aaa84d280d1f00;hb=7df5b35a36e859f745f42b5c857cd965c83b55f3;hp=9f0395cdbc0f32fdae9e1af4bb0c0876d7b8d61a;hpb=7f555830aa8c349e0b52e3b52058e9641e8db09c;p=koha.git diff --git a/admin/itemtypes.pl b/admin/itemtypes.pl index 9f0395cdbc..d397fee4f9 100755 --- a/admin/itemtypes.pl +++ b/admin/itemtypes.pl @@ -1,259 +1,180 @@ #!/usr/bin/perl # Copyright 2000-2002 Katipo Communications +# Copyright 2002 Paul Poulain # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =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 CGI; +use Modern::Perl; +use CGI qw ( -utf8 ); -use List::Util qw/min/; use File::Spec; use C4::Koha; use C4::Context; use C4::Auth; use C4::Output; - -sub StringSearch { - my ( $searchstring, $type ) = @_; - my $dbh = C4::Context->dbh; - $searchstring =~ s/\'/\\\'/g; - my @data = split( ' ', $searchstring ); - my $sth = $dbh->prepare( - "SELECT * FROM itemtypes WHERE (description LIKE ?) ORDER BY itemtype" - ); - $sth->execute("$data[0]%"); - return $sth->fetchall_arrayref({}); # return ref-to-array of ref-to-hashes - # like [ fetchrow_hashref(), fetchrow_hashref() ... ] -} - -my $input = new CGI; -my $searchfield = $input->param('description'); -my $script_name = "/cgi-bin/koha/admin/itemtypes.pl"; -my $itemtype = $input->param('itemtype'); -my $pagesize = 10; -my $op = $input->param('op'); -$searchfield =~ s/\,//g; +use Koha::ItemTypes; +use Koha::ItemType; +use Koha::Localizations; + +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 if $searchfield; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { - template_name => "admin/itemtypes.tmpl", + { template_name => "admin/itemtypes.tt", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { parameters => 1 }, + flagsrequired => { parameters => 'manage_itemtypes' }, debug => 1, } ); -$template->param(script_name => $script_name); -if ($op) { - $template->param($op => 1); # we show only the TMPL_VAR names $op -} else { - $template->param(else => 1); -} - my $dbh = C4::Context->dbh; -################## 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("select * from itemtypes where itemtype=?"); - $sth->execute($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 $sip_media_type = $input->param('sip_media_type'); +undef($sip_media_type) if defined($sip_media_type) and $sip_media_type =~ /^\s*$/; +if ( $op eq 'add_form' ) { + my $itemtype = Koha::ItemTypes->find($itemtype_code); + my $imagesets = C4::Koha::getImageSets( checked => ( $itemtype ? $itemtype->imageurl : undef ) ); + my $searchcategory = GetAuthorisedValues("ITEMTYPECAT"); + my $translated_languages = C4::Languages::getTranslatedLanguages( undef , C4::Context->preference('template') ); $template->param( - itemtype => $itemtype, - description => $data->{'description'}, - renewalsallowed => $data->{'renewalsallowed'}, - rentalcharge => sprintf( "%.2f", $data->{'rentalcharge'} ), - notforloan => $data->{'notforloan'}, - imageurl => $data->{'imageurl'}, - template => C4::Context->preference('template'), - summary => $data->{summary}, - imagesets => $imagesets, - remote_image => $remote_image, + itemtype => $itemtype, + imagesets => $imagesets, + searchcategory => $searchcategory, + can_be_translated => ( scalar(@$translated_languages) > 1 ? 1 : 0 ), ); - - # END $OP eq ADD_FORM -################## ADD_VALIDATE ################################## - # called by add_form, used to insert/modify data in DB -} -elsif ( $op eq 'add_validate' ) { - my $query = " - SELECT itemtype - FROM itemtypes - WHERE itemtype = ? - "; - my $sth = $dbh->prepare($query); - $sth->execute($itemtype); - if ( $sth->fetchrow ) { # it's a modification - my $query2 = ' - UPDATE itemtypes - SET description = ? - , renewalsallowed = ? - , rentalcharge = ? - , notforloan = ? - , imageurl = ? - , summary = ? - WHERE itemtype = ? - '; - $sth = $dbh->prepare($query2); - $sth->execute( - $input->param('description'), - $input->param('renewalsallowed'), - $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('itemtype') +} 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 $defaultreplacecost = $input->param('defaultreplacecost'); + my $processfee = $input->param('processfee'); + 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->defaultreplacecost($defaultreplacecost); + $itemtype->processfee($processfee); + $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, + defaultreplacecost => $defaultreplacecost, + processfee => $processfee, + notforloan => $notforloan, + imageurl => $imageurl, + summary => $summary, + checkinmsg => $checkinmsg, + checkinmsgtype => $checkinmsgtype, + sip_media_type => $sip_media_type, + hideinopac => $hideinopac, + searchcategory => $searchcategory, + } ); + 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', + }; } - else { # add a new itemtype & not modif an old - my $query = " - INSERT INTO itemtypes - (itemtype,description,renewalsallowed,rentalcharge, notforloan, imageurl,summary) - VALUES - (?,?,?,?,?,?,?); - "; - my $sth = $dbh->prepare($query); - my $image = $input->param('image'); - $sth->execute( - $input->param('itemtype'), - $input->param('description'), - $input->param('renewalsallowed'), - $input->param('rentalcharge'), - $input->param('notforloan') ? 1 : 0, - $image eq 'removeImage' ? '' : - $image eq 'remoteImage' ? $input->param('remoteImage') : - $image, - $input->param('summary'), - ); + + $searchfield = ''; + $op = 'list'; + + } elsif ( $op eq 'delete_confirm' ) { + my $itemtype = Koha::ItemTypes->find($itemtype_code); + my $can_be_deleted = $itemtype->can_be_deleted(); + if ($can_be_deleted == 0) { + push @messages, { type => 'error', code => 'cannot_be_deleted'}; + $op = 'list'; + } else { + $template->param( itemtype => $itemtype, ); } - print $input->redirect('itemtypes.pl'); - exit; +} elsif ( $op eq 'delete_confirmed' ) { - # END $OP eq ADD_VALIDATE -################## DELETE_CONFIRM ################################## - # called by default form, used to confirm deletion of data in DB -} -elsif ( $op eq 'delete_confirm' ) { - # Check both categoryitem and biblioitems, see Bug 199 - my $total = 0; - for my $table ('biblioitems') { - my $sth = - $dbh->prepare( - "select count(*) as total from $table where itemtype=?"); - $sth->execute($itemtype); - $total += $sth->fetchrow_hashref->{total}; + 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' }; } - my $sth = - $dbh->prepare( -"select itemtype,description,renewalsallowed,rentalcharge from itemtypes where itemtype=?" - ); - $sth->execute($itemtype); - my $data = $sth->fetchrow_hashref; - $template->param( - itemtype => $itemtype, - description => $data->{description}, - renewalsallowed => $data->{renewalsallowed}, - rentalcharge => sprintf( "%.2f", $data->{rentalcharge} ), - imageurl => $data->{imageurl}, - total => $total - ); - - # END $OP eq DELETE_CONFIRM -################## DELETE_CONFIRMED ################################## - # called by delete_confirm, used to effectively confirm deletion of data in DB + $op = 'list'; } -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 ################################## -} -else { # DEFAULT - my ($results) = StringSearch( $searchfield, 'web' ); - my $page = $input->param('page') || 1; - my $first = ( $page - 1 ) * $pagesize; - - # if we are on the last page, the number of the last word to display - # must not exceed the length of the results array - my $last = min( $first + $pagesize - 1, scalar @{$results} - 1, ); - my @loop; - foreach my $itemtype ( @{$results}[ $first .. $last ] ) { - $itemtype->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtype->{imageurl} ); - $itemtype->{rentalcharge} = sprintf( '%.2f', $itemtype->{rentalcharge} ); - push( @loop, $itemtype ); - } +if ( $op eq 'list' ) { + my $itemtypes = Koha::ItemTypes->search; $template->param( - loop => \@loop, - pagination_bar => pagination_bar( - $script_name, getnbpages( scalar @{$results}, $pagesize ), - $page, 'page' - ) + itemtypes => $itemtypes, + messages => \@messages, ); -} #---- END $OP eq DEFAULT +} + +$template->param( op => $op ); output_html_with_http_headers $input, $cookie, $template->output;