Lines 1-7
Link Here
|
1 |
#!/usr/bin/perl |
1 |
#!/usr/bin/perl |
2 |
|
2 |
|
3 |
#script to administer the categories table |
3 |
#script to administer the categories table |
4 |
#written 20/02/2002 by paul.poulain@free.fr |
4 |
# Copyright 2000-2002 Katipo Communications |
|
|
5 |
# Copyright 2002, 2012 BibLibre ()paul.poulain@biblibre.com) |
5 |
|
6 |
|
6 |
# ALGO : |
7 |
# ALGO : |
7 |
# this script use an $op to know what to do. |
8 |
# this script use an $op to know what to do. |
Lines 18-25
Link Here
|
18 |
# if $op=delete_confirm |
19 |
# if $op=delete_confirm |
19 |
# - we delete the record having primkey=$primkey |
20 |
# - we delete the record having primkey=$primkey |
20 |
|
21 |
|
21 |
|
|
|
22 |
# Copyright 2000-2002 Katipo Communications |
23 |
# |
22 |
# |
24 |
# This file is part of Koha. |
23 |
# This file is part of Koha. |
25 |
# |
24 |
# |
Lines 37-259
Link Here
|
37 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
36 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
38 |
|
37 |
|
39 |
use strict; |
38 |
use strict; |
|
|
39 |
|
40 |
#use warnings; FIXME - Bug 2505 |
40 |
#use warnings; FIXME - Bug 2505 |
41 |
use CGI; |
41 |
use CGI; |
42 |
use C4::Context; |
42 |
use C4::Context; |
43 |
use C4::Auth; |
43 |
use C4::Auth; |
44 |
use C4::Output; |
44 |
use C4::Output; |
45 |
use C4::Dates; |
45 |
#use C4::Dates; |
46 |
use C4::Form::MessagingPreferences; |
46 |
use C4::Form::MessagingPreferences; |
47 |
|
47 |
use Koha::BusinessLogic::Category; |
48 |
sub StringSearch { |
48 |
use Koha::BusinessLogic::Borrower; |
49 |
my ($searchstring,$type)=@_; |
|
|
50 |
my $dbh = C4::Context->dbh; |
51 |
$searchstring=~ s/\'/\\\'/g; |
52 |
my @data=split(' ',$searchstring); |
53 |
my $count=@data; |
54 |
my $sth=$dbh->prepare("Select * from categories where (description like ?) order by category_type,description,categorycode"); |
55 |
$sth->execute("$data[0]%"); |
56 |
my @results; |
57 |
while (my $data=$sth->fetchrow_hashref){ |
58 |
push(@results,$data); |
59 |
} |
60 |
# $sth->execute; |
61 |
$sth->finish; |
62 |
return (scalar(@results),\@results); |
63 |
} |
64 |
|
49 |
|
65 |
my $input = new CGI; |
50 |
my $input = new CGI; |
66 |
my $searchfield=$input->param('description'); |
51 |
my $searchfield=$input->param('description'); # FIXME : for categories, this is useless (datatable handle that much better) |
67 |
my $script_name="/cgi-bin/koha/admin/categorie.pl"; |
52 |
my $script_name="/cgi-bin/koha/admin/categorie.pl"; |
68 |
my $categorycode=$input->param('categorycode'); |
53 |
my $categorycode=$input->param('categorycode'); |
69 |
my $op = $input->param('op'); |
54 |
my $op = $input->param('op'); |
70 |
|
55 |
|
71 |
my ($template, $loggedinuser, $cookie) |
56 |
my ($template, $loggedinuser, $cookie) |
72 |
= get_template_and_user({template_name => "admin/categorie.tmpl", |
57 |
= get_template_and_user({template_name => "admin/categorie.tmpl", |
73 |
query => $input, |
58 |
query => $input, |
74 |
type => "intranet", |
59 |
type => "intranet", |
75 |
authnotrequired => 0, |
60 |
authnotrequired => 0, |
76 |
flagsrequired => {parameters => 1}, |
61 |
flagsrequired => { parameters => 1 }, |
77 |
debug => 1, |
62 |
debug => 1, |
78 |
}); |
63 |
}); |
79 |
|
|
|
80 |
|
64 |
|
81 |
$template->param(script_name => $script_name, |
65 |
$template->param(script_name => $script_name, |
82 |
categorycode => $categorycode, |
66 |
categorycode => $categorycode, |
83 |
searchfield => $searchfield); |
67 |
searchfield => $searchfield |
84 |
|
68 |
); |
85 |
|
69 |
|
86 |
################## ADD_FORM ################################## |
70 |
################## ADD_FORM ################################## |
87 |
# called by default. Used to create form to add or modify a record |
71 |
# called by default. Used to create form to add or modify a record |
88 |
if ($op eq 'add_form') { |
72 |
if ($op eq 'add_form') { |
89 |
$template->param(add_form => 1); |
73 |
$template->param(add_form => 1); |
90 |
|
|
|
91 |
#---- if primkey exists, it's a modify action, so read values to modify... |
92 |
my $data; |
93 |
if ($categorycode) { |
94 |
my $dbh = C4::Context->dbh; |
95 |
my $sth=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?"); |
96 |
$sth->execute($categorycode); |
97 |
$data=$sth->fetchrow_hashref; |
98 |
$sth->finish; |
99 |
} |
100 |
|
101 |
$data->{'enrolmentperioddate'} = undef if ($data->{'enrolmentperioddate'} eq '0000-00-00'); |
102 |
|
74 |
|
103 |
$template->param(description => $data->{'description'}, |
75 |
#---- if primkey exists, it's a modify action, so read values to modify... |
104 |
enrolmentperiod => $data->{'enrolmentperiod'}, |
76 |
my $data; |
105 |
enrolmentperioddate => C4::Dates::format_date($data->{'enrolmentperioddate'}), |
77 |
if ($categorycode) { |
106 |
upperagelimit => $data->{'upperagelimit'}, |
78 |
$data = Koha::BusinessLogic::Category->read({'categorycode' => $categorycode})->first; |
107 |
dateofbirthrequired => $data->{'dateofbirthrequired'}, |
|
|
108 |
enrolmentfee => sprintf("%.2f",$data->{'enrolmentfee'}), |
109 |
overduenoticerequired => $data->{'overduenoticerequired'}, |
110 |
issuelimit => $data->{'issuelimit'}, |
111 |
reservefee => sprintf("%.2f",$data->{'reservefee'}), |
112 |
hidelostitems => $data->{'hidelostitems'}, |
113 |
category_type => $data->{'category_type'}, |
114 |
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), |
115 |
SMSSendDriver => C4::Context->preference("SMSSendDriver"), |
116 |
TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification"), |
117 |
"type_".$data->{'category_type'} => 1, |
118 |
); |
119 |
if (C4::Context->preference('EnhancedMessagingPreferences')) { |
120 |
C4::Form::MessagingPreferences::set_form_values({ categorycode => $categorycode } , $template); |
121 |
} |
79 |
} |
122 |
# END $OP eq ADD_FORM |
80 |
$template->param( |
|
|
81 |
%{$data}, |
82 |
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), |
83 |
SMSSendDriver => C4::Context->preference("SMSSendDriver"), |
84 |
TalkingTechItivaPhone => |
85 |
C4::Context->preference("TalkingTechItivaPhoneNotification"), |
86 |
); |
87 |
if ( C4::Context->preference('EnhancedMessagingPreferences') ) { |
88 |
C4::Form::MessagingPreferences::set_form_values( |
89 |
{ categorycode => $categorycode }, $template ); |
90 |
} |
91 |
|
92 |
# END $OP eq ADD_FORM |
123 |
################## ADD_VALIDATE ################################## |
93 |
################## ADD_VALIDATE ################################## |
124 |
# called by add_form, used to insert/modify data in DB |
94 |
# called by add_form, used to insert/modify data in DB |
125 |
} elsif ($op eq 'add_validate') { |
95 |
} elsif ($op eq 'add_validate') { |
126 |
$template->param(add_validate => 1); |
96 |
$template->param( add_validate => 1 ); |
127 |
my $is_a_modif = $input->param("is_a_modif"); |
97 |
if ( $input->param('enrolmentperioddate') ) { |
128 |
my $dbh = C4::Context->dbh; |
98 |
$input->param( |
129 |
if($input->param('enrolmentperioddate')){ |
99 |
'enrolmentperioddate' => C4::Dates::format_date_in_iso( |
130 |
$input->param('enrolmentperioddate' => C4::Dates::format_date_in_iso($input->param('enrolmentperioddate')) ); |
100 |
$input->param('enrolmentperioddate') |
131 |
} |
101 |
) |
132 |
|
102 |
); |
133 |
if ($is_a_modif) { |
|
|
134 |
my $sth=$dbh->prepare("UPDATE categories SET description=?,enrolmentperiod=?, enrolmentperioddate=?,upperagelimit=?,dateofbirthrequired=?,enrolmentfee=?,reservefee=?,hidelostitems=?,overduenoticerequired=?,category_type=? WHERE categorycode=?"); |
135 |
$sth->execute(map { $input->param($_) } ('description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type','categorycode')); |
136 |
$sth->finish; |
137 |
} else { |
138 |
my $sth=$dbh->prepare("INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,reservefee,hidelostitems,overduenoticerequired,category_type) values (?,?,?,?,?,?,?,?,?,?,?)"); |
139 |
$sth->execute(map { $input->param($_) } ('categorycode','description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type')); |
140 |
$sth->finish; |
141 |
} |
142 |
if (C4::Context->preference('EnhancedMessagingPreferences')) { |
143 |
C4::Form::MessagingPreferences::handle_form_action($input, |
144 |
{ categorycode => $input->param('categorycode') }, $template); |
145 |
} |
103 |
} |
146 |
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=categorie.pl\"></html>"; |
|
|
147 |
exit; |
148 |
|
104 |
|
149 |
# END $OP eq ADD_VALIDATE |
105 |
if ($input->param("is_a_modif")) { |
150 |
################## DELETE_CONFIRM ################################## |
106 |
Koha::BusinessLogic::Category->update({ map { $_ => $input->param($_) } grep {$_ ne 'issuelimit'} # FIXME : remove grep when issuelimit has been removed from the database |
151 |
# called by default form, used to confirm deletion of data in DB |
107 |
Koha::BusinessLogic::Category->columns }); |
152 |
} elsif ($op eq 'delete_confirm') { |
108 |
} |
153 |
$template->param(delete_confirm => 1); |
109 |
else { |
|
|
110 |
Koha::BusinessLogic::Category->new({ map { $_ => $input->param($_) } grep {$_ ne 'issuelimit'} # FIXME : remove grep when issuelimit has been removed from the database |
111 |
Koha::BusinessLogic::Category->columns })->create; |
112 |
} |
113 |
if ( C4::Context->preference('EnhancedMessagingPreferences') ) { |
114 |
C4::Form::MessagingPreferences::handle_form_action( $input, |
115 |
{ categorycode => $input->param('categorycode') }, $template ); |
116 |
} |
117 |
print |
118 |
"Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=categorie.pl\"></html>"; |
119 |
exit; |
154 |
|
120 |
|
155 |
my $dbh = C4::Context->dbh; |
121 |
# END $OP eq ADD_VALIDATE |
156 |
my $sth=$dbh->prepare("select count(*) as total from borrowers where categorycode=?"); |
122 |
################## DELETE_CONFIRM ################################## |
157 |
$sth->execute($categorycode); |
123 |
# called by default form, used to confirm deletion of data in DB |
158 |
my $total = $sth->fetchrow_hashref; |
124 |
} |
159 |
$sth->finish; |
125 |
elsif ( $op eq 'delete_confirm' ) { |
160 |
$template->param(total => $total->{'total'}); |
126 |
$template->param( delete_confirm => 1 ); |
161 |
|
|
|
162 |
my $sth2=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?"); |
163 |
$sth2->execute($categorycode); |
164 |
my $data=$sth2->fetchrow_hashref; |
165 |
$sth2->finish; |
166 |
if ($total->{'total'} >0) { |
167 |
$template->param(totalgtzero => 1); |
168 |
} |
169 |
|
127 |
|
170 |
$template->param( description => $data->{'description'}, |
128 |
# Retrieve how many borrowers are using this categorycode |
171 |
enrolmentperiod => $data->{'enrolmentperiod'}, |
129 |
# retrieving a scalar result in retrieving the number of lines |
172 |
enrolmentperioddate => C4::Dates::format_date($data->{'enrolmentperioddate'}), |
130 |
# FIXME = this is not a real SQL count(*), so it's inefficient. A specific method in Koha::Business::Borrowers for that is needed ! |
173 |
upperagelimit => $data->{'upperagelimit'}, |
131 |
my $total = Koha::BusinessLogic::Borrower->read({'me.categorycode' => $categorycode })->all; |
174 |
dateofbirthrequired => $data->{'dateofbirthrequired'}, |
132 |
$template->param( total => $total); |
175 |
enrolmentfee => sprintf("%.2f",$data->{'enrolmentfee'}), |
|
|
176 |
overduenoticerequired => $data->{'overduenoticerequired'}, |
177 |
issuelimit => $data->{'issuelimit'}, |
178 |
reservefee => sprintf("%.2f",$data->{'reservefee'}), |
179 |
hidelostitems => $data->{'hidelostitems'}, |
180 |
category_type => $data->{'category_type'}, |
181 |
); |
182 |
# END $OP eq DELETE_CONFIRM |
183 |
################## DELETE_CONFIRMED ################################## |
184 |
# called by delete_confirm, used to effectively confirm deletion of data in DB |
185 |
} elsif ($op eq 'delete_confirmed') { |
186 |
$template->param(delete_confirmed => 1); |
187 |
my $dbh = C4::Context->dbh; |
188 |
my $categorycode=uc($input->param('categorycode')); |
189 |
my $sth=$dbh->prepare("delete from categories where categorycode=?"); |
190 |
$sth->execute($categorycode); |
191 |
$sth->finish; |
192 |
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=categorie.pl\"></html>"; |
193 |
exit; |
194 |
|
133 |
|
195 |
# END $OP eq DELETE_CONFIRMED |
134 |
my $data = Koha::BusinessLogic::Category->read({'categorycode' => $categorycode})->first; |
196 |
} else { # DEFAULT |
|
|
197 |
$template->param(else => 1); |
198 |
my @loop; |
199 |
my ($count,$results)=StringSearch($searchfield,'web'); |
200 |
for (my $i=0; $i < $count; $i++){ |
201 |
my %row = ( |
202 |
categorycode => $results->[$i]{'categorycode'}, |
203 |
description => $results->[$i]{'description'}, |
204 |
enrolmentperiod => $results->[$i]{'enrolmentperiod'}, |
205 |
enrolmentperioddate => C4::Dates::format_date($results->[$i]{'enrolmentperioddate'}), |
206 |
upperagelimit => $results->[$i]{'upperagelimit'}, |
207 |
dateofbirthrequired => $results->[$i]{'dateofbirthrequired'}, |
208 |
enrolmentfee => sprintf("%.2f",$results->[$i]{'enrolmentfee'}), |
209 |
overduenoticerequired => $results->[$i]{'overduenoticerequired'}, |
210 |
issuelimit => $results->[$i]{'issuelimit'}, |
211 |
reservefee => sprintf("%.2f",$results->[$i]{'reservefee'}), |
212 |
hidelostitems => $results->[$i]{'hidelostitems'}, |
213 |
category_type => $results->[$i]{'category_type'}, |
214 |
"type_".$results->[$i]{'category_type'} => 1); |
215 |
if (C4::Context->preference('EnhancedMessagingPreferences')) { |
216 |
my $brief_prefs = _get_brief_messaging_prefs($results->[$i]{'categorycode'}); |
217 |
$row{messaging_prefs} = $brief_prefs if @$brief_prefs; |
218 |
} |
219 |
push @loop, \%row; |
220 |
} |
221 |
$template->param(loop => \@loop); |
222 |
# check that I (institution) and C (child) exists. otherwise => warning to the user |
223 |
my $dbh = C4::Context->dbh; |
224 |
my $sth=$dbh->prepare("select category_type from categories where category_type='C'"); |
225 |
$sth->execute; |
226 |
my ($categoryChild) = $sth->fetchrow; |
227 |
$template->param(categoryChild => $categoryChild); |
228 |
$sth=$dbh->prepare("select category_type from categories where category_type='I'"); |
229 |
$sth->execute; |
230 |
my ($categoryInstitution) = $sth->fetchrow; |
231 |
$template->param(categoryInstitution => $categoryInstitution); |
232 |
$sth->finish; |
233 |
|
135 |
|
|
|
136 |
$template->param( |
137 |
%{$data} |
138 |
); |
234 |
|
139 |
|
235 |
} #---- END $OP eq DEFAULT |
140 |
# END $OP eq DELETE_CONFIRM |
|
|
141 |
################## DELETE_CONFIRMED ################################## |
142 |
# called by delete_confirm, used to effectively confirm deletion of data in DB |
143 |
} |
144 |
elsif ( $op eq 'delete_confirmed' ) { |
145 |
$template->param( delete_confirmed => 1 ); |
146 |
Koha::BusinessLogic::Category->delete( |
147 |
{ 'categorycode' => $categorycode } ); |
148 |
print |
149 |
"Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=categorie.pl\"></html>"; |
150 |
exit; |
151 |
|
152 |
# END $OP eq DELETE_CONFIRMED |
153 |
} |
154 |
else { # DEFAULT |
155 |
my @loop = Koha::BusinessLogic::Category->read()->all; |
156 |
$template->param( |
157 |
else => 1, |
158 |
loop => \@loop, |
159 |
); |
160 |
|
161 |
} #---- END $OP eq DEFAULT |
236 |
output_html_with_http_headers $input, $cookie, $template->output; |
162 |
output_html_with_http_headers $input, $cookie, $template->output; |
237 |
|
163 |
|
238 |
exit 0; |
164 |
exit 0; |
239 |
|
165 |
|
240 |
sub _get_brief_messaging_prefs { |
166 |
# FIXME : should not be here but in a Koha::BusinessLogic Messaging package |
241 |
my $categorycode = shift; |
167 |
#sub _get_brief_messaging_prefs { |
242 |
my $messaging_options = C4::Members::Messaging::GetMessagingOptions(); |
168 |
# my $categorycode = shift; |
243 |
my $results = []; |
169 |
# my $messaging_options = C4::Members::Messaging::GetMessagingOptions(); |
244 |
PREF: foreach my $option ( @$messaging_options ) { |
170 |
# my $results = []; |
245 |
my $pref = C4::Members::Messaging::GetMessagingPreferences( { categorycode => $categorycode, |
171 |
# PREF: foreach my $option (@$messaging_options) { |
246 |
message_name => $option->{'message_name'} } ); |
172 |
# my $pref = C4::Members::Messaging::GetMessagingPreferences( |
247 |
next unless $pref->{'transports'}; |
173 |
# { |
248 |
my $brief_pref = { |
174 |
# categorycode => $categorycode, |
249 |
message_attribute_id => $option->{'message_attribute_id'}, |
175 |
# message_name => $option->{'message_name'} |
250 |
message_name => $option->{'message_name'}, |
176 |
# } |
251 |
$option->{'message_name'} => 1 |
177 |
# ); |
252 |
}; |
178 |
# next unless $pref->{'transports'}; |
253 |
foreach my $transport ( keys %{$pref->{'transports'}} ) { |
179 |
# my $brief_pref = { |
254 |
push @{ $brief_pref->{'transports'} }, { transport => $transport }; |
180 |
# message_attribute_id => $option->{'message_attribute_id'}, |
255 |
} |
181 |
# message_name => $option->{'message_name'}, |
256 |
push @$results, $brief_pref; |
182 |
# $option->{'message_name'} => 1 |
257 |
} |
183 |
# }; |
258 |
return $results; |
184 |
# foreach my $transport ( keys %{ $pref->{'transports'} } ) { |
259 |
} |
185 |
# push @{ $brief_pref->{'transports'} }, { transport => $transport }; |
|
|
186 |
# } |
187 |
# push @$results, $brief_pref; |
188 |
# } |
189 |
# return $results; |
190 |
#} |