[Koha-patches] [PATCH] Branch Level Notification Config

Daniel Sweeney daniel.sweeney at liblime.com
Tue Feb 3 23:02:02 CET 2009


From: John Beppu <john.beppu at liblime.com>

- 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 at liblime.com>
---
 admin/item_circulation_alerts.pl                   |  260 ++++++++++++++++++++
 .../intranet-tmpl/prog/en/includes/admin-menu.inc  |    1 +
 .../prog/en/modules/admin/admin-home.tmpl          |    7 +-
 .../en/modules/admin/item_circulation_alerts.tmpl  |  146 +++++++++++
 4 files changed, 411 insertions(+), 3 deletions(-)
 create mode 100755 admin/item_circulation_alerts.pl
 create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl

diff --git a/admin/item_circulation_alerts.pl b/admin/item_circulation_alerts.pl
new file mode 100755
index 0000000..f8c1227
--- /dev/null
+++ b/admin/item_circulation_alerts.pl
@@ -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
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc
index f6d16f2..7b7b2c3 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc
@@ -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>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tmpl
index b4f6b4c..6f62784 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tmpl
@@ -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">
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl
new file mode 100644
index 0000000..26d2779
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl
@@ -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" -->
-- 
1.5.5.GIT



More information about the Koha-patches mailing list