X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fitem_circulation_alerts.pl;h=9ea89a5b53571f1c2ef2ddb9de5984738aa93dae;hb=refs%2Fheads%2Fkoha_ffzg;hp=f8c122794480dc9c77310b517aa2d9aa2da57271;hpb=233010f451730ded94d09b6ec842d37f8fbe93d0;p=koha.git diff --git a/admin/item_circulation_alerts.pl b/admin/item_circulation_alerts.pl index f8c1227944..9ea89a5b53 100755 --- a/admin/item_circulation_alerts.pl +++ b/admin/item_circulation_alerts.pl @@ -2,67 +2,37 @@ # 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 . -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 { @@ -70,85 +40,77 @@ 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'; @@ -192,7 +154,7 @@ Display a branches item circulation alert preferences. Parameters: -=over 4 +=over 2 =item branch @@ -203,58 +165,23 @@ branch '*' is used. +=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