#!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications
+# Copyright 2002 Paul Poulain
#
# This file is part of Koha.
#
=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
-use strict;
-#use warnings; FIXME - Bug 2505
+use Modern::Perl;
use CGI qw ( -utf8 );
-use List::Util qw/min/;
use File::Spec;
use C4::Koha;
use C4::Auth;
use C4::Output;
+use Koha::ItemTypes;
use Koha::Localizations;
-my $input = new CGI;
-my $searchfield = $input->param('description');
-my $script_name = "/cgi-bin/koha/admin/itemtypes.pl";
-my $itemtype = $input->param('itemtype');
-my $op = $input->param('op') // 'list';
+my $input = new CGI;
+my $searchfield = $input->param('description');
+my $itemtype_code = $input->param('itemtype');
+my $op = $input->param('op') // 'list';
my @messages;
-$searchfield =~ s/\,//g;
+$searchfield =~ s/\,//g if $searchfield;
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
- {
- template_name => "admin/itemtypes.tt",
+ { template_name => "admin/itemtypes.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
}
);
-$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 $sip_media_type = $input->param('sip_media_type');
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 primkey exists, it's a modify action, so read values to modify...
- my $data;
- if ($itemtype) {
- 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'});
-
+ my $itemtype = Koha::ItemTypes->find($itemtype_code);
+ my $imagesets = C4::Koha::getImageSets( checked => ( $itemtype ? $itemtype->imageurl : undef ) );
+ my $searchcategory = GetAuthorisedValues("ITEMTYPECAT", ( $itemtype ? $itemtype->searchcategory : '' ) );
$template->param(
- itemtype => $itemtype,
- description => $data->{'description'},
- rentalcharge => sprintf( "%.2f", $data->{'rentalcharge'} ),
- 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,
+ itemtype => $itemtype,
+ imagesets => $imagesets,
+ searchcategory => $searchcategory,
);
-
- # END $OP eq ADD_FORM
-################## ADD_VALIDATE ##################################
- # called by add_form, used to insert/modify data in DB
-}
-elsif ( $op eq 'add_validate' ) {
- my $is_a_modif = $input->param('is_a_modif');
- my ( $already_exists ) = $dbh->selectrow_array(q|
- SELECT itemtype
- FROM itemtypes
- WHERE itemtype = ?
- |, undef, $itemtype );
- if ( $already_exists and $is_a_modif ) { # it's a modification
- my $query2 = '
- UPDATE itemtypes
- SET description = ?
- , rentalcharge = ?
- , notforloan = ?
- , imageurl = ?
- , summary = ?
- , checkinmsg = ?
- , checkinmsgtype = ?
- , sip_media_type = ?
- , hideinopac = ?
- , searchcategory = ?
- WHERE itemtype = ?
- ';
- my $sth = $dbh->prepare($query2);
- $sth->execute(
- $input->param('description'),
- $input->param('rentalcharge'),
- ( $input->param('notforloan') ? 1 : 0 ),
- (
- $input->param('image') eq 'removeImage' ? '' : (
- $input->param('image') eq 'remoteImage'
- ? $input->param('remoteImage')
- : $input->param('image') . ""
- )
- ),
- $input->param('summary'),
- $input->param('checkinmsg'),
- $input->param('checkinmsgtype'),
- $sip_media_type,
- $input->param('hideinopac') ? 1 : 0,
- $input->param('searchcategory'),
- $input->param('itemtype')
- );
- }
- elsif ( not $already_exists and not $is_a_modif ) {
- my $query = "
- INSERT INTO itemtypes
- (itemtype,description,rentalcharge, notforloan, imageurl, summary, checkinmsg, checkinmsgtype, sip_media_type, hideinopac, searchcategory)
- VALUES
- (?,?,?,?,?,?,?,?,?,?,?);
- ";
- my $sth = $dbh->prepare($query);
- my $image = $input->param('image');
- $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'),
+} 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||;
+
+ my $notforloan = $input->param('notforloan') ? 1 : 0;
+ my $imageurl =
+ $image eq 'removeImage' ? ''
+ : (
+ $image eq 'remoteImage' ? $input->param('remoteImage')
+ : $image
+ );
+ my $summary = $input->param('summary');
+ my $checkinmsg = $input->param('checkinmsg');
+ my $checkinmsgtype = $input->param('checkinmsgtype');
+ my $hideinopac = $input->param('hideinopac') // 0;
+ my $searchcategory = $input->param('searchcategory');
+
+ if ( $itemtype and $is_a_modif ) { # it's a modification
+ $itemtype->description($description);
+ $itemtype->rentalcharge($rentalcharge);
+ $itemtype->notforloan($notforloan);
+ $itemtype->imageurl($imageurl);
+ $itemtype->summary($summary);
+ $itemtype->checkinmsg($checkinmsg);
+ $itemtype->checkinmsgtype($checkinmsgtype);
+ $itemtype->sip_media_type($sip_media_type);
+ $itemtype->hideinopac($hideinopac);
+ $itemtype->searchcategory($searchcategory);
+
+ eval { $itemtype->store; };
+
+ if ($@) {
+ push @messages, { type => 'error', code => 'error_on_update' };
+ } else {
+ push @messages, { type => 'message', code => 'success_on_update' };
+ }
+ } elsif ( not $itemtype and not $is_a_modif ) {
+ my $itemtype = Koha::ItemType->new(
+ { itemtype => $itemtype_code,
+ description => $description,
+ rentalcharge => $rentalcharge,
+ notforloan => $notforloan,
+ imageurl => $imageurl,
+ summary => $summary,
+ checkinmsg => $checkinmsg,
+ checkinmsgtype => $checkinmsgtype,
+ sip_media_type => $sip_media_type,
+ hideinopac => $hideinopac,
+ searchcategory => $searchcategory,
+ }
);
- }
- else {
- push @messages, {
- type => 'error',
+ eval { $itemtype->store; };
+
+ if ($@) {
+ push @messages, { type => 'error', code => 'error_on_insert' };
+ } else {
+ push @messages, { type => 'message', code => 'success_on_insert' };
+ }
+ } else {
+ push @messages,
+ { type => 'error',
code => 'already_exists',
- };
+ };
}
$searchfield = '';
- $op = 'list';
- # END $OP eq ADD_VALIDATE
-################## DELETE_CONFIRM ##################################
- # called by default form, used to confirm deletion of data in DB
-}
-elsif ( $op eq 'delete_confirm' ) {
+ $op = 'list';
+} elsif ( $op eq 'delete_confirm' ) {
+
# Check both items and biblioitems
- my $sth = $dbh->prepare('
+ my ($total) = $dbh->selectrow_array( '
SELECT COUNT(*) AS total FROM (
SELECT itemtype AS t FROM biblioitems
UNION ALL
SELECT itype AS t FROM items
) AS tmp
WHERE tmp.t=?
- ');
- $sth->execute($itemtype);
- my $total = $sth->fetchrow_hashref->{'total'};
+ ', {}, $itemtype_code );
+
+ if ($total) {
+ push @messages, { type => 'error', code => 'cannot_be_deleted', total => $total };
+ $op = 'list';
+ } else {
+ my $itemtype = Koha::ItemTypes->find($itemtype_code);
+ $template->param( itemtype => $itemtype, );
+ }
- my $sth =
- $dbh->prepare(
-"select itemtype,description,rentalcharge from itemtypes where itemtype=?"
- );
- $sth->execute($itemtype);
- my $data = $sth->fetchrow_hashref;
- $template->param(
- itemtype => $itemtype,
- description => $data->{description},
- rentalcharge => sprintf( "%.2f", $data->{rentalcharge} ),
- imageurl => $data->{imageurl},
- total => $total
- );
+} elsif ( $op eq 'delete_confirmed' ) {
+ my $itemtype = Koha::ItemTypes->find($itemtype_code);
+ my $deleted = eval { $itemtype->delete };
+ if ( $@ or not $deleted ) {
+ push @messages, { type => 'error', code => 'error_on_delete' };
+ } else {
+ push @messages, { type => 'message', code => 'success_on_delete' };
+ }
- # 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 $itemtype = uc( $input->param('itemtype') );
- my $sth = $dbh->prepare("delete from itemtypes where itemtype=?");
- $sth->execute($itemtype);
- $sth = $dbh->prepare("delete from issuingrules where itemtype=?");
- $sth->execute($itemtype);
- print $input->redirect('itemtypes.pl');
- exit;
- # END $OP eq DELETE_CONFIRMED
-################## DEFAULT ##################################
+ $op = 'list';
}
if ( $op eq 'list' ) {
- my $results = C4::Koha::GetItemTypes( style => 'array' );
- 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 );
- }
-
+ my $itemtypes = Koha::ItemTypes->search;
$template->param(
- loop => \@loop,
- else => 1,
- messages => \@messages,
+ itemtypes => $itemtypes,
+ messages => \@messages,
);
}
+$template->param( op => $op );
+
output_html_with_http_headers $input, $cookie, $template->output;
+[% USE Koha %]
[% USE AuthorisedValues %]
+[% USE Price %]
[% INCLUDE 'doc-head-open.inc' %]
-<title>Koha › Administration › Item types [% IF ( add_form ) %]›
+<title>Koha › Administration › Item types [% IF op == 'add_form' %]›
[% IF ( itemtype ) %]
-Modify item type '[% itemtype %]'
+Modify item type '[% itemtype.itemtype %]'
[% ELSE %]
Add item type
[% END %]
[% END %]
-[% IF ( delete_confirm ) %]›
+[% IF op == 'delete_confirm' %]›
[% IF ( total ) %]
-Cannot delete item type '[% itemtype %]'
+Cannot delete item type '[% itemtype.itemtype %]'
[% ELSE %]
-Delete item type '[% itemtype %]'?
+Delete item type '[% itemtype.itemtype %]'?
[% END %]
[% END %]
-[% IF ( delete_confirmed ) %]›
+[% IF op == 'delete_confirmed' %]›
Data deleted
[% END %]
</title>
[% 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 ) %]
- [% IF ( itemtype ) %]
-<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Modify item type '[% itemtype %]'
+<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' %]
+ [% IF itemtype %]
+<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Modify item type '[% itemtype.itemtype %]'
[% ELSE %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Add item type
[% END %]
[% END %]
-[% IF ( delete_confirm ) %]
- [% IF ( total ) %]
-<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Cannot delete item type '[% itemtype %]'
+[% IF op == 'delete_confirm' %]
+ [% IF total %]
+<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Cannot delete item type '[% itemtype.itemtype %]'
[% ELSE %]
-<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Delete item type '[% itemtype %]'?
+<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> › Delete item type '[% itemtype.itemtype %]'?
[% END %]
[% END %]
-[% IF ( delete_confirmed ) %]
+[% IF op == 'delete_confirmed' %]
<a href="/cgi-bin/koha/admin/itemtypes.pl">Item types</a> ›Data deleted
[% END %]
-[% IF ( else ) %]
+[% IF op == 'list' %]
Item types administration
[% END %]</div>
<div id="doc3" class="yui-t2">
-
+
<div id="bd">
<div id="yui-main">
<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>
</div>[% END %]
-[% FOREACH message IN messages %]
- [% IF message.type == 'success' %]
- <div class="dialog message">
- [% ELSIF message.type == 'warning' %]
- <div class="dialog alert">
- [% ELSIF message.type == 'error' %]
- <div class="dialog error" style="margin:auto;">
- [% END %]
- [% IF message.code == 'already_exists' %]
- This item type already exists.
- [% END %]
- </div>
+[% FOREACH m IN messages %]
+ <div class="dialog [% m.type %]">
+ [% SWITCH m.code %]
+ [% CASE 'error_on_update' %]
+ An error occurred when updating this item type. Perhaps the value already exists.
+ [% CASE 'error_on_insert' %]
+ An error occurred when inserting this item type. Perhaps the value already exists.
+ [% CASE 'error_on_delete' %]
+ An error occurred when deleting this item type. Check the logs.
+ [% CASE 'success_on_update' %]
+ Item type updated successfully.
+ [% 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 %]
-[% IF ( add_form ) %]
- [% IF ( itemtype ) %]
- <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&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" />
+[% IF op == 'add_form' %]
+ [% IF itemtype %]
+ <h3>Modify item type</h3>
[% ELSE %]
- [% IF ( image.KohaImage ) %] <!-- to delete the radio button if there is no image after -->
- <input type="radio" name="image" value="[% image.KohaImage %]" />
- [% END %]
+ <h3>Add item type</h3>
[% 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 %]
-<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><a href="[856u]">open site</a></b> will show the link just below the title</p>
- </li>
- </ol>
- </fieldset>
+ <form action="/cgi-bin/koha/admin/itemtypes.pl" name="Aform" method="post" id="itemtypeentry">
+ <input type="hidden" name="op" value="add_validate" />
+ <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 %]" />
+ [% 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="[% 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&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>
- <fieldset class="action">
- <input type="submit" value="Save changes" />
- <a href="/cgi-bin/koha/admin/itemtypes.pl" class="cancel">Cancel</a>
- </fieldset>
-</form>
-[% END %]
+ [% 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 %]
-[% 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>
+ <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 %]
+ <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 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><a href="[856u]">open site</a></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 %]
-<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>
-
+[% 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 ( 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 %] [% END %]</td>[% END %]
- <td>
- <a href="[% loo.script_name %]?op=add_form&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>
+[% 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 %] [% END %]</td>[% END %]
+ <td>
+ <a href="/cgi-bin/koha/admin/itemtypes.pl?op=add_form&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 %]
- [% description.translation %] ([% description.lang %])
+ [% itemtype.description %]
[% END %]
- <br/>
+ </td>
+ <td>[% itemtype.searchcategory %]</td>
+ <td>[% IF ( itemtype.notforloan ) %]Yes[% ELSE %] [% END %]</td>
+ <td>[% IF ( itemtype.hideinopac ) %]Yes[% ELSE %] [% END %]</td>
+ <td>
+ [% UNLESS ( itemtype.notforloan ) %]
+ [% itemtype.rentalcharge | $Price %]
[% END %]
- [% ELSE %]
- [% loo.description %]
- [% END %]
- </td>
- <td>[% loo.searchcategory %]</td>
- <td>[% IF ( loo.notforloan ) %]Yes[% ELSE %] [% END %]</td>
- <td>[% IF ( loo.hideinopac ) %]Yes[% ELSE %] [% END %]</td>
- <td>
- [% UNLESS ( loo.notforloan ) %]
- [% loo.rentalcharge %]
+ </td>
+ <td>[% itemtype.checkinmsg | html_line_break %]</td>
+ <td>
+ <a href="/cgi-bin/koha/admin/itemtypes.pl?op=add_form&itemtype=[% itemtype.itemtype |html %]">Edit</a>
+ <a href="/cgi-bin/koha/admin/itemtypes.pl?op=delete_confirm&itemtype=[% itemtype.itemtype |html %]">Delete</a>
+ </td>
+ </tr>
+ [% END %]
+ </table>
+ [% ELSE %]
+ <div class="dialog message">There are no itemtypes defined</div>
[% END %]
- </td>
- <td>[% loo.checkinmsg | html_line_break %]</td>
- <td>
- <a href="[% loo.script_name %]?op=add_form&itemtype=[% loo.itemtype |html %]">Edit</a>
- <a href="[% loo.script_name %]?op=delete_confirm&itemtype=[% loo.itemtype |html %]">Delete</a>
- </td>
- </tr>
- [% END %]
-</table>[% ELSE %]
-<div class="dialog message">There are no itemtypes defined</div>
-[% END %]
-
-<div class="pages">[% pagination_bar %]</div>
-
[% END %]
-
-
</div>
</div>
<div class="yui-b">