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:
parent
129cedf943
commit
fad7daf102
|
|
@ -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">
|
||||
|
|
|
|||
204
tools/viewlog.pl
204
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{};
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue