Mercurial > pub > Impl
annotate Lib/IMPL/Web/DOM/FileNode.pm @ 245:7c517134c42f
Added Unsupported media type Web exception
corrected resourceLocation setting in the resource
Implemented localizable resources for text messages
fixed TT view scopings, INIT block in controls now sets globals correctly.
author | sergey |
---|---|
date | Mon, 29 Oct 2012 03:15:22 +0400 |
parents | 4d0e1962161c |
children |
rev | line source |
---|---|
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
1 package IMPL::Web::DOM::FileNode; |
167 | 2 use parent qw(IMPL::DOM::Node); |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
3 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
4 __PACKAGE__->PassThroughArgs; |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
5 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
6 use IMPL::Class::Property; |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
7 use File::Temp qw(tempfile); |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
8 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
9 BEGIN { |
194 | 10 public property parameterName => { |
11 get => sub { | |
12 my ($this) = @_; | |
13 $this->_parameterName() or | |
14 $this->_parameterName( | |
15 join '/', ( map { | |
16 (defined $_->nodeProperty('instanceId')) ? | |
17 $_->nodeName . '['.$_->nodeProperty('instanceId').']': | |
18 $_->nodeName | |
19 } $this->_selectParents, $this ) | |
20 ); | |
21 } | |
22 }; | |
23 private property _parameterName => prop_all; | |
24 public property fileName => { | |
25 get => sub { | |
26 my ($this) = @_; | |
27 return $this->document->query->param($this->parameterName); | |
28 } | |
29 }; | |
30 public property fileHandle => { | |
31 get => sub { | |
32 my ($this) = @_; | |
33 return $this->document->query->upload($this->parameterName); | |
34 } | |
35 }; | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
36 } |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
37 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
38 sub invokeTempFile { |
194 | 39 my ($this,$sub,$target) = @_; |
40 | |
41 die new IMPL::InvalidArgumentException("A reference to a function should be specified") unless $sub && ref $sub eq 'CODE'; | |
42 | |
43 $target ||= $this; | |
44 | |
45 my $query = $this->document->nodeProperty('query') or die new IMPL::InvalidOperationException("Failed to get a CGI query from the document"); | |
46 my $hFile = $query->upload($this->parameterName) or die new IMPL::IOException("Failed to open the uploaded file",$query->cgi_error,$this->parameterName,$this->nodeProperty('instanceId')); | |
47 | |
48 my ($hTemp,$tempFileName) = tempfile(); | |
49 binmode($hTemp); | |
50 | |
51 print $hTemp $_ while <$hFile>; | |
52 | |
53 $hTemp->flush(); | |
54 seek $hTemp, 0,0; | |
55 { | |
56 local $_ = $tempFileName; | |
57 $sub->($this,$tempFileName,$hTemp); | |
58 } | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
59 } |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
60 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
61 sub _selectParents { |
194 | 62 my ($node) = @_; |
63 | |
64 my @result; | |
65 | |
66 unshift @result, $node while $node = $node->parentNode; | |
67 | |
68 return @result; | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
69 } |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
70 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
71 1; |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
72 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
73 __END__ |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
74 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
75 =pod |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
76 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
77 =head1 NAME |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
78 |
180 | 79 C<IMPL::Web::DOM::FileNode> - узел, использующийся для представления параметра запроса в котором передан файл. |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
80 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
81 =head1 SINOPSYS |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
82 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
83 =begin code xml |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
84 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
85 <!-- input.schema.xml --> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
86 <schema> |
194 | 87 <SimpleType type="file" nativeType="IMPL::Web::DOM::FileNode"/> |
88 <ComplexNode name="user"> | |
89 <Node type="file" name="avatar"/> | |
90 </ComplexNode> | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
91 </schema> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
92 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
93 =end code xml |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
94 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
95 =begin code |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
96 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
97 # handle.pl |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
98 use IMPL::DOM::Transform::PostToDOM (); |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
99 use IMPL::DOM::Schema; |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
100 use CGI; |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
101 use File::Copy qw(copy); |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
102 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
103 my $t = new IMPL::DOM::Transform::PostToDOM( |
194 | 104 undef, |
105 IMPL::DOM::Schema->LoadSchema('input.schema.xml'), | |
106 'user' | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
107 ); |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
108 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
109 my $doc = $t->Transform(CGI->new()); |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
110 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
111 if ($t->Errors->Count) { |
194 | 112 # handle errors |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
113 } |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
114 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
115 $doc->selectSingleNode('avatar')->invokeTempFile( |
194 | 116 sub { |
117 my($node,$fname,$fhandle) = @_; | |
118 | |
119 # do smth with file | |
120 copy($_,'avatar.jpg'); | |
121 | |
122 # same thing | |
123 # copy($fname,'avatar.jpg'); | |
124 } | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
125 ); |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
126 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
127 =end code |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
128 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
129 =head1 DESCRIPTION |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
130 |
180 | 131 Данный класс используется для представлении параметров C<CGI> запросов при преобзаовании |
132 запроса в ДОМ документ преобразованием C<IMPL::DOM::Transform::PostToDOM>. | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
133 |
180 | 134 Узлы данного типа расширяют стандатрный C<IMPL::DOM::Node> несколькими свойствами и |
135 методами для доступа к файлу, переданному в виде параметра запроса. | |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
136 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
137 =head1 MEMBERS |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
138 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
139 =head2 PROPERTIES |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
140 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
141 =over |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
142 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
143 =item C<[get] parameterName> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
144 |
180 | 145 Имя параметра C<CGI> запроса соответствующего данному узлу. |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
146 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
147 =item C<[get] fileName> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
148 |
180 | 149 Имя файла из параметра запроса |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
150 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
151 =item C<[get] fileHandle> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
152 |
180 | 153 Указатель на файл из параметра запроса |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
154 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
155 =back |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
156 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
157 =head2 METHODS |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
158 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
159 =over |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
160 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
161 =item C<invokeTempFile($callback,$target)> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
162 |
180 | 163 Сохраняет файл, переданный в запросе во временный, вызывает C<$callback> для обработки временного файла. |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
164 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
165 =over |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
166 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
167 =item C<$callback> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
168 |
180 | 169 Ссылка на функцию которая будет вызвана для обработки временного файла. C<callback($target,$fname,$fhandle)> |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
170 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
171 =over |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
172 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
173 =item C<$fname> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
174 |
180 | 175 Имя временного файла |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
176 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
177 =item C<$fhandle> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
178 |
180 | 179 Указатель на временный файл |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
180 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
181 =back |
194 | 182 |
180 | 183 Также пременная C<$_> содержит имя временного файла. |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
184 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
185 =item C<$target> |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
186 |
180 | 187 Значение этого параметра будет передано первым параметром функции C<$callback>. |
148
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
188 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
189 =back |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
190 |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
191 =back |
e6447ad85cb4
DOM objects now have a schema and schemaSource properties
wizard
parents:
diff
changeset
|
192 |
180 | 193 =cut |