Branch Level Notification Config

- This will allow admins to disable notifications for any combination of
  branch, patron category, and item_type.
- Still working on this...

Signed-off-by: Daniel Sweeney <daniel.sweeney@liblime.com>
Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
This commit is contained in:
John Beppu 2009-02-03 16:02:02 -06:00 committed by Galen Charlton
parent e7702b3334
commit 233010f451
4 changed files with 411 additions and 3 deletions

260
admin/item_circulation_alerts.pl Executable file
View File

@ -0,0 +1,260 @@
#!/usr/bin/perl
# 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 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., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
use strict;
use warnings;
use CGI;
use File::Basename;
use Encode;
use URI::Escape 'uri_escape_utf8';
#use Data::Dump 'pp';
use C4::Auth;
use C4::Context;
use C4::Branch;
use C4::Category;
use C4::ItemType;
use C4::ItemCirculationAlertPreference;
use C4::Output;
# shortcut for long package name
my $preferences = 'C4::ItemCirculationAlertPreference';
# common redirect code
sub redirect {
my ($input) = @_;
my $path = defined($input->param('redirect_to'))
? $input->param('redirect_to')
: basename($0);
print $input->redirect($path);
}
# utf8 filter
sub utf8 {
my ($data, @keys) = @_;
for (@keys) {
$data->{$_} = decode('utf8', $data->{$_});
}
$data;
}
# add long category and itemtype descriptions to preferences
sub category_and_itemtype {
my ($categories, $item_types, @prefs) = @_;
my %c = map { $_->{categorycode} => $_->{description} } @$categories;
my %i = map { $_->{itemtype} => $_->{description} } @$item_types;
for (@prefs) {
$_->{category_description} = $c{$_->{categorycode}} || 'Default';
$_->{item_type_description} = $i{$_->{item_type}} || 'Default';
}
}
# display item circulation alerts
sub show {
my ($input) = @_;
my $dbh = C4::Context->dbh;
my ($template, $user, $cookie) = get_template_and_user(
{
template_name => "admin/item_circulation_alerts.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
flagsrequired => { admin => 1 },
debug => defined($input->param('debug')),
}
);
my $br = GetBranches;
my $branch = $input->param('branch') || '*';
my @branches = map { utf8($_, 'branchname') } (
{
branchcode => '*',
branchname => 'Default',
},
sort { $a->{branchname} cmp $b->{branchname} } values %$br,
);
for (@branches) {
$_->{selected} = "selected" if ($branch eq $_->{branchcode});
}
my $branch_name = exists($br->{$branch}) && $br->{$branch}->{branchname};
my @categories = map { utf8($_, 'description') } (
C4::Category->new({ categorycode => '*', description => 'Default' }),
C4::Category->all
);
my @item_types = map { utf8($_, 'description') } (
C4::ItemType->new({ itemtype => '*', description => 'Default' }),
C4::ItemType->all
);
my @default_prefs = $preferences->find({ branchcode => '*' });
my @branch_prefs;
my $redirect_to = "?branch=$branch";
$template->param(redirect_to => $redirect_to);
$template->param(redirect_to_x => uri_escape_utf8($redirect_to));
$template->param(branch => $branch);
$template->param(branch_name => $branch_name);
$template->param(branches => \@branches);
$template->param(categories => \@categories);
$template->param(item_types => \@item_types);
$template->param(default_prefs => \@default_prefs);
if ($branch ne '*') {
@branch_prefs = $preferences->find({ branchcode => $branch });
$template->param(branch_prefs => \@branch_prefs);
}
category_and_itemtype(\@categories, \@item_types, (@default_prefs, @branch_prefs));
output_html_with_http_headers $input, $cookie, $template->output;
}
# create item circulation alert preference and redirect
sub create {
my ($input) = @_;
my $branchcode = $input->param('branchcode');
my $categorycode = $input->param('categorycode');
my $item_type = $input->param('item_type');
$preferences->create({
branchcode => $branchcode,
categorycode => $categorycode,
item_type => $item_type,
});
redirect($input);
}
# delete preference and redirect
sub delete {
my ($input) = @_;
my $id = $input->param('id');
$preferences->delete({ id => $id });
redirect($input);
}
# dispatch to various actions based on CGI parameter 'action'
sub dispatch {
my %handler = (
show => \&show,
create => \&create,
delete => \&delete,
);
my $input = new CGI;
my $action = $input->param('action') || 'show';
if (not exists $handler{$action}) {
my $status = 400;
print $input->header(-status => $status);
print $input->div(
$input->h1($status),
$input->p("$action is not supported.")
);
} else {
$handler{$action}->($input);
}
}
# main
dispatch if $ENV{REQUEST_URI};
1;
=head1 NAME
admin/item_circulation_alerts.pl - per-branch configuration for messaging
=head1 SYNOPSIS
L<http://intranet.mydomain.com:8080/cgi-bin/koha/admin/item_circulation_alerts.pl>
=head1 DESCRIPTION
This CGI script drives an interface for configuring item circulation alerts.
If you want to prevent alerts from going out for any combination of branch,
patron category, and item type, this is where that policy would be set.
=head2 URLs
=head3 ?action=show
Display a branches item circulation alert preferences.
Parameters:
=over 4
=item branch
What branch are we looking at. If none is specified, the virtual default
branch '*' is used.
=back
=head3 ?action=create
Create an item circulation alert preference.
Parameters:
=over 4
=item branchcode
Branch code
=item categorycode
Patron category
=item item_type
Item type
=back
=head3 ?action=delete
Delete an item circulation alert preference.
Parameters:
=over 4
=item id
The id of the preference to delete.
=back
=cut
# Local Variables: ***
# mode: cperl ***
# indent-tabs-mode: nil ***
# cperl-close-paren-offset: -4 ***
# cperl-continued-statement-offset: 4 ***
# cperl-indent-level: 4 ***
# cperl-indent-parens-as-block: t ***
# cperl-tab-always-indent: nil ***
# End: ***
# vim:tabstop=8 softtabstop=4 shiftwidth=4 shiftround expandtab

View File

@ -19,6 +19,7 @@
<li><a href="/cgi-bin/koha/admin/patron-attr-types.pl">Patron attribute types</a></li>
<li><a href="/cgi-bin/koha/admin/smart-rules.pl">Circulation and fines rules</a></li>
<li><a href="/cgi-bin/koha/admin/branch_transfer_limits.pl">Library transfer limits</a></li>
<li><a href="/cgi-bin/koha/admin/item_circulation_alerts.pl">Item circulation alerts</a></li>
</ul>
<h5>Catalog</h5>

View File

@ -46,11 +46,12 @@
<dd>Define road types (street, avenue, way, etc.). Road types display as authorized values when adding/editing patrons and can be used in geographic statistics.</dd>
<dt><a href="/cgi-bin/koha/admin/patron-attr-types.pl">Patron attribute types</a></dt>
<dd>Define extended attributes (identifiers and statistical categories) for patron records</dd>
<dt><a href="/cgi-bin/koha/admin/smart-rules.pl">Circulation and fines rules</a></dt>
<dd>Define circulation and fines rules for combinations of libraries, patron categories, and item types</dd>
<dt><a href="/cgi-bin/koha/admin/smart-rules.pl">Circulation and fines rules</a></dt>
<dd>Define circulation and fines rules for combinations of libraries, patron categories, and item types</dd>
<dt><a href="/cgi-bin/koha/admin/branch_transfer_limits.pl">Library Transfer Limits</a></dt>
<dd>Limit the ability to transfer items between libraries based on the library sending, the library receiving, and the item type involved. These rules only go into effect if the preference UseBranchTransferLimits is set to ON.</dd>
<dt><a href="/cgi-bin/koha/admin/item_circulation_alerts.pl">Item Circulation Alerts</a></dt>
<dd>Define rules for check-in and checkout notifications for combinations of libraries, patron categories, and item types</dd>
</dl>
</div>
<div class="yui-u">

View File

@ -0,0 +1,146 @@
<!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->
<title>Koha &rsaquo; Administration &rsaquo; Item Circulation Alerts</title>
<!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
<style>
div.circulation-alert h2 {
margin-top: 1.5em;
}
div.circulation-alert h3 {
margin-top: 1em;
}
</style>
</head>
<body>
<!-- TMPL_INCLUDE NAME="header.inc" -->
<!-- TMPL_INCLUDE NAME="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; Item Circulation Alerts </div>
<div id="doc3" class="yui-t1">
<div id="bd">
<div id="yui-main" class="circulation-alert">
<div class="yui-b">
<h1>Item Circulation Alerts</h1>
<h2>Pick a branch:</h2>
<form method="GET">
<select name="branch">
<!-- TMPL_LOOP NAME="branches" -->
<!-- TMPL_IF NAME="selected" -->
<option value="<!-- TMPL_VAR NAME="branchcode" -->" selected="selected"><!-- TMPL_VAR NAME="branchname" --></option>
<!-- TMPL_ELSE -->
<option value="<!-- TMPL_VAR NAME="branchcode" -->"><!-- TMPL_VAR NAME="branchname" --></option>
<!-- /TMPL_IF -->
<!-- /TMPL_LOOP -->
</select>
<input type="submit" name="submit" value="Pick" />
</form>
<h2>Circulation alerts are disabled for the following conditions:</h2>
<form method="POST">
<input type="hidden" name="action" value="create" />
<input type="hidden" name="branchcode" value="*" />
<input type="hidden" name="redirect_to" value="<!-- TMPL_VAR NAME="redirect_to" -->" />
<h3>Default (for all branches)</h3>
<table>
<thead>
<tr>
<th>Patron Category</th>
<th>Item Type</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<!-- TMPL_LOOP NAME="default_prefs" -->
<tr>
<td><!-- TMPL_VAR NAME="category_description" --></td>
<td><!-- TMPL_VAR NAME="item_type_description" --></td>
<td><a href="?action=delete&id=<!-- TMPL_VAR NAME="id" -->&redirect_to=<!-- TMPL_VAR NAME="redirect_to_x" -->">delete</a></td>
</tr>
<!-- /TMPL_LOOP -->
</tbody>
<tfoot>
<tr>
<td>
<select name="categorycode">
<!-- TMPL_LOOP NAME="categories" -->
<option value="<!-- TMPL_VAR NAME="categorycode" -->"><!-- TMPL_VAR NAME="description" --></option>
<!-- /TMPL_LOOP -->
</select>
</td>
<td>
<select name="item_type">
<!-- TMPL_LOOP NAME="item_types" -->
<option value="<!-- TMPL_VAR NAME="itemtype" -->"><!-- TMPL_VAR NAME="description" --></option>
<!-- /TMPL_LOOP -->
</select>
</td>
<td>
<input type="submit" name="submit" value="Disable Alert" />
</td>
</tr>
</tfoot>
</table>
</form>
<!-- TMPL_IF NAME="branch_name" -->
<form method="POST">
<input type="hidden" name="action" value="create" />
<input type="hidden" name="branchcode" value="<!-- TMPL_VAR NAME="branch" -->" />
<input type="hidden" name="redirect_to" value="<!-- TMPL_VAR NAME="redirect_to" -->" />
<h3><!-- TMPL_VAR NAME="branch_name" --></h3>
<table>
<thead>
<tr>
<th>Patron Category</th>
<th>Item Type</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<!-- TMPL_LOOP NAME="branch_prefs" -->
<tr>
<td><!-- TMPL_VAR NAME="category_description" --></td>
<td><!-- TMPL_VAR NAME="item_type_description" --></td>
<td><a href="?action=delete&id=<!-- TMPL_VAR NAME="id" -->&redirect_to=<!-- TMPL_VAR NAME="redirect_to_x" -->">delete</a></td>
</tr>
<!-- /TMPL_LOOP -->
</tbody>
<tfoot>
<tr>
<td>
<select name="categorycode">
<!-- TMPL_LOOP NAME="categories" -->
<option value="<!-- TMPL_VAR NAME="categorycode" -->"><!-- TMPL_VAR NAME="description" --></option>
<!-- /TMPL_LOOP -->
</select>
</td>
<td>
<select name="item_type">
<!-- TMPL_LOOP NAME="item_types" -->
<option value="<!-- TMPL_VAR NAME="itemtype" -->"><!-- TMPL_VAR NAME="description" --></option>
<!-- /TMPL_LOOP -->
</select>
</td>
<td>
<input type="submit" name="submit" value="Disable Alert" />
</td>
</tr>
</tfoot>
</table>
</form>
<!-- /TMPL_IF -->
</div>
</div>
<div class="yui-b">
<!-- TMPL_INCLUDE NAME="admin-menu.inc" -->
</div>
</div>
<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->