#!/usr/bin/perl
+# NOTE: 4-character tabs
#script to administer the categories table
#written 20/02/2002 by paul.poulain@free.fr
use strict;
use CGI;
+use HTML::Template;
+use List::Util qw/min/;
+
+use C4::Koha;
use C4::Context;
use C4::Output;
use C4::Search;
use C4::Auth;
use C4::Interface::CGI::Output;
-use HTML::Template;
sub StringSearch {
my ($env,$searchstring,$type)=@_;
$searchstring=~ s/\'/\\\'/g;
my @data=split(' ',$searchstring);
my $count=@data;
- my $query="Select * from itemtypes where (description like \"$data[0]%\") order by itemtype";
- my $sth=$dbh->prepare($query);
- $sth->execute;
+ my $sth=$dbh->prepare("Select * from itemtypes where (description like ?) order by itemtype");
+ $sth->execute("$data[0]%");
my @results;
- my $cnt=0;
while (my $data=$sth->fetchrow_hashref){
push(@results,$data);
- $cnt ++;
}
# $sth->execute;
$sth->finish;
- return ($cnt,\@results);
+ return (scalar(@results),\@results);
}
my $input = new CGI;
my $searchfield=$input->param('description');
-my $offset=$input->param('offset');
my $script_name="/cgi-bin/koha/admin/itemtypes.pl";
my $itemtype=$input->param('itemtype');
-my $pagesize=20;
+my $pagesize=5;
my $op = $input->param('op');
$searchfield=~ s/\,//g;
my ($template, $borrowernumber, $cookie)
- = get_template_and_user({template_name => "parameters/itemtypes.tmpl",
+ = get_template_and_user({template_name => "admin/itemtypes.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
- flagsrequired => {parameters => 1},
+ flagsrequired => {parameters => 1, management => 1},
debug => 1,
});
my $data;
if ($itemtype) {
my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare("select itemtype,description,loanlength,renewalsallowed,rentalcharge from itemtypes where itemtype='$itemtype'");
- $sth->execute;
+ my $sth=$dbh->prepare("select * from itemtypes where itemtype=?");
+ $sth->execute($itemtype);
$data=$sth->fetchrow_hashref;
$sth->finish;
}
- $template->param(itemtype => $itemtype,
- description => $data->{'description'},
- loanlength => $data->{'loanlength'},
- renewalsallowed => $data->{'renewalsallowed'},
- rentalcharge => $data->{'rentalcharge'});
-;
+ # build list of images
+ my $imagedir_filesystem = getitemtypeimagedir();
+ my $imagedir_web = getitemtypeimagesrc();
+ opendir(DIR, $imagedir_filesystem)
+ or die "can't opendir ".$imagedir_filesystem.": ".$!;
+ my @imagelist;
+ while (my $line = readdir(DIR)) {
+ if ($line =~ /\.(gif|png)$/i) {
+ push(
+ @imagelist,
+ {
+ KohaImage => $line,
+ KohaImageSrc => $imagedir_web.'/'.$line,
+ checked => $line eq $data->{imageurl} ? 1 : 0,
+ }
+ );
+ }
+ }
+ closedir DIR;
+
+ my $remote_image = undef;
+ if (defined $data->{imageurl} and $data->{imageurl} =~ m/^http/) {
+ $remote_image = $data->{imageurl};
+ }
+
+ $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'),
+ IMAGESLOOP => \@imagelist,
+ remote_image => $remote_image,
+ );
# END $OP eq ADD_FORM
################## ADD_VALIDATE ##################################
# called by add_form, used to insert/modify data in DB
} elsif ($op eq 'add_validate') {
my $dbh = C4::Context->dbh;
- my $query = "replace itemtypes (itemtype,description,loanlength,renewalsallowed,rentalcharge) values (";
- $query.= $dbh->quote($input->param('itemtype')).",";
- $query.= $dbh->quote($input->param('description')).",";
- $query.= $dbh->quote($input->param('loanlength')).",";
- if ($input->param('renewalsallowed') ne 1) {
- $query.= "0,";
- } else {
- $query.= "1,";
- }
- $query.= $dbh->quote($input->param('rentalcharge')).")";
- my $sth=$dbh->prepare($query);
- $sth->execute;
+
+ my $query = '
+UPDATE itemtypes
+ SET description = ?
+ , renewalsallowed = ?
+ , rentalcharge = ?
+ , notforloan = ?
+ , imageurl = ?
+ WHERE itemtype = ?
+';
+ my $sth=$dbh->prepare($query);
+ $sth->execute(
+ $input->param('description'),
+ $input->param('renewalsallowed'),
+ $input->param('rentalcharge'),
+ $input->param('notforloan') ? 1 : 0,
+ $input->param('image') eq 'removeImage'
+ ? undef
+ : $input->param('image') eq 'remoteImage'
+ ? $input->param('remoteImage')
+ : $input->param('image'),
+ $input->param('itemtype'),
+ );
+
$sth->finish;
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=itemtypes.pl\"></html>";
exit;
} elsif ($op eq 'delete_confirm') {
#start the page and read in includes
my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare("select count(*) as total from categoryitem where itemtype='$itemtype'");
- $sth->execute;
- my $total = $sth->fetchrow_hashref;
- $sth->finish;
- # FIXME - There's already a $sth in this scope.
- my $sth=$dbh->prepare("select itemtype,description,loanlength,renewalsallowed,rentalcharge from itemtypes where itemtype='$itemtype'");
- $sth->execute;
+
+ # 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};
+ $sth->finish;
+ }
+
+ my $sth=$dbh->prepare("select itemtype,description,renewalsallowed,rentalcharge from itemtypes where itemtype=?");
+ $sth->execute($itemtype);
my $data=$sth->fetchrow_hashref;
$sth->finish;
+
$template->param(itemtype => $itemtype,
- description => $data->{'description'},
- loanlength => $data->{'loanlength'},
- renewalsallowed => $data->{'renewalsallowed'},
- rentalcharge => $data->{'rentalcharge'},
- total => $total->{'total'});
+ 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
#start the page and read in includes
my $dbh = C4::Context->dbh;
my $itemtype=uc($input->param('itemtype'));
- my $query = "delete from itemtypes where itemtype='$itemtype'";
- my $sth=$dbh->prepare($query);
- $sth->execute;
+ my $sth=$dbh->prepare("delete from itemtypes where itemtype=?");
+ $sth->execute($itemtype);
+ $sth = $dbh->prepare("delete from issuingrules where itemtype=?");
+ $sth->execute($itemtype);
$sth->finish;
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=itemtypes.pl\"></html>";
exit;
# END $OP eq DELETE_CONFIRMED
################## DEFAULT ##################################
} else { # DEFAULT
- my $env;
- my ($count,$results)=StringSearch($env,$searchfield,'web');
- my $toggle="white";
- my @loop_data;
- for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){
- my %row_data;
- if ($toggle eq 'white'){
- $row_data{toggle}="#ffffcc";
- } else {
- $row_data{toggle}="white";
- }
- $row_data{itemtype} = $results->[$i]{'itemtype'};
- $row_data{description} = $results->[$i]{'description'};
- $row_data{loanlength} = $results->[$i]{'loanlength'};
- $row_data{renewalsallowed} = $results->[$i]{'renewalsallowed'};
- $row_data{rentalcharge} = $results->[$i]{'rentalcharge'};
- push(@loop_data, \%row_data);
- }
- $template->param(loop => \@loop_data);
+ my $env;
+ my ($count,$results)=StringSearch($env,$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 $toggle = 0;
+ my @loop;
+ foreach my $result (@{$results}[$first .. $last]) {
+ my $itemtype = $result;
+ $itemtype->{toggle} = ($toggle++%2 eq 0 ? 1 : 0);
+ $itemtype->{imageurl} =
+ getitemtypeimagesrcfromurl($itemtype->{imageurl});
+ $itemtype->{rentalcharge} = sprintf('%.2f', $itemtype->{rentalcharge});
+
+ push(@loop, $itemtype);
+ }
+
+ $template->param(
+ loop => \@loop,
+ pagination_bar => pagination_bar(
+ $script_name,
+ getnbpages(scalar @{$results}, $pagesize),
+ $page,
+ 'page'
+ )
+ );
} #---- END $OP eq DEFAULT
+$template->param(intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
+ intranetstylesheet => C4::Context->preference("intranetstylesheet"),
+ IntranetNav => C4::Context->preference("IntranetNav"),
+ );
output_html_with_http_headers $input, $cookie, $template->output;
+
+# Local Variables:
+# tab-width: 4
+# End: