X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole%2FModel%2FCDBI.pm;fp=lib%2FMaypole%2FModel%2FCDBI.pm;h=d8d5ace5ea3d18f76e6be064701b421597256593;hb=a4c30c9757a710511bcfabe5cad9a7390eabfbcd;hp=ae11c4dc1fc50d2d498d5515c93e9a16e262cccd;hpb=58c9595d95477fa806c7876aa7bf80d1908bd22d;p=maypole.git diff --git a/lib/Maypole/Model/CDBI.pm b/lib/Maypole/Model/CDBI.pm index ae11c4d..d8d5ace 100644 --- a/lib/Maypole/Model/CDBI.pm +++ b/lib/Maypole/Model/CDBI.pm @@ -25,9 +25,18 @@ will instead use Class::DBI classes provided. use base qw(Maypole::Model::Base Class::DBI); use Maypole::Model::CDBI::AsForm; -use CGI::Untaint; + +use Maypole::Model::CDBI::FromCGI; +use CGI::Untaint::Maypole; +our $Untainter = 'CGI::Untaint::Maypole'; + +# or if you like bugs + +#use Class::DBI::FromCGI; +#use CGI::Untaint; +#our $Untainter = 'CGI::Untaint'; + use Class::DBI::Plugin::Type; -use Class::DBI::FromCGI; use Class::DBI::Loader; use Class::DBI::AbstractSearch; use Class::DBI::Plugin::RetrieveAll; @@ -61,7 +70,7 @@ sub do_edit : Exported { my $config = $r->config; my $table = $r->table; - # handle cancel button hits + # handle cancel button hit if ( $r->{params}->{cancel} ) { $r->template("list"); $r->objects( [$self->retrieve_all] ); @@ -119,10 +128,19 @@ sub _do_update_or_create { my $fatal; my $creating = 0; - my $h = CGI::Untaint->new( %{$r->params} ); + my $h = $Untainter->new( %{$r->params} ); # update or create if ($obj) { + # 1: Required fields for update are different than create. Its only required + # if it is in the parameters + +# my @real_required = (); +# my %required = map { $_ => 1 } @$required_cols; +# foreach (keys %{$r->params}) { +# push @real_required, $_ if $required{$_}; +# } + # We have something to edit eval { $obj->update_from_cgi( $h => { required => $required_cols, @@ -132,20 +150,14 @@ sub _do_update_or_create { }; $fatal = $@; } else { - eval { - $obj = $self->create_from_cgi( $h => { + eval { + $obj = $self->create_from_cgi( $h => { required => $required_cols, ignore => $ignored_cols, - } ) - }; - - if ($fatal = $@) { - warn "FATAL ERROR: $fatal" if $r->debug; -# $self->dbi_rollback; - } else { -# $self->dbi_commit; - } - $creating++; + } ); + }; + $fatal = $@; + $creating++; } return $obj, $fatal, $creating;