Bug 14828: use Koha::ItemType[s] in admin/itemtypes

Test plan:
Add/edit/remove item types from the administration module
(admin/itemtypes.pl).
You should get message feedback after each action.
Don't forget to play with the image and try to remove an item type
linked to records (you should not be able to remove it).

Signed-off-by: Marc Véron <veron@veron.ch>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com
This commit is contained in:
Jonathan Druart 2015-09-15 14:20:22 +01:00 committed by Brendan Gallagher
parent 38567b224b
commit 95f0caed38
2 changed files with 412 additions and 505 deletions

View file

@ -1,6 +1,7 @@
#!/usr/bin/perl #!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications # Copyright 2000-2002 Katipo Communications
# Copyright 2002 Paul Poulain
# #
# This file is part of Koha. # This file is part of Koha.
# #
@ -19,32 +20,11 @@
=head1 admin/itemtypes.pl =head1 admin/itemtypes.pl
script to administer the categories table
written 20/02/2002 by paul.poulain@free.fr
This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html)
ALGO :
this script use an $op to know what to do.
if $op is empty or none of the above values,
- the default screen is build (with all records, or filtered datas).
- the user can clic on add, modify or delete record.
if $op=add_form
- if primkey exists, this is a modification,so we read the $primkey record
- builds the add/modify form
if $op=add_validate
- the user has just send datas, so we create/modify the record
if $op=delete_form
- we show the record having primkey=$primkey and ask for deletion validation form
if $op=delete_confirm
- we delete the record having primkey=$primkey
=cut =cut
use strict; use Modern::Perl;
#use warnings; FIXME - Bug 2505
use CGI qw ( -utf8 ); use CGI qw ( -utf8 );
use List::Util qw/min/;
use File::Spec; use File::Spec;
use C4::Koha; use C4::Koha;
@ -52,18 +32,17 @@ use C4::Context;
use C4::Auth; use C4::Auth;
use C4::Output; use C4::Output;
use Koha::ItemTypes;
use Koha::Localizations; use Koha::Localizations;
my $input = new CGI; my $input = new CGI;
my $searchfield = $input->param('description'); my $searchfield = $input->param('description');
my $script_name = "/cgi-bin/koha/admin/itemtypes.pl"; my $itemtype_code = $input->param('itemtype');
my $itemtype = $input->param('itemtype'); my $op = $input->param('op') // 'list';
my $op = $input->param('op') // 'list';
my @messages; my @messages;
$searchfield =~ s/\,//g; $searchfield =~ s/\,//g if $searchfield;
my ( $template, $borrowernumber, $cookie ) = get_template_and_user( my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
{ { template_name => "admin/itemtypes.tt",
template_name => "admin/itemtypes.tt",
query => $input, query => $input,
type => "intranet", type => "intranet",
authnotrequired => 0, authnotrequired => 0,
@ -72,228 +51,130 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
} }
); );
$template->param(script_name => $script_name);
if ($op) {
$template->param($op => 1); # we show only the TMPL_VAR names $op
}
my $dbh = C4::Context->dbh; my $dbh = C4::Context->dbh;
my $sip_media_type = $input->param('sip_media_type'); my $sip_media_type = $input->param('sip_media_type');
undef($sip_media_type) if defined($sip_media_type) and $sip_media_type =~ /^\s*$/; undef($sip_media_type) if defined($sip_media_type) and $sip_media_type =~ /^\s*$/;
################## ADD_FORM ##################################
# called by default. Used to create form to add or modify a record
if ( $op eq 'add_form' ) { if ( $op eq 'add_form' ) {
#---- if primkey exists, it's a modify action, so read values to modify... my $itemtype = Koha::ItemTypes->find($itemtype_code);
my $data; my $imagesets = C4::Koha::getImageSets( checked => ( $itemtype ? $itemtype->imageurl : undef ) );
if ($itemtype) { my $searchcategory = GetAuthorisedValues("ITEMTYPECAT", ( $itemtype ? $itemtype->searchcategory : '' ) );
my $sth = $dbh->prepare(q|
SELECT
itemtypes.itemtype,
itemtypes.description,
itemtypes.rentalcharge,
itemtypes.notforloan,
itemtypes.imageurl,
itemtypes.summary,
itemtypes.checkinmsg,
itemtypes.checkinmsgtype,
itemtypes.sip_media_type,
itemtypes.hideinopac,
itemtypes.searchcategory,
COALESCE( localization.translation, itemtypes.description ) AS translated_description
FROM itemtypes
LEFT JOIN localization ON itemtypes.itemtype = localization.code
AND localization.entity='itemtypes'
AND localization.lang = ?
WHERE itemtype = ?
|);
my $language = C4::Languages::getlanguage();
$sth->execute($language, $itemtype);
$data = $sth->fetchrow_hashref;
}
my $imagesets = C4::Koha::getImageSets( checked => $data->{'imageurl'} );
my $remote_image = undef;
if ( defined $data->{imageurl} and $data->{imageurl} =~ /^http/i ) {
$remote_image = $data->{imageurl};
}
my $searchcategory = GetAuthorisedValues("ITEMTYPECAT", $data->{'searchcategory'});
$template->param( $template->param(
itemtype => $itemtype, itemtype => $itemtype,
description => $data->{'description'}, imagesets => $imagesets,
rentalcharge => sprintf( "%.2f", $data->{'rentalcharge'} ), searchcategory => $searchcategory,
notforloan => $data->{'notforloan'},
imageurl => $data->{'imageurl'},
template => C4::Context->preference('template'),
summary => $data->{summary},
checkinmsg => $data->{'checkinmsg'},
checkinmsgtype => $data->{'checkinmsgtype'},
imagesets => $imagesets,
remote_image => $remote_image,
sip_media_type => $data->{sip_media_type},
hideinopac => $data->{'hideinopac'},
searchcategory => $searchcategory,
); );
} elsif ( $op eq 'add_validate' ) {
my $is_a_modif = $input->param('is_a_modif');
my $itemtype = Koha::ItemTypes->find($itemtype_code);
my $description = $input->param('description');
my $rentalcharge = $input->param('rentalcharge');
my $image = $input->param('image') || q||;
# END $OP eq ADD_FORM my $notforloan = $input->param('notforloan') ? 1 : 0;
################## ADD_VALIDATE ################################## my $imageurl =
# called by add_form, used to insert/modify data in DB $image eq 'removeImage' ? ''
} : (
elsif ( $op eq 'add_validate' ) { $image eq 'remoteImage' ? $input->param('remoteImage')
my $is_a_modif = $input->param('is_a_modif'); : $image
my ( $already_exists ) = $dbh->selectrow_array(q| );
SELECT itemtype my $summary = $input->param('summary');
FROM itemtypes my $checkinmsg = $input->param('checkinmsg');
WHERE itemtype = ? my $checkinmsgtype = $input->param('checkinmsgtype');
|, undef, $itemtype ); my $hideinopac = $input->param('hideinopac') // 0;
if ( $already_exists and $is_a_modif ) { # it's a modification my $searchcategory = $input->param('searchcategory');
my $query2 = '
UPDATE itemtypes if ( $itemtype and $is_a_modif ) { # it's a modification
SET description = ? $itemtype->description($description);
, rentalcharge = ? $itemtype->rentalcharge($rentalcharge);
, notforloan = ? $itemtype->notforloan($notforloan);
, imageurl = ? $itemtype->imageurl($imageurl);
, summary = ? $itemtype->summary($summary);
, checkinmsg = ? $itemtype->checkinmsg($checkinmsg);
, checkinmsgtype = ? $itemtype->checkinmsgtype($checkinmsgtype);
, sip_media_type = ? $itemtype->sip_media_type($sip_media_type);
, hideinopac = ? $itemtype->hideinopac($hideinopac);
, searchcategory = ? $itemtype->searchcategory($searchcategory);
WHERE itemtype = ?
'; eval { $itemtype->store; };
my $sth = $dbh->prepare($query2);
$sth->execute( if ($@) {
$input->param('description'), push @messages, { type => 'error', code => 'error_on_update' };
$input->param('rentalcharge'), } else {
( $input->param('notforloan') ? 1 : 0 ), push @messages, { type => 'message', code => 'success_on_update' };
( }
$input->param('image') eq 'removeImage' ? '' : ( } elsif ( not $itemtype and not $is_a_modif ) {
$input->param('image') eq 'remoteImage' my $itemtype = Koha::ItemType->new(
? $input->param('remoteImage') { itemtype => $itemtype_code,
: $input->param('image') . "" description => $description,
) rentalcharge => $rentalcharge,
), notforloan => $notforloan,
$input->param('summary'), imageurl => $imageurl,
$input->param('checkinmsg'), summary => $summary,
$input->param('checkinmsgtype'), checkinmsg => $checkinmsg,
$sip_media_type, checkinmsgtype => $checkinmsgtype,
$input->param('hideinopac') ? 1 : 0, sip_media_type => $sip_media_type,
$input->param('searchcategory'), hideinopac => $hideinopac,
$input->param('itemtype') searchcategory => $searchcategory,
}
); );
} eval { $itemtype->store; };
elsif ( not $already_exists and not $is_a_modif ) {
my $query = " if ($@) {
INSERT INTO itemtypes push @messages, { type => 'error', code => 'error_on_insert' };
(itemtype,description,rentalcharge, notforloan, imageurl, summary, checkinmsg, checkinmsgtype, sip_media_type, hideinopac, searchcategory) } else {
VALUES push @messages, { type => 'message', code => 'success_on_insert' };
(?,?,?,?,?,?,?,?,?,?,?); }
"; } else {
my $sth = $dbh->prepare($query); push @messages,
my $image = $input->param('image'); { type => 'error',
$sth->execute(
$input->param('itemtype'),
$input->param('description'),
$input->param('rentalcharge'),
$input->param('notforloan') ? 1 : 0,
$image eq 'removeImage' ? '' :
$image eq 'remoteImage' ? $input->param('remoteImage') :
$image,
$input->param('summary'),
$input->param('checkinmsg'),
$input->param('checkinmsgtype'),
$sip_media_type,
$input->param('hideinopac') ? 1 : 0,
$input->param('searchcategory'),
);
}
else {
push @messages, {
type => 'error',
code => 'already_exists', code => 'already_exists',
}; };
} }
$searchfield = ''; $searchfield = '';
$op = 'list'; $op = 'list';
# END $OP eq ADD_VALIDATE } elsif ( $op eq 'delete_confirm' ) {
################## DELETE_CONFIRM ##################################
# called by default form, used to confirm deletion of data in DB
}
elsif ( $op eq 'delete_confirm' ) {
# Check both items and biblioitems # Check both items and biblioitems
my $sth = $dbh->prepare(' my ($total) = $dbh->selectrow_array( '
SELECT COUNT(*) AS total FROM ( SELECT COUNT(*) AS total FROM (
SELECT itemtype AS t FROM biblioitems SELECT itemtype AS t FROM biblioitems
UNION ALL UNION ALL
SELECT itype AS t FROM items SELECT itype AS t FROM items
) AS tmp ) AS tmp
WHERE tmp.t=? WHERE tmp.t=?
'); ', {}, $itemtype_code );
$sth->execute($itemtype);
my $total = $sth->fetchrow_hashref->{'total'};
my $sth = if ($total) {
$dbh->prepare( push @messages, { type => 'error', code => 'cannot_be_deleted', total => $total };
"select itemtype,description,rentalcharge from itemtypes where itemtype=?" $op = 'list';
); } else {
$sth->execute($itemtype); my $itemtype = Koha::ItemTypes->find($itemtype_code);
my $data = $sth->fetchrow_hashref; $template->param( itemtype => $itemtype, );
$template->param( }
itemtype => $itemtype,
description => $data->{description},
rentalcharge => sprintf( "%.2f", $data->{rentalcharge} ),
imageurl => $data->{imageurl},
total => $total
);
# END $OP eq DELETE_CONFIRM } elsif ( $op eq 'delete_confirmed' ) {
################## DELETE_CONFIRMED ################################## my $itemtype = Koha::ItemTypes->find($itemtype_code);
# called by delete_confirm, used to effectively confirm deletion of data in DB my $deleted = eval { $itemtype->delete };
} if ( $@ or not $deleted ) {
elsif ( $op eq 'delete_confirmed' ) { push @messages, { type => 'error', code => 'error_on_delete' };
my $itemtype = uc( $input->param('itemtype') ); } else {
my $sth = $dbh->prepare("delete from itemtypes where itemtype=?"); push @messages, { type => 'message', code => 'success_on_delete' };
$sth->execute($itemtype); }
$sth = $dbh->prepare("delete from issuingrules where itemtype=?");
$sth->execute($itemtype); $op = 'list';
print $input->redirect('itemtypes.pl');
exit;
# END $OP eq DELETE_CONFIRMED
################## DEFAULT ##################################
} }
if ( $op eq 'list' ) { if ( $op eq 'list' ) {
my $results = C4::Koha::GetItemTypes( style => 'array' ); my $itemtypes = Koha::ItemTypes->search;
my @loop;
foreach my $itemtype ( @{$results} ) {
$itemtype->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtype->{imageurl} );
$itemtype->{rentalcharge} = sprintf( '%.2f', $itemtype->{rentalcharge} );
my @translated_descriptions = Koha::Localizations->search(
{ entity => 'itemtypes',
code => $itemtype->{itemtype},
}
);
$itemtype->{translated_descriptions} = [ map {
{
lang => $_->lang,
translation => $_->translation,
}
} @translated_descriptions ];
push( @loop, $itemtype );
}
$template->param( $template->param(
loop => \@loop, itemtypes => $itemtypes,
else => 1, messages => \@messages,
messages => \@messages,
); );
} }
$template->param( op => $op );
output_html_with_http_headers $input, $cookie, $template->output; output_html_with_http_headers $input, $cookie, $template->output;

View file

@ -1,20 +1,22 @@
[% USE Koha %]
[% USE AuthorisedValues %] [% USE AuthorisedValues %]
[% USE Price %]
[% INCLUDE 'doc-head-open.inc' %] [% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Administration &rsaquo; Item types [% IF ( add_form ) %]&rsaquo; <title>Koha &rsaquo; Administration &rsaquo; Item types [% IF op == 'add_form' %]&rsaquo;
[% IF ( itemtype ) %] [% IF ( itemtype ) %]
Modify item type '[% itemtype %]' Modify item type '[% itemtype.itemtype %]'
[% ELSE %] [% ELSE %]
Add item type Add item type
[% END %] [% END %]
[% END %] [% END %]
[% IF ( delete_confirm ) %]&rsaquo; [% IF op == 'delete_confirm' %]&rsaquo;
[% IF ( total ) %] [% IF ( total ) %]
Cannot delete item type '[% itemtype %]' Cannot delete item type '[% itemtype.itemtype %]'
[% ELSE %] [% ELSE %]
Delete item type '[% itemtype %]'? Delete item type '[% itemtype.itemtype %]'?
[% END %] [% END %]
[% END %] [% END %]
[% IF ( delete_confirmed ) %]&rsaquo; [% IF op == 'delete_confirmed' %]&rsaquo;
Data deleted Data deleted
[% END %] [% END %]
</title> </title>
@ -55,312 +57,336 @@ Data deleted
[% INCLUDE 'header.inc' %] [% INCLUDE 'header.inc' %]
[% INCLUDE 'cat-search.inc' %] [% INCLUDE 'cat-search.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; [% IF ( add_form ) %] <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; [% IF op == 'add_form' %]
[% IF ( itemtype ) %] [% IF itemtype %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Modify item type '[% itemtype %]' <a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Modify item type '[% itemtype.itemtype %]'
[% ELSE %] [% ELSE %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Add item type <a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Add item type
[% END %] [% END %]
[% END %] [% END %]
[% IF ( delete_confirm ) %] [% IF op == 'delete_confirm' %]
[% IF ( total ) %] [% IF total %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Cannot delete item type '[% itemtype %]' <a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Cannot delete item type '[% itemtype.itemtype %]'
[% ELSE %] [% ELSE %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Delete item type '[% itemtype %]'? <a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo; Delete item type '[% itemtype.itemtype %]'?
[% END %] [% END %]
[% END %] [% END %]
[% IF ( delete_confirmed ) %] [% IF op == 'delete_confirmed' %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo;Data deleted <a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> &rsaquo;Data deleted
[% END %] [% END %]
[% IF ( else ) %] [% IF op == 'list' %]
Item types administration Item types administration
[% END %]</div> [% END %]</div>
<div id="doc3" class="yui-t2"> <div id="doc3" class="yui-t2">
<div id="bd"> <div id="bd">
<div id="yui-main"> <div id="yui-main">
<div class="yui-b"> <div class="yui-b">
[% IF ( else ) %]<div id="toolbar" class="btn-toolbar">
[% IF op == 'list' %]<div id="toolbar" class="btn-toolbar">
<a class="btn btn-small" id="newitemtype" href="/cgi-bin/koha/admin/itemtypes.pl?op=add_form"><i class="fa fa-plus"></i> New item type</a> <a class="btn btn-small" id="newitemtype" href="/cgi-bin/koha/admin/itemtypes.pl?op=add_form"><i class="fa fa-plus"></i> New item type</a>
</div>[% END %] </div>[% END %]
[% FOREACH message IN messages %] [% FOREACH m IN messages %]
[% IF message.type == 'success' %] <div class="dialog [% m.type %]">
<div class="dialog message"> [% SWITCH m.code %]
[% ELSIF message.type == 'warning' %] [% CASE 'error_on_update' %]
<div class="dialog alert"> An error occurred when updating this item type. Perhaps the value already exists.
[% ELSIF message.type == 'error' %] [% CASE 'error_on_insert' %]
<div class="dialog error" style="margin:auto;"> An error occurred when inserting this item type. Perhaps the value already exists.
[% END %] [% CASE 'error_on_delete' %]
[% IF message.code == 'already_exists' %] An error occurred when deleting this item type. Check the logs.
This item type already exists. [% CASE 'success_on_update' %]
[% END %] Item type updated successfully.
</div> [% CASE 'success_on_insert' %]
Item type inserted successfully.
[% CASE 'success_on_delete' %]
Item type deleted successfully.
[% CASE 'already_exists' %]
This item type already exists.
[% CASE 'cannot_be_deleted' %]
Cannot delete this item type. <p><strong>This record is used [% m.total %] times</strong>. Deletion is not possible.</p>
[% CASE %]
[% m.code %]
[% END %]
</div>
[% END %] [% END %]
[% IF ( add_form ) %] [% IF op == 'add_form' %]
[% IF ( itemtype ) %] [% IF itemtype %]
<h3>Modify item type</h3> <h3>Modify item type</h3>
[% ELSE %]
<h3>Add item type</h3>
[% END %]
<form action="[% script_name %]" name="Aform" method="post" id="itemtypeentry">
<input type="hidden" name="op" value="add_validate" />
<input type="hidden" name="checked" value="0" />
<fieldset class="rows">
<ol>
[% IF ( itemtype ) %]
<li>
<input type="hidden" name="is_a_modif" value="1" />
<span class="label">Item type: </span> <input type="hidden" name="itemtype" value="[% itemtype %]" />
[% itemtype %]
</li>
[% ELSE %]
<li>
<label for="itemtype" class="required">Item type: </label> <input type="text" id="itemtype" name="itemtype" size="10" maxlength="10" onblur="toUC(this)" required="required" /> <span class="required">Required</span>
</li>
[% END %]
<li>
<label for="description" class="required">Description: </label><input type="text" id="description" name="description" size="48" value="[% description |html %]" required="required" /> <span class="required">Required</span>
<a href="/cgi-bin/koha/admin/localization.pl?entity=itemtypes&code=[% itemtype %]" title="Translate item type [% itemtype %]" rel="gb_page_center[600,500]"><i class="icon-edit"></i> Translate into other languages</a>
</li>
<li>
<span class="label">Search category</span>
<select id="searchcategory" name="searchcategory">
<option value="">None</option>
[% FOREACH cat IN searchcategory %]
[% IF ( cat.selected ) %]
<option value="[% cat.authorised_value %]" selected="selected">
[% cat.lib %]
</option>
[% ELSE %]
<option value="[% cat.authorised_value %]" >
[% cat.lib %]
</option>
[% END %]
[% END %]
</select>
(Options are defined as the authorized values for the ITEMTYPECAT category)
</li>
[% IF ( noItemTypeImages ) %]
<li><span class="label">Image: </span>Item type images are disabled. To enable them, turn off the <a href="/cgi-bin/koha/admin/preferences.pl?op=search&amp;searchfield=noItemTypeImages">noItemTypeImages system preference</a></li></ol>
[% ELSE %]</ol>
<div id="icons" class="toptabs" style="clear:both">
<h5 style="margin-left:10px;">Choose an icon:</h5>
<ul>
<li><a href="#none">None</a></li>
[% FOREACH imageset IN imagesets %]
[% IF ( imageset.imagesetactive ) %]<li class="ui-tabs-active">[% ELSE %]<li>[% END %]<a href="#[% imageset.imagesetname %]">[% imageset.imagesetname %]</a></li>
[% END %]
[% IF ( remote_image ) %]<li class="ui-tabs-active">[% ELSE %]<li>[% END %]<a href="#remote">Remote image</a></li>
</ul>
<div id="none"><ul>
<li><label for="noimage">No image: </label><input type="radio" name="image" id="noimage" value="removeImage" /></li>
</ul>
<br class="clear" /></div>
[% FOREACH imageset IN imagesets %]
<div id="[% imageset.imagesetname %]"><ul>
[% FOREACH image IN imageset.images %]
<li style="float: none; display: inline-block; clear : none; width: auto;">
<label> [% IF ( image.StaffImageUrl ) %]
<img src="[% image.StaffImageUrl %]" alt="[% image.StaffImageUrl %]" title="[% image.StaffImageUrl %]" />
[% ELSE %]
[% END %]
[% IF ( image.checked ) %]
<input type="radio" name="image" value="[% image.KohaImage %]" checked="checked" />
[% ELSE %] [% ELSE %]
[% IF ( image.KohaImage ) %] <!-- to delete the radio button if there is no image after --> <h3>Add item type</h3>
<input type="radio" name="image" value="[% image.KohaImage %]" />
[% END %]
[% END %] [% END %]
</label> <form action="/cgi-bin/koha/admin/itemtypes.pl" name="Aform" method="post" id="itemtypeentry">
</li> <input type="hidden" name="op" value="add_validate" />
[% END %] <fieldset class="rows">
</ul> <ol>
<br class="clear" /> [% IF itemtype %]
</div> <li>
[% END %] <input type="hidden" name="is_a_modif" value="1" />
<div id="remote"><ul> <span class="label">Item type: </span> <input type="hidden" name="itemtype" value="[% itemtype.itemtype %]" />
<li> <label for="remote_image_check"> Remote image:</label> [% itemtype.itemtype %]
[% IF ( remote_image ) %] </li>
<input type="radio" id="remote_image_check" name="image" value="remoteImage" checked="checked" />
[% ELSE %]
<input type="radio" id="remote_image_check" name="image" value="remoteImage" />
[% END %]<input type="text" name="remoteImage" size="48" maxlength="200" value="[% remote_image %]" onmousedown="document.getElementById('remote_image_check').checked = true;" /> [% IF ( remote_image ) %]
<img src="[% remote_image %]" alt="" />
[% END %]</li>
</ul>
<br class="clear" />
</div>
</div>
[% END %]
<ol>
<li>
<label for="hideinopac">Hide in OPAC: </label>
[% IF ( hideinopac ) %]
<input type="checkbox" id="hideinopac" name="hideinopac" checked="checked" value="1" />
[% ELSE %]
<input type="checkbox" id="hideinopac" name="hideinopac" value="1" />
[% END %]
(if checked, items of this type will be hidden as filters in OPAC's advanced search)
</li>
<li>
<label for="notforloan">Not for loan: </label> [% IF ( notforloan ) %]
<input type="checkbox" id="notforloan" name="notforloan" checked="checked" value="1" />
[% ELSE %]
<input type="checkbox" id="notforloan" name="notforloan" value="1" />
[% END %]
(if checked, no item of this type can be issued. If not checked, every item of this type can be issued unless notforloan is set for a specific item)
</li>
<li>
<label for="rentalcharge">Rental charge: </label>
<input type="text" id="rentalcharge" name="rentalcharge" size="10" value="[% rentalcharge %]" />
</li>
<li>
<label for="checkinmsg">Checkin message: </label>
<textarea id="checkinmsg" name="checkinmsg" cols="55" rows="5">[% checkinmsg %]</textarea>
</li>
<li>
<label for="checkinmsgtype">Checkin message type: </label>
<select type="text" id="checkinmsgtype" name="checkinmsgtype">
[% IF ( checkinmsgtype == 'message' ) %]
<option value="message" selected="selected">Message</option>
[% ELSE %]
<option value="message">Message</option>
[% END %]
[% IF ( checkinmsgtype == 'alert' ) %]
<option value="alert" selected="selected">Alert</option>
[% ELSE %]
<option value="alert">Alert</option>
[% END %]
</select>
</li>
<li>
<label for="sip_media_type">SIP media type: </label>
<select id="sip_media_type" name="sip_media_type">
<option value=""></option>
[% FOREACH a IN AuthorisedValues.Get('SIP_MEDIA_TYPE', sip_media_type ) %]
[% IF a.selected %]
<option value="[% a.authorised_value %]" selected="selected">[% a.lib %]</option>
[% ELSE %]
<option value="[% a.authorised_value %]">[% a.lib %]</option>
[% END %]
[% END %]
</select>
</li>
<li>
<label for="summary">Summary: </label>
<textarea id="summary" name="summary" cols="55" rows="5">[% summary %]</textarea>
<p>Enter a summary that will overwrite the default one in search results lists. Example, for a website itemtype : </p>
<p><b>&lt;a href="[856u]"&gt;open site&lt;/a&gt;</b> will show the link just below the title</p>
</li>
</ol>
</fieldset>
<fieldset class="action">
<input type="submit" value="Save changes" />
<a href="/cgi-bin/koha/admin/itemtypes.pl" class="cancel">Cancel</a>
</fieldset>
</form>
[% END %]
[% IF ( delete_confirm ) %]
[% IF ( total ) %]<div class="dialog message">
<h3>Cannot delete item type</h3>
<p><strong>This record is used [% total %] times</strong>. Deletion is not possible.</p>
[% ELSE %]<div class="dialog alert">
<h3>Delete item type '[% itemtype %]'?</h3>
[% END %]
<table>
<tr>
<th scope="row">Item type</th>
<td>[% itemtype %]</td>
</tr>
<tr><th scope="row">Description</th><td>[% translated_description %]</td></tr>
<tr><th scope="row">Loan length</th><td>[% loanlength %]</td></tr>
<tr><th scope="row">Rental charge</th><td>[% rentalcharge %]</td></tr></table>
<form action="[% script_name %]" method="post">
<input type="hidden" name="op" value="delete_confirmed" /><input type="hidden" name="itemtype" value="[% itemtype %]" />[% IF ( total ) %]
</form>
<form action="[% script_name %]" method="post"><input type="submit" class="approve" value="OK" /></form>
[% ELSE %]
<input type="submit" class="approve" value="Delete this Item Type" /></form> <form action="[% script_name %]" method="post"><input type="submit" class="deny" value="Do Not Delete" /></form>
[% END %]
</div>
[% END %]
[% IF ( else ) %]
<h2>Item types administration</h2>
[% IF ( loop ) %]
<table id="table_item_type">
<thead>
[% UNLESS ( noItemTypeImages ) %]<th>Image</th>[% END %]
<th>Code</th>
<th>Description</th>
<th>Search category</th>
<th>Not for loan</th>
<th>Hide in OPAC</th>
<th>Charge</th>
<th>Checkin message</th>
<th>Actions</th>
</thead>
[% FOREACH loo IN loop %]
<tr>
[% UNLESS ( noItemTypeImages ) %] <td>[% IF ( loo.imageurl ) %]<img src="[% loo.imageurl %]" alt="" />[% ELSE %]&nbsp;[% END %]</td>[% END %]
<td>
<a href="[% loo.script_name %]?op=add_form&amp;itemtype=[% loo.itemtype |html %]">
[% loo.itemtype %]
</a>
</td>
<td>
[% IF loo.translated_descriptions.size %]
[% loo.description %] (default)<br/>
[% FOR description IN loo.translated_descriptions %]
[% IF description.translation == loo.translated_description %]
<b>[% description.translation %]</b>
[% ELSE %] [% ELSE %]
[% description.translation %] ([% description.lang %]) <li>
<label for="itemtype" class="required">Item type: </label>
<input type="text" id="itemtype" name="itemtype" size="10" maxlength="10" onblur="toUC(this)" required="required" /> <span class="required">Required</span>
</li>
[% END %] [% END %]
<br/> <li>
<label for="description" class="required">Description: </label>
<input type="text" id="description" name="description" size="48" value="[% itemtype.description |html %]" required="required" /> <span class="required">Required</span>
<a href="/cgi-bin/koha/admin/localization.pl?entity=itemtypes&code=[% itemtype.itemtype %]" title="Translate item type [% itemtype.itemtype %]" rel="gb_page_center[600,500]"><i class="icon-edit"></i> Translate into other languages</a>
</li>
<li>
<span class="label">Search category</span>
<select id="searchcategory" name="searchcategory">
<option value="">None</option>
[% FOREACH cat IN searchcategory %]
[% IF cat.selected %]
<option value="[% cat.authorised_value %]" selected="selected">
[% cat.lib %]
</option>
[% ELSE %]
<option value="[% cat.authorised_value %]" >
[% cat.lib %]
</option>
[% END %]
[% END %]
</select>
(Options are defined as the authorized values for the ITEMTYPECAT category)
</li>
[% IF Koha.Preference('noItemTypeImages') %]
<li>
<span class="label">Image: </span>Item type images are disabled. To enable them, turn off the <a href="/cgi-bin/koha/admin/preferences.pl?op=search&amp;searchfield=noItemTypeImages">noItemTypeImages system preference</a>
</li>
[% END %]
</ol>
[% UNLESS Koha.Preference('noItemTypeImages') %]
<div id="icons" class="toptabs" style="clear:both">
<h5 style="margin-left:10px;">Choose an icon:</h5>
<ul>
<li><a href="#none">None</a></li>
[% FOREACH imageset IN imagesets %]
[% IF ( imageset.imagesetactive ) %]
<li class="ui-tabs-active">
[% ELSE %]
<li>
[% END %]
<a href="#[% imageset.imagesetname %]">[% imageset.imagesetname %]</a>
</li>
[% END %]
[% IF itemtype.image_location.match('^http') %]<li class="ui-tabs-active">[% ELSE %]<li>[% END %]<a href="#remote">Remote image</a></li>
</ul>
<div id="none">
<ul>
<li><label for="noimage">No image: </label><input type="radio" name="image" id="noimage" value="removeImage" /></li>
</ul>
<br class="clear" />
</div>
[% FOREACH imageset IN imagesets %]
<div id="[% imageset.imagesetname %]">
<ul>
[% FOREACH image IN imageset.images %]
<li style="float: none; display: inline-block; clear : none; width: auto;">
<label>
[% IF image.StaffImageUrl %]
<img src="[% image.StaffImageUrl %]" alt="[% image.StaffImageUrl %]" title="[% image.StaffImageUrl %]" />
[% END %]
[% IF image.checked %]
<input type="radio" name="image" value="[% image.KohaImage %]" checked="checked" />
[% ELSIF image.KohaImage %] <!-- to delete the radio button if there is no image after -->
<input type="radio" name="image" value="[% image.KohaImage %]" />
[% END %]
</label>
</li>
[% END %]
</ul>
<br class="clear" />
</div>
[% END %]
<div id="remote">
<ul>
<li>
<label for="remote_image_check"> Remote image:</label>
[% IF remote_image %]
<input type="radio" id="remote_image_check" name="image" value="remoteImage" checked="checked" />
[% ELSE %]
<input type="radio" id="remote_image_check" name="image" value="remoteImage" />
[% END %]
<input type="text" name="remoteImage" size="48" maxlength="200" value="[% remote_image %]" onmousedown="document.getElementById('remote_image_check').checked = true;" />
[% IF ( remote_image ) %]
<img src="[% remote_image %]" alt="" />
[% END %]
</li>
</ul>
<br class="clear" />
</div>
</div>
[% END %] [% END %]
[% ELSE %] <ol>
[% loo.description %] <li>
[% END %] <label for="hideinopac">Hide in OPAC: </label>
</td> [% IF ( hideinopac ) %]
<td>[% loo.searchcategory %]</td> <input type="checkbox" id="hideinopac" name="hideinopac" checked="checked" value="1" />
<td>[% IF ( loo.notforloan ) %]Yes[% ELSE %]&nbsp;[% END %]</td> [% ELSE %]
<td>[% IF ( loo.hideinopac ) %]Yes[% ELSE %]&nbsp;[% END %]</td> <input type="checkbox" id="hideinopac" name="hideinopac" value="1" />
<td> [% END %]
[% UNLESS ( loo.notforloan ) %] (if checked, items of this type will be hidden as filters in OPAC's advanced search)
[% loo.rentalcharge %] </li>
<li>
<label for="notforloan">Not for loan: </label>
[% IF itemtype.notforloan %]
<input type="checkbox" id="notforloan" name="notforloan" checked="checked" value="1" />
[% ELSE %]
<input type="checkbox" id="notforloan" name="notforloan" value="1" />
[% END %]
(if checked, no item of this type can be issued. If not checked, every item of this type can be issued unless notforloan is set for a specific item)
</li>
<li>
<label for="rentalcharge">Rental charge: </label>
<input type="text" id="rentalcharge" name="rentalcharge" size="10" value="[% itemtype.rentalcharge %]" />
</li>
<li>
<label for="checkinmsg">Checkin message: </label>
<textarea id="checkinmsg" name="checkinmsg" cols="55" rows="5">[% itemtype.checkinmsg %]</textarea>
</li>
<li>
<label for="checkinmsgtype">Checkin message type: </label>
<select type="text" id="checkinmsgtype" name="checkinmsgtype">
[% IF itemtype.checkinmsgtype == 'message' %]
<option value="message" selected="selected">Message</option>
[% ELSE %]
<option value="message">Message</option>
[% END %]
[% IF itemtype.checkinmsgtype == 'alert' %]
<option value="alert" selected="selected">Alert</option>
[% ELSE %]
<option value="alert">Alert</option>
[% END %]
</select>
</li>
<li>
<label for="sip_media_type">SIP media type: </label>
<select id="sip_media_type" name="sip_media_type">
<option value=""></option>
[% FOREACH a IN AuthorisedValues.Get('SIP_MEDIA_TYPE', itemtype.sip_media_type ) %]
[% IF a.selected %]
<option value="[% a.authorised_value %]" selected="selected">[% a.lib %]</option>
[% ELSE %]
<option value="[% a.authorised_value %]">[% a.lib %]</option>
[% END %]
[% END %]
</select>
</li>
<li>
<label for="summary">Summary: </label>
<textarea id="summary" name="summary" cols="55" rows="5">[% itemtype.summary %]</textarea>
<p>Enter a summary that will overwrite the default one in search results lists. Example, for a website itemtype : </p>
<p><b>&lt;a href="[856u]"&gt;open site&lt;/a&gt;</b> will show the link just below the title</p>
</li>
</ol>
</fieldset>
<fieldset class="action">
<input type="submit" value="Save changes" />
<a href="/cgi-bin/koha/admin/itemtypes.pl" class="cancel">Cancel</a>
</fieldset>
</form>
[% END %]
[% IF op == 'delete_confirm' %]
<div class="dialog message">
<h3>Delete item type '[% itemtype.itemtype %]'?</h3>
<table>
<tr>
<th scope="row">Item type</th>
<td>[% itemtype.itemtype %]</td>
</tr>
<tr><th scope="row">Description</th><td>[% itemtype.translated_description %]</td></tr>
[% UNLESS Koha.Preference('noItemTypeImages') %]
<tr>
<th scope="row">Image</th>
<td>
[% IF itemtype.image_location %]<img src="[% itemtype.image_location %]" alt="" />[% END %]
</td>
</tr>
[% END %]
<tr><th scope="row">Rental charge</th><td>[% itemtype.rentalcharge | $Price %]</td></tr>
</table>
<form action="/cgi-bin/koha/admin/itemtypes.pl" method="post">
<input type="hidden" name="op" value="delete_confirmed" /><input type="hidden" name="itemtype" value="[% itemtype.itemtype %]" />
<input type="submit" class="approve" value="Delete this Item Type" />
</form>
<form action="/cgi-bin/koha/admin/itemtypes.pl" method="post"><input type="submit" class="deny" value="Do Not Delete" /></form>
</div>
[% END %]
[% IF op == 'list' %]
<h2>Item types administration</h2>
[% IF itemtypes %]
<table id="table_item_type">
<thead>
[% UNLESS Koha.Preference('noItemTypeImages') %]<th>Image</th>[% END %]
<th>Code</th>
<th>Description</th>
<th>Search category</th>
<th>Not for loan</th>
<th>Hide in OPAC</th>
<th>Charge</th>
<th>Checkin message</th>
<th>Actions</th>
</thead>
[% FOREACH itemtype IN itemtypes %]
<tr>
[% UNLESS Koha.Preference('noItemTypeImages') %] <td>[% IF itemtype.image_location %]<img src="[% itemtype.image_location %]" alt="" />[% ELSE %]&nbsp;[% END %]</td>[% END %]
<td>
<a href="/cgi-bin/koha/admin/itemtypes.pl?op=add_form&amp;itemtype=[% itemtype.itemtype |html %]">
[% itemtype.itemtype %]
</a>
</td>
<td>
[% IF itemtype.translated_descriptions.size %]
[% itemtype.description %] (default)<br/>
[% FOR description IN itemtype.translated_descriptions %]
[% IF description.translation == itemtype.translated_description %]
<b>[% description.translation %]</b>
[% ELSE %]
[% description.translation %] ([% description.lang %])
[% END %]
<br/>
[% END %]
[% ELSE %]
[% itemtype.description %]
[% END %]
</td>
<td>[% itemtype.searchcategory %]</td>
<td>[% IF ( itemtype.notforloan ) %]Yes[% ELSE %]&nbsp;[% END %]</td>
<td>[% IF ( itemtype.hideinopac ) %]Yes[% ELSE %]&nbsp;[% END %]</td>
<td>
[% UNLESS ( itemtype.notforloan ) %]
[% itemtype.rentalcharge | $Price %]
[% END %]
</td>
<td>[% itemtype.checkinmsg | html_line_break %]</td>
<td>
<a href="/cgi-bin/koha/admin/itemtypes.pl?op=add_form&amp;itemtype=[% itemtype.itemtype |html %]">Edit</a>
<a href="/cgi-bin/koha/admin/itemtypes.pl?op=delete_confirm&amp;itemtype=[% itemtype.itemtype |html %]">Delete</a>
</td>
</tr>
[% END %]
</table>
[% ELSE %]
<div class="dialog message">There are no itemtypes defined</div>
[% END %] [% END %]
</td>
<td>[% loo.checkinmsg | html_line_break %]</td>
<td>
<a href="[% loo.script_name %]?op=add_form&amp;itemtype=[% loo.itemtype |html %]">Edit</a>
<a href="[% loo.script_name %]?op=delete_confirm&amp;itemtype=[% loo.itemtype |html %]">Delete</a>
</td>
</tr>
[% END %]
</table>[% ELSE %]
<div class="dialog message">There are no itemtypes defined</div>
[% END %] [% END %]
<div class="pages">[% pagination_bar %]</div>
[% END %]
</div> </div>
</div> </div>
<div class="yui-b"> <div class="yui-b">