3 # Copyright 2007 LibLime
4 # Copyright 2018 Koha Development Team
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
13 # Koha is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with Koha; if not, see <http://www.gnu.org/licenses>.
24 use C4::Auth qw( get_template_and_user );
26 use C4::Output qw( output_html_with_http_headers );
27 use C4::ClassSortRoutine qw( GetSortRoutineNames );
28 use C4::ClassSplitRoutine qw( GetSplitRoutineNames );
29 use Koha::ClassSources;
30 use Koha::ClassSortRules;
31 use Koha::ClassSplitRules;
33 my $script_name = "/cgi-bin/koha/admin/classsources.pl";
36 my $op = $input->param('op') || 'list';
37 my $cn_source = $input->param('cn_source');
38 my $class_sort_rule = $input->param('class_sort_rule');
39 my $class_split_rule = $input->param('class_split_rule');
40 my $sort_routine = $input->param('sort_routine');
41 my $split_routine = $input->param('split_routine');
42 my @split_regex = $input->multi_param('split_regex');
43 my $description = $input->param('description');
44 my $used = $input->param('used');
46 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
48 template_name => "admin/classsources.tt",
51 flagsrequired => { parameters => 'manage_classifications' },
56 $template->param( script_name => $script_name );
58 if ( $op eq "add_source" ) {
60 $cn_source ? Koha::ClassSources->find($cn_source) : undef;
62 class_source => $class_source,
63 sort_rules => Koha::ClassSortRules->search,
64 split_rules => Koha::ClassSplitRules->search,
67 elsif ( $op eq "add_source_validate" ) {
68 my $class_source = Koha::ClassSources->find($cn_source);
72 description => $description,
73 used => ( $used eq 'used' ? 1 : 0 ),
74 class_sort_rule => $class_sort_rule,
75 class_split_rule => $class_split_rule,
78 eval { $class_source->store; };
81 { type => 'error', code => 'error_on_update_source' };
85 { type => 'message', code => 'success_on_update_source' };
90 $class_source = Koha::ClassSource->new(
92 cn_source => $cn_source,
93 description => $description,
94 used => ( $used eq 'used' ? 1 : 0 ),
95 class_sort_rule => $class_sort_rule,
96 class_split_rule => $class_split_rule,
99 eval { $class_source->store; };
102 { type => 'error', code => 'error_on_insert_source' };
106 { type => 'message', code => 'success_on_insert_source' };
112 elsif ( $op eq "delete_source_confirmed" ) {
113 my $class_source = Koha::ClassSources->find($cn_source);
114 my $deleted = eval { $class_source->delete };
115 if ( $@ or not $deleted ) {
116 push @messages, { type => 'error', code => 'error_on_delete_source' };
120 { type => 'message', code => 'success_on_delete_source' };
125 elsif ( $op eq "add_sort_rule" ) {
127 $class_sort_rule ? Koha::ClassSortRules->find($class_sort_rule) : undef;
129 sort_rule => $sort_rule,
130 sort_routines => get_class_sort_routines(),
133 elsif ( $op eq "add_sort_rule_validate" ) {
134 my $sort_rule = Koha::ClassSortRules->find($class_sort_rule);
137 { description => $description, sort_routine => $sort_routine } );
138 eval { $sort_rule->store; };
141 { type => 'error', code => 'error_on_update_sort_rule' };
145 { type => 'message', code => 'success_on_update_sort_rule' };
150 $sort_rule = Koha::ClassSortRule->new(
152 class_sort_rule => $class_sort_rule,
153 description => $description,
154 sort_routine => $sort_routine,
157 eval { $sort_rule->store; };
160 { type => 'error', code => 'error_on_insert_sort_rule' };
164 { type => 'message', code => 'success_on_insert_sort_rule' };
169 elsif ( $op eq "delete_sort_rule" ) {
170 my $sort_rule = Koha::ClassSortRules->find($class_sort_rule);
171 my $deleted = eval { $sort_rule->delete };
172 if ( $@ or not $deleted ) {
174 { type => 'error', code => 'error_on_delete_sort_rule' };
178 { type => 'message', code => 'success_on_delete_sort_rule' };
182 elsif ( $op eq "add_split_rule" ) {
185 ? Koha::ClassSplitRules->find($class_split_rule)
188 split_rule => $split_rule,
189 split_routines => get_class_split_routines(),
192 elsif ( $op eq "add_split_rule_validate" ) {
193 my $split_rule = Koha::ClassSplitRules->find($class_split_rule);
195 @split_regex = grep {!/^$/} @split_regex; # Remove empty
199 description => $description,
200 split_routine => $split_routine,
204 $split_rule->regexs(\@split_regex)
205 if $split_routine eq 'RegEx';
210 { type => 'error', code => 'error_on_update_split_rule' };
214 { type => 'message', code => 'success_on_update_split_rule' };
219 $split_rule = Koha::ClassSplitRule->new(
221 class_split_rule => $class_split_rule,
222 description => $description,
223 split_routine => $split_routine,
224 regexs => \@split_regex,
227 eval { $split_rule->store; };
231 { type => 'error', code => 'error_on_insert_split_rule' };
235 { type => 'message', code => 'success_on_insert_split_rule' };
240 elsif ( $op eq "delete_split_rule" ) {
241 my $split_rule = Koha::ClassSplitRules->find($class_split_rule);
242 my $deleted = eval { $split_rule->delete };
243 if ( $@ or not $deleted ) {
245 { type => 'error', code => 'error_on_delete_split_rule' };
249 { type => 'message', code => 'success_on_delete_split_rule' };
254 if ( $op eq 'list' ) {
255 my $class_sources = Koha::ClassSources->search;
256 my $sort_rules = Koha::ClassSortRules->search;
257 my $split_rules = Koha::ClassSplitRules->search;
259 class_sources => $class_sources,
260 sort_rules => $sort_rules,
261 split_rules => $split_rules,
265 $template->param( op => $op, messages => \@messages, );
266 output_html_with_http_headers $input, $cookie, $template->output;
270 sub get_class_sort_routines {
271 my @sort_routines = GetSortRoutineNames();
272 return \@sort_routines;
275 sub get_class_split_routines {
276 my @split_routines = GetSplitRoutineNames();
277 return \@split_routines;