|
Lines 1-6
Link Here
|
| 1 |
#!/usr/bin/perl |
1 |
#!/usr/bin/perl |
| 2 |
|
2 |
|
| 3 |
# Copyright 2000-2002 Katipo Communications |
3 |
# Copyright 2000-2002 Katipo Communications |
|
|
4 |
# Copyright 2013 BibLibre |
| 4 |
# |
5 |
# |
| 5 |
# This file is part of Koha. |
6 |
# This file is part of Koha. |
| 6 |
# |
7 |
# |
|
Lines 17-24
Link Here
|
| 17 |
# with Koha; if not, write to the Free Software Foundation, Inc., |
18 |
# with Koha; if not, write to the Free Software Foundation, Inc., |
| 18 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
19 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 19 |
|
20 |
|
| 20 |
use strict; |
21 |
use Modern::Perl; |
| 21 |
use warnings; |
|
|
| 22 |
|
22 |
|
| 23 |
use CGI; |
23 |
use CGI; |
| 24 |
use C4::Auth; |
24 |
use C4::Auth; |
|
Lines 26-57
use C4::Branch;
Link Here
|
| 26 |
use C4::Context; |
26 |
use C4::Context; |
| 27 |
use C4::Koha; |
27 |
use C4::Koha; |
| 28 |
use C4::Output; |
28 |
use C4::Output; |
|
|
29 |
use Koha::AuthorisedValue; |
| 29 |
|
30 |
|
| 30 |
|
31 |
|
| 31 |
sub AuthorizedValuesForCategory { |
|
|
| 32 |
my ($searchstring) = shift or return; |
| 33 |
my $dbh = C4::Context->dbh; |
| 34 |
$searchstring=~ s/\'/\\\'/g; |
| 35 |
my @data=split(' ',$searchstring); |
| 36 |
my $sth=$dbh->prepare(' |
| 37 |
SELECT id, category, authorised_value, lib, lib_opac, imageurl |
| 38 |
FROM authorised_values |
| 39 |
WHERE (category = ?) |
| 40 |
ORDER BY category, authorised_value |
| 41 |
'); |
| 42 |
$sth->execute("$data[0]"); |
| 43 |
return $sth->fetchall_arrayref({}); |
| 44 |
} |
| 45 |
|
| 46 |
my $input = new CGI; |
32 |
my $input = new CGI; |
| 47 |
my $id = $input->param('id'); |
33 |
my $id = $input->param('id'); |
| 48 |
my $op = $input->param('op') || ''; |
34 |
my $op = $input->param('op') || 'list'; |
| 49 |
our $offset = $input->param('offset') || 0; |
35 |
my $searchfield = $input->param('searchfield'); |
| 50 |
our $searchfield = $input->param('searchfield'); |
|
|
| 51 |
$searchfield = '' unless defined $searchfield; |
36 |
$searchfield = '' unless defined $searchfield; |
| 52 |
$searchfield =~ s/\,//g; |
37 |
$searchfield =~ s/\,//g; |
| 53 |
our $script_name = "/cgi-bin/koha/admin/authorised_values.pl"; |
38 |
my @messages; |
| 54 |
our $dbh = C4::Context->dbh; |
|
|
| 55 |
|
39 |
|
| 56 |
our ($template, $borrowernumber, $cookie)= get_template_and_user({ |
40 |
our ($template, $borrowernumber, $cookie)= get_template_and_user({ |
| 57 |
template_name => "admin/authorised_values.tt", |
41 |
template_name => "admin/authorised_values.tt", |
|
Lines 62-92
our ($template, $borrowernumber, $cookie)= get_template_and_user({
Link Here
|
| 62 |
debug => 1, |
46 |
debug => 1, |
| 63 |
}); |
47 |
}); |
| 64 |
|
48 |
|
| 65 |
$template->param( script_name => $script_name, |
|
|
| 66 |
($op||'else') => 1 ); |
| 67 |
################## ADD_FORM ################################## |
49 |
################## ADD_FORM ################################## |
| 68 |
# called by default. Used to create form to add or modify a record |
50 |
# called by default. Used to create form to add or modify a record |
| 69 |
if ($op eq 'add_form') { |
51 |
if ($op eq 'add_form') { |
| 70 |
my $data; |
52 |
my ( $selected_branches, $category, $av ); |
| 71 |
my @selected_branches; |
53 |
if ($id) { |
| 72 |
if ($id) { |
54 |
$av = Koha::AuthorisedValue->new( { id => $id } )->fetch; |
| 73 |
my $sth=$dbh->prepare("select id, category, authorised_value, lib, lib_opac, imageurl from authorised_values where id=?"); |
55 |
$selected_branches = $av->branches_limitations; |
| 74 |
$sth->execute($id); |
56 |
} else { |
| 75 |
$data=$sth->fetchrow_hashref; |
57 |
$category = $input->param('category'); |
| 76 |
$sth = $dbh->prepare("SELECT b.branchcode, b.branchname FROM authorised_values_branches AS avb, branches AS b WHERE avb.branchcode = b.branchcode AND avb.av_id = ?;"); |
58 |
} |
| 77 |
$sth->execute( $id ); |
|
|
| 78 |
while ( my $branch = $sth->fetchrow_hashref ) { |
| 79 |
push @selected_branches, $branch; |
| 80 |
} |
| 81 |
} else { |
| 82 |
$data->{'category'} = $input->param('category'); |
| 83 |
} |
| 84 |
|
59 |
|
| 85 |
my $branches = GetBranches; |
60 |
my $branches = GetBranches; |
| 86 |
my @branches_loop; |
61 |
my @branches_loop; |
| 87 |
|
62 |
|
| 88 |
foreach my $branch (sort keys %$branches) { |
63 |
foreach my $branch (sort keys %$branches) { |
| 89 |
my $selected = ( grep {$_->{branchcode} eq $branch} @selected_branches ) ? 1 : 0; |
64 |
my $selected = ( grep {$_->{branchcode} eq $branch} @$selected_branches ) ? 1 : 0; |
| 90 |
push @branches_loop, { |
65 |
push @branches_loop, { |
| 91 |
branchcode => $branches->{$branch}{branchcode}, |
66 |
branchcode => $branches->{$branch}{branchcode}, |
| 92 |
branchname => $branches->{$branch}{branchname}, |
67 |
branchname => $branches->{$branch}{branchname}, |
|
Lines 96-247
if ($op eq 'add_form') {
Link Here
|
| 96 |
|
71 |
|
| 97 |
if ($id) { |
72 |
if ($id) { |
| 98 |
$template->param(action_modify => 1); |
73 |
$template->param(action_modify => 1); |
| 99 |
$template->param('heading_modify_authorized_value_p' => 1); |
74 |
} elsif ( ! $category ) { |
| 100 |
} elsif ( ! $data->{'category'} ) { |
|
|
| 101 |
$template->param(action_add_category => 1); |
75 |
$template->param(action_add_category => 1); |
| 102 |
$template->param('heading_add_new_category_p' => 1); |
|
|
| 103 |
} else { |
76 |
} else { |
| 104 |
$template->param(action_add_value => 1); |
77 |
$template->param(action_add_value => 1); |
| 105 |
$template->param('heading_add_authorized_value_p' => 1); |
|
|
| 106 |
} |
78 |
} |
| 107 |
$template->param('use_heading_flags_p' => 1); |
79 |
|
| 108 |
$template->param( category => $data->{'category'}, |
80 |
$template->param( |
| 109 |
authorised_value => $data->{'authorised_value'}, |
81 |
category => ( $av ? $av->{category} : $category ), |
| 110 |
lib => $data->{'lib'}, |
82 |
authorised_value => $av->{authorised_value}, |
| 111 |
lib_opac => $data->{'lib_opac'}, |
83 |
lib => $av->{lib}, |
| 112 |
id => $data->{'id'}, |
84 |
lib_opac => $av->{lib_opac}, |
| 113 |
imagesets => C4::Koha::getImageSets( checked => $data->{'imageurl'} ), |
85 |
id => $av->{id}, |
| 114 |
offset => $offset, |
86 |
imagesets => C4::Koha::getImageSets( checked => $av->{imageurl} ), |
| 115 |
branches_loop => \@branches_loop, |
87 |
branches_loop => \@branches_loop, |
| 116 |
); |
88 |
); |
| 117 |
|
89 |
|
| 118 |
################## ADD_VALIDATE ################################## |
90 |
} elsif ($op eq 'add') { |
| 119 |
# called by add_form, used to insert/modify data in DB |
|
|
| 120 |
} elsif ($op eq 'add_validate') { |
| 121 |
my $new_authorised_value = $input->param('authorised_value'); |
91 |
my $new_authorised_value = $input->param('authorised_value'); |
| 122 |
my $new_category = $input->param('category'); |
92 |
my $new_category = $input->param('category'); |
| 123 |
my $imageurl = $input->param( 'imageurl' ) || ''; |
93 |
my $imageurl = $input->param( 'imageurl' ) || ''; |
| 124 |
$imageurl = '' if $imageurl =~ /removeImage/; |
94 |
$imageurl = '' if $imageurl =~ /removeImage/; |
| 125 |
my $duplicate_entry = 0; |
95 |
my $duplicate_entry = 0; |
| 126 |
my @branches = $input->param('branches'); |
96 |
my @branches = $input->param('branches'); |
| 127 |
|
97 |
|
| 128 |
if ( $id ) { # Update |
98 |
if ( $id ) { # Update |
| 129 |
my $sth = $dbh->prepare( "SELECT category, authorised_value FROM authorised_values WHERE id = ? "); |
99 |
my $av = Koha::AuthorisedValue->new( { id => $id } ); |
| 130 |
$sth->execute($id); |
100 |
|
| 131 |
my ($category, $authorised_value) = $sth->fetchrow_array(); |
101 |
# TODO in updatedatabase and kohastructure |
| 132 |
if ( $authorised_value ne $new_authorised_value ) { |
102 |
# Add a uniq key on auv.category and av.authorised_values |
| 133 |
my $sth = $dbh->prepare_cached( "SELECT COUNT(*) FROM authorised_values " . |
103 |
#if ( $av->{authorised_value} ne $new_authorised_value ) { |
| 134 |
"WHERE category = ? AND authorised_value = ? and id <> ? "); |
104 |
# my $sth = $dbh->prepare_cached( "SELECT COUNT(*) FROM authorised_values " . |
| 135 |
$sth->execute($new_category, $new_authorised_value, $id); |
105 |
# "WHERE category = ? AND authorised_value = ? and id <> ? "); |
| 136 |
($duplicate_entry) = $sth->fetchrow_array(); |
106 |
# $sth->execute($new_category, $new_authorised_value, $id); |
| 137 |
} |
107 |
# ($duplicate_entry) = $sth->fetchrow_array(); |
| 138 |
unless ( $duplicate_entry ) { |
108 |
#} |
| 139 |
my $sth=$dbh->prepare( 'UPDATE authorised_values |
109 |
#unless ( $duplicate_entry ) { |
| 140 |
SET category = ?, |
110 |
$av->{lib} = $input->param('lib') || undef; |
| 141 |
authorised_value = ?, |
111 |
$av->{lib_opac} = $input->param('lib_opac') || undef; |
| 142 |
lib = ?, |
112 |
$av->{category} = $new_category; |
| 143 |
lib_opac = ?, |
113 |
$av->{authorised_value} = $new_authorised_value; |
| 144 |
imageurl = ? |
114 |
$av->{imageurl} = $imageurl; |
| 145 |
WHERE id=?' ); |
115 |
$av->{id} = $id; |
| 146 |
my $lib = $input->param('lib'); |
116 |
$av->{branches_limitations} = [ |
| 147 |
my $lib_opac = $input->param('lib_opac'); |
117 |
map { {branchcode => $_, branchname => undef} } @branches |
| 148 |
undef $lib if ($lib eq ""); # to insert NULL instead of a blank string |
118 |
]; |
| 149 |
undef $lib_opac if ($lib_opac eq ""); # to insert NULL instead of a blank string |
119 |
if ( $@ ) { |
| 150 |
$sth->execute($new_category, $new_authorised_value, $lib, $lib_opac, $imageurl, $id); |
120 |
push @messages, {type => 'error', code => 'error_on_update' }; |
| 151 |
if ( @branches ) { |
121 |
} else { |
| 152 |
$sth = $dbh->prepare("DELETE FROM authorised_values_branches WHERE av_id = ?"); |
122 |
push @messages, { type => 'message', code => 'success_on_update' }; |
| 153 |
$sth->execute( $id ); |
|
|
| 154 |
$sth = $dbh->prepare( |
| 155 |
"INSERT INTO authorised_values_branches |
| 156 |
( av_id, branchcode ) |
| 157 |
VALUES ( ?, ? )" |
| 158 |
); |
| 159 |
for my $branchcode ( @branches ) { |
| 160 |
next if not $branchcode; |
| 161 |
$sth->execute($id, $branchcode); |
| 162 |
} |
| 163 |
} |
123 |
} |
| 164 |
$sth->finish; |
124 |
$av->update; |
| 165 |
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=authorised_values.pl?searchfield=".$new_category."&offset=$offset\"></html>"; |
125 |
$template->param( update_success => 1 ); |
| 166 |
exit; |
126 |
#} |
| 167 |
} |
|
|
| 168 |
} |
127 |
} |
| 169 |
else { # Insert |
128 |
else { # Insert |
| 170 |
my $sth = $dbh->prepare_cached( "SELECT COUNT(*) FROM authorised_values " . |
129 |
my $av = Koha::AuthorisedValue->new( { |
| 171 |
"WHERE category = ? AND authorised_value = ? "); |
130 |
category => $new_category, |
| 172 |
$sth->execute($new_category, $new_authorised_value); |
131 |
authorised_value => $new_authorised_value, |
| 173 |
($duplicate_entry) = $sth->fetchrow_array(); |
132 |
lib => $input->param('lib') || undef, |
| 174 |
unless ( $duplicate_entry ) { |
133 |
lib_opac => $input->param('lib_opac') || undef, |
| 175 |
my $sth=$dbh->prepare( 'INSERT INTO authorised_values |
134 |
imageurl => $imageurl, |
| 176 |
( category, authorised_value, lib, lib_opac, imageurl ) |
135 |
branches_limitations => [ map { {branchcode => $_, branchname => undef} } @branches ], |
| 177 |
values (?, ?, ?, ?, ?)' ); |
136 |
} ); |
| 178 |
my $lib = $input->param('lib'); |
137 |
eval {$av->insert}; |
| 179 |
my $lib_opac = $input->param('lib_opac'); |
138 |
if ( $@ ) { |
| 180 |
undef $lib if ($lib eq ""); # to insert NULL instead of a blank string |
139 |
push @messages, {type => 'error', code => 'error_on_insert' }; |
| 181 |
undef $lib_opac if ($lib_opac eq ""); # to insert NULL instead of a blank string |
140 |
} else { |
| 182 |
$sth->execute( $new_category, $new_authorised_value, $lib, $lib_opac, $imageurl ); |
141 |
push @messages, { type => 'message', code => 'success_on_insert' }; |
| 183 |
$id = $dbh->{'mysql_insertid'}; |
|
|
| 184 |
if ( @branches ) { |
| 185 |
$sth = $dbh->prepare( |
| 186 |
"INSERT INTO authorised_values_branches |
| 187 |
( av_id, branchcode ) |
| 188 |
VALUES ( ?, ? )" |
| 189 |
); |
| 190 |
for my $branchcode ( @branches ) { |
| 191 |
next if not $branchcode; |
| 192 |
$sth->execute($id, $branchcode); |
| 193 |
} |
| 194 |
} |
| 195 |
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=authorised_values.pl?searchfield=".$input->param('category')."&offset=$offset\"></html>"; |
| 196 |
exit; |
| 197 |
} |
142 |
} |
| 198 |
} |
143 |
} |
| 199 |
if ( $duplicate_entry ) { |
144 |
if ( $duplicate_entry ) { |
| 200 |
$template->param(duplicate_category => $new_category, |
145 |
$template->param(duplicate_category => $new_category, |
| 201 |
duplicate_value => $new_authorised_value, |
146 |
duplicate_value => $new_authorised_value); |
| 202 |
else => 1); |
147 |
} |
| 203 |
default_form(); |
|
|
| 204 |
} |
| 205 |
|
| 206 |
################## DELETE_CONFIRM ################################## |
| 207 |
# called by default form, used to confirm deletion of data in DB |
| 208 |
} elsif ($op eq 'delete_confirm') { |
| 209 |
my $sth=$dbh->prepare("select category,authorised_value,lib,lib_opac from authorised_values where id=?"); |
| 210 |
$sth->execute($id); |
| 211 |
my $data=$sth->fetchrow_hashref; |
| 212 |
$id = $input->param('id') unless $id; |
| 213 |
$template->param(searchfield => $searchfield, |
| 214 |
Tlib => $data->{'lib'}, |
| 215 |
Tlib_opac => $data->{'lib_opac'}, |
| 216 |
Tvalue => $data->{'authorised_value'}, |
| 217 |
id =>$id, |
| 218 |
); |
| 219 |
|
148 |
|
| 220 |
# END $OP eq DELETE_CONFIRM |
149 |
$op = 'list'; |
| 221 |
################## DELETE_CONFIRMED ################################## |
150 |
$searchfield = $new_category; |
| 222 |
# called by delete_confirm, used to effectively confirm deletion of data in DB |
151 |
} elsif ($op eq 'delete') { |
| 223 |
} elsif ($op eq 'delete_confirmed') { |
152 |
my $av = Koha::AuthorisedValue->new( { id => $input->param('id') } ); |
| 224 |
my $id = $input->param('id'); |
153 |
eval {$av->delete}; |
| 225 |
my $sth=$dbh->prepare("delete from authorised_values where id=?"); |
154 |
if ( $@ ) { |
| 226 |
$sth->execute($id); |
155 |
push @messages, {type => 'error', code => 'error_on_delete' }; |
| 227 |
print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=authorised_values.pl?searchfield=$searchfield&offset=$offset\"></html>"; |
156 |
} else { |
| 228 |
exit; |
157 |
push @messages, { type => 'message', code => 'success_on_delete' }; |
| 229 |
# END $OP eq DELETE_CONFIRMED |
158 |
} |
| 230 |
################## DEFAULT ################################## |
159 |
|
| 231 |
} else { # DEFAULT |
160 |
$op = 'list'; |
| 232 |
default_form(); |
161 |
$template->param( delete_success => 1 ); |
| 233 |
} #---- END $OP eq DEFAULT |
162 |
} |
| 234 |
output_html_with_http_headers $input, $cookie, $template->output; |
|
|
| 235 |
|
163 |
|
| 236 |
exit 0; |
164 |
$template->param( |
|
|
165 |
op => $op, |
| 166 |
searchfield => $searchfield, |
| 167 |
messages => \@messages, |
| 168 |
); |
| 237 |
|
169 |
|
| 238 |
sub default_form { |
170 |
if ( $op eq 'list' ) { |
| 239 |
# build categories list |
171 |
# build categories list |
| 240 |
my $sth = $dbh->prepare("select distinct category from authorised_values"); |
172 |
my $avs = Koha::AuthorisedValue->new; |
| 241 |
$sth->execute; |
|
|
| 242 |
my @category_list; |
173 |
my @category_list; |
| 243 |
my %categories; # a hash, to check that some hardcoded categories exist. |
174 |
my %categories; # a hash, to check that some hardcoded categories exist. |
| 244 |
while ( my ($category) = $sth->fetchrow_array ) { |
175 |
for my $category ( $avs->categories ) { |
| 245 |
push( @category_list, $category ); |
176 |
push( @category_list, $category ); |
| 246 |
$categories{$category} = 1; |
177 |
$categories{$category} = 1; |
| 247 |
} |
178 |
} |
|
Lines 251-294
sub default_form {
Link Here
|
| 251 |
push @category_list, $_ unless $categories{$_}; |
182 |
push @category_list, $_ unless $categories{$_}; |
| 252 |
} |
183 |
} |
| 253 |
|
184 |
|
| 254 |
#reorder the list |
185 |
#reorder the list |
| 255 |
@category_list = sort {$a cmp $b} @category_list; |
186 |
@category_list = sort {$a cmp $b} @category_list; |
| 256 |
my $tab_list = CGI::scrolling_list(-name=>'searchfield', |
187 |
|
| 257 |
-id=>'searchfield', |
188 |
$searchfield ||= $category_list[0]; |
| 258 |
-values=> \@category_list, |
189 |
|
| 259 |
-default=>"", |
190 |
my $avs_for_category = $avs->search( { category => $searchfield } ); |
| 260 |
-size=>1, |
191 |
my @loop_data = (); |
| 261 |
-multiple=>0, |
192 |
# builds value list |
| 262 |
); |
193 |
for my $av ( @$avs_for_category ) { |
| 263 |
if (!$searchfield) { |
194 |
my $branches = Koha::AuthorisedValue->new($av)->branches_limitations; |
| 264 |
$searchfield=$category_list[0]; |
195 |
my %row_data; # get a fresh hash for the row data |
| 265 |
} |
196 |
$row_data{category} = $av->{category}; |
| 266 |
my ($results) = AuthorizedValuesForCategory($searchfield); |
197 |
$row_data{authorised_value} = $av->{authorised_value}; |
| 267 |
my $count = scalar(@$results); |
198 |
$row_data{lib} = $av->{lib}; |
| 268 |
my @loop_data = (); |
199 |
$row_data{lib_opac} = $av->{lib_opac}; |
| 269 |
# builds value list |
200 |
$row_data{imageurl} = getitemtypeimagelocation( 'intranet', $av->{imageurl} ); |
| 270 |
my $dbh = C4::Context->dbh; |
201 |
$row_data{branches} = $branches; |
| 271 |
$sth = $dbh->prepare("SELECT b.branchcode, b.branchname FROM authorised_values_branches AS avb, branches AS b WHERE avb.branchcode = b.branchcode AND avb.av_id = ?"); |
202 |
$row_data{id} = $av->{id}; |
| 272 |
for (my $i=0; $i < $count; $i++){ |
203 |
push(@loop_data, \%row_data); |
| 273 |
$sth->execute( $results->[$i]{id} ); |
204 |
} |
| 274 |
my @selected_branches; |
|
|
| 275 |
while ( my $branch = $sth->fetchrow_hashref ) { |
| 276 |
push @selected_branches, $branch; |
| 277 |
} |
| 278 |
my %row_data; # get a fresh hash for the row data |
| 279 |
$row_data{category} = $results->[$i]{'category'}; |
| 280 |
$row_data{authorised_value} = $results->[$i]{'authorised_value'}; |
| 281 |
$row_data{lib} = $results->[$i]{'lib'}; |
| 282 |
$row_data{lib_opac} = $results->[$i]{'lib_opac'}; |
| 283 |
$row_data{imageurl} = getitemtypeimagelocation( 'intranet', $results->[$i]{'imageurl'} ); |
| 284 |
$row_data{edit} = "$script_name?op=add_form&id=".$results->[$i]{'id'}."&offset=$offset"; |
| 285 |
$row_data{delete} = "$script_name?op=delete_confirm&searchfield=$searchfield&id=".$results->[$i]{'id'}."&offset=$offset"; |
| 286 |
$row_data{branches} = \@selected_branches; |
| 287 |
push(@loop_data, \%row_data); |
| 288 |
} |
| 289 |
|
205 |
|
| 290 |
$template->param( loop => \@loop_data, |
206 |
$template->param( |
| 291 |
tab_list => $tab_list, |
207 |
loop => \@loop_data, |
| 292 |
category => $searchfield ); |
208 |
category => $searchfield, |
| 293 |
} |
209 |
categories => \@category_list, |
|
|
210 |
); |
| 294 |
|
211 |
|
|
|
212 |
} |
| 213 |
output_html_with_http_headers $input, $cookie, $template->output; |