X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=tools%2Fletter.pl;h=9c6a76eb7b454cbedba14c0d822cf180f0dc4f00;hb=ee36f27745b3b7f1b6dae02a7af0b759ff4445c9;hp=f585708dc81aa105de5cd5c76bbbc502d8126377;hpb=ae706f0d7a769c3ae74a71d8589ed0256f5b7588;p=koha.git diff --git a/tools/letter.pl b/tools/letter.pl index f585708dc8..9c6a76eb7b 100755 --- a/tools/letter.pl +++ b/tools/letter.pl @@ -37,44 +37,58 @@ =cut use strict; +use warnings; use CGI; -use C4::Date; use C4::Auth; use C4::Context; use C4::Output; sub StringSearch { - my ( $searchstring, $type ) = @_; + my ($searchstring) = @_; my $dbh = C4::Context->dbh; $searchstring =~ s/\'/\\\'/g; my @data = split( ' ', $searchstring ); - my $count = @data; - my $sth = - $dbh->prepare( - "Select * from letter where (code like ?) order by module,code"); - $sth->execute("$data[0]%"); - my @results; - my $cnt = 0; + $data[0] = '' unless @data; + my $sth = $dbh->prepare("SELECT * FROM letter WHERE (code LIKE ?) ORDER BY module, code"); + $sth->execute("$data[0]%"); # slightly bogus, only searching on first string. + return $sth->fetchall_arrayref({}); +} - while ( my $data = $sth->fetchrow_hashref ) { - push( @results, $data ); - $cnt++; - } +# FIXME untranslateable +our %column_map = ( + aqbooksellers => 'BOOKSELLERS', + aqorders => 'ORDERS', + serial => 'SERIALS', + reserves => 'HOLDS', +); - # $sth->execute; - $sth->finish; - return ( $cnt, \@results ); +sub column_picks ($) { + # returns @array of values + my $table = shift or return (); + my $sth = C4::Context->dbh->prepare("SHOW COLUMNS FROM $table"); + $sth->execute; + my @SQLfieldname = (); + push @SQLfieldname, {'value' => "", 'text' => '---' . uc($column_map{$table} || $table) . '---'}; + while (my ($field) = $sth->fetchrow_array) { + push @SQLfieldname, { + value => $table . ".$field", + text => $table . ".$field" + }; + } + return @SQLfieldname; } my $input = new CGI; my $searchfield = $input->param('searchfield'); -my $offset = $input->param('offset'); +$searchfield = '' unless defined($searchfield); +# my $offset = $input->param('offset'); # pagination not implemented my $script_name = "/cgi-bin/koha/tools/letter.pl"; my $code = $input->param('code'); my $module = $input->param('module'); +$module = '' unless defined($module); my $content = $input->param('content'); -my $pagesize = 20; my $op = $input->param('op'); +$op = '' unless defined($op); $searchfield =~ s/\,//g; my $dbh = C4::Context->dbh; @@ -84,25 +98,22 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { tools => 1 }, + flagsrequired => { tools => 'edit_notices' }, debug => 1, } ); if ($op) { - $template->param( - script_name => $script_name, - $op => 1 - ); # we show only the TMPL_VAR names $op -} -else { - $template->param( - script_name => $script_name, - else => 1 - ); # we show only the TMPL_VAR names $op + $template->param($op => 1); +} else { + $template->param(else => 1); } +# we show only the TMPL_VAR names $op -$template->param( action => $script_name ); +$template->param( + script_name => $script_name, + action => $script_name +); ################## ADD_FORM ################################## # called by default. Used to create form to add or modify a record if ( $op eq 'add_form' ) { @@ -110,131 +121,44 @@ if ( $op eq 'add_form' ) { #---- if primkey exists, it's a modify action, so read values to modify... my $letter; if ($code) { - my $sth = - $dbh->prepare("select * from letter where module=? and code=?"); + my $sth = $dbh->prepare("SELECT * FROM letter WHERE module=? AND code=?"); $sth->execute( $module, $code ); $letter = $sth->fetchrow_hashref; - $sth->finish; } # build field list my @SQLfieldname; - my %line = ( 'value' => "LibrarianFirstname", 'text' => 'LibrarianFirstname' ); - push @SQLfieldname, \%line; - my %line = ( 'value' => "LibrarianSurname", 'text' => 'LibrarianSurname' ); - push @SQLfieldname, \%line; - my %line = ( 'value' => "LibrarianEmailaddress", 'text' => 'LibrarianEmailaddress' ); - push @SQLfieldname, \%line; - my $sth2 = $dbh->prepare("SHOW COLUMNS from branches"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---BRANCHES---' ); - push @SQLfieldname, \%line; - - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( 'value' => "branches." . $field, 'text' => "branches." . $field ); - push @SQLfieldname, \%line; + foreach (qw(LibrarianFirstname LibrarianSurname LibrarianEmailaddress)) { + push @SQLfieldname, {value => $_, text => $_}; } + push @SQLfieldname, column_picks('branches'); # add acquisition specific tables - if ( index( $module, "acquisition" ) > 0 ) { - my $sth2 = $dbh->prepare("SHOW COLUMNS from aqbooksellers"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---BOOKSELLERS---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( - 'value' => "aqbooksellers." . $field, - 'text' => "aqbooksellers." . $field - ); - push @SQLfieldname, \%line; - } - my $sth2 = $dbh->prepare("SHOW COLUMNS from aqorders"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---ORDERS---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( - 'value' => "aqorders." . $field, - 'text' => "aqorders." . $field - ); - push @SQLfieldname, \%line; - } - + if ( $module eq "reserves" ) { + push @SQLfieldname, column_picks('borrowers'), + column_picks('reserves'), + column_picks('biblio'), + column_picks('items'); + } + elsif ( index( $module, "acquisition" ) > 0 ) { # FIXME: imprecise comparison + push @SQLfieldname, column_picks('aqbooksellers'), column_picks('aqorders'); # add issues specific tables } - elsif ( index( $module, "issues" ) > 0 ) { - my $sth2 = $dbh->prepare("SHOW COLUMNS from aqbooksellers"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---BOOKSELLERS---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( - 'value' => "aqbooksellers." . $field, - 'text' => "aqbooksellers." . $field - ); - push @SQLfieldname, \%line; - } - my $sth2 = $dbh->prepare("SHOW COLUMNS from serial"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---SERIALS---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( 'value' => "serial." . $field, 'text' => "serial." . $field ); - push @SQLfieldname, \%line; - } - my $sth2 = $dbh->prepare("SHOW COLUMNS from subscription"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---SUBSCRIPTION---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( - 'value' => "subscription." . $field, - 'text' => "subscription." . $field - ); - push @SQLfieldname, \%line; - } - - # add biblio specific tables. + elsif ( index( $module, "issues" ) > 0 ) { # FIXME: imprecise comparison + push @SQLfieldname, column_picks('aqbooksellers'), + column_picks('serial'), + column_picks('subscription'), + {value => "", text => '---BIBLIO---'}; + foreach(qw(title author serial)) { + push @SQLfieldname, {value => "biblio.$_", text => ucfirst($_) }; + } } else { - my $sth2 = $dbh->prepare("SHOW COLUMNS from biblio"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---BIBLIO---' ); - - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - -# note : %line is redefined, otherwise \%line contains the same value for every entry of the list - my %line = ( 'value' => "biblio." . $field, 'text' => "biblio." . $field ); - push @SQLfieldname, \%line; - } - my $sth2 = $dbh->prepare("SHOW COLUMNS from biblioitems"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---BIBLIOITEMS---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( - 'value' => "biblioitems." . $field, - 'text' => "biblioitems." . $field - ); - push @SQLfieldname, \%line; - } - my %line = ( 'value' => "", 'text' => '---ITEMS---' ); - push @SQLfieldname, \%line; - my %line = ( 'value' => "items.content", 'text' => 'items.content' ); - push @SQLfieldname, \%line; - - my $sth2 = $dbh->prepare("SHOW COLUMNS from borrowers"); - $sth2->execute; - my %line = ( 'value' => "", 'text' => '---BORROWERS---' ); - push @SQLfieldname, \%line; - while ( ( my $field ) = $sth2->fetchrow_array ) { - my %line = ( - 'value' => "borrowers." . $field, - 'text' => "borrowers." . $field - ); - push @SQLfieldname, \%line; - } + push @SQLfieldname, column_picks('biblio'), + column_picks('biblioitems'), + {value => "", text => '---ITEMS---' }, + {value => "items.content", text => 'items.content'}, + column_picks('borrowers'); } if ($code) { $template->param( modify => 1 ); @@ -250,41 +174,32 @@ if ( $op eq 'add_form' ) { ( $module ? $module : $letter->{module} ) => 1, SQLfieldname => \@SQLfieldname, ); - - # END $OP eq ADD_FORM ################## ADD_VALIDATE ################################## # called by add_form, used to insert/modify data in DB } elsif ( $op eq 'add_validate' ) { my $dbh = C4::Context->dbh; - my $sth = - $dbh->prepare( - "replace letter (module,code,name,title,content) values (?,?,?,?,?)"); + my $sth = $dbh->prepare( + "REPLACE letter (module,code,name,title,content) VALUES (?,?,?,?,?)"); $sth->execute( $input->param('module'), $input->param('code'), $input->param('name'), $input->param('title'), $input->param('content') ); - $sth->finish; print $input->redirect("letter.pl"); 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' ) { my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("select * from letter where code=?"); + my $sth = $dbh->prepare("SELECT * FROM letter WHERE code=?"); $sth->execute($code); my $data = $sth->fetchrow_hashref; - $sth->finish; - $template->param( module => $data->{module} ); - $template->param( code => $code ); - $template->param( name => $data->{'name'} ); - $template->param( content => $data->{'content'} ); - - # END $OP eq DELETE_CONFIRM + $template->param( code => $code ); + foreach (qw(module name content)) { + $template->param( $_ => $data->{$_} ); + } ################## DELETE_CONFIRMED ################################## # called by delete_confirm, used to effectively confirm deletion of data in DB } @@ -292,13 +207,10 @@ elsif ( $op eq 'delete_confirmed' ) { my $dbh = C4::Context->dbh; my $code = uc( $input->param('code') ); my $module = $input->param('module'); - my $sth = $dbh->prepare("delete from letter where module=? and code=?"); + my $sth = $dbh->prepare("DELETE FROM letter WHERE module=? AND code=?"); $sth->execute( $module, $code ); - $sth->finish; print $input->redirect("/cgi-bin/koha/tools/letter.pl"); - return; - - # END $OP eq DELETE_CONFIRMED + exit; ################## DEFAULT ################################## } else { # DEFAULT @@ -306,27 +218,14 @@ else { # DEFAULT $template->param( search => 1 ); $template->param( searchfield => $searchfield ); } - my ( $count, $results ) = StringSearch( $searchfield, 'web' ); - my $toggle = 0; + my ($results) = StringSearch($searchfield); my @loop_data = (); - for ( - my $i = $offset ; - $i < ( $offset + $pagesize < $count ? $offset + $pagesize : $count ) ; - $i++ - ) - { - if ( $toggle ) { - $toggle = 0; - } - else { - $toggle = 1; - } + foreach my $result (@$results) { my %row_data; - $row_data{toggle} = $toggle; - $row_data{module} = $results->[$i]{'module'}; - $row_data{code} = $results->[$i]{'code'}; - $row_data{name} = $results->[$i]{'name'}; - push( @loop_data, \%row_data ); + foreach my $key (qw(module code name)) { + $row_data{$key} = $result->{$key}; + } + push(@loop_data, \%row_data ); } $template->param( letter => \@loop_data ); } #---- END $OP eq DEFAULT