/usr/local/CPAN/DBR/DBR/Misc/Session.pm
package DBR::Misc::Session;
use strict;
use base 'DBR::Common';
use DateTime::TimeZone;
use Carp;
sub new {
my( $package ) = shift;
my %params = @_;
my $self = {
logger => $params{logger},
admin => $params{admin} ? 1 : 0,
fudge_tz => $params{fudge_tz},
use_exceptions => $params{use_exceptions} ? 1 : 0,
};
bless( $self, $package );
croak ('logger is required') unless $self->{logger};
my $tz = '';
$self->{tzref} = \$tz;
$self->timezone('server') or confess "failed to initialize timezone";
return $self;
}
sub timezone {
my $self = shift;
my $tz = shift;
return ${$self->{tzref}} unless defined($tz);
if($tz eq 'server' ){
eval {
my $tzobj = DateTime::TimeZone->new( name => 'local');
$tz = $tzobj->name;
};
if($@){
if($self->{fudge_tz}){
$self->_log( "Failed to determine local timezone. Fudging to UTC");
$tz = 'UTC';
}else{
return $self->_error( "Failed to determine local timezone ($@)" );
}
}
}
DateTime::TimeZone->is_valid_name( $tz ) or return $self->_error( "Invalid Timezone '$tz'" );
$self->_logDebug2('Set timezone to ' . $tz);
return ${$self->{tzref}} = $tz;
}
sub timezone_ref{ $_[0]->{tzref} }
sub is_admin{ $_[0]->{admin} }
sub use_exceptions{ $_[0]->{use_exceptions} }
sub _session { $_[0] }
sub _log{
my $self = shift;
my $message = shift;
my $mode = shift;
my ( undef,undef,undef, $method) = caller(2);
$self->{logger}->log($message,$method,$mode);
return 1;
}
sub _directlog{
my $self = shift;
my $message = shift;
my $method = shift;
my $mode = shift;
$self->{logger}->log($message,$method,$mode)
}
1;