Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/ControllerUnit.pm @ 171:59e5fcb59d86
Исправления, изменена концепция веб-форм
| author | sourcer |
|---|---|
| date | Mon, 06 Jun 2011 03:30:36 +0400 |
| parents | b88b7fe60aa3 |
| children | 068acfe903c3 |
comparison
equal
deleted
inserted
replaced
| 170:b88b7fe60aa3 | 171:59e5fcb59d86 |
|---|---|
| 70 $self->class_data(CONTROLLER_METHODS)->{$method} = { | 70 $self->class_data(CONTROLLER_METHODS)->{$method} = { |
| 71 wrapper => 'FormWrapper', | 71 wrapper => 'FormWrapper', |
| 72 schema => $info | 72 schema => $info |
| 73 }; | 73 }; |
| 74 } elsif (ref $info eq 'HASH') { | 74 } elsif (ref $info eq 'HASH') { |
| 75 die new IMPL::Exception("A schema must be specified",$self,$method) unless $info->{schema}; | |
| 76 | |
| 77 $info->{wrapper} = 'FormWrapper'; | 75 $info->{wrapper} = 'FormWrapper'; |
| 78 | 76 |
| 79 $self->class_data(CONTROLLER_METHODS)->{$method} = $info; | 77 $self->class_data(CONTROLLER_METHODS)->{$method} = $info; |
| 80 } else { | 78 } else { |
| 81 die new IMPL::Exception("Unsupported method information",$self,$method); | 79 die new IMPL::Exception("Unsupported method information",$self,$method); |
| 135 } | 133 } |
| 136 | 134 |
| 137 sub FormWrapper { | 135 sub FormWrapper { |
| 138 my ($self,$method,$action,$methodInfo) = @_; | 136 my ($self,$method,$action,$methodInfo) = @_; |
| 139 | 137 |
| 140 my $schema = $self->loadSchema($methodInfo->{schema}); | 138 my $schema = $methodInfo->{schema} ? $self->loadSchema($methodInfo->{schema}) : $self->unitSchema; |
| 141 | 139 |
| 142 my $process = $action->query->param('process') || 0; | 140 my $process = $action->query->param('process') || 0; |
| 143 my $form = $methodInfo->{form} | 141 my $form = $methodInfo->{form} |
| 144 || $action->query->param('form') | 142 || $action->query->param('form') |
| 145 || $schema->selectSingleNode('ComplexNode')->name | 143 || $method; |
| 146 or die new IMPL::Exception('No situable form name could be determined',$self,$method); | |
| 147 | 144 |
| 148 my %result; | 145 my %result; |
| 149 | 146 |
| 150 my $transform = IMPL::DOM::Transform::PostToDOM->new( | 147 my $transform = IMPL::DOM::Transform::PostToDOM->new( |
| 151 undef, | 148 undef, |
| 153 $form | 150 $form |
| 154 ); | 151 ); |
| 155 | 152 |
| 156 $result{formName} = $form; | 153 $result{formName} = $form; |
| 157 $result{formSchema} = $schema; | 154 $result{formSchema} = $schema; |
| 158 $result{formData} = $transform->Transform($action->query); | |
| 159 | |
| 160 | 155 |
| 161 if ($process) { | 156 if ($process) { |
| 157 $result{formData} = $transform->Transform($action->query); | |
| 162 $result{formErrors} = $transform->Errors->as_list; | 158 $result{formErrors} = $transform->Errors->as_list; |
| 163 if ($transform->Errors->Count) { | 159 if ($transform->Errors->Count) { |
| 164 $result{state} = STATE_INVALID; | 160 $result{state} = STATE_INVALID; |
| 165 } else { | 161 } else { |
| 166 $result{state} = STATE_CORRECT; | 162 $result{state} = STATE_CORRECT; |
| 177 die $err; | 173 die $err; |
| 178 } | 174 } |
| 179 } | 175 } |
| 180 } | 176 } |
| 181 } else { | 177 } else { |
| 178 if (my $initMethod = $methodInfo->{init}) { | |
| 179 my $unit = $self->new($action,\%result); | |
| 180 $result{formData} = $transform->Transform( $unit->$initMethod($unit->MakeParams($methodInfo)) ); | |
| 181 } else { | |
| 182 $result{formData} = $transform->Transform($action->query); | |
| 183 } | |
| 184 | |
| 185 $result{formErrors} = $transform->Errors->as_list; | |
| 182 $result{state} = STATE_NEW; | 186 $result{state} = STATE_NEW; |
| 183 } | 187 } |
| 184 | 188 |
| 185 return \%result; | 189 return \%result; |
| 186 } | 190 } |
