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;