]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole/Model/CDBI/DFV.pm
fixed fixes to bugs in DFV model when updating and creating object
[maypole.git] / lib / Maypole / Model / CDBI / DFV.pm
index eb2bf20668834329b18f692042fa03ae13c931f5..ded183fde396e24a5c74bc98b75b9cd37ef82743 100644 (file)
@@ -140,6 +140,7 @@ sub do_edit : Exported {
     return;
   }
 
+
   my $errors;
   if ($obj) {
     ($obj,$errors) = $class->_do_update($r,$obj);
@@ -182,7 +183,14 @@ sub _do_update {
     }
   }
 
-  my $this_class_params = { map { $_ => $r->{params}{$_} }  $class->columns  };
+
+  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;
+  }
 
   # update or make other related (must_have, might_have, has_many  etc )
   unless ($errors) {
@@ -190,7 +198,8 @@ sub _do_update {
       # 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};
@@ -211,13 +220,20 @@ sub _do_update {
   }
 
   return ($obj,$errors);
-
 }
 
 sub _do_create {
   my ($class,$r) = @_;
   my $errors;
-  my $this_class_params = { map { $_ => $r->{params}{$_} }  $class->columns  };
+
+  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;
+  }
+
   my $obj;
 
   my $dfv_results = Data::FormValidator->check($r->{params}, $class->dfv_profile);
@@ -256,7 +272,8 @@ sub _create_related {
   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};