package LIMS::Controller::Login;
use base 'LIMS::Base';
use Moose;
with (
'LIMS::Controller::Roles::DataMap',
);
use LIMS::Local::Utils;
# this should not normally be called (ie/hmds/login), but just in case,
# load login.tt & display 'already logged in' message:
sub default : StartRunmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
return $self->tt_process();
}
sub logout : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
# tidy up:
$self->authen->logout;
$self->session_delete;
return $self->redirect( $self->query->url );
}
# redirection target if detected by authen->is_new_login:
sub hello : Runmode {
my $self = shift;
my $profile = $self->authen->store->fetch('yooza_profile');
# convert profile last_login date to DT:
if ( my $last_login = $profile->{last_login} ) { # maybe 1st login
my $dt = LIMS::Local::Utils::to_datetime_using_parsedate($last_login);
$self->tt_params( last_login => $dt );
}
my $user_locations_map = $self->user_locations_map; # from email_contacts tbl
my $user_location = $profile->{user_location}->{location_name};
# if users location exists in email_contacts.display_name col, get new diagnoses:
if ( my $org_code = $user_locations_map->{$user_location} ) {
my $new_and_relapsed_cases = $self->new_and_relapsed_cases($org_code);
$self->tt_params( results => $new_and_relapsed_cases );
}
{ # if any user-to-user messages:
my $messages = $self->model('User')->get_user_messages($profile->{id});
$self->tt_params( user_messages => $messages );
}
{ # if any admin-to-user messages:
my $user_type = # is user internal or external?
$user_location eq $self->cfg('settings')->{lab_name_abbreviation}
? 'internal'
: 'external';
my $messages = $self->model('User')->get_admin_messages($user_type);
$self->tt_params( admin_messages => $messages );
}
# if any messages or diagnosis list:
return 'foo'
? $self->tt_process()
: $self->redirect_after_login(); # no messages & doesn't require new diags
}
1;