# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-use warnings;
+use Modern::Perl;
use CGI qw ( -utf8 );
use C4::Auth;
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;
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.tt",
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;
- my @selected_branches;
- 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;
- $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 = ?;");
- $sth->execute( $id );
- while ( my $branch = $sth->fetchrow_hashref ) {
- push @selected_branches, $branch;
- }
- } 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 = GetBranches;
my @branches_loop;
foreach my $branchcode ( sort { uc($branches->{$a}->{branchname}) cmp uc($branches->{$b}->{branchname}) } keys %$branches ) {
- my $selected = ( grep {$_->{branchcode} eq $branchcode} @selected_branches ) ? 1 : 0;
+ my $selected = ( grep {$_->{branchcode} eq $branchcode} @$selected_branches ) ? 1 : 0;
push @branches_loop, {
branchcode => $branchcode,
branchname => $branches->{$branchcode}->{branchname},
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,
- branches_loop => \@branches_loop,
- );
-
-################## 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 = $input->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();
- }
- 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);
- if ( @branches ) {
- $sth = $dbh->prepare("DELETE FROM authorised_values_branches WHERE av_id = ?");
- $sth->execute( $id );
- $sth = $dbh->prepare(
- "INSERT INTO authorised_values_branches
- ( av_id, branchcode )
- VALUES ( ?, ? )"
- );
- for my $branchcode ( @branches ) {
- next if not $branchcode;
- $sth->execute($id, $branchcode);
- }
- }
- $sth->finish;
- print $input->redirect("/cgi-bin/koha/admin/authorised_values.pl?searchfield=$new_category&offset=$offset");
- exit;
+ my $av = Koha::AuthorisedValues->new->find( $id );
+
+ $av->lib( $input->param('lib') || undef );
+ $av->lib_opac( $input->param('lib_opac') || undef );
+ $av->category( $new_category );
+ $av->authorised_value( $new_authorised_value );
+ $av->imageurl( $imageurl );
+ eval{
+ $av->store;
+ $av->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
- ( 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( $new_category, $new_authorised_value, $lib, $lib_opac, $imageurl );
- $id = $dbh->{'mysql_insertid'};
- if ( @branches ) {
- $sth = $dbh->prepare(
- "INSERT INTO authorised_values_branches
- ( av_id, branchcode )
- VALUES ( ?, ? )"
- );
- for my $branchcode ( @branches ) {
- next if not $branchcode;
- $sth->execute($id, $branchcode);
- }
- }
- my $category = $input->param('category');
- print $input->redirect("/cgi-bin/koha/admin/authorised_values.pl?searchfield=$category&offset=$offset");
- exit;
+ my $av = Koha::AuthorisedValue->new( {
+ category => $new_category,
+ authorised_value => $new_authorised_value,
+ lib => $input->param('lib') || undef,
+ lib_opac => $input->param('lib_opac') || undef,
+ imageurl => $imageurl,
+ } );
+ eval {
+ $av->store;
+ $av->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 $input->redirect("/cgi-bin/koha/admin/authorised_values.pl?searchfield=$searchfield&offset=$offset");
- exit;
- # END $OP eq DELETE_CONFIRMED
-################## DEFAULT ##################################
-} else { # DEFAULT
- default_form();
-} #---- END $OP eq DEFAULT
-output_html_with_http_headers $input, $cookie, $template->output;
+ $op = 'list';
+ $searchfield = $new_category;
+} elsif ($op eq 'delete') {
+ my $av = Koha::AuthorisedValues->new->find( $input->param('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' };
+ }
-exit 0;
+ $op = 'list';
+ $template->param( delete_success => 1 );
+}
+
+$template->param(
+ op => $op,
+ searchfield => $searchfield,
+ messages => \@messages,
+);
-sub default_form {
+if ( $op eq 'list' ) {
# build categories list
- my $category_list = C4::Koha::GetAuthorisedValueCategories();
- my @category_list = @{$category_list};
+ my @categories = Koha::AuthorisedValues->new->categories;
+ my @category_list;
my %categories; # a hash, to check that some hardcoded categories exist.
- for my $category ( @category_list ) {
+ for my $category ( @categories ) {
+ push( @category_list, $category );
$categories{$category} = 1;
}
push @category_list, $_ unless $categories{$_};
}
- #reorder the list
- @category_list = sort {lc($a) cmp lc($b)} @category_list;
- if (!$searchfield) {
- $searchfield=$category_list[0];
- }
- my $tab_list = {
- values => \@category_list,
- default => $searchfield,
- };
- my ($results) = AuthorizedValuesForCategory($searchfield);
- my $count = scalar(@$results);
- my @loop_data = ();
- # builds value list
- my $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 = ?");
- for (my $i=0; $i < $count; $i++){
- $sth->execute( $results->[$i]{id} );
- my @selected_branches;
- while ( my $branch = $sth->fetchrow_hashref ) {
- push @selected_branches, $branch;
- }
- 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";
- $row_data{branches} = \@selected_branches;
- push(@loop_data, \%row_data);
- }
+ #reorder the list
+ @category_list = sort {$a cmp $b} @category_list;
+
+ $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,
- tab_list => $tab_list,
- category => $searchfield,
+ loop => \@loop_data,
+ category => $searchfield,
+ categories => \@category_list,
);
-}
+}
+output_html_with_http_headers $input, $cookie, $template->output;
[% INCLUDE 'doc-head-open.inc' %]
-<title>Koha › Administration › Authorized values [% IF ( add_form ) %] › [% IF ( action_modify ) %]Modify authorized value[% END %]
- [% IF ( action_add_value ) %] › New authorized value[% END %]
- [% IF ( action_add_category ) %] › New category[% END %][% END %]
-[% IF ( delete_confirm ) %] › Confirm deletion[% END %]
-[% IF ( else ) %]Authorized values[% END %]</title>
+<title>Koha › Administration › Authorized values
+[% IF op == 'add_form' %]
+ [% IF ( action_modify ) %] › Modify authorized value[% END %]
+ [% IF ( action_add_value ) %] › New authorized value[% END %]
+ [% IF ( action_add_category ) %] › New category[% END %]
+[% END %]
+</title>
[% INCLUDE 'doc-head-close.inc' %]
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
$("#branches option:first").attr("selected", "selected");
}
$('#icons').tabs();
+
+ $("a.delete").click(function(){
+ return confirm(_("Are you sure you want to delete this authorised value?"));
+ });
});
//]]>
</script>
-[% IF ( else ) %]
+[% IF op == 'list' %]
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
<body id="admin_authorised_values" class="admin">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'cat-search.inc' %]
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › [% IF ( add_form ) %] <a href="/cgi-bin/koha/admin/authorised_values.pl">Authorized values</a> › [% IF ( action_modify ) %]Modify authorized value[% END %]
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › [% IF op == 'add_form' %] <a href="/cgi-bin/koha/admin/authorised_values.pl">Authorized values</a> › [% IF ( action_modify ) %]Modify authorized value[% END %]
[% IF ( action_add_value ) %]New authorized value[% END %]
[% IF ( action_add_category ) %]New category[% END %][% END %]
-[% IF ( delete_confirm ) %] <a href="/cgi-bin/koha/admin/authorised_values.pl">Authorized values</a> › Confirm deletion[% END %]
-[% IF ( else ) %]Authorized values[% END %]</div>
+[% IF op == 'list' %]Authorized values[% END %]</div>
<div id="doc3" class="yui-t2">
<div id="yui-main">
<div class="yui-b">
-[% IF ( add_form ) %]
+[% IF op == 'add_form' %]
<h1>
[% IF ( action_modify ) %]Modify authorized value[% END %]
[% IF ( action_add_value ) %]New authorized value[% END %]
[% IF ( action_modify ) %]<div class="note"><strong>NOTE:</strong> If you change an authorized value code, existing records using it won't be updated. Changes to value descriptions will show immediately.</div>[% END %]
- <form action="[% script_name %]" name="Aform" method="post">
- <input type="hidden" name="op" value="add_validate" />
- <input type="hidden" name="offset" value="[% offset %]" />
+ <form action="/cgi-bin/koha/admin/authorised_values.pl" name="Aform" method="post">
+ <input type="hidden" name="op" value="add" />
<fieldset class="rows"><ol>
<li>
[% IF ( action_add_category ) %]<label for="category">Category: </label>
[% END %]
-[% IF ( delete_confirm ) %]
- <div class="dialog alert">
-<h3>Confirm deletion</h3>
-<table>
- <tr>
- <th>Category</th>
- <th>Value</th>
- <th>Description</th>
- <th>Description (OPAC)</th>
- </tr>
- <tr>
- <td>[% searchfield %]</td>
- <td>[% Tvalue %]</td>
- <td>[% Tlib %]</td>
- <td>[% Tlib_opac %]</td>
- </tr>
- </table>
- <form action="[% script_name %]" method="post">
- <input type="hidden" name="op" value="delete_confirmed" />
- <input type="hidden" name="id" value="[% id %]" />
- <input type="hidden" name="searchfield" value="[% searchfield %]" /><fieldset class="action"><input type="submit" value="Yes, delete" class="approve" /></form>
-<form action="[% script_name %]" method="get"><input type="hidden" name="searchfield" value="[% searchfield %]" /><input type="submit" value="No, do not delete" class="deny" /></form>
-</div>
-[% END %]
-
-[% IF ( else ) %]
+[% IF op == 'list' %]
<div id="toolbar" class="btn-toolbar">
<a id="addauth" class="btn btn-small" href= "/cgi-bin/koha/admin/authorised_values.pl?op=add_form&category=[% category %]"><i class="icon-plus"> </i> New authorized value for [% category %]</a>
<h1>Authorized values</h1>
<div class="note"><strong>NOTE:</strong> If you change an authorized value code, existing records using it won't be updated. Changes to value descriptions will show immediately.</div>
-[% IF ( duplicate_category ) %]
-<div class="dialog alert">Could not add value "[% duplicate_value %]" for category "[% duplicate_category %]" — value already present.
-</div>
+[% FOR m IN messages %]
+ <div class="dialog [% m.type %]">
+ [% SWITCH m.code %]
+ [% CASE 'error_on_update' %]
+ An error occurred when updating this authorised values. Perhaps the value already exists.
+ [% CASE 'error_on_insert' %]
+ An error occurred when inserting this authorised values. Perhaps the value or the category already exists.
+ [% CASE 'error_on_delete' %]
+ An error occurred when deleteing this authorised values. Check the logs.
+ [% CASE 'success_on_update' %]
+ Authorised value updated with success.
+ [% CASE 'success_on_insert' %]
+ Authorised value inserted with success.
+ [% CASE 'success_on_delete' %]
+ Authorised value deleted with success.
+ [% CASE %]
+ [% m.code %]
+ [% END %]
+ </div>
[% END %]
+
<form action="/cgi-bin/koha/admin/authorised_values.pl" method="post" id="category">
- <label for="searchfield">Show category: </label>
- <select name="searchfield" id="searchfield" size="1">
- [% FOREACH value IN tab_list.values %]
- [% IF ( value == tab_list.default ) %]
- <option value="[% value %]" selected="selected">[% value %]</option>
+ <label for="searchfield">Show category: </label>
+ <select name="searchfield" id="searchfield" size="1">
+ [% FOR c IN categories %]
+ [% IF c == searchfield %]
+ <option value="[% c %]" selected="selected">[% c %]</option>
[% ELSE %]
- <option value="[% value %]">[% value %]</option>
- [% END %]
+ <option value="[% c %]">[% c %]</option>
[% END %]
- </select>
- <input type="submit" value="Submit" />
+ [% END %]
+ <input type="submit" value="Submit" />
</form>
[% IF ( category == 'Bsort1' ) %]
<p>An authorized value attached to patrons, that can be used for stats purposes</p>
No limitation
[% END %]
</td>
- <td><a href="[% loo.edit %]">Edit</a></td>
- <td><a href="[% loo.delete %]">Delete</a></td>
+ <td><a href="/cgi-bin/koha/admin/authorised_values.pl?op=add_form&id=[% loo.id %]">Edit</a></td>
+ <td><a class="delete" href="/cgi-bin/koha/admin/authorised_values.pl?op=delete&searchfield=[% searchfield %]&id=[% loo.id %]">Delete</a></td>
</tr>
[% END %]
</tbody></table>[% ELSE %]
[% END %]
[% IF ( isprevpage ) %]
-<form class="inline" action="[% script_name %]" method="post">
-<input type="hidden" name="offset" value="[% prevpage %]" /><input type="hidden" name="searchfield" value="[% searchfield %]" />
+<form class="inline" action="/cgi-bin/koha/admin/authorised_values.pl" method="post">
+<input type="hidden" name="searchfield" value="[% searchfield %]" />
<input type="submit" value="<< Previous" /></form>
[% END %]