From 805c2c16418221fec00c71d0f929b6a97b4a5ef5 Mon Sep 17 00:00:00 2001 From: Fridolin Somers Date: Tue, 29 Jul 2014 08:57:54 +0200 Subject: [PATCH] Bug 11331 - CSV export for viewlog.pl is missing newlines - followup Perl formatting and cleaning. Also corrects the HTML of restults table in viewlog.tt. --- .../intranet-tmpl/prog/en/modules/tools/viewlog.tt | 21 ++- tools/viewlog.pl | 206 +++++++++++---------- 2 files changed, 117 insertions(+), 110 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt index 6f49b05..96cac2d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt @@ -133,17 +133,19 @@ [% IF ( total ) %]

[% total %] lines found.

- - - - - - - - + + + + + + + + + + + [% FOREACH loopro IN looprow %] [% UNLESS ( loop.odd ) %][% ELSE %][% END %] - [% END %] +
DateLibrarianModuleActionObjectInfo
DateLibrarianModuleActionObjectInfo
[% loopro.timestamp %] [% IF ( loopro.userfirstname ) || ( loopro.usersurname ) %][% loopro.userfirstname %] [% loopro.usersurname %] ([% loopro.user %]) [% ELSE %][% loopro.user %][% END %] @@ -184,6 +186,7 @@
[% ELSE %]
diff --git a/tools/viewlog.pl b/tools/viewlog.pl index 217530e..9f68a8a 100755 --- a/tools/viewlog.pl +++ b/tools/viewlog.pl @@ -31,8 +31,7 @@ use C4::Log; use C4::Items; use C4::Branch; use C4::Debug; -# use Data::Dumper; -use C4::Search; # enabled_staff_search_views +use C4::Search; # enabled_staff_search_views use vars qw($debug $cgi_debug); @@ -42,11 +41,11 @@ plugin that shows stats =cut -my $input = new CGI; +my $input = new CGI; $debug or $debug = $cgi_debug; my $do_it = $input->param('do_it'); -my @modules = $input->param("modules"); +my @modules = $input->param("modules"); my $user = $input->param("user"); my @action = $input->param("action"); my $object = $input->param("object"); @@ -54,9 +53,8 @@ my $info = $input->param("info"); my $datefrom = $input->param("from"); my $dateto = $input->param("to"); my $basename = $input->param("basename"); -#my $del = $input->param("sep"); my $output = $input->param("output") || "screen"; -my $src = $input->param("src"); # this param allows us to be told where we were called from -fbcit +my $src = $input->param("src"); # this param allows us to be told where we were called from -fbcit my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { @@ -69,19 +67,21 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( } ); -if ($src eq 'circ') { # if we were called from circulation, use the circulation menu and get data to populate it -fbcit +if ( $src eq 'circ' ) { + + # if we were called from circulation, use the circulation menu and get data to populate it -fbcit use C4::Members; use C4::Members::Attributes qw(GetBorrowerAttributes); my $borrowernumber = $object; - my $data = GetMember('borrowernumber'=>$borrowernumber); - my ($picture, $dberror) = GetPatronImage($data->{'borrowernumber'}); + my $data = GetMember( 'borrowernumber' => $borrowernumber ); + my ( $picture, $dberror ) = GetPatronImage( $data->{'borrowernumber'} ); $template->param( picture => 1 ) if $picture; - if (C4::Context->preference('ExtendedPatronAttributes')) { - my $attributes = GetBorrowerAttributes($data->{'borrowernumber'}); + if ( C4::Context->preference('ExtendedPatronAttributes') ) { + my $attributes = GetBorrowerAttributes( $data->{'borrowernumber'} ); $template->param( ExtendedPatronAttributes => 1, - extendedattributes => $attributes + extendedattributes => $attributes ); } @@ -89,31 +89,32 @@ if ($src eq 'circ') { # if we were called from circulation, use the circulatio my $roadtype = C4::Koha::GetAuthorisedValueByCode( 'ROADTYPE', $data->{streettype} ); my $address = $data->{'streetnumber'} . " $roadtype " . $data->{'address'}; - $template->param( menu => 1, - title => $data->{'title'}, - initials => $data->{'initials'}, - surname => $data->{'surname'}, - othernames => $data->{'othernames'}, - borrowernumber => $borrowernumber, - firstname => $data->{'firstname'}, - cardnumber => $data->{'cardnumber'}, - categorycode => $data->{'categorycode'}, - category_type => $data->{'category_type'}, - categoryname => $data->{'description'}, - address => $address, - address2 => $data->{'address2'}, - city => $data->{'city'}, - state => $data->{'state'}, - zipcode => $data->{'zipcode'}, - country => $data->{'country'}, - phone => $data->{'phone'}, - phonepro => $data->{'phonepro'}, - mobile => $data->{'mobile'}, - email => $data->{'email'}, - emailpro => $data->{'emailpro'}, - branchcode => $data->{'branchcode'}, - branchname => GetBranchName($data->{'branchcode'}), - RoutingSerials => C4::Context->preference('RoutingSerials'), + $template->param( + menu => 1, + title => $data->{'title'}, + initials => $data->{'initials'}, + surname => $data->{'surname'}, + othernames => $data->{'othernames'}, + borrowernumber => $borrowernumber, + firstname => $data->{'firstname'}, + cardnumber => $data->{'cardnumber'}, + categorycode => $data->{'categorycode'}, + category_type => $data->{'category_type'}, + categoryname => $data->{'description'}, + address => $address, + address2 => $data->{'address2'}, + city => $data->{'city'}, + state => $data->{'state'}, + zipcode => $data->{'zipcode'}, + country => $data->{'country'}, + phone => $data->{'phone'}, + phonepro => $data->{'phonepro'}, + mobile => $data->{'mobile'}, + email => $data->{'email'}, + emailpro => $data->{'emailpro'}, + branchcode => $data->{'branchcode'}, + branchname => GetBranchName( $data->{'branchcode'} ), + RoutingSerials => C4::Context->preference('RoutingSerials'), ); } @@ -125,58 +126,62 @@ $template->param( if ($do_it) { my @data; - my ($results,$modules,$action); - if ($action[0] ne '') { $action = \@action; } # match All means no limit - if ($modules[0] ne '') { $modules = \@modules; } # match All means no limit - $results = GetLogs($datefrom,$dateto,$user,$modules,$action,$object,$info); - @data=@$results; - my $total = scalar @data; - foreach my $result (@data){ - # Init additional columns for CSV export - $result->{'biblionumber'} = q{}; - $result->{'biblioitemnumber'} = q{}; - $result->{'barcode'} = q{}; - $result->{'userfirstname'} = q{}; - $result->{'usersurname'} = q{}; - $result->{'borrowerfirstname'} = q{}; - $result->{'borrowersurname'} = q{}; - - if (substr($result->{'info'}, 0, 4) eq 'item' || $result->{module} eq "CIRCULATION"){ - # get item information so we can create a working link - my $itemnumber=$result->{'object'}; - $itemnumber=$result->{'info'} if ($result->{module} eq "CIRCULATION"); - my $item=GetItem($itemnumber); - if ($item) { - $result->{'biblionumber'}=$item->{'biblionumber'}; - $result->{'biblioitemnumber'}=$item->{'biblionumber'}; - $result->{'barcode'}=$item->{'barcode'}; + my ( $results, $modules, $action ); + if ( $action[0] ne '' ) { $action = \@action; } # match All means no limit + if ( $modules[0] ne '' ) { $modules = \@modules; } # match All means no limit + $results = GetLogs( $datefrom, $dateto, $user, $modules, $action, $object, $info ); + @data = @$results; + foreach my $result (@data) { + + # Init additional columns for CSV export + $result->{'biblionumber'} = q{}; + $result->{'biblioitemnumber'} = q{}; + $result->{'barcode'} = q{}; + $result->{'userfirstname'} = q{}; + $result->{'usersurname'} = q{}; + $result->{'borrowerfirstname'} = q{}; + $result->{'borrowersurname'} = q{}; + + if ( substr( $result->{'info'}, 0, 4 ) eq 'item' || $result->{module} eq "CIRCULATION" ) { + + # get item information so we can create a working link + my $itemnumber = $result->{'object'}; + $itemnumber = $result->{'info'} if ( $result->{module} eq "CIRCULATION" ); + my $item = GetItem($itemnumber); + if ($item) { + $result->{'biblionumber'} = $item->{'biblionumber'}; + $result->{'biblioitemnumber'} = $item->{'biblionumber'}; + $result->{'barcode'} = $item->{'barcode'}; + } } - } - #always add firstname and surname for librarian/user - if ($result->{'user'}){ - my $userdetails = C4::Members::GetMemberDetails($result->{'user'}); - if ($userdetails){ - $result->{'userfirstname'} = $userdetails->{'firstname'}; - $result->{'usersurname'} = $userdetails->{'surname'}; + + #always add firstname and surname for librarian/user + if ( $result->{'user'} ) { + my $userdetails = C4::Members::GetMemberDetails( $result->{'user'} ); + if ($userdetails) { + $result->{'userfirstname'} = $userdetails->{'firstname'}; + $result->{'usersurname'} = $userdetails->{'surname'}; + } } - } - #add firstname and surname for borrower, when using the CIRCULATION, MEMBERS, FINES - if ($result->{module} eq "CIRCULATION" || $result->{module} eq "MEMBERS" || $result->{module} eq "FINES"){ - if($result->{'object'}){ - my $borrowerdetails = C4::Members::GetMemberDetails($result->{'object'}); - if ($borrowerdetails){ - $result->{'borrowerfirstname'} = $borrowerdetails->{'firstname'}; - $result->{'borrowersurname'} = $borrowerdetails->{'surname'}; + + #add firstname and surname for borrower, when using the CIRCULATION, MEMBERS, FINES + if ( $result->{module} eq "CIRCULATION" || $result->{module} eq "MEMBERS" || $result->{module} eq "FINES" ) { + if ( $result->{'object'} ) { + my $borrowerdetails = C4::Members::GetMemberDetails( $result->{'object'} ); + if ($borrowerdetails) { + $result->{'borrowerfirstname'} = $borrowerdetails->{'firstname'}; + $result->{'borrowersurname'} = $borrowerdetails->{'surname'}; + } } } } - } - + if ( $output eq "screen" ) { + # Printing results to screen - $template->param ( - logview => 1, - total => $total, + $template->param( + logview => 1, + total => scalar @data, looprow => \@data, do_it => 1, datefrom => $datefrom, @@ -187,49 +192,48 @@ if ($do_it) { info => $info, src => $src, ); - #module => 'fix this', #this seems unused in actual code - foreach my $module (@modules) { - $template->param($module => 1); - } + + # Used modules + foreach my $module (@modules) { + $template->param( $module => 1 ); + } output_html_with_http_headers $input, $cookie, $template->output; - } else { + } + else { + # Printing to a csv file my $content = q{}; my $delimiter = C4::Context->preference('delimiter') || ','; if (@data) { my $csv = Text::CSV::Encoded->new( { encoding_out => 'utf8', sep_char => $delimiter } ); $csv or die "Text::CSV::Encoded->new FAILED: " . Text::CSV::Encoded->error_diag(); + # First line with heading # Exporting bd id seems useless my @headings = grep { $_ ne 'action_id' } sort keys $data[0]; - if ( $csv->combine( @headings ) ) { + if ( $csv->combine(@headings) ) { $content .= $csv->string() . "\n"; } + # Lines of logs foreach my $line (@data) { my @cells = map { $line->{$_} } @headings; - if ( $csv->combine( @cells ) ) { + if ( $csv->combine(@cells) ) { $content .= $csv->string() . "\n"; } } } + + # Output print $input->header( -type => 'text/csv', -attachment => $basename . '.csv', ); print $content; } - exit; -} else { - #my @values; - #my %labels; - #my %select; - #initialize some paramaters that might not be used in the template - it seems to evaluate EXPR even if a false TMPL_IF - $template->param( - total => 0, - module => "", - info => "" - ); - output_html_with_http_headers $input, $cookie, $template->output; + exit; +} +else { + output_html_with_http_headers $input, $cookie, $template->output; } -- 1.9.1