=cut
-use Class::C3;
use Data::FormValidator;
use Data::Dumper;
}
}
+=head2 check_params
+
+ Checks parameters against the DFV profile for the class, returns the results
+ of DFV's check.
+
+ my $dfv_results = __PACKAGE__->check_params($r->params);
+
+=cut
+
+sub check_params {
+ my ($class,$params) = @_;
+ return Data::FormValidator->check($params, $class->dfv_profile);
+}
+
+
=head1 Action Methods
Action methods are methods that are accessed through web (or other public) interface.
return;
}
- my $required_cols = $class->required_columns;
+
my $errors;
if ($obj) {
($obj,$errors) = $class->_do_update($r,$obj);
if (ref $errors) {
# pass errors to template
$r->template_args->{errors} = $errors;
- foreach my $error (keys %$errors) {
- $r->template_args->{errors}{ucfirst($error)} = $errors->{$error}
- }
-
# Set it up as it was:
$r->template_args->{cgi_params} = $r->params;
$r->template("edit");
}
}
- my $this_class_params = { map { $_ => $r->{params}{$_} } $class->columns };
+
+ my $this_class_params = {};
+
+
+ # NG changes start here.
+ # Code below fails to handle multi col PKs
+ my @pks = $class->columns('Primary');
+
+ foreach my $param ( $class->columns ) {
+ # next if ($param eq $class->columns('Primary'));
+ next if grep {/^${param}$/} @pks;
+
+ my $value = $r->params->{$param};
+ next unless (defined $value);
+ $this_class_params->{$param} = ( $value eq '' ) ? undef : $value;
+ }
# update or make other related (must_have, might_have, has_many etc )
unless ($errors) {
# get related object if it exists
my $rel_meta = $class->related_meta('r',$accssr);
if (!$rel_meta) {
- $class->_croak("No relationship for $accssr in " . ref($class));
+ $r->warn("[_do_update] No relationship for $accssr in " . ref($class));
+ next;
}
my $rel_type = $rel_meta->{name};
}
return ($obj,$errors);
-
}
sub _do_create {
my ($class,$r) = @_;
my $errors;
- my $this_class_params = { map { $_ => $r->{params}{$_} } $class->columns };
- my $dfv_results;
- my $obj;
- if ($class->isa('Class::DBI::DFV')) {
- $obj = eval { My::DBI->create( $this_class_params ) };
- $dfv_results = ($obj) ? undef : $class->dfv_results ;
- } else {
- $dfv_results = Data::FormValidator->check($r->{params}, $class->dfv_profile);
- if ($dfv_results->success) {
- $obj = $class->create($this_class_params);
- }
+ my $this_class_params = {};
+ foreach my $param ( $class->columns ) {
+ next if ($param eq $class->columns('Primary'));
+ my $value = $r->params->{$param};
+ next unless (defined $value);
+ $this_class_params->{$param} = ( $value eq '' ) ? undef : $value;
}
- # handle dfv errors
- if ( $dfv_results->has_missing ) { # missing fields
- foreach my $field ( $dfv_results->missing ) {
- $errors->{$field} = "$field is required";
+ my $obj;
+
+ my $dfv_results = Data::FormValidator->check($r->{params}, $class->dfv_profile);
+ if ($dfv_results->success) {
+ $obj = $class->create($this_class_params);
+ } else {
+ # handle dfv errors
+ if ( $dfv_results->has_missing ) { # missing fields
+ foreach my $field ( $dfv_results->missing ) {
+ $errors->{$field} = "$field is required";
+ }
}
- }
- if ( $dfv_results->has_invalid ) { # Print the name of invalid fields
- foreach my $field ( $dfv_results->invalid ) {
- $errors->{$field} = "$field is invalid: " . $dfv_results->invalid( $field );
+ if ( $dfv_results->has_invalid ) { # Print the name of invalid fields
+ foreach my $field ( $dfv_results->invalid ) {
+ $errors->{$field} = "$field is invalid: " . $dfv_results->invalid( $field );
+ }
}
}
my $created = [];
my $rel_meta = $self->related_meta('r',$accssr);
if (!$rel_meta) {
- $self->_croak("No relationship for $accssr in " . ref($self));
+ $self->_carp("[_create_related] No relationship for $accssr in " . ref($self));
+ return;
}
my $rel_type = $rel_meta->{name};
# update with required columns from DFV Profile
my $profile = $class->dfv_profile;
- $class->required_columns(@{$profile->{required}});
+ $class->required_columns($profile->{required});
return $class->COLUMN_INFO;
}