package LIMS::Local::LIMS; # used by cron scripts to provide required LIMS methods - stash(), model(), etc BEGIN { $ENV{USE_FILE_SESSIONS} = 1; # use disk dir for sessions, not db table $ENV{RDBO_DEBUG_ON} = $ENV{RDBO_DEBUG} = 0; # just to make sure } BEGIN { # load all LIMS::DB::* classes: use Data::Dumper; use Module::Find; use FindBin qw($Bin); # warn $Bin; use lib "$Bin/../../../lib/LIMS/DB"; # actually finds it anyway from @INC Module::Find::useall LIMS::DB; # warn Dumper @INC; # DEBUG([@a]); } use Template; use YAML::Tiny; use LIMS::RDBO; use CGI::Simple; use CGI::Session; use LIMS::Local::Config; use CGI::Application::Plugin::Stash; use Moose; with ( 'LIMS::Role::Base', # model() & render_view() ); has session => ( is => 'ro', isa => 'CGI::Session', lazy_build => 1); has lims_db => ( is => 'ro', isa => 'LIMS::DB', lazy_build => 1); has tools => ( is => 'ro', isa => 'LIMS::Local::ScriptHelpers', required => 1 ); __PACKAGE__->meta->make_immutable; #------------------------------------------------------------------------------- sub _debug_path {} sub cfg { shift->config(@_) } sub query { new CGI::Simple } # for C::R::PDF query() sub error { my ($self, $error) = shift; die $error; } sub tt_params { # from CAP::TT my $self = shift; my @data = @_; # Define the params stash if it doesn't exist $self->{__TT_PARAMS} ||= {}; if (@data) { my $params = $self->{__TT_PARAMS}; my $newparams = {}; if (ref $data[0] eq 'HASH') { # hashref %$newparams = %{ $data[0] }; } elsif ( (@data % 2) == 0 ) { %$newparams = @data; } else { die "tt_params requires a hash or hashref!"; } # merge the new values into our stash of parameters @$params{keys %$newparams} = values %$newparams; } return $self->{__TT_PARAMS}; } # sub render_view { shift->tt_process(@_) } sub tt_process { # replacement for CAP:TT method, but uses tools->process_template() my $self = shift; my $tmpl = shift; # warn $tmpl; my $vars = shift || {}; # warn Dumper $vars; # none passed from format_report() my %params = ( %{ $self->tt_params() }, %$vars ); # Add c => $self in as a param for convenient access to sessions and such $params{c} ||= $self; my $html = $self->tools->process_template($tmpl, \%params); return \$html; } sub config { my $self = shift; my $key = shift; # optional - if called as $cfg->('foo') my $cfg = LIMS::Local::Config->instance; if ($key) { return $cfg->{$key}; } else { return $cfg; } } sub _build_lims_db { return LIMS::RDBO->init_db; } sub _build_session { my $self = shift; my $session = CGI::Session->new(); my $cfg = $self->config('settings'); # warn Dumper $cfg; # create user profile for model - so far only need ID of service user: my $server_name = $cfg->{server_username}; # warn Dumper $server_name; my $user = LIMS::DB::User->new(username => $server_name)->load || die "no such username '$server_name' in users table"; my $user_profile = { id => $user->id }; $session->param( UserProfile => $user_profile ); return $session; } 1;