Bug 30477: Add new UNIMARC installer translation files
[koha.git] / admin / item_circulation_alerts.pl
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18 use Modern::Perl;
19
20 use CGI qw ( -utf8 );
21 use JSON qw( encode_json );
22 #use Data::Dump 'pp';
23
24 use C4::Auth qw( get_template_and_user );
25 use C4::Context;
26 use C4::ItemCirculationAlertPreference;
27 use C4::Output qw( output_html_with_http_headers );
28
29 use Koha::ItemTypes;
30 use Koha::Patron::Categories;
31
32 # shortcut for long package name
33 our $preferences = 'C4::ItemCirculationAlertPreference';
34
35 # display item circulation alerts
36 sub show {
37     my ($input) = @_;
38     my $dbh = C4::Context->dbh;
39     my ($template, $user, $cookie) = get_template_and_user(
40         {
41             template_name   => "admin/item_circulation_alerts.tt",
42             query           => $input,
43             type            => "intranet",
44             flagsrequired   => { parameters => 'item_circ_alerts' },
45             debug           => defined($input->param('debug')),
46         }
47     );
48
49     my $branch   = $input->param('branch') || '*';
50     my $grid_checkout = $preferences->grid({ branchcode => $branch, notification => 'CHECKOUT' });
51     my $grid_checkin  = $preferences->grid({ branchcode => $branch, notification => 'CHECKIN' });
52
53     $template->param(
54         branch        => $branch,
55         item_types    => Koha::ItemTypes->search,
56         grid_checkout => $grid_checkout,
57         grid_checkin  => $grid_checkin,
58     );
59
60     output_html_with_http_headers $input, $cookie, $template->output;
61 }
62
63 # toggle a preference via ajax
64 sub toggle {
65     my ($input) = @_;
66     my $id = $input->param('id');
67     my $branch = $input->param('branch');
68     my ($category, $item_type, $notification) = split('-', $id);
69     $category  =~ s/_/*/;
70     $item_type =~ s/_/*/;
71
72     my $settings = {
73         branchcode   => $branch,
74         categorycode => $category,
75         item_type    => $item_type,
76         notification => $notification,
77     };
78
79     my $restrictions = $preferences;  # all the same thing...
80     my $notifications = $preferences; #
81     if ($notifications->is_enabled_for($settings)) {
82         # toggle by adding a restriction
83         $restrictions->create($settings);
84     } else {
85         # toggle by removing the restriction
86         $restrictions->delete($settings);
87     }
88
89     my $response = { success => 1 };
90     my @reasons  = $notifications->is_disabled_for($settings);
91     if (@reasons == 0) {
92         $response->{classes} = '';
93     } else {
94         my $default_exists   = grep { $_->{branchcode} eq '*' } @reasons;
95         my $non_default_also = grep { $_->{branchcode} ne '*' } @reasons;
96         my @classes;
97         push @classes, 'default'  if $default_exists;
98         push @classes, 'disabled' if $non_default_also;
99         $response->{classes} = join(' ', @classes);
100     }
101     print $input->header;
102     print encode_json($response);
103 }
104
105 # dispatch to various actions based on CGI parameter 'action'
106 sub dispatch {
107     my %handler = (
108         show   => \&show,
109         toggle => \&toggle,
110     );
111     my $input  = CGI->new;
112     my $action = $input->param('action') || 'show';
113     if (not exists $handler{$action}) {
114         my $status = 400;
115         print $input->header(-status => $status);
116         print $input->div(
117             $input->h1($status),
118             $input->p("$action is not supported.")
119         );
120     } else {
121         $handler{$action}->($input);
122     }
123 }
124
125 # main
126 dispatch if $ENV{REQUEST_URI};
127 1;
128
129
130 =head1 NAME
131
132 admin/item_circulation_alerts.pl - per-branch configuration for messaging
133
134 =head1 SYNOPSIS
135
136 L<http://intranet.mydomain.com:8080/cgi-bin/koha/admin/item_circulation_alerts.pl>
137
138 =head1 DESCRIPTION
139
140 This CGI script drives an interface for configuring item circulation alerts.
141 If you want to prevent alerts from going out for any combination of branch,
142 patron category, and item type, this is where that policy would be set.
143
144 =head2 URLs
145
146
147 =head3 ?action=show
148
149 Display a branches item circulation alert preferences.
150
151 Parameters:
152
153 =over 2
154
155 =item branch
156
157 What branch are we looking at.  If none is specified, the virtual default
158 branch '*' is used.
159
160 =back
161
162
163
164 =head3 ?action=toggle
165
166 Toggle a preference via AJAX
167
168 Parameters:
169
170 =over 2
171
172 =item id
173
174 The id should be string that can be split on "-" which contains:
175 "$categorycode-$item_type-$notification".
176
177 =item branch
178
179 Branch code to apply this preference to
180
181 =back
182
183 =cut