RSS Git Download  Clone
Raw Blame History
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;