-sub update_from_cgi {
- my ($self, $r, $params, $no_classify) = @_;
- $self->_croak( "update_from_cgi can only be called as an object method")
- unless ref $self;
- my ($errors, $validated, $wanted);
- $self->{_cgi_update_error} = {};
-
- #print "*** update_from_cgi talking ***\n\n";
- # FromCGI interface compatibility params are ($h, $wanted)
- if ($r->isa('CGI::Untaint')) {
- # REHASH the $wanted for updating:
- # 1: we ignore any fields we dont have parmeter for. (safe ?)
- # 2: we dont want to update fields unless they change
-
- my ($h, $wanted) = ($r, $params);
- my @ignore = @{$wanted->{ignore} || []};
- push @ignore, $self->primary_column->name;
- my $raw = $h->raw_data;
- #print "*** raw data ****" . Dumper($raw);
- foreach my $field ($self->columns) {
- #print "*** field is $field ***\n";
- if (not defined $raw->{$field}) {
- push @ignore, $field->name;
- #print "*** ignoring $field because it is not present ***\n";
- next;
-
- }
- # stupid inflation , cant get at raw db value easy, must call
- # deflate ***FIXME****
- my $cur_val = ref $self->$field ? $self->$field->id : $self->$field;
- if ($raw->{$field} eq $cur_val) {
- #print "*** ignoring $field because unchanged ***\n";
- push @ignore, $field->name;
- }
- }
-
- $wanted->{ignore} = \@ignore;
- #print "*** wanted ****" . Dumper($wanted);
- ($errors, $validated) = $self->_validate($h,$wanted,1);
- #print "*** validated data ****" . Dumper($validated);
- #print "*** errors ****" . Dumper($errors);
- }
- else {
- $params ||= $r->params;
- my $classified = $no_classify ? {%$params}:$self->classify_form_inputs($params);
- ($errors, $validated) = $self->validate_all($r, $classified,1);
- #print "*** errors for validate all ****" . Dumper($errors);
- }