X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fauthorised_values.pl;h=4f951291e4a7e67eeba06eba2bfb91ab9b0f09df;hb=3d84f4b9b3a11f32b37f27478de0ee6c5d9d37e4;hp=949e4882a6c1eeb03d3ad0722e98186a1139e563;hpb=0d4acbba5c5db238eb42ed37dc9ba3dc2f36974b;p=koha.git diff --git a/admin/authorised_values.pl b/admin/authorised_values.pl index 949e4882a6..4f951291e4 100755 --- a/admin/authorised_values.pl +++ b/admin/authorised_values.pl @@ -4,234 +4,242 @@ # # 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use C4::Auth; use C4::Context; use C4::Koha; use C4::Output; - -sub AuthorizedValuesForCategory { - my ($searchstring) = shift or return; - my $dbh = C4::Context->dbh; - $searchstring=~ s/\'/\\\'/g; - my @data=split(' ',$searchstring); - my $sth=$dbh->prepare(' - SELECT id, category, authorised_value, lib, lib_opac, imageurl - FROM authorised_values - WHERE (category = ?) - ORDER BY category, authorised_value - '); - $sth->execute("$data[0]"); - return $sth->fetchall_arrayref({}); -} +use Koha::AuthorisedValues; +use Koha::AuthorisedValueCategories; +use Koha::Libraries; my $input = new CGI; my $id = $input->param('id'); -my $op = $input->param('op') || ''; -our $offset = $input->param('offset') || 0; -our $searchfield = $input->param('searchfield'); +my $op = $input->param('op') || 'list'; +my $searchfield = $input->param('searchfield'); $searchfield = '' unless defined $searchfield; $searchfield =~ s/\,//g; -our $script_name = "/cgi-bin/koha/admin/authorised_values.pl"; -our $dbh = C4::Context->dbh; +my @messages; our ($template, $borrowernumber, $cookie)= get_template_and_user({ - template_name => "admin/authorised_values.tmpl", + template_name => "admin/authorised_values.tt", authnotrequired => 0, - flagsrequired => {parameters => 'parameters_remaining_permissions'}, + flagsrequired => {parameters => 'manage_auth_values'}, query => $input, type => "intranet", debug => 1, }); -$template->param( script_name => $script_name, - ($op||'else') => 1 ); ################## ADD_FORM ################################## # called by default. Used to create form to add or modify a record if ($op eq 'add_form') { - my $data; - if ($id) { - my $sth=$dbh->prepare("select id, category, authorised_value, lib, lib_opac, imageurl from authorised_values where id=?"); - $sth->execute($id); - $data=$sth->fetchrow_hashref; - } else { - $data->{'category'} = $input->param('category'); - } + my ( $selected_branches, $category, $av ); + if ($id) { + $av = Koha::AuthorisedValues->new->find( $id ); + $selected_branches = $av->branch_limitations; + } else { + $category = $input->param('category'); + } + + my $branches = Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed; + my @branches_loop; + foreach my $branch ( @$branches ) { + my $selected = ( grep {$_ eq $branch->{branchcode}} @$selected_branches ) ? 1 : 0; + push @branches_loop, { + branchcode => $branch->{branchcode}, + branchname => $branch->{branchname}, + selected => $selected, + }; + } + if ($id) { $template->param(action_modify => 1); - $template->param('heading_modify_authorized_value_p' => 1); - } elsif ( ! $data->{'category'} ) { + } elsif ( ! $category ) { $template->param(action_add_category => 1); - $template->param('heading_add_new_category_p' => 1); } else { $template->param(action_add_value => 1); - $template->param('heading_add_authorized_value_p' => 1); } - $template->param('use_heading_flags_p' => 1); - $template->param( category => $data->{'category'}, - authorised_value => $data->{'authorised_value'}, - lib => $data->{'lib'}, - lib_opac => $data->{'lib_opac'}, - id => $data->{'id'}, - imagesets => C4::Koha::getImageSets( checked => $data->{'imageurl'} ), - offset => $offset, - ); - -################## ADD_VALIDATE ################################## -# called by add_form, used to insert/modify data in DB -} elsif ($op eq 'add_validate') { + + if ( $av ) { + $template->param( + category => $av->category, + authorised_value => $av->authorised_value, + lib => $av->lib, + lib_opac => $av->lib_opac, + id => $av->id, + imagesets => C4::Koha::getImageSets( checked => $av->imageurl ), + ); + } else { + $template->param( + category => $category, + imagesets => C4::Koha::getImageSets(), + ); + } + $template->param( + branches_loop => \@branches_loop, + ); + +} elsif ($op eq 'add') { my $new_authorised_value = $input->param('authorised_value'); my $new_category = $input->param('category'); my $imageurl = $input->param( 'imageurl' ) || ''; - $imageurl = '' if $imageurl =~ /removeImage/; + $imageurl = '' if $imageurl =~ /removeImage/; my $duplicate_entry = 0; + my @branches = grep { $_ ne q{} } $input->multi_param('branches'); - if ( $id ) { # Update - my $sth = $dbh->prepare( "SELECT category, authorised_value FROM authorised_values WHERE id = ? "); - $sth->execute($id); - my ($category, $authorised_value) = $sth->fetchrow_array(); - if ( $authorised_value ne $new_authorised_value ) { - my $sth = $dbh->prepare_cached( "SELECT COUNT(*) FROM authorised_values " . - "WHERE category = ? AND authorised_value = ? and id <> ? "); - $sth->execute($new_category, $new_authorised_value, $id); - ($duplicate_entry) = $sth->fetchrow_array(); + my $already_exists = Koha::AuthorisedValues->search( + { + category => $new_category, + authorised_value => $new_authorised_value, } - unless ( $duplicate_entry ) { - my $sth=$dbh->prepare( 'UPDATE authorised_values - SET category = ?, - authorised_value = ?, - lib = ?, - lib_opac = ?, - imageurl = ? - WHERE id=?' ); - my $lib = $input->param('lib'); - my $lib_opac = $input->param('lib_opac'); - undef $lib if ($lib eq ""); # to insert NULL instead of a blank string - undef $lib_opac if ($lib_opac eq ""); # to insert NULL instead of a blank string - $sth->execute($new_category, $new_authorised_value, $lib, $lib_opac, $imageurl, $id); - print "Content-Type: text/html\n\n"; - exit; + )->next; + + if ( $already_exists and ( not $id or $already_exists->id != $id ) ) { + push @messages, {type => 'error', code => 'already_exists' }; + } + elsif ( $new_category eq 'branches' or $new_category eq 'itemtypes' or $new_category eq 'cn_source' ) { + push @messages, {type => 'error', code => 'invalid_category_name' }; + } + elsif ( $id ) { # Update + my $av = Koha::AuthorisedValues->new->find( $id ); + + $av->lib( scalar $input->param('lib') || undef ); + $av->lib_opac( scalar $input->param('lib_opac') || undef ); + $av->category( $new_category ); + $av->authorised_value( $new_authorised_value ); + $av->imageurl( $imageurl ); + eval{ + $av->store; + $av->replace_branch_limitations( \@branches ); + }; + if ( $@ ) { + push @messages, {type => 'error', code => 'error_on_update' }; + } else { + push @messages, { type => 'message', code => 'success_on_update' }; } } else { # Insert - my $sth = $dbh->prepare_cached( "SELECT COUNT(*) FROM authorised_values " . - "WHERE category = ? AND authorised_value = ? "); - $sth->execute($new_category, $new_authorised_value); - ($duplicate_entry) = $sth->fetchrow_array(); - unless ( $duplicate_entry ) { - my $sth=$dbh->prepare( 'INSERT INTO authorised_values - ( id, category, authorised_value, lib, lib_opac, imageurl ) - values (?, ?, ?, ?, ?, ?)' ); - my $lib = $input->param('lib'); - my $lib_opac = $input->param('lib_opac'); - undef $lib if ($lib eq ""); # to insert NULL instead of a blank string - undef $lib_opac if ($lib_opac eq ""); # to insert NULL instead of a blank string - $sth->execute($id, $new_category, $new_authorised_value, $lib, $lib_opac, $imageurl ); - print "Content-Type: text/html\n\nparam('category')."&offset=$offset\">"; - exit; + my $av = Koha::AuthorisedValue->new( { + category => $new_category, + authorised_value => $new_authorised_value, + lib => scalar $input->param('lib') || undef, + lib_opac => scalar $input->param('lib_opac') || undef, + imageurl => $imageurl, + } ); + + eval { + $av->store; + $av->replace_branch_limitations( \@branches ); + }; + + if ( $@ ) { + push @messages, {type => 'error', code => 'error_on_insert' }; + } else { + push @messages, { type => 'message', code => 'success_on_insert' }; } } - if ( $duplicate_entry ) { - $template->param(duplicate_category => $new_category, - duplicate_value => $new_authorised_value, - else => 1); - default_form(); - } - -################## DELETE_CONFIRM ################################## -# called by default form, used to confirm deletion of data in DB -} elsif ($op eq 'delete_confirm') { - my $sth=$dbh->prepare("select category,authorised_value,lib,lib_opac from authorised_values where id=?"); - $sth->execute($id); - my $data=$sth->fetchrow_hashref; - $id = $input->param('id') unless $id; - $template->param(searchfield => $searchfield, - Tlib => $data->{'lib'}, - Tlib_opac => $data->{'lib_opac'}, - Tvalue => $data->{'authorised_value'}, - id =>$id, - ); - - # 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 $id = $input->param('id'); - my $sth=$dbh->prepare("delete from authorised_values where id=?"); - $sth->execute($id); - print "Content-Type: text/html\n\n"; - exit; - # END $OP eq DELETE_CONFIRMED -################## DEFAULT ################################## -} else { # DEFAULT - default_form(); -} #---- END $OP eq DEFAULT -output_html_with_http_headers $input, $cookie, $template->output; -exit 0; - -sub default_form { - # build categories list - my $sth = $dbh->prepare("select distinct category from authorised_values"); - $sth->execute; - my @category_list; - my %categories; # a hash, to check that some hardcoded categories exist. - while ( my ($category) = $sth->fetchrow_array) { - push(@category_list,$category); - $categories{$category} = 1; - } - # push koha system categories - foreach (qw(Asort1 Asort2 Bsort1 Bsort2 SUGGEST DAMAGED LOST)) { - push @category_list, $_ unless $categories{$_}; + $op = 'list'; + $searchfield = $new_category; +} elsif ($op eq 'add_category' ) { + my $new_category = $input->param('category'); + + my $already_exists = Koha::AuthorisedValueCategories->find( + { + category_name => $new_category, + } + ); + + if ( $already_exists ) { + if ( $new_category eq 'branches' or $new_category eq 'itemtypes' or $new_category eq 'cn_source' ) { + push @messages, {type => 'error', code => 'invalid_category_name' }; + } else { + push @messages, {type => 'error', code => 'cat_already_exists' }; + } } + else { # Insert + my $av = Koha::AuthorisedValueCategory->new( { + category_name => $new_category, + } ); - #reorder the list - @category_list = sort {$a cmp $b} @category_list; - my $tab_list = CGI::scrolling_list(-name=>'searchfield', - -id=>'searchfield', - -values=> \@category_list, - -default=>"", - -size=>1, - -multiple=>0, - ); - if (!$searchfield) { - $searchfield=$category_list[0]; - } - my ($results) = AuthorizedValuesForCategory($searchfield); - my $count = scalar(@$results); - my @loop_data = (); - # builds value list - for (my $i=0; $i < $count; $i++){ - my %row_data; # get a fresh hash for the row data - $row_data{category} = $results->[$i]{'category'}; - $row_data{authorised_value} = $results->[$i]{'authorised_value'}; - $row_data{lib} = $results->[$i]{'lib'}; - $row_data{lib_opac} = $results->[$i]{'lib_opac'}; - $row_data{imageurl} = getitemtypeimagelocation( 'intranet', $results->[$i]{'imageurl'} ); - $row_data{edit} = "$script_name?op=add_form&id=".$results->[$i]{'id'}."&offset=$offset"; - $row_data{delete} = "$script_name?op=delete_confirm&searchfield=$searchfield&id=".$results->[$i]{'id'}."&offset=$offset"; - push(@loop_data, \%row_data); - } + eval { + $av->store; + }; - $template->param( loop => \@loop_data, - tab_list => $tab_list, - category => $searchfield ); + if ( $@ ) { + push @messages, {type => 'error', code => 'error_on_insert_cat' }; + } else { + push @messages, { type => 'message', code => 'success_on_insert_cat' }; + $searchfield = $new_category; + } + } + + $op = 'list'; +} elsif ($op eq 'delete') { + my $av = Koha::AuthorisedValues->new->find( $id ); + my $deleted = eval {$av->delete}; + if ( $@ or not $deleted ) { + push @messages, {type => 'error', code => 'error_on_delete' }; + } else { + push @messages, { type => 'message', code => 'success_on_delete' }; + } + + $op = 'list'; + $template->param( delete_success => 1 ); } +$template->param( + op => $op, + searchfield => $searchfield, + messages => \@messages, +); + +if ( $op eq 'list' ) { + # build categories list + my @categories = Koha::AuthorisedValueCategories->search({ category_name => { -not_in => ['', 'branches', 'itemtypes', 'cn_source']}}, { order_by => ['category_name'] } ); + my @category_list; + for my $category ( @categories ) { + push( @category_list, $category->category_name ); + } + + $searchfield ||= $category_list[0]; + + my @avs_by_category = Koha::AuthorisedValues->new->search( { category => $searchfield } ); + my @loop_data = (); + # builds value list + for my $av ( @avs_by_category ) { + my %row_data; # get a fresh hash for the row data + $row_data{category} = $av->category; + $row_data{authorised_value} = $av->authorised_value; + $row_data{lib} = $av->lib; + $row_data{lib_opac} = $av->lib_opac; + $row_data{imageurl} = getitemtypeimagelocation( 'intranet', $av->imageurl ); + $row_data{branches} = $av->branch_limitations; + $row_data{id} = $av->id; + push(@loop_data, \%row_data); + } + + $template->param( + loop => \@loop_data, + category => $searchfield, + categories => \@category_list, + ); + +} +output_html_with_http_headers $input, $cookie, $template->output;