@@ -24,6 +24,7 @@ use Clone qw/clone/;
24
24
use WebGUI::DateTime;
25
25
use WebGUI::Exception;
26
26
use WebGUI::Utility;
27
+ use WebGUI::Pluggable;
27
28
28
29
private objectData => my %objectData ;
29
30
readonly session => my %session ;
@@ -991,20 +992,28 @@ sub update {
991
992
992
993
=head2 updateFromFormPost ( )
993
994
994
- Calls update() on any properties that are available from $session->form. Returns 1 on success .
995
+ Calls update() on all properties that the object expects .
995
996
996
997
=cut
997
998
998
999
sub updateFromFormPost {
999
- my $self = shift ;
1000
- my $session = $self -> session;
1001
- my $form = $session -> form;
1002
- my %data ;
1003
- my $properties = $self -> crud_getProperties($session );
1004
- foreach my $property ($form -> param) {
1005
- $data {$property } = $form -> get($property , $properties -> {$property }{fieldType }, $properties -> {$property }{defaultValue });
1006
- }
1007
- return $self -> update(\%data );
1000
+ my $self = shift ;
1001
+ my $session = $self -> session;
1002
+ my $form = $session -> form;
1003
+ my $data = $self -> get();
1004
+ my $properties = $self -> crud_getProperties($session );
1005
+ PROPERTY: foreach my $property (keys %{ $properties }) {
1006
+ my $fieldType = ' WebGUI::Form::' .ucfirst $properties -> {$property }{fieldType };
1007
+ my $control = eval { WebGUI::Pluggable::instanciate($fieldType , " new" , [ $self -> session, { name => $property , } ]) };
1008
+ if ($@ ) {
1009
+ $self -> session-> errorHandler-> error($@ );
1010
+ next PROPERTY;
1011
+ }
1012
+ next PROPERTY if ! $control -> isInRequest;
1013
+ $data -> {$property } =
1014
+ $form -> get($property , $properties -> {$property }{fieldType }, $properties -> {$property }{defaultValue });
1015
+ }
1016
+ return $self -> update($data );
1008
1017
}
1009
1018
1010
1019
0 commit comments