# HG changeset patch # User sourcer # Date 1307316636 -14400 # Node ID 59e5fcb59d864845b2d813a9ca6713a2a1afde30 # Parent b88b7fe60aa327e9b71aa67f46620c2097f663bd Исправления, изменена концепция веб-форм diff -r b88b7fe60aa3 -r 59e5fcb59d86 Lib/IMPL/Class/Meta.pm --- a/Lib/IMPL/Class/Meta.pm Tue May 24 01:11:16 2011 +0400 +++ b/Lib/IMPL/Class/Meta.pm Mon Jun 06 03:30:36 2011 +0400 @@ -1,7 +1,7 @@ package IMPL::Class::Meta; use strict; -use Storable qw(dclone); +use Clone qw(clone); my %class_meta; my %class_data; @@ -49,7 +49,7 @@ $class_data{$class}{$name}; } else { if ( my $value = $class->_find_class_data($name) ) { - $class_data{$class}{$name} = dclone($value); + $class_data{$class}{$name} = clone($value); } else { undef; } diff -r b88b7fe60aa3 -r 59e5fcb59d86 Lib/IMPL/Object/Clonable.pm --- a/Lib/IMPL/Object/Clonable.pm Tue May 24 01:11:16 2011 +0400 +++ b/Lib/IMPL/Object/Clonable.pm Mon Jun 06 03:30:36 2011 +0400 @@ -1,10 +1,10 @@ package IMPL::Object::Clonable; use strict; -use Storable qw(dclone); +use Clone qw(clone); sub Clone { - dclone($_[0]); + clone($_[0]); } 1; \ No newline at end of file diff -r b88b7fe60aa3 -r 59e5fcb59d86 Lib/IMPL/Web/Application/ControllerUnit.pm --- a/Lib/IMPL/Web/Application/ControllerUnit.pm Tue May 24 01:11:16 2011 +0400 +++ b/Lib/IMPL/Web/Application/ControllerUnit.pm Mon Jun 06 03:30:36 2011 +0400 @@ -72,8 +72,6 @@ schema => $info }; } elsif (ref $info eq 'HASH') { - die new IMPL::Exception("A schema must be specified",$self,$method) unless $info->{schema}; - $info->{wrapper} = 'FormWrapper'; $self->class_data(CONTROLLER_METHODS)->{$method} = $info; @@ -137,13 +135,12 @@ sub FormWrapper { my ($self,$method,$action,$methodInfo) = @_; - my $schema = $self->loadSchema($methodInfo->{schema}); + my $schema = $methodInfo->{schema} ? $self->loadSchema($methodInfo->{schema}) : $self->unitSchema; my $process = $action->query->param('process') || 0; my $form = $methodInfo->{form} || $action->query->param('form') - || $schema->selectSingleNode('ComplexNode')->name - or die new IMPL::Exception('No situable form name could be determined',$self,$method); + || $method; my %result; @@ -155,10 +152,9 @@ $result{formName} = $form; $result{formSchema} = $schema; - $result{formData} = $transform->Transform($action->query); - if ($process) { + $result{formData} = $transform->Transform($action->query); $result{formErrors} = $transform->Errors->as_list; if ($transform->Errors->Count) { $result{state} = STATE_INVALID; @@ -179,6 +175,14 @@ } } } else { + if (my $initMethod = $methodInfo->{init}) { + my $unit = $self->new($action,\%result); + $result{formData} = $transform->Transform( $unit->$initMethod($unit->MakeParams($methodInfo)) ); + } else { + $result{formData} = $transform->Transform($action->query); + } + + $result{formErrors} = $transform->Errors->as_list; $result{state} = STATE_NEW; } diff -r b88b7fe60aa3 -r 59e5fcb59d86 Lib/IMPL/Web/QueryHandler/PageFormat.pm --- a/Lib/IMPL/Web/QueryHandler/PageFormat.pm Tue May 24 01:11:16 2011 +0400 +++ b/Lib/IMPL/Web/QueryHandler/PageFormat.pm Mon Jun 06 03:30:36 2011 +0400 @@ -8,11 +8,12 @@ use IMPL::Class::Property; use IMPL::Web::TT::Document; use Template::Plugin::URL; -use IMPL::Security::Context; -use File::Spec; -use HTML::TreeBuilder; -use URI; +use IMPL::Security::Context(); +use File::Spec(); +use HTML::TreeBuilder(); +use URI(); use Error qw(:try); +use Encode(); $Template::Plugin::URL::JOINT = '&'; @@ -44,7 +45,7 @@ $this->templatesBase($ENV{DOCUMENT_ROOT}) unless $this->templatesBase; - my ($requestUri) = split /\?/, $ENV{REQUEST_URI}; + my ($requestUri) = split( /\?/, $ENV{REQUEST_URI} ); my $pathInfo; my @root = (''); @@ -125,7 +126,7 @@ my $clone = $this->clone; if (ref $params eq 'HASH' ) { my %newParams = ($clone->query_form , %$params); - $clone->query_form(map { $_, $newParams{$_} } sort keys %newParams ); + $clone->query_form(map { $_, ( Encode::is_utf8( $newParams{$_} ) ? Encode::encode('utf-8', $newParams{$_}) : $newParams{$_} ) } sort keys %newParams ); } return $clone; } diff -r b88b7fe60aa3 -r 59e5fcb59d86 Lib/IMPL/Web/TT/Control.pm --- a/Lib/IMPL/Web/TT/Control.pm Tue May 24 01:11:16 2011 +0400 +++ b/Lib/IMPL/Web/TT/Control.pm Mon Jun 06 03:30:36 2011 +0400 @@ -2,6 +2,7 @@ use parent qw(IMPL::Web::TT::Collection); + use IMPL::Class::Property; use IMPL::DOM::Property qw(_dom); @@ -41,5 +42,4 @@ } } } - 1; \ No newline at end of file diff -r b88b7fe60aa3 -r 59e5fcb59d86 Lib/IMPL/Web/TT/Document.pm --- a/Lib/IMPL/Web/TT/Document.pm Tue May 24 01:11:16 2011 +0400 +++ b/Lib/IMPL/Web/TT/Document.pm Mon Jun 06 03:30:36 2011 +0400 @@ -266,7 +266,7 @@ my @result = $this->selectNodes($method); return $result[0] if @result; - carp "Looks like you have a mistake, document doesn't have a such property or child: $method"; + carp "Looks like you have a mistake, the document doesn't have a such property or child: $method"; return; }