Apache2-WebApp-Extra-Admin
view release on metacpan or search on metacpan
usr/share/webapp-toolkit/extra/class/admin_logs.tt view on Meta::CPAN
my $so = $c->request->param('so') || 'asc';
# check the user input
my $error;
$error = 1 if ($start !~ /^[\d]{1,6}$/);
$error = 1 if ($sc !~ /^[\w]{1,55}$/);
$error = 1 if ($so !~ /^[\w]{1,4}$/);
$self->SUPER::_error($c, 'Error', 'Bad Request') if $error;
# read from database, if available - defaults to file
my $data =
(defined $c->stash('DBH') )
? $self->_get_entries_from_db($c)
: $self->_get_entries_from_file($c);
my $results = $self->SUPER::_sort_data($sc, $so, $data);
my $total = @$results;
my $limit = $c->config->{custom_items_per_page} || '25';
$c->request->content_type('text/html');
$c->template->process(
'extras/admin/logs.tt',
{
%{ $c->config },
sc => $sc,
so => $so,
data => $self->SUPER::_gen_results($total, $start, $limit, \@$results),
}
)
or $self->SUPER::_error($c, 'Template process failed', $c->template->error() );
exit;
}
#----------------------------------------------------------------------------+
# _get_entries_from_file(\%controller)
#
# Return the log entry file data as a reference to an array.
sub _get_entries_from_file {
my ($self, $c) = @_;
my $logfile = $c->config->{apache_doc_root} . '/logs/admin_log';
my @data;
if (-f $logfile) {
open (INFILE, $logfile) or die $self->SUPER::_error($c, "Cannot open $logfile: $!");
while (<INFILE>) {
chomp;
my ($user, $action, $string, $ip, $epoch) = split(/\t/);
push @data, {
admin_log_username => $user,
admin_log_action => $action,
admin_log_query_string => $string,
admin_log_user_ip_addr => $ip,
created => $c->plugin('DateTime')->format_time($epoch, '%m-%d-%Y / %R %p')
};
}
close(INFILE);
}
else {
# create the log file
open (FILE, ">$logfile") or $self->SUPER::_error("Cannot open file: $!");
close(FILE);
}
return \@data;
}
#----------------------------------------------------------------------------+
# _get_entries_from_db(\%controller)
#
# Return the log entry database as a reference to an array.
sub _get_entries_from_db {
my ($self, $c) = @_;
my $sth;
eval {
$sth = $c->stash('DBH')->prepare(qq{
SELECT *,
DATE_FORMAT(admin_log_created, '%m-%d-%Y / %H:%i %p') AS created
FROM admin_log
ORDER BY admin_log_created
});
$sth->execute;
};
if ($@) {
$self->SUPER::_error($c, 'Database SELECT failed', $sth->errstr);
}
return $sth->fetchall_arrayref({});
}
1;
__END__
=head1 NAME
[% project_title %]::Admin::Logs - Web based admin control panel module
=head1 SYNOPSIS
use [% project_title %]::Admin::Logs;
=head1 DESCRIPTION
Base class module that is used to view log entries.
=head1 OBJECT METHODS
( run in 0.729 second using v1.01-cache-2.11-cpan-39bf76dae61 )