package LIMS::Controller::Admin::Config::Settings; use strict; use base 'LIMS::Base'; use Config::Tiny; use LIMS::Local::Utils; __PACKAGE__->authz->authz_runmodes( ':all' => 'do_admin' ); #------------------------------------------------------------------------------- sub default : StartRunmode { my $self = shift; $self->_debug_path($self->get_current_runmode); # retrieve settings from file: my $settings = $self->_get_settings(); $self->tt_params( settings => $settings->{local_admin} ); # get js validation foo_onsubmit & foo_dfv_js vars into tt_params: $self->js_validation_profile('js_config_settings'); return $self->tt_process( 'admin/config/settings.tt' ); } #------------------------------------------------------------------------------- sub edit : Runmode { my $self = shift; $self->_debug_path($self->get_current_runmode); my $profile = $self->validate('config_settings_profile'); # arrayref my $result = $self->form_validator($profile); return $self->forward('default') if $result->has_error; my $vars = $result->valid; # $self->debug($vars); # retrieve settings from file: my $all_settings = $self->_get_settings(); # $self->debug($all_settings); # only want to update [local_admin] settings: my @local_fields = keys %{ $all_settings->{local_admin} }; # $self->debug(\@local_fields); # update $all_settings->{local_admin} with values from form: map { $all_settings->{local_admin}->{$_} = $vars->{$_}; } @local_fields; # $self->debug($all_settings); # write settings file back to disk: my $settings_file = $self->_get_settings_file(); $all_settings->write($settings_file); { # set confirmation messages: my $msgs = $self->messages('admin')->{settings}; $self->flash( info => $msgs->{update_successful} ); $self->flash( warning => $msgs->{require_restart} ); } return $self->redirect( $self->query->url . '/config/settings' ); } #------------------------------------------------------------------------------- sub _get_settings { my $self = shift; $self->_debug_path(); my $settings_file = $self->_get_settings_file(); my $settings = Config::Tiny->read($settings_file); # $self->debug($settings); return $settings; } #------------------------------------------------------------------------------- sub _get_settings_file { my $self = shift; $self->_debug_path(); my $centre = $self->cfg('settings')->{_centre}; # warn $centre; my $path_to_app_root = $self->cfg('path_to_app_root'); my $file = sprintf '%s/config/settings/%s.txt', $path_to_app_root, $centre; # 'centre' defined in lims_config.pl return $file; } 1;