# 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 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 3 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.
+# 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
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-use warnings;
+use Modern::Perl;
-use CGI;
+use CGI qw ( -utf8 );
use File::Basename;
use Encode;
-use URI::Escape 'uri_escape_utf8';
+use JSON;
#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;
-}
+use Koha::ItemTypes;
+use Koha::Patron::Categories;
-# 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';
- }
-}
+# shortcut for long package name
+our $preferences = 'C4::ItemCirculationAlertPreference';
# display item circulation alerts
sub show {
my $dbh = C4::Context->dbh;
my ($template, $user, $cookie) = get_template_and_user(
{
- template_name => "admin/item_circulation_alerts.tmpl",
+ template_name => "admin/item_circulation_alerts.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
- flagsrequired => { admin => 1 },
+ flagsrequired => { parameters => 'item_circ_alerts' },
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";
+ my @categories = Koha::Patron::Categories->search_limited;
+ my @item_types = Koha::ItemTypes->search;
+ my $grid_checkout = $preferences->grid({ branchcode => $branch, notification => 'CHECKOUT' });
+ my $grid_checkin = $preferences->grid({ branchcode => $branch, notification => 'CHECKIN' });
- $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));
+ $template->param(grid_checkout => $grid_checkout);
+ $template->param(grid_checkin => $grid_checkin);
+
output_html_with_http_headers $input, $cookie, $template->output;
}
-# create item circulation alert preference and redirect
-sub create {
+# toggle a preference via ajax
+sub toggle {
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,
+ my $id = $input->param('id');
+ my $branch = $input->param('branch');
+ my ($category, $item_type, $notification) = split('-', $id);
+ $category =~ s/_/*/;
+ $item_type =~ s/_/*/;
+
+ my $settings = {
+ branchcode => $branch,
+ categorycode => $category,
item_type => $item_type,
- });
- redirect($input);
-}
+ notification => $notification,
+ };
+
+ my $restrictions = $preferences; # all the same thing...
+ my $notifications = $preferences; #
+ if ($notifications->is_enabled_for($settings)) {
+ # toggle by adding a restriction
+ $restrictions->create($settings);
+ } else {
+ # toggle by removing the restriction
+ $restrictions->delete($settings);
+ }
-# delete preference and redirect
-sub delete {
- my ($input) = @_;
- my $id = $input->param('id');
- $preferences->delete({ id => $id });
- redirect($input);
+ my $response = { success => 1 };
+ my @reasons = $notifications->is_disabled_for($settings);
+ if (@reasons == 0) {
+ $response->{classes} = '';
+ } else {
+ my $default_exists = grep { $_->{branchcode} eq '*' } @reasons;
+ my $non_default_also = grep { $_->{branchcode} ne '*' } @reasons;
+ my @classes;
+ push @classes, 'default' if $default_exists;
+ push @classes, 'disabled' if $non_default_also;
+ $response->{classes} = join(' ', @classes);
+ }
+ print $input->header;
+ print encode_json($response);
}
# dispatch to various actions based on CGI parameter 'action'
sub dispatch {
my %handler = (
show => \&show,
- create => \&create,
- delete => \&delete,
+ toggle => \&toggle,
);
my $input = new CGI;
my $action = $input->param('action') || 'show';
Parameters:
-=over 4
+=over 2
=item branch
+=head3 ?action=toggle
-=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.
+Toggle a preference via AJAX
Parameters:
-=over 4
+=over 2
=item id
-The id of the preference to delete.
-
-=back
+The id should be string that can be split on "-" which contains:
+"$categorycode-$item_type-$notification".
+=item branch
+Branch code to apply this preference to
+=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