X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole%2FModel%2FCDBI.pm;h=37b133549ab316dfee9b246ab8124f2eea35e9d0;hb=2d1409f7dd94e2292690eb03d7d62e464c1714db;hp=0a6c95b0be129cc08206caffb8e011391f875ebc;hpb=5e9b1336d1f20d57953e3e419fa7d68e79723528;p=maypole.git diff --git a/lib/Maypole/Model/CDBI.pm b/lib/Maypole/Model/CDBI.pm index 0a6c95b..37b1335 100644 --- a/lib/Maypole/Model/CDBI.pm +++ b/lib/Maypole/Model/CDBI.pm @@ -97,27 +97,38 @@ sub do_edit : Exported { my $h = CGI::Untaint->new( %{ $r->{params} } ); my $creating = 0; my ($obj) = @{ $r->objects || [] }; + my $fatal; if ($obj) { - # We have something to edit - $obj->update_from_cgi( $h => - { required => $r->{config}{ $r->{table} }{required_cols} || [], } - ); + eval { + $obj->update_from_cgi( $h => + { required => $r->{config}{ $r->{table} }{required_cols} || [], } + ); + }; + $fatal = $@; } else { - $obj = - $self->create_from_cgi( $h => - { required => $r->{config}{ $r->{table} }{required_cols} || [], } - ); + eval { + $obj = + $self->create_from_cgi( $h => + { required => $r->{config}{ $r->{table} }{required_cols} || [], } + ); + }; + $fatal = $@; $creating++; } - if ( my %errors = $obj->cgi_update_errors ) { + if ( my %errors = $fatal ? (FATAL => $fatal) : $obj->cgi_update_errors ) { # Set it up as it was: $r->{template_args}{cgi_params} = $r->{params}; $r->{template_args}{errors} = \%errors; - $r->{template} = "edit"; - undef $obj if $creating; # Couldn't create + + if ($creating) { + undef $obj; + $r->template("addnew"); + } else { + $r->template("edit"); + } } else { $r->{template} = "view"; @@ -239,11 +250,11 @@ sub fetch_objects { my ($class,$r)=@_; my @pcs = $class->primary_columns; if ( $#pcs ) { - my %pks; + my %pks; @pks{@pcs}=(@{$r->{args}}); - return $class->retrieve( %pks ); - } - return $class->retrieve( %$r->{args}->[0] ); + return $class->retrieve( %pks ); + } + return $class->retrieve( $r->{args}->[0] ); } 1;