X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=admin%2Fcategorie.pl;h=4e7382974b2e3e2743a2e26ace317dde4b87c4dc;hb=4132ac28bf088960d25766fccc60ba1535a0e8ef;hp=576d7caa94d8f16c1b2dbf324e006621136b15a0;hpb=f098258e8cf2d616c6bbc35e44c6a1df47be8517;p=koha_fer diff --git a/admin/categorie.pl b/admin/categorie.pl index 576d7caa94..4e7382974b 100755 --- a/admin/categorie.pl +++ b/admin/categorie.pl @@ -18,7 +18,6 @@ # if $op=delete_confirm # - we delete the record having primkey=$primkey - # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -36,219 +35,372 @@ # with Koha; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; + use CGI; use C4::Context; use C4::Auth; +use C4::Branch; use C4::Output; use C4::Dates; use C4::Form::MessagingPreferences; +use Koha::Database; -sub StringSearch { - my ($searchstring,$type)=@_; - my $dbh = C4::Context->dbh; - $searchstring=~ s/\'/\\\'/g; - my @data=split(' ',$searchstring); - 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); -} +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; -my $input = new CGI; -my $searchfield=$input->param('description'); -my $script_name="/cgi-bin/koha/admin/categorie.pl"; -my $categorycode=$input->param('categorycode'); -my $op = $input->param('op'); + while ( my $data = $sth->fetchrow_hashref ) { + push( @results, $data ); + } -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "admin/categorie.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 1}, - debug => 1, - }); + # $sth->execute; + $sth->finish; + return ( scalar(@results), \@results ); +} +my $input = new CGI; +my $searchfield = $input->param('description'); +my $script_name = "/cgi-bin/koha/admin/categorie.pl"; +my $categorycode = $input->param('categorycode'); +my $op = $input->param('op') // ''; +my $block_expired = $input->param("block_expired"); -$template->param(script_name => $script_name, - categorycode => $categorycode, - searchfield => $searchfield); +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "admin/categorie.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { parameters => 'parameters_remaining_permissions' }, + debug => 1, + } +); +$template->param( + script_name => $script_name, + categorycode => $categorycode, + searchfield => $searchfield +); ################## 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; - if ($categorycode) { - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?"); - $sth->execute($categorycode); - $data=$sth->fetchrow_hashref; - $sth->finish; - } - - $data->{'enrolmentperioddate'} = undef if ($data->{'enrolmentperioddate'} eq '0000-00-00'); - - $template->param(description => $data->{'description'}, - enrolmentperiod => $data->{'enrolmentperiod'}, - enrolmentperioddate => C4::Dates::format_date($data->{'enrolmentperioddate'}), - upperagelimit => $data->{'upperagelimit'}, - dateofbirthrequired => $data->{'dateofbirthrequired'}, - enrolmentfee => sprintf("%.2f",$data->{'enrolmentfee'}), - overduenoticerequired => $data->{'overduenoticerequired'}, - issuelimit => $data->{'issuelimit'}, - reservefee => sprintf("%.2f",$data->{'reservefee'}), - hidelostitems => $data->{'hidelostitems'}, - category_type => $data->{'category_type'}, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), - "type_".$data->{'category_type'} => 1, - ); - if (C4::Context->preference('EnhancedMessagingPreferences')) { - C4::Form::MessagingPreferences::set_form_values({ categorycode => $categorycode } , $template); +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; + 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; + } + + if ( $data->{'enrolmentperioddate'} + && $data->{'enrolmentperioddate'} eq '0000-00-00' ) + { + $data->{'enrolmentperioddate'} = undef; + } + + $data->{'category_type'} //= ''; + + my $branches = GetBranches(); + my @branches_loop; + foreach my $branch ( sort keys %$branches ) { + my $selected = + ( grep { $$_{branchcode} eq $branch } @selected_branches ) ? 1 : 0; + push @branches_loop, + { + branchcode => $$branches{$branch}{branchcode}, + branchname => $$branches{$branch}{branchname}, + selected => $selected, + }; } - # END $OP eq ADD_FORM + + $template->param( + 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') { - $template->param(add_validate => 1); - my $is_a_modif = $input->param("is_a_modif"); - my $dbh = C4::Context->dbh; - if($input->param('enrolmentperioddate')){ - $input->param('enrolmentperioddate' => C4::Dates::format_date_in_iso($input->param('enrolmentperioddate')) ); - } - - if ($is_a_modif) { - my $sth=$dbh->prepare("UPDATE categories SET description=?,enrolmentperiod=?, enrolmentperioddate=?,upperagelimit=?,dateofbirthrequired=?,enrolmentfee=?,reservefee=?,hidelostitems=?,overduenoticerequired=?,category_type=? WHERE categorycode=?"); - $sth->execute(map { $input->param($_) } ('description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type','categorycode')); - $sth->finish; - } else { - my $sth=$dbh->prepare("INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,reservefee,hidelostitems,overduenoticerequired,category_type) values (?,?,?,?,?,?,?,?,?,?,?)"); - $sth->execute(map { $input->param($_) } ('categorycode','description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type')); - $sth->finish; + # called by add_form, used to insert/modify data in DB +} +elsif ( $op eq 'add_validate' ) { + $template->param( add_validate => 1 ); + + my $is_a_modif = $input->param("is_a_modif"); + + my $dbh = C4::Context->dbh; + + if ( $input->param('enrolmentperioddate') ) { + $input->param( + 'enrolmentperioddate' => C4::Dates::format_date_in_iso( + $input->param('enrolmentperioddate') + ) + ); + } + + 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' + ) + ); + my @branches = $input->param("branches"); + if (@branches) { + $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 (C4::Context->preference('EnhancedMessagingPreferences')) { - C4::Form::MessagingPreferences::handle_form_action($input, - { categorycode => $input->param('categorycode') }, $template); + $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 (?,?,?,?,?,?,?,?,?,?,?,?,?)" ); + $sth->execute( + map { $input->param($_) } ( + 'categorycode', 'description', + 'enrolmentperiod', 'enrolmentperioddate', + 'upperagelimit', 'dateofbirthrequired', + 'enrolmentfee', 'reservefee', + 'hidelostitems', 'overduenoticerequired', + 'category_type', 'block_expired', + 'default_privacy', + ) + ); + $sth->finish; } - print "Content-Type: text/html\n\n"; - exit; - # END $OP eq ADD_VALIDATE + if ( C4::Context->preference('EnhancedMessagingPreferences') ) { + C4::Form::MessagingPreferences::handle_form_action( $input, + { categorycode => $input->param('categorycode') }, $template ); + } + + print "Content-Type: text/html\n\n"; + exit; + + # END $OP eq ADD_VALIDATE ################## DELETE_CONFIRM ################################## -# called by default form, used to confirm deletion of data in DB -} elsif ($op eq 'delete_confirm') { - $template->param(delete_confirm => 1); - - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select count(*) as total from borrowers where categorycode=?"); - $sth->execute($categorycode); - my $total = $sth->fetchrow_hashref; - $sth->finish; - $template->param(total => $total->{'total'}); - - my $sth2=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?"); - $sth2->execute($categorycode); - my $data=$sth2->fetchrow_hashref; - $sth2->finish; - if ($total->{'total'} >0) { - $template->param(totalgtzero => 1); - } - - $template->param( description => $data->{'description'}, - enrolmentperiod => $data->{'enrolmentperiod'}, - enrolmentperioddate => C4::Dates::format_date($data->{'enrolmentperioddate'}), - upperagelimit => $data->{'upperagelimit'}, - dateofbirthrequired => $data->{'dateofbirthrequired'}, - enrolmentfee => sprintf("%.2f",$data->{'enrolmentfee'}), - overduenoticerequired => $data->{'overduenoticerequired'}, - issuelimit => $data->{'issuelimit'}, - reservefee => sprintf("%.2f",$data->{'reservefee'}), - hidelostitems => $data->{'hidelostitems'}, - category_type => $data->{'category_type'}, - ); - # END $OP eq 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 $category = $schema->resultset('Category')->find($categorycode); + + $category->enrolmentperioddate( + C4::Dates::format_date( $category->enrolmentperioddate() ) ); + + $template->param( 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=?"); - $sth->execute($categorycode); - $sth->finish; - print "Content-Type: text/html\n\n"; - exit; - - # END $OP eq DELETE_CONFIRMED -} else { # DEFAULT - $template->param(else => 1); - my @loop; - my ($count,$results)=StringSearch($searchfield,'web'); - for (my $i=0; $i < $count; $i++){ - my %row = ( - categorycode => $results->[$i]{'categorycode'}, - description => $results->[$i]{'description'}, - enrolmentperiod => $results->[$i]{'enrolmentperiod'}, - enrolmentperioddate => C4::Dates::format_date($results->[$i]{'enrolmentperioddate'}), - upperagelimit => $results->[$i]{'upperagelimit'}, - dateofbirthrequired => $results->[$i]{'dateofbirthrequired'}, - enrolmentfee => sprintf("%.2f",$results->[$i]{'enrolmentfee'}), - overduenoticerequired => $results->[$i]{'overduenoticerequired'}, - issuelimit => $results->[$i]{'issuelimit'}, - reservefee => sprintf("%.2f",$results->[$i]{'reservefee'}), - hidelostitems => $results->[$i]{'hidelostitems'}, - category_type => $results->[$i]{'category_type'}, - "type_".$results->[$i]{'category_type'} => 1); - if (C4::Context->preference('EnhancedMessagingPreferences')) { - my $brief_prefs = _get_brief_messaging_prefs($results->[$i]{'categorycode'}); + # 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=?"); + + $sth->execute($categorycode); + $sth->finish; + + print "Content-Type: text/html\n\n"; + exit; + + # END $OP eq DELETE_CONFIRMED +} +else { # DEFAULT + $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; } - push @loop, \%row; - } - $template->param(loop => \@loop); - # check that I (institution) and C (child) exists. otherwise => warning to the user - my $dbh = C4::Context->dbh; - my $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 + 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 output_html_with_http_headers $input, $cookie, $template->output; exit 0; sub _get_brief_messaging_prefs { - my $categorycode = shift; + 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 $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'}, + message_attribute_id => $option->{'message_attribute_id'}, + message_name => $option->{'message_name'}, $option->{'message_name'} => 1 }; - foreach my $transport ( @{$pref->{'transports'}} ) { + foreach my $transport ( keys %{ $pref->{'transports'} } ) { push @{ $brief_pref->{'transports'} }, { transport => $transport }; } push @$results, $brief_pref;