Bug 11331 - CSV export for viewlog.pl is missing newlines - followup

Perl formatting and cleaning.
Also corrects the HTML of results table in viewlog.tt.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
Fridolin Somers 2014-07-29 08:57:54 +02:00 committed by Tomas Cohen Arazi
parent 129cedf943
commit fad7daf102
2 changed files with 116 additions and 109 deletions

View File

@ -133,17 +133,19 @@
[% IF ( total ) %]
<h4>[% total %] lines found.</h4>
<table>
<tr>
<th>Date</th>
<th>Librarian</th>
<th>Module</th>
<th>Action</th>
<th>Object</th>
<th>Info</th>
</tr>
<thead>
<tr>
<th>Date</th>
<th>Librarian</th>
<th>Module</th>
<th>Action</th>
<th>Object</th>
<th>Info</th>
</tr>
</thead>
<tbody>
[% FOREACH loopro IN looprow %]
[% UNLESS ( loop.odd ) %]<tr class="highlight">[% ELSE %]<tr>[% END %]
<tr>
<td>[% loopro.timestamp %]</td>
<td>
<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% loopro.user %]" title="display detail for this librarian."> [% IF ( loopro.userfirstname ) || ( loopro.usersurname ) %][% loopro.userfirstname %] [% loopro.usersurname %] ([% loopro.user %]) [% ELSE %][% loopro.user %][% END %]</a>
@ -184,6 +186,7 @@
</td>
</tr>
[% END %]
</tbody>
</table>
[% ELSE %]
<div class="dialog alert">

View File

@ -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{};
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) {
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'};
# 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;
}