X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fclasssources.pl;h=697db41e45cfe8eface13ffc47d1da8729e75453;hb=fb98450172cbd446768375cd9374962447df7cfe;hp=e7f6c9a6715eaaa3ad70210f11db4ece7306bc36;hpb=98a207ef955effae8d6b26a1c74bddd9a3c9a801;p=koha.git diff --git a/admin/classsources.pl b/admin/classsources.pl index e7f6c9a671..697db41e45 100755 --- a/admin/classsources.pl +++ b/admin/classsources.pl @@ -1,291 +1,281 @@ #! /usr/bin/perl # # Copyright 2007 LibLime +# Copyright 2018 Koha Development Team # # 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # -use strict; -#use warnings; FIXME - Bug 2505 -use CGI; +use Modern::Perl; +use CGI qw ( -utf8 ); use C4::Auth; use C4::Context; use C4::Output; use C4::Koha; -use C4::ClassSource; use C4::ClassSortRoutine; +use C4::ClassSplitRoutine; +use Koha::ClassSources; +use Koha::ClassSortRules; +use Koha::ClassSplitRules; my $script_name = "/cgi-bin/koha/admin/classsources.pl"; -my $input = new CGI; -my $op = $input->param('op') || ''; -my $source_code = $input->param('class_source'); -my $rule_code = $input->param('sort_rule'); - -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "admin/classsources.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 'parameters_remaining_permissions'}, - debug => 1, - }); - -$template->param(script_name => $script_name); -$template->param($op => 1) if $op; - -my $display_lists = 0; -if ($op eq "add_source") { - add_class_source_form($template); -} elsif ($op eq "add_source_confirmed") { - add_class_source($template, - $source_code, - $input->param('description'), - $input->param('used') eq "used" ? 1 : 0, - $rule_code); - $display_lists = 1; -} elsif ($op eq "delete_source") { - delete_class_source_form($template); -} elsif ($op eq "delete_source_confirmed") { - delete_class_source($template, $source_code); - $display_lists = 1; -} elsif ($op eq "edit_source") { - edit_class_source_form($template, $source_code); -} elsif ($op eq "edit_source_confirmed") { - edit_class_source($template, - $source_code, - $input->param('description'), - $input->param('used') eq "used" ? 1 : 0, - $rule_code); - $display_lists = 1; -} elsif ($op eq "add_sort_rule") { - add_class_sort_rule_form($template); -} elsif ($op eq "add_sort_rule_confirmed") { - add_class_sort_rule($template, - $rule_code, - $input->param('description'), - $input->param('sort_routine')); - $display_lists = 1; -} elsif ($op eq "delete_sort_rule") { - delete_sort_rule_form($template, $rule_code); -} elsif ($op eq "delete_sort_rule_confirmed") { - delete_sort_rule($template, $rule_code); - $display_lists = 1; -} elsif ($op eq "edit_sort_rule") { - edit_class_sort_rule_form($template, $rule_code); -} elsif ($op eq "edit_sort_rule_confirmed") { - edit_class_sort_rule($template, - $rule_code, - $input->param('description'), - $input->param('sort_routine')); - $display_lists = 1; -} else { - $display_lists = 1; -} - -if ($display_lists) { - $template->param(display_lists => 1); - class_source_list($template); - class_sort_rule_list($template); -} - -output_html_with_http_headers $input, $cookie, $template->output; +my $input = new CGI; +my $op = $input->param('op') || 'list'; +my $cn_source = $input->param('cn_source'); +my $class_sort_rule = $input->param('class_sort_rule'); +my $class_split_rule = $input->param('class_split_rule'); +my $sort_routine = $input->param('sort_routine'); +my $split_routine = $input->param('split_routine'); +my @split_regex = $input->multi_param('split_regex'); +my $description = $input->param('description'); +my $used = $input->param('used'); + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "admin/classsources.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { parameters => 'manage_classifications' }, + debug => 1, + } +); -exit 0; +my @messages; +$template->param( script_name => $script_name ); -sub add_class_source_form { - my ($template) = @_; +if ( $op eq "add_source" ) { + my $class_source = + $cn_source ? Koha::ClassSources->find($cn_source) : undef; $template->param( - class_source_form => 1, - confirm_op => "add_source_confirmed", - used => 0 + class_source => $class_source, + sort_rules => scalar Koha::ClassSortRules->search, + split_rules => scalar Koha::ClassSplitRules->search, ); - get_sort_rule_codes($template, ''); -} - -sub add_class_source { - my ($template, $source_code, $description, $used, $sort_rule) = @_; - AddClassSource($source_code, $description, $used, $sort_rule); - $template->param(added_source => $source_code); } +elsif ( $op eq "add_source_validate" ) { + my $class_source = Koha::ClassSources->find($cn_source); + if ($class_source) { + $class_source->set( + { + description => $description, + used => ( $used eq 'used' ? 1 : 0 ), + class_sort_rule => $class_sort_rule, + class_split_rule => $class_split_rule, + } + ); + eval { $class_source->store; }; + if ($@) { + push @messages, + { type => 'error', code => 'error_on_update_source' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_update_source' }; + } -sub edit_class_source_form { - my ($template, $source_code) = @_; - - my $source = GetClassSource($source_code); - $template->param( - class_source_form => 1, - edit_class_source => 1, - class_source => $source_code, - confirm_op => "edit_source_confirmed", - description => $source->{'description'}, - used => $source->{'used'}, - ); + } + else { + $class_source = Koha::ClassSource->new( + { + cn_source => $cn_source, + description => $description, + used => ( $used eq 'used' ? 1 : 0 ), + class_sort_rule => $class_sort_rule, + class_split_rule => $class_split_rule, + } + ); + eval { $class_source->store; }; + if ($@) { + push @messages, + { type => 'error', code => 'error_on_insert_source' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_insert_source' }; + } + } - get_sort_rule_codes($template, $source->{'class_sort_rule'}); + $op = 'list'; } +elsif ( $op eq "delete_source_confirmed" ) { + my $class_source = Koha::ClassSources->find($cn_source); + my $deleted = eval { $class_source->delete }; + if ( $@ or not $deleted ) { + push @messages, { type => 'error', code => 'error_on_delete_source' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_delete_source' }; + } -sub edit_class_source { - my ($template, $source_code, $description, $used, $sort_rule) = @_; - ModClassSource($source_code, $description, $used, $sort_rule); - $template->param(edited_source => $source_code); + $op = 'list'; } - - -sub delete_class_source_form { - my ($template) = @_; +elsif ( $op eq "add_sort_rule" ) { + my $sort_rule = + $class_sort_rule ? Koha::ClassSortRules->find($class_sort_rule) : undef; $template->param( - delete_class_source_form => 1, - confirm_op => "delete_source_confirmed", - class_source => $source_code, + sort_rule => $sort_rule, + sort_routines => get_class_sort_routines(), ); } +elsif ( $op eq "add_sort_rule_validate" ) { + my $sort_rule = Koha::ClassSortRules->find($class_sort_rule); + if ($sort_rule) { + $sort_rule->set( + { description => $description, sort_routine => $sort_routine } ); + eval { $sort_rule->store; }; + if ($@) { + push @messages, + { type => 'error', code => 'error_on_update_sort_rule' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_update_sort_rule' }; + } -sub delete_class_source { - my ($template, $source_code) = @_; - DelClassSource($source_code); - $template->param(deleted_source => $source_code); + } + else { + $sort_rule = Koha::ClassSortRule->new( + { + class_sort_rule => $class_sort_rule, + description => $description, + sort_routine => $sort_routine, + } + ); + eval { $sort_rule->store; }; + if ($@) { + push @messages, + { type => 'error', code => 'error_on_insert_sort_rule' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_insert_sort_rule' }; + } + } + $op = 'list'; } - -sub get_sort_rule_codes { - my ($template, $current_rule) = @_; - - my $sort_rules = GetClassSortRules(); - - my @sort_rules = (); - foreach my $sort_rule (sort keys %$sort_rules) { - my $sort_rule = $sort_rules->{$sort_rule}; - push @sort_rules, { - rule => $sort_rule->{'class_sort_rule'}, - description => $sort_rule->{'description'}, - selected => $sort_rule->{'class_sort_rule'} eq $current_rule ? 1 : 0 - }; +elsif ( $op eq "delete_sort_rule" ) { + my $sort_rule = Koha::ClassSortRules->find($class_sort_rule); + my $deleted = eval { $sort_rule->delete }; + if ( $@ or not $deleted ) { + push @messages, + { type => 'error', code => 'error_on_delete_sort_rule' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_delete_sort_rule' }; } - $template->param(rules_dropdown => \@sort_rules); - + $op = 'list'; } - -sub add_class_sort_rule_form { - my ($template) = @_; +elsif ( $op eq "add_split_rule" ) { + my $split_rule = + $class_split_rule + ? Koha::ClassSplitRules->find($class_split_rule) + : undef; $template->param( - sort_rule_form => 1, - confirm_op => "add_sort_rule_confirmed" + split_rule => $split_rule, + split_routines => get_class_split_routines(), ); - get_class_sort_routines($template, ""); -} - -sub add_class_sort_rule { - my ($template, $rule_code, $description, $sort_routine) = @_; - AddClassSortRule($rule_code, $description, $sort_routine); - $template->param(added_rule => $rule_code); } - -sub delete_sort_rule_form { - my ($template, $rule_code) = @_; - - my @sources = GetSourcesForSortRule($rule_code); - if ($#sources == -1) { - $template->param( - delete_sort_rule_form => 1, - confirm_op => "delete_sort_rule_confirmed", - sort_rule => $rule_code, +elsif ( $op eq "add_split_rule_validate" ) { + my $split_rule = Koha::ClassSplitRules->find($class_split_rule); + + @split_regex = grep {!/^$/} @split_regex; # Remove empty + if ($split_rule) { + $split_rule->set( + { + description => $description, + split_routine => $split_routine, + } ); - } else { - $template->param( - delete_sort_rule_impossible => 1, - sort_rule => $rule_code + eval { + $split_rule->regexs(\@split_regex) + if $split_routine eq 'RegEx'; + $split_rule->store; + }; + if ($@) { + push @messages, + { type => 'error', code => 'error_on_update_split_rule' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_update_split_rule' }; + } + + } + else { + $split_rule = Koha::ClassSplitRule->new( + { + class_split_rule => $class_split_rule, + description => $description, + split_routine => $split_routine, + regexs => \@split_regex, + } ); + eval { $split_rule->store; }; + if ($@) { + warn $@; + push @messages, + { type => 'error', code => 'error_on_insert_split_rule' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_insert_split_rule' }; + } } + $op = 'list'; } - -sub delete_sort_rule { - my ($template, $rule_code) = @_; - DelClassSortRule($rule_code); - $template->param(deleted_rule => $rule_code); +elsif ( $op eq "delete_split_rule" ) { + my $split_rule = Koha::ClassSplitRules->find($class_split_rule); + my $deleted = eval { $split_rule->delete }; + if ( $@ or not $deleted ) { + push @messages, + { type => 'error', code => 'error_on_delete_split_rule' }; + } + else { + push @messages, + { type => 'message', code => 'success_on_delete_split_rule' }; + } + $op = 'list'; } -sub edit_class_sort_rule_form { - my ($template, $rule_code) = @_; - - my $rule = GetClassSortRule($rule_code); +if ( $op eq 'list' ) { + my $class_sources = Koha::ClassSources->search; + my $sort_rules = Koha::ClassSortRules->search; + my $split_rules = Koha::ClassSplitRules->search; $template->param( - sort_rule_form => 1, - edit_sort_rule => 1, - confirm_op => "edit_sort_rule_confirmed", - sort_rule => $rule_code, - description => $rule->{'description'}, - sort_routine => $rule->{'sort_routine'} + class_sources => $class_sources, + sort_rules => $sort_rules, + split_rules => $split_rules, ); +} - get_class_sort_routines($template, $rule->{'sort_routine'}); +$template->param( op => $op, messages => \@messages, ); +output_html_with_http_headers $input, $cookie, $template->output; -} +exit 0; sub get_class_sort_routines { - my ($template, $current_routine) = @_; - my @sort_routines = GetSortRoutineNames(); - my @sort_form = (); - - foreach my $sort_routine (sort @sort_routines) { - push @sort_form, { - routine => $sort_routine, - selected => $sort_routine eq $current_routine ? 1 : 0 - }; - } - $template->param(routines_dropdown => \@sort_form); - + return \@sort_routines; } -sub edit_class_sort_rule { - my ($template, $rule_code, $description, $sort_routine) = @_; - ModClassSortRule($rule_code, $description, $sort_routine); - $template->param(edited_rule => $rule_code); -} - -sub class_source_list { - my ($template) = @_; - my $sources = GetClassSources(); - - my @sources = (); - foreach my $cn_source (sort keys %$sources) { - my $source = $sources->{$cn_source}; - push @sources, { - code => $source->{'cn_source'}, - description => $source->{'description'}, - used => $source->{'used'}, - sortrule => $source->{'class_sort_rule'} - }; - } - $template->param(class_sources => \@sources); -} - -sub class_sort_rule_list { - - my ($template) = @_; - my $sort_rules = GetClassSortRules(); - - my @sort_rules = (); - foreach my $sort_rule (sort keys %$sort_rules) { - my $sort_rule = $sort_rules->{$sort_rule}; - push @sort_rules, { - rule => $sort_rule->{'class_sort_rule'}, - description => $sort_rule->{'description'}, - sort_routine => $sort_rule->{'sort_routine'} - }; - } - $template->param(class_sort_rules => \@sort_rules); +sub get_class_split_routines { + my @split_routines = GetSplitRoutineNames(); + return \@split_routines; }