X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=tools%2Fviewlog.pl;h=381b0f816b17a4597b4e14687ece89f53fbcdd33;hb=refs%2Fheads%2Fkoha_ffzg;hp=5c430985dacf0d63312e057d51b7673899f242b4;hpb=481f620455d40f93a3cb37136ef2c3964497751e;p=koha.git diff --git a/tools/viewlog.pl b/tools/viewlog.pl index 5c430985da..381b0f816b 100755 --- a/tools/viewlog.pl +++ b/tools/viewlog.pl @@ -5,33 +5,37 @@ # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; -use strict; -#use warnings; FIXME - Bug 2505 use C4::Auth; -use CGI; +use CGI qw ( -utf8 ); +use Text::CSV::Encoded; use C4::Context; use C4::Koha; -use C4::Dates; use C4::Output; -use C4::Log; use C4::Items; -use C4::Branch; +use C4::Serials; use C4::Debug; -# use Data::Dumper; -use C4::Search; # enabled_staff_search_views +use C4::Search; # enabled_staff_search_views + +use Koha::ActionLogs; +use Koha::Database; +use Koha::DateUtils; +use Koha::Items; +use Koha::Patrons; use vars qw($debug $cgi_debug); @@ -41,25 +45,25 @@ 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 $user = $input->param("user"); -my @action = $input->param("action"); +my @modules = $input->multi_param("modules"); +my $user = $input->param("user") // ''; +my @actions = $input->multi_param("actions"); +my @interfaces = $input->multi_param("interfaces"); my $object = $input->param("object"); 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( { - template_name => "tools/viewlog.tmpl", + template_name => "tools/viewlog.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -68,107 +72,176 @@ 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 - use C4::Members; +if ( $src eq 'circ' ) { + + # if we were called from circulation, use the circulation menu and get data to populate it -fbcit + use C4::Members::Attributes qw(GetBorrowerAttributes); my $borrowernumber = $object; - my $data = GetMember('borrowernumber'=>$borrowernumber); - my ($picture, $dberror) = GetPatronImage($data->{'cardnumber'}); - $template->param( picture => 1 ) if $picture; - $template->param( menu => 1, - title => $data->{'title'}, - initials => $data->{'initials'}, - surname => $data->{'surname'}, - borrowernumber => $borrowernumber, - firstname => $data->{'firstname'}, - cardnumber => $data->{'cardnumber'}, - categorycode => $data->{'categorycode'}, - categoryname => $data->{'description'}, - address => $data->{'address'}, - address2 => $data->{'address2'}, - city => $data->{'city'}, - state => $data->{'state'}, - zipcode => $data->{'zipcode'}, - phone => $data->{'phone'}, - phonepro => $data->{'phonepro'}, - email => $data->{'email'}, - branchcode => $data->{'branchcode'}, - branchname => GetBranchName($data->{'branchcode'}), + my $patron = Koha::Patrons->find( $borrowernumber ); + my $circ_info = 1; + unless ( $patron ) { + $circ_info = 0; + } + if ( C4::Context->preference('ExtendedPatronAttributes') ) { + my $attributes = GetBorrowerAttributes( $borrowernumber ); + $template->param( + ExtendedPatronAttributes => 1, + extendedattributes => $attributes + ); + } + + $template->param( + patron => $patron, + circulation => $circ_info, ); } $template->param( - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), - dateformat => C4::Dates->new()->format(), - debug => $debug, - C4::Search::enabled_staff_search_views, + debug => $debug, + C4::Search::enabled_staff_search_views, + subscriptionsnumber => CountSubscriptionFromBiblionumber($input->param('object')), + object => $object, ); if ($do_it) { + my $dtf = Koha::Database->new->schema->storage->datetime_parser; + my %search_params; + + if ($datefrom and $dateto ) { + my $dateto_endday = dt_from_string($dateto); + $dateto_endday->set( # We set last second of day to see all log from that day + hour => 23, + minute => 59, + second => 59 + ); + $search_params{'timestamp'} = { + -between => [ + $dtf->format_datetime( dt_from_string($datefrom) ), + $dtf->format_datetime( $dateto_endday ), + ] + }; + } elsif ($datefrom) { + $search_params{'timestamp'} = { + '>=' => $dtf->format_datetime( dt_from_string($datefrom) ) + }; + } elsif ($dateto) { + my $dateto_endday = dt_from_string($dateto); + $dateto_endday->set( # We set last second of day to see all log from that day + hour => 23, + minute => 59, + second => 59 + ); + $search_params{'timestamp'} = { + '<=' => $dtf->format_datetime( $dateto_endday ) + }; + } + $search_params{user} = $user if $user; + $search_params{module} = { -in => [ @modules ] } if ( defined $modules[0] and $modules[0] ne '' ) ; + $search_params{action} = { -in => [ @actions ] } if ( defined $actions[0] && $actions[0] ne '' ); + $search_params{object} = $object if $object; + $search_params{info} = $info if $info; + $search_params{interface} = { -in => [ @interfaces ] } if ( defined $interfaces[0] && $interfaces[0] ne '' ); + + my @logs = Koha::ActionLogs->search(\%search_params); 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){ - if ($result->{'info'} 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); - $result->{'biblionumber'}=$item->{'biblionumber'}; - $result->{'biblioitemnumber'}=$item->{'biblionumber'}; - } + foreach my $log (@logs) { + my $result = $log->unblessed; + # Init additional columns for CSV export + $result->{'biblionumber'} = q{}; + $result->{'biblioitemnumber'} = q{}; + $result->{'barcode'} = q{}; + + if ( substr( $log->info, 0, 4 ) eq 'item' || $log->module eq "CIRCULATION" ) { + + # get item information so we can create a working link + my $itemnumber = $log->object; + $itemnumber = $log->info if ( $log->module eq "CIRCULATION" ); + my $item = Koha::Items->find($itemnumber); + if ($item) { + $result->{'biblionumber'} = $item->biblionumber; + $result->{'biblioitemnumber'} = $item->biblionumber; + $result->{'barcode'} = $item->barcode; + } + } + + #always add firstname and surname for librarian/user + if ( $log->user ) { + my $patron = Koha::Patrons->find( $log->user ); + if ($patron) { + $result->{librarian} = $patron; + } + } + + #add firstname and surname for borrower, when using the CIRCULATION, MEMBERS, FINES + if ( $log->module eq "CIRCULATION" || $log->module eq "MEMBERS" || $log->module eq "FINES" ) { + if ( $log->object ) { + my $patron = Koha::Patrons->find( $log->object ); + if ($patron) { + $result->{patron} = $patron; + } + } + } + push @data, $result; } - 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, dateto => $dateto, user => $user, - object => $object, - action => \@action, info => $info, src => $src, + modules => \@modules, + actions => \@actions, + interfaces => \@interfaces ); - #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) ) { + $content .= $csv->string() . "\n"; + } + + # Lines of logs + foreach my $line (@data) { + my @cells = map { $line->{$_} } @headings; + if ( $csv->combine(@cells) ) { + $content .= $csv->string() . "\n"; + } + } + } + + # Output print $input->header( -type => 'text/csv', - -attachment => "$basename.csv", - -filename => "$basename.csv" + -attachment => $basename . '.csv', ); - my $sep = C4::Context->preference("delimiter"); - foreach my $line (@data) { - #next unless $modules[0] eq "catalogue"; - foreach (qw(timestamp firstname surname action info title author)) { - print $line->{$_} . $sep; - } - } + 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; }