From 4ae5ad1c93bb5ba671c2630c0f3766ffcdcbe972 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 16 Sep 2015 16:50:43 +0100 Subject: [PATCH] Bug 14836: Use Koha::PatronCategor[y|ies] in admin/categories.pl Test plan: Add/edit/remove patron categories from the administration module (admin/categories.pl). You should get message feedback after each action. Signed-off-by: Frederic Demians Operations in admin/category is unchanged, and functionnal --- admin/categorie.pl | 406 ++++---------- .../prog/en/includes/messaging-preference-form.inc | 9 +- .../prog/en/modules/admin/categorie.tt | 601 +++++++++++---------- 3 files changed, 425 insertions(+), 591 deletions(-) diff --git a/admin/categorie.pl b/admin/categorie.pl index 1d5cd08..bc3151d 100755 --- a/admin/categorie.pl +++ b/admin/categorie.pl @@ -1,24 +1,7 @@ #!/usr/bin/perl -#script to administer the categories table -#written 20/02/2002 by paul.poulain@free.fr - -# ALGO : -# this script use an $op to know what to do. -# if $op is empty or none of the above values, -# - the default screen is build (with all records, or filtered datas). -# - the user can clic on add, modify or delete record. -# if $op=add_form -# - if primkey exists, this is a modification,so we read the $primkey record -# - builds the add/modify form -# if $op=add_validate -# - the user has just send datas, so we create/modify the record -# if $op=delete_form -# - we show the record having primkey=$primkey and ask for deletion validation form -# if $op=delete_confirm -# - we delete the record having primkey=$primkey - # Copyright 2000-2002 Katipo Communications +# Copyright 2002 Paul Poulain # # This file is part of Koha. # @@ -43,36 +26,15 @@ use C4::Auth; use C4::Branch; use C4::Output; use C4::Form::MessagingPreferences; +use Koha::Borrowers; use Koha::Database; use Koha::DateUtils; - -sub StringSearch { - my ( $searchstring, $type ) = @_; - my $dbh = C4::Context->dbh; - $searchstring //= ''; - $searchstring =~ s/\'/\\\'/g; - my @data = split( ' ', $searchstring ); - push @data, q{} if $#data == -1; - my $count = @data; - my $sth = $dbh->prepare("Select * from categories where (description like ?) order by category_type,description,categorycode"); - $sth->execute("$data[0]%"); - my @results; - - while ( my $data = $sth->fetchrow_hashref ) { - push( @results, $data ); - } - - # $sth->execute; - $sth->finish; - return ( scalar(@results), \@results ); -} +use Koha::PatronCategories; my $input = new CGI; -my $searchfield = $input->param('description'); -my $script_name = "/cgi-bin/koha/admin/categorie.pl"; +my $searchfield = $input->param('description') // q||; my $categorycode = $input->param('categorycode'); my $op = $input->param('op') // 'list'; -my $block_expired = $input->param("block_expired"); my @messages; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -86,177 +48,107 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -################## ADD_FORM ################################## -# called by default. Used to create form to add or modify a record if ( $op eq 'add_form' ) { - $template->param( add_form => 1 ); - - #---- if primkey exists, it's a modify action, so read values to modify... - my $data; - my @selected_branches; + my ( $category, $selected_branches ); if ($categorycode) { - my $dbh = C4::Context->dbh; - my $sth = - $dbh->prepare("SELECT * FROM categories WHERE categorycode=?"); - $sth->execute($categorycode); - $data = $sth->fetchrow_hashref; - - $sth = $dbh->prepare( - "SELECT b.branchcode, b.branchname - FROM categories_branches AS cb, branches AS b - WHERE cb.branchcode = b.branchcode AND cb.categorycode = ? - "); - $sth->execute($categorycode); - while ( my $branch = $sth->fetchrow_hashref ) { - push @selected_branches, $branch; - } - $sth->finish; + $category = Koha::PatronCategories->find($categorycode); + $selected_branches = $category->branch_limitations; } - if ( $data->{'enrolmentperioddate'} - && $data->{'enrolmentperioddate'} eq '0000-00-00' ) - { - $data->{'enrolmentperioddate'} = undef; - } - - $data->{'category_type'} //= ''; - - my $branches = GetBranches(); + my $branches = GetBranches; my @branches_loop; - foreach my $branch ( sort keys %$branches ) { - my $selected = - ( grep { $$_{branchcode} eq $branch } @selected_branches ) ? 1 : 0; + foreach my $branchcode ( sort { uc( $branches->{$a}->{branchname} ) cmp uc( $branches->{$b}->{branchname} ) } keys %$branches ) { + my $selected = ( grep { $_ eq $branchcode } @$selected_branches ) ? 1 : 0; push @branches_loop, - { - branchcode => $$branches{$branch}{branchcode}, - branchname => $$branches{$branch}{branchname}, + { branchcode => $branchcode, + branchname => $branches->{$branchcode}->{branchname}, selected => $selected, }; } $template->param( + category => $category, branches_loop => \@branches_loop, - description => $data->{'description'}, - enrolmentperiod => $data->{'enrolmentperiod'}, - enrolmentperioddate => $data->{'enrolmentperioddate'}, - upperagelimit => $data->{'upperagelimit'}, - dateofbirthrequired => $data->{'dateofbirthrequired'}, - enrolmentfee => sprintf( "%.2f", $data->{'enrolmentfee'} || 0 ), - overduenoticerequired => $data->{'overduenoticerequired'}, - issuelimit => $data->{'issuelimit'}, - reservefee => sprintf( "%.2f", $data->{'reservefee'} || 0 ), - hidelostitems => $data->{'hidelostitems'}, - category_type => $data->{'category_type'}, - default_privacy => $data->{'default_privacy'}, - SMSSendDriver => C4::Context->preference("SMSSendDriver"), - "type_" . $data->{'category_type'} => 1, - BlockExpiredPatronOpacActions => - $data->{'BlockExpiredPatronOpacActions'}, - TalkingTechItivaPhone => - C4::Context->preference("TalkingTechItivaPhoneNotification"), ); if ( C4::Context->preference('EnhancedMessagingPreferences') ) { C4::Form::MessagingPreferences::set_form_values( { categorycode => $categorycode }, $template ); } - - # END $OP eq ADD_FORM -################## ADD_VALIDATE ################################## - # called by add_form, used to insert/modify data in DB } elsif ( $op eq 'add_validate' ) { - my $is_a_modif = $input->param("is_a_modif"); + my $categorycode = $input->param('categorycode'); + my $description = $input->param('description'); + my $enrolmentperiod = $input->param('enrolmentperiod'); + my $enrolmentperioddate = $input->param('enrolmentperioddate') || undef; + my $upperagelimit = $input->param('upperagelimit'); + my $dateofbirthrequired = $input->param('dateofbirthrequired'); + my $enrolmentfee = $input->param('enrolmentfee'); + my $reservefee = $input->param('reservefee'); + my $hidelostitems = $input->param('hidelostitems'); + my $overduenoticerequired = $input->param('overduenoticerequired'); + my $category_type = $input->param('category_type'); + my $BlockExpiredPatronOpacActions = $input->param('BlockExpiredPatronOpacActions'); + my $default_privacy = $input->param('default_privacy'); + my @branches = grep { $_ ne q{} } $input->param('branches'); - my $dbh = C4::Context->dbh; + my $is_a_modif = $input->param("is_a_modif"); - if ( $input->param('enrolmentperioddate') ) { - my $enrolment_dt = eval { dt_from_string( $input->param('enrolmentperioddate') ) }; - $enrolment_dt = eval { output_pref( { dt => $enrolment_dt, dateonly => 1, dateformat => 'iso' } ) } if ( $enrolment_dt ); - $input->param( 'enrolmentperioddate' => $enrolment_dt ); + if ( $enrolmentperioddate ) { + $enrolmentperioddate = output_pref({ dt => dt_from_string($enrolmentperioddate), dateformat => 'iso' }); } if ($is_a_modif) { - my $sth = $dbh->prepare( " - UPDATE categories - SET description=?, - enrolmentperiod=?, - enrolmentperioddate=?, - upperagelimit=?, - dateofbirthrequired=?, - enrolmentfee=?, - reservefee=?, - hidelostitems=?, - overduenoticerequired=?, - category_type=?, - BlockExpiredPatronOpacActions=?, - default_privacy=? - WHERE categorycode=?" - ); - $sth->execute( - map { $input->param($_) } ( - 'description', 'enrolmentperiod', - 'enrolmentperioddate', 'upperagelimit', - 'dateofbirthrequired', 'enrolmentfee', - 'reservefee', 'hidelostitems', - 'overduenoticerequired', 'category_type', - 'block_expired', 'default_privacy', - 'categorycode' - ) - ); - $sth->finish; - } - else { - my $sth = $dbh->prepare( " - INSERT INTO categories ( - categorycode, - description, - enrolmentperiod, - enrolmentperioddate, - upperagelimit, - dateofbirthrequired, - enrolmentfee, - reservefee, - hidelostitems, - overduenoticerequired, - category_type, - BlockExpiredPatronOpacActions, - default_privacy - ) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)" ); - my $inserted = $sth->execute( - map { $input->param($_) } ( - 'categorycode', 'description', - 'enrolmentperiod', 'enrolmentperioddate', - 'upperagelimit', 'dateofbirthrequired', - 'enrolmentfee', 'reservefee', - 'hidelostitems', 'overduenoticerequired', - 'category_type', 'block_expired', - 'default_privacy', - ) - ); - if ( $inserted ) { - push @messages, { type => 'message', code => 'success_on_insert' }; + my $category = Koha::PatronCategories->find( $categorycode ); + $category->categorycode($categorycode); + $category->description($description); + $category->enrolmentperiod($enrolmentperiod); + $category->enrolmentperioddate($enrolmentperioddate); + $category->upperagelimit($upperagelimit); + $category->dateofbirthrequired($dateofbirthrequired); + $category->enrolmentfee($enrolmentfee); + $category->reservefee($reservefee); + $category->hidelostitems($hidelostitems); + $category->overduenoticerequired($overduenoticerequired); + $category->category_type($category_type); + $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions); + $category->default_privacy($default_privacy); + eval { + $category->store; + $category->replace_branch_limitations( \@branches ); + }; + if ( $@ ) { + push @messages, {type => 'error', code => 'error_on_update' }; } else { - push @messages, { type => 'error', code => 'error_on_insert' }; + push @messages, { type => 'message', code => 'success_on_update' }; } } + else { + my $category = Koha::PatronCategory->new({ + categorycode => $categorycode, + description => $description, + enrolmentperiod => $enrolmentperiod, + enrolmentperioddate => $enrolmentperioddate, + upperagelimit => $upperagelimit, + dateofbirthrequired => $dateofbirthrequired, + enrolmentfee => $enrolmentfee, + reservefee => $reservefee, + hidelostitems => $hidelostitems, + overduenoticerequired => $overduenoticerequired, + category_type => $category_type, + BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions, + default_privacy => $default_privacy, + }); + eval { + $category->store; + $category->replace_branch_limitations( \@branches ); + }; - my @branches = $input->param("branches"); - if (@branches) { - my $sth = $dbh->prepare( - "DELETE FROM categories_branches WHERE categorycode = ?" - ); - $sth->execute( $input->param("categorycode") ); - $sth = $dbh->prepare( - "INSERT INTO categories_branches ( categorycode, branchcode ) VALUES ( ?, ? )" - ); - for my $branchcode (@branches) { - next if not $branchcode; - $sth->bind_param( 1, $input->param("categorycode") ); - $sth->bind_param( 2, $branchcode ); - $sth->execute; + if ( $@ ) { + push @messages, { type => 'error', code => 'error_on_insert' }; + } else { + push @messages, { type => 'message', code => 'success_on_insert' }; } } @@ -267,162 +159,58 @@ elsif ( $op eq 'add_validate' ) { $searchfield = q||; $op = 'list'; - - # END $OP eq ADD_VALIDATE -################## DELETE_CONFIRM ################################## - # called by default form, used to confirm deletion of data in DB } elsif ( $op eq 'delete_confirm' ) { - my $schema = Koha::Database->new()->schema(); - $template->param( delete_confirm => 1 ); - my $count = - $schema->resultset('Borrower') - ->search( { categorycode => $categorycode } )->count(); + my $count = Koha::Borrowers->search({ + categorycode => $categorycode + })->count; - my $category = $schema->resultset('Category')->find($categorycode); - - if ( $category->enrolmentperioddate - && $category->enrolmentperioddate eq '0000-00-00' ) - { - $category->{'enrolmentperioddate'} = undef; - } + my $category = Koha::PatronCategories->find($categorycode); $template->param( - category => $category, - description => $category->description, - enrolmentperiod => $category->enrolmentperiod, - enrolmentperioddate => $category->enrolmentperioddate, + category => $category, patrons_in_category => $count, ); - # END $OP eq DELETE_CONFIRM -################## DELETE_CONFIRMED ################################## - # called by delete_confirm, used to effectively confirm deletion of data in DB } elsif ( $op eq 'delete_confirmed' ) { - $template->param( delete_confirmed => 1 ); - my $dbh = C4::Context->dbh; - my $categorycode = uc( $input->param('categorycode') ); - my $sth = $dbh->prepare("delete from categories where categorycode=?"); - - my $deleted = $sth->execute($categorycode); + my $category = Koha::PatronCategories->find( $categorycode ); + my $deleted = eval { $category->delete; }; - if ( $deleted ) { - push @messages, { type => 'message', code => 'success_on_delete' }; + if ( $@ or not $deleted ) { + push @messages, {type => 'error', code => 'error_on_delete' }; } else { - push @messages, { type => 'error', code => 'error_on_delete' }; + push @messages, { type => 'message', code => 'success_on_delete' }; } $op = 'list'; - - # END $OP eq DELETE_CONFIRMED } if ( $op eq 'list' ) { - $template->param( else => 1 ); - my @loop; - my ( $count, $results ) = StringSearch( $searchfield, 'web' ); - - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare(" - SELECT b.branchcode, b.branchname - FROM categories_branches AS cb, branches AS b - WHERE cb.branchcode = b.branchcode AND cb.categorycode = ? - "); - - for ( my $i = 0 ; $i < $count ; $i++ ) { - $sth->execute( $results->[$i]{'categorycode'} ); - - my @selected_branches; - while ( my $branch = $sth->fetchrow_hashref ) { - push @selected_branches, $branch; - } - - my $enrolmentperioddate = $results->[$i]{'enrolmentperioddate'}; - if ( $enrolmentperioddate && $enrolmentperioddate eq '0000-00-00' ) { - $enrolmentperioddate = undef; - } - - $results->[$i]{'category_type'} //= ''; - - my %row = ( - branches => \@selected_branches, - categorycode => $results->[$i]{'categorycode'}, - description => $results->[$i]{'description'}, - enrolmentperiod => $results->[$i]{'enrolmentperiod'}, - enrolmentperioddate => $enrolmentperioddate, - upperagelimit => $results->[$i]{'upperagelimit'}, - dateofbirthrequired => $results->[$i]{'dateofbirthrequired'}, - overduenoticerequired => $results->[$i]{'overduenoticerequired'}, - issuelimit => $results->[$i]{'issuelimit'}, - hidelostitems => $results->[$i]{'hidelostitems'}, - category_type => $results->[$i]{'category_type'}, - default_privacy => $results->[$i]{'default_privacy'}, - reservefee => sprintf( "%.2f", $results->[$i]{'reservefee'} || 0 ), - enrolmentfee => - sprintf( "%.2f", $results->[$i]{'enrolmentfee'} || 0 ), - "type_" . $results->[$i]{'category_type'} => 1, - ); - - if ( C4::Context->preference('EnhancedMessagingPreferences') ) { - my $brief_prefs = - _get_brief_messaging_prefs( $results->[$i]{'categorycode'} ); - $row{messaging_prefs} = $brief_prefs if @$brief_prefs; + my $categories = Koha::PatronCategories->search( + { + description => { -like => "$searchfield%" } + }, + { + order_by => ['category_type', 'description', 'categorycode' ] } - push @loop, \%row; - } - - $template->param( loop => \@loop ); - - # check that I (institution) and C (child) exists. otherwise => warning to the user - $sth = $dbh->prepare("select category_type from categories where category_type='C'"); - $sth->execute; - my ($categoryChild) = $sth->fetchrow; - $template->param( categoryChild => $categoryChild ); - - $sth = $dbh->prepare("select category_type from categories where category_type='I'"); - $sth->execute; - my ($categoryInstitution) = $sth->fetchrow; - $template->param( categoryInstitution => $categoryInstitution ); - $sth->finish; + ); -} #---- END $OP eq DEFAULT + $template->param( + categories => $categories, + ) +} $template->param( - script_name => $script_name, categorycode => $categorycode, searchfield => $searchfield, messages => \@messages, + op => $op, ); output_html_with_http_headers $input, $cookie, $template->output; exit 0; - -sub _get_brief_messaging_prefs { - my $categorycode = shift; - my $messaging_options = C4::Members::Messaging::GetMessagingOptions(); - my $results = []; - PREF: foreach my $option (@$messaging_options) { - my $pref = C4::Members::Messaging::GetMessagingPreferences( - { - categorycode => $categorycode, - message_name => $option->{'message_name'} - } - ); - next unless $pref->{'transports'}; - my $brief_pref = { - message_attribute_id => $option->{'message_attribute_id'}, - message_name => $option->{'message_name'}, - $option->{'message_name'} => 1 - }; - foreach my $transport ( keys %{ $pref->{'transports'} } ) { - push @{ $brief_pref->{'transports'} }, { transport => $transport }; - } - push @$results, $brief_pref; - } - return $results; -} diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc index c889e15..dabad6d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc @@ -1,3 +1,4 @@ +[% USE Koha %]