package LIMS::Controller::Roles::FormData; use Moose::Role; use Data::FormValidator; use LIMS::Local::Config; use Data::Dumper; sub get_data_from_dfv { my $self = shift; my $profile = shift || return $self->error('no profile passed to get_data_from_dfv()'); my $validator = $self->_get_validator(); # warn Dumper $validator; my $dfv = $validator->check($self->query, $profile); my $data = $dfv->valid(); # $self->debug($data); return $data; } sub validate_form_params { my $self = shift; my $profile = shift || return $self->error('no profile passed to get_data_from_dfv()'); my $params = shift || $self->query(); # optional - uses CGI if not passed my $validator = $self->_get_validator(); # warn Dumper $validator; my $results = $validator->check($params, $profile); # warn Dumper $results; return $results; } sub validate_results_data_entry { my ($self, $ref) = @_; my $data_type = $ref->{data_type}; my $test_name = $ref->{test_name}; my $profile_name = 'data_entry_' . $data_type; # not all data types need or have validators: return 0 unless LIMS::Validate->can($profile_name); # get validation method & error msg for profile name: my $validator = $self->validate($profile_name); # warn Dumper $ref; my $validation_method = $validator->{method}; my $validation_profile = { required => [ $test_name ], # or param is ignored constraint_methods => { $test_name => $validation_method, }, }; # warn Dumper $validation_profile; my $dfv = $self->validate_form_params($validation_profile); # warn Dumper $dfv; # only require error message on failure: return $dfv->has_invalid ? { err => $validator->{err_msg} } : { pass => 1 }; } # loads dfv_defaults from LIMS config: sub _get_validator { my $self = shift; my $cfg = LIMS::Local::Config->instance; my $dfv = Data::FormValidator->new({}, $cfg->{dfv_defaults}); return $dfv; } 1;