classification sources part 1 - system preferences
[koha.git] / admin / classsources.pl
1 #! /usr/bin/perl
2 #
3 # Copyright 2007 LibLime
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA  02111-1307 USA
19 #
20
21 use strict;
22 use CGI;
23 use C4::Auth;
24 use C4::Context;
25 use C4::Output;
26 use C4::Koha;
27 use C4::ClassSource;
28
29 my $script_name = "/cgi-bin/koha/admin/classsources.pl";
30
31 my $input = new CGI;
32 my $op = $input->param('op');
33 my $source_code = $input->param('class_source');
34 my $rule_code = $input->param('sort_rule');
35
36 my ($template, $loggedinuser, $cookie)
37     = get_template_and_user({template_name => "admin/classsources.tmpl",
38                  query => $input,
39                  type => "intranet",
40                  authnotrequired => 0,
41                  flagsrequired => {parameters => 1},
42                  debug => 1,
43                  });
44
45 if ($op) {
46     $template->param(script_name => $script_name, $op => 1);
47 } else {
48     $template->param(script_name => $script_name);
49 }
50
51 my $display_lists = 0;
52 if ($op eq "add_source") {
53     add_class_source_form($template);
54 } elsif ($op eq "add_source_confirmed") {
55     add_class_source($template,
56                      $source_code,
57                      $input->param('description'),
58                      $input->param('used') eq "used" ? 1 : 0,
59                      $rule_code);
60     $display_lists = 1;
61 } elsif ($op eq "delete_source") {
62     delete_class_source_form($template);
63 } elsif ($op eq "delete_source_confirmed") {
64     delete_class_source($template, $source_code);
65     $display_lists = 1;
66 } elsif ($op eq "edit_source") {
67     edit_class_source_form($template, $source_code);
68 } elsif ($op eq "edit_source_confirmed") {
69     edit_class_source($template,
70                      $source_code,
71                      $input->param('description'),
72                      $input->param('used') eq "used" ? 1 : 0,
73                      $rule_code);
74     $display_lists = 1;
75 } elsif ($op eq "add_sort_rule") {
76     add_class_sort_rule_form($template);
77 } elsif ($op eq "add_sort_rule_confirmed") {
78     add_class_sort_rule($template,
79                         $rule_code,
80                         $input->param('description'),
81                         $input->param('sort_routine'));
82     $display_lists = 1;
83 } elsif ($op eq "delete_sort_rule") {
84     delete_sort_rule_form($template, $rule_code);
85 } elsif ($op eq "delete_sort_rule_confirmed") { 
86     delete_sort_rule($template, $rule_code);
87     $display_lists = 1;
88 } elsif ($op eq "edit_sort_rule") { 
89     edit_class_sort_rule_form($template, $rule_code);
90 } elsif ($op eq "edit_sort_rule_confirmed") {
91     edit_class_sort_rule($template,
92                          $rule_code,
93                          $input->param('description'),
94                          $input->param('sort_routine'));
95     $display_lists = 1;
96 } else {
97     $display_lists = 1;
98 }
99
100 if ($display_lists) {
101     $template->param(display_lists => 1);
102     class_source_list($template);
103     class_sort_rule_list($template);
104 }
105
106 output_html_with_http_headers $input, $cookie, $template->output;
107
108 exit 0;
109
110 sub add_class_source_form {
111     my ($template) = @_;
112     $template->param(
113         class_source_form => 1,
114         confirm_op => "add_source_confirmed",
115         used => 0
116     );
117     get_sort_rule_codes($template, '');
118 }
119
120 sub add_class_source {
121     my ($template, $source_code, $description, $used, $sort_rule) = @_;
122     AddClassSource($source_code, $description, $used, $sort_rule);
123     $template->param(added_source => $source_code);
124 }
125
126 sub edit_class_source_form {
127     my ($template, $source_code) = @_;
128
129     my $source = GetClassSource($source_code);
130     $template->param(
131         class_source_form => 1,
132         edit_class_source => 1,
133         class_source => $source_code,
134         confirm_op => "edit_source_confirmed",
135         description => $source->{'description'},
136         used => $source->{'used'},
137     );
138
139     get_sort_rule_codes($template, $source->{'rule_code'});
140 }
141
142 sub edit_class_source {
143     my ($template, $source_code, $description, $used, $sort_rule) = @_;
144     ModClassSource($source_code, $description, $used, $sort_rule);
145     $template->param(edited_source => $source_code);
146 }
147
148
149 sub delete_class_source_form {
150     my ($template) = @_;
151     $template->param(
152         delete_class_source_form => 1,
153         confirm_op => "delete_source_confirmed",
154         class_source => $source_code,
155     );
156 }
157
158 sub delete_class_source { 
159     my ($template, $source_code) = @_;
160     DelClassSource($source_code);
161     $template->param(deleted_source => $source_code);
162 }
163
164 sub get_sort_rule_codes {
165     my ($template, $current_rule) = @_;
166
167     my $sort_rules = GetClassSortRules();
168
169     my @sort_rules = ();
170     foreach my $sort_rule (sort keys %$sort_rules) {
171         my $sort_rule = $sort_rules->{$sort_rule};
172         push @sort_rules,
173           {
174             rule        => $sort_rule->{'class_sort_rule'},
175             description => $sort_rule->{'description'},
176             selected => $sort_rule->{'class_sort_rule'} eq $current_rule ? 1 : 0
177           }
178     }
179     $template->param(rules_dropdown => \@sort_rules);
180  
181 }
182
183 sub add_class_sort_rule_form {
184     my ($template) = @_;
185     $template->param(
186         sort_rule_form => 1,
187         confirm_op => "add_sort_rule_confirmed"
188     );
189 }
190
191 sub add_class_sort_rule {
192     my ($template, $rule_code, $description, $sort_routine) = @_;
193     AddClassSortRule($rule_code, $description, $sort_routine);
194     $template->param(added_rule => $rule_code);
195 }
196
197 sub delete_sort_rule_form {
198     my ($template, $rule_code) = @_;
199
200     my @sources = GetSourcesForSortRule($rule_code);
201     if ($#sources == -1) {
202         $template->param(
203             delete_sort_rule_form => 1,
204             confirm_op => "delete_sort_rule_confirmed",
205             sort_rule => $rule_code,
206         );
207     } else {
208         $template->param(
209             delete_sort_rule_impossible => 1,
210             sort_rule => $rule_code
211         );
212     }
213 }
214
215 sub delete_sort_rule { 
216     my ($template, $rule_code) = @_;
217     DelClassSortRule($rule_code);
218     $template->param(deleted_rule => $rule_code);
219 }
220
221 sub edit_class_sort_rule_form {
222     my ($template, $rule_code) = @_;
223
224     my $rule = GetClassSortRule($rule_code);
225     $template->param(
226         sort_rule_form => 1,
227         edit_sort_rule => 1,
228         confirm_op => "edit_sort_rule_confirmed",
229         sort_rule => $rule_code,
230         description => $rule->{'description'},
231         sort_routine => $rule->{'sort_routine'}
232     );
233
234 }
235
236 sub edit_class_sort_rule {
237     my ($template, $rule_code, $description, $sort_routine) = @_;
238     ModClassSortRule($rule_code, $description, $sort_routine);
239     $template->param(edited_rule => $rule_code);
240
241
242 sub class_source_list {
243     my ($template) = @_;
244     my $sources = GetClassSources();
245
246     my @sources = ();
247     foreach my $cn_source (sort keys %$sources) {
248         my $source = $sources->{$cn_source};
249         push @sources,
250           { 
251             code        => $source->{'cn_source'},
252             description => $source->{'description'},
253             used => $source->{'used'},
254             sortrule    => $source->{'class_sort_rule'}
255           } 
256     }
257     $template->param(class_sources => \@sources);
258 }
259
260 sub class_sort_rule_list {
261
262     my ($template) = @_;
263     my $sort_rules = GetClassSortRules();
264
265     my @sort_rules = ();
266     foreach my $sort_rule (sort keys %$sort_rules) {
267         my $sort_rule = $sort_rules->{$sort_rule};
268         push @sort_rules, 
269           {  
270             rule        => $sort_rule->{'class_sort_rule'},
271             description => $sort_rule->{'description'},
272             sort_routine    => $sort_rule->{'sort_routine'}
273           } 
274     }
275     $template->param(class_sort_rules => \@sort_rules);
276 }