X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=admin%2Fcategorie.pl;h=4e7382974b2e3e2743a2e26ace317dde4b87c4dc;hb=2b8b5ae225af6119e41e2112f9a8573b4170b927;hp=496415839b0b5be8c936eaf2fc5b5742fb90af1c;hpb=ab59c080359170b156eceb101b7cf029e96d4e09;p=koha_fer diff --git a/admin/categorie.pl b/admin/categorie.pl index 496415839b..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. @@ -45,256 +44,363 @@ 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 => 'parameters_remaining_permissions'}, - 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 ( $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 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 = $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 ); + 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; } - $data->{'enrolmentperioddate'} = undef if ($data->{'enrolmentperioddate'} eq '0000-00-00'); + 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; - push @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, - }; + selected => $selected, + }; } - $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(), - SMSSendDriver => C4::Context->preference("SMSSendDriver"), - TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification"), - "type_".$data->{'category_type'} => 1, - branches_loop => \@branches_loop, - ); - if (C4::Context->preference('EnhancedMessagingPreferences')) { - C4::Form::MessagingPreferences::set_form_values({ categorycode => $categorycode } , $template); + $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 + + # 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')); - 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; - } + # 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; } - $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; } - 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'); + # 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++){ + 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 %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, - branches => \@selected_branches, + + 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'}); + + 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 - $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 ( keys %{$pref->{'transports'}} ) { + foreach my $transport ( keys %{ $pref->{'transports'} } ) { push @{ $brief_pref->{'transports'} }, { transport => $transport }; } push @$results, $brief_pref;