]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/Model/CDBI/DFV.pm
added dfv check method to DFV model
[maypole.git] / lib / Maypole / Model / CDBI / DFV.pm
index fcf80fbf96eadd1577c59f1472a07645bf939250..eb2bf20668834329b18f692042fa03ae13c931f5 100644 (file)
@@ -36,11 +36,13 @@ of CGI::Untaint. For teh win!!
 =cut
 
 use Class::C3;
-use Maypole::Config;
 use Data::FormValidator;
+use Data::Dumper;
+
+use Maypole::Config;
 use Maypole::Model::CDBI::AsForm;
 
-use base qw(Maypole::Model::Base);
+use base qw(Maypole::Model::CDBI::Base);
 
 Maypole::Config->mk_accessors(qw(table_to_class _COLUMN_INFO));
 
@@ -61,7 +63,9 @@ Maypole::Config->mk_accessors(qw(table_to_class _COLUMN_INFO));
 sub setup_database {
     my ( $self, $config, $namespace, $classes ) = @_;
     $config->{classes}        = $classes;
-    foreach my $class (@$classes) { $namespace->load_model_subclass($class); }
+    foreach my $class (@$classes) {
+      $namespace->load_model_subclass($class);
+    }
     $namespace->model_classes_loaded(1);
     $config->{table_to_class} = { map { $_->table => $_ } @$classes };
     $config->{tables}         = [ keys %{ $config->{table_to_class} } ];
@@ -92,6 +96,21 @@ sub adopt {
     }
 }
 
+=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.
@@ -121,7 +140,6 @@ sub do_edit : Exported {
     return;
   }
 
-  my $required_cols = $class->required_columns;
   my $errors;
   if ($obj) {
     ($obj,$errors) = $class->_do_update($r,$obj);
@@ -191,7 +209,7 @@ sub _do_update {
     $obj->set( %$this_class_params );
     $obj->update;
   }
-  
+
   return ($obj,$errors);
 
 }
@@ -200,19 +218,22 @@ sub _do_create {
   my ($class,$r) = @_;
   my $errors;
   my $this_class_params = { map { $_ => $r->{params}{$_} }  $class->columns  };
-  my $obj = eval { My::DBI->create( $this_class_params ) };
+  my $obj;
 
-  my $dfv_results = ($obj) ? undef :  $class->dfv_results->msgs ;
-
-  # handle dfv errors
-  if ( $dfv_results->has_missing ) {   # missing fields
-    foreach my $field ( $dfv_results->missing ) {
-      $errors->{$field} = "$field is required";
+  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 );
+      }
     }
   }
 
@@ -292,7 +313,7 @@ sub _column_info {
 
   # 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;
 }