Bugzilla – Attachment 30467 Details for
Bug 11331
CSV export for viewlog.pl is missing newlines
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[SIGNED-OFF] Bug 11331 - CSV export for viewlog.pl is missing newlines - followup
SIGNED-OFF-Bug-11331---CSV-export-for-viewlogpl-is.patch (text/plain), 15.24 KB, created by
Owen Leonard
on 2014-08-01 16:34:21 UTC
(
hide
)
Description:
[SIGNED-OFF] Bug 11331 - CSV export for viewlog.pl is missing newlines - followup
Filename:
MIME Type:
Creator:
Owen Leonard
Created:
2014-08-01 16:34:21 UTC
Size:
15.24 KB
patch
obsolete
>From 7870543c89dc4430591db6375b348982b6c18197 Mon Sep 17 00:00:00 2001 >From: Fridolin Somers <fridolin.somers@biblibre.com> >Date: Tue, 29 Jul 2014 08:57:54 +0200 >Subject: [PATCH] [SIGNED-OFF] Bug 11331 - CSV export for viewlog.pl is > missing newlines - followup >Content-Type: text/plain; charset="utf-8" > >Perl formatting and cleaning. >Also corrects the HTML of restults table in viewlog.tt. > >Signed-off-by: Owen Leonard <oleonard@myacpl.org> >--- > .../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 ) %] > <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"> >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.7.9.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11331
:
23265
|
30264
|
30265
|
30466
|
30467
|
30493
|
30494