package Koha::Illrequest::Logger; # Copyright 2018 PTFS Europe Ltd # # 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 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. # # 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. use Modern::Perl; use JSON qw( to_json from_json ); use Time::Local; use C4::Koha; use C4::Context; use C4::Templates; use C4::Log qw( logaction ); use Koha::ActionLogs; =head1 NAME Koha::Illrequest::Logger - Koha ILL Action / Event logger =head1 SYNOPSIS Object-oriented class that provides event logging functionality for ILL requests =head1 DESCRIPTION This class provides the ability to log arbitrary actions or events relating to Illrequest to the action log. =head1 API =head2 Class Methods =head3 new my $config = Koha::Illrequest::Logger->new(); Create a new Koha::Illrequest::Logger object. We also set up what can be logged, how to do it and how to display log entries we get back out =cut sub new { my ( $class ) = @_; my $self = {}; $self->{loggers} = { status => sub { $self->log_status_change(@_); } }; my $query = new CGI; # To keep C4::Templates::_get_template_file() from complaining my ( $htdocs, $theme, $lang, $base ) = C4::Templates::_get_template_file('ill/log/', 'intranet', $query); $self->{templates} = { STATUS_CHANGE => $base . 'status_change.tt' }; bless $self, $class; return $self; } =head3 log_maybe Koha::IllRequest::Logger->log_maybe($params); Receive params hashref, containing a request object and an attrs hashref (which may or may not be defined) If the attrs hashref contains a key matching our "loggers" hashref then we want to log it =cut sub log_maybe { my ($self, $params) = @_; if (defined $params->{request} && defined $params->{attrs}) { foreach my $key (keys %{ $params->{attrs} }) { if (defined($self->{loggers}->{$key})) { $self->{loggers}->{$key}( $params->{request}, $params->{attrs}->{$key} ); } } } } =head3 log_status_change Koha::IllRequest::Logger->log_status_change($params); Receive a hashref containing a request object and a status to log, and log it =cut sub log_status_change { my ( $self, $params ) = @_; if (defined $params->{request} && defined $params->{value}) { $self->log_something({ modulename => 'ILL', actionname => 'STATUS_CHANGE', objectnumber => $params->{request}->id, infos => to_json({ log_origin => 'core', status_before => $params->{request}->{previous_status}, status_after => $params->{value} }) }); } } =head3 log_something Koha::IllRequest::Logger->log_something({ modulename => 'ILL', actionname => 'STATUS_CHANGE', objectnumber => $req->id, infos => to_json({ log_origin => 'core', status_before => $req->{previous_status}, status_after => $new_status }) }); If we have the required data passed, log an action =cut sub log_something { my ( $self, $to_log ) = @_; if ( defined $to_log->{modulename} && defined $to_log->{actionname} && defined $to_log->{objectnumber} && defined $to_log->{infos} && C4::Context->preference("IllLog") ) { logaction( $to_log->{modulename}, $to_log->{actionname}, $to_log->{objectnumber}, $to_log->{infos} ); } } =head3 get_log_template $template_path = get_log_template($params); Given a log's origin and action, get the appropriate display template =cut sub get_log_template { my ($self, $params) = @_; my $origin = $params->{origin}; my $action = $params->{action}; if ($origin eq 'core') { # It's a core log, so we can just get the template path from # the hashref above return $self->{templates}->{$action}; } else { # It's probably a backend log, so we need to get the path to the # template from the backend my $backend =$params->{request}->{_my_backend}; return $backend->get_log_template_path($action); } } =head3 get_request_logs $requestlogs = Koha::IllRequest::Logger->get_request_logs($request_id); Get all logged actions for a given request =cut sub get_request_logs { my ( $self, $request ) = @_; my $logs = Koha::ActionLogs->search( { module => 'ILL', object => $request->id }, { order_by => { -desc => "timestamp" } } )->unblessed; # Populate a lookup table for status aliases my $aliases = GetAuthorisedValues('ILLSTATUS'); my $alias_hash; foreach my $alias(@{$aliases}) { $alias_hash->{$alias->{authorised_value}} = $alias; } foreach my $log(@{$logs}) { $log->{aliases} = $alias_hash; $log->{info} = from_json($log->{info}); $log->{template} = $self->get_log_template({ request => $request, origin => $log->{info}->{log_origin}, action => $log->{action} }); } return $logs; } =head1 AUTHOR Andrew Isherwood =cut 1;