19declare(strict_types=1);
21require_once(__DIR__ .
"/../../../../../../../vendor/composer/vendor/autoload.php");
22require_once(__DIR__ .
"/../../../Base.php");
23require_once(__DIR__ .
"/InputTest.php");
24require_once(__DIR__ .
"/CommonFieldRendering.php");
46 public function button(): ButtonFactory
51 public function symbol(): SymbolFactory
59 use CommonFieldRendering;
70 $html = str_replace(
" />",
"/>", $html);
71 return parent::brutallyTrimHTML($html);
84 public function getFileIdentifierParameterName():
string
89 public function getUploadURL():
string
94 public function getFileRemovalURL():
string
102 public function getExistingFileInfoURL():
string
110 public function getInfoForExistingFiles(array $file_ids): array
115 public function getInfoResult(
string $identifier): ?
FileInfoResult
117 if (
null !== $this->file && $identifier === $this->file->getFileIdentifier()) {
124 public function supportsChunkedUploads():
bool
134 $f = $this->getFieldFactory();
139 $this->assertInstanceOf(Field\File::class, $text);
145 $f = $this->getFieldFactory();
148 $file_input =
$f->file($this->
getUploadHandler(), $label, $byline)->withNameFrom($this->name_source);
150 $expected = $this->getFormWrappedHtml(
154 <div class="ui-input-file">
155 <div class="ui-input-file-input-list">
157 <div class="ui-input-file-input">
158 <div class="ui-input-file-info"><span data-action="expand"></span><span
159 data-action="collapse"></span><span data-dz-name></span><span data-dz-size></span><span
160 data-action="remove"><a tabindex="0" class="glyph" href="#" aria-label="close"><span
161 class="glyphicon glyphicon-remove" aria-hidden="true"></span></a></span><span
162 class="ui-input-file-input-error-msg" data-dz-error-msg></span></div>
163 <div class="ui-input-file-metadata" style="display: none;"><input id="id_1" type="hidden"
164 name="name_0[input_0][]" value="" /></div>
165 <div class="ui-input-file-input-progress-container">
166 <div class="ui-input-file-input-progress-indicator"></div>
171 <div class="ui-input-file-input-dropzone">
172 <button class="btn btn-link" data-action="#" id="id_2">select_files_from_computer</button>
173 <span class="ui-input-file-input-error-msg" data-dz-error-msg></span>
175 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
182 $this->assertEquals($expected, $this->render($file_input));
187 $f = $this->getFieldFactory();
189 ->withNameFrom($this->name_source);
190 $this->testWithError($file_input);
191 $this->testWithNoByline($file_input);
192 $this->testWithRequired($file_input);
193 $this->testWithDisabled($file_input);
194 $this->testWithAdditionalOnloadCodeRendersId($file_input);
199 $test_file_id =
"test_file_id_1";
200 $test_file_name =
"test file name 1";
202 $test_file_info = $this->createMock(FileInfoResult::class);
203 $test_file_info->method(
'getFileIdentifier')->willReturn(
"test_file_id_1");
204 $test_file_info->method(
'getName')->willReturn(
"test file name 1");
205 $test_file_info->method(
'getSize')->willReturn(1001);
207 $file_input = $this->getFieldFactory()->file(
212 ])->withNameFrom($this->name_source);
214 $expected = $this->getFormWrappedHtml(
218 <div class="ui-input-file">
219 <div class="ui-input-file-input-list">
220 <div class="ui-input-file-input">
221 <div class="ui-input-file-info">
222 <span data-action="expand"></span>
223 <span data-action="collapse"></span>
224 <span data-dz-name>test file name 1</span>
225 <span data-dz-size>1 KB</span>
226 <span data-action="remove">
227 <a tabindex="0" class="glyph" href="#" aria-label="close">
228 <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
231 <span class="ui-input-file-input-error-msg" data-dz-error-msg></span>
233 <div class="ui-input-file-metadata" style="display: none;">
234 <input id="id_1" type="hidden" name="name_0[input_0][]" value="test_file_id_1"/>
236 <div class="ui-input-file-input-progress-container">
237 <div class="ui-input-file-input-progress-indicator"></div>
241 <div class="ui-input-file-input">
242 <div class="ui-input-file-info"><span data-action="expand"></span><span
243 data-action="collapse"></span><span data-dz-name></span><span data-dz-size></span><span
244 data-action="remove"><a tabindex="0" class="glyph" href="#" aria-label="close"><span
245 class="glyphicon glyphicon-remove" aria-hidden="true"></span></a></span><span
246 class="ui-input-file-input-error-msg" data-dz-error-msg></span></div>
247 <div class="ui-input-file-metadata" style="display: none;"><input id="id_2" type="hidden"
248 name="name_0[input_0][]" value="" /></div>
249 <div class="ui-input-file-input-progress-container">
250 <div class="ui-input-file-input-progress-indicator"></div>
255 <div class="ui-input-file-input-dropzone">
256 <button class="btn btn-link" data-action="#" id="id_3">select_files_from_computer</button>
257 <span class="ui-input-file-input-error-msg" data-dz-error-msg></span>
259 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
266 $this->assertEquals($expected, $this->render($file_input));
272 $factory = $this->getFieldFactory();
273 $label =
'file_input';
274 $metadata_input = $factory->text(
"text_input");
275 $file_input = $factory->file(
285 ])->withNameFrom($this->name_source);
287 $expected = $this->getFormWrappedHtml(
291 <div class="ui-input-file">
292 <div class="ui-input-file-input-list">
293 <div class="ui-input-file-input">
294 <div class="ui-input-file-info"><span data-action="expand"><a tabindex="0" class="glyph" href="#"
295 aria-label="expand_content"><span class="glyphicon glyphicon-triangle-right"
296 aria-hidden="true"></span></a></span><span data-action="collapse"><a tabindex="0"
297 class="glyph" href="#" aria-label="collapse_content"><span
298 class="glyphicon glyphicon-triangle-bottom"
299 aria-hidden="true"></span></a></span><span data-dz-name></span><span
300 data-dz-size></span><span data-action="remove"><a tabindex="0" class="glyph" href="#"
301 aria-label="close"><span class="glyphicon glyphicon-remove"
302 aria-hidden="true"></span></a></span><span class="ui-input-file-input-error-msg"
303 data-dz-error-msg></span></div>
304 <div class="ui-input-file-metadata" style="display: none;"><input id="id_1" type="hidden"
305 name="name_0[input_1][]" value="file_id" />
306 <fieldset class="c-input" data-il-ui-component="text-field-input"
307 data-il-ui-input-name="name_0[input_2][]"><label for="id_2">text_input</label>
308 <div class="c-input__field"><input id="id_2" type="text" name="name_0[input_2][]"
309 class="c-field-text" /></div>
312 <div class="ui-input-file-input-progress-container">
313 <div class="ui-input-file-input-progress-indicator"></div>
316 <div class="ui-input-file-input">
317 <div class="ui-input-file-info"><span data-action="expand"><a tabindex="0" class="glyph"
318 href="#" aria-label="expand_content"><span
319 class="glyphicon glyphicon-triangle-right"
320 aria-hidden="true"></span></a></span><span data-action="collapse"><a
321 tabindex="0" class="glyph" href="#" aria-label="collapse_content"><span
322 class="glyphicon glyphicon-triangle-bottom"
323 aria-hidden="true"></span></a></span><span data-dz-name></span><span
324 data-dz-size></span><span data-action="remove"><a tabindex="0" class="glyph" href="#"
325 aria-label="close"><span class="glyphicon glyphicon-remove"
326 aria-hidden="true"></span></a></span><span class="ui-input-file-input-error-msg"
327 data-dz-error-msg></span></div>
328 <div class="ui-input-file-metadata" style="display: none;"><input id="id_3" type="hidden"
329 name="name_0[input_1][]" value="" />
330 <fieldset class="c-input" data-il-ui-component="text-field-input"
331 data-il-ui-input-name="name_0[input_2][]"><label for="id_4">text_input</label>
332 <div class="c-input__field"><input id="id_4" type="text" name="name_0[input_2][]"
333 class="c-field-text" /></div>
336 <div class="ui-input-file-input-progress-container">
337 <div class="ui-input-file-input-progress-indicator"></div>
342 <div class="ui-input-file-input-dropzone"><button class="btn btn-link" data-action="#"
343 id="id_5">select_files_from_computer</button><span class="ui-input-file-input-error-msg"
344 data-dz-error-msg></span></div>
345 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
352 $this->assertEquals($expected, $this->render($file_input));
358 $test_file_id =
"test_file_id_1";
359 $test_file_name =
"test file name 1";
361 $test_file_info = $this->createMock(FileInfoResult::class);
362 $test_file_info->method(
'getFileIdentifier')->willReturn(
"test_file_id_1");
363 $test_file_info->method(
'getName')->willReturn(
"test file name 1");
364 $test_file_info->method(
'getSize')->willReturn(1000 * 1000 + 1);
366 $factory = $this->getFieldFactory();
367 $label =
'file_input';
368 $metadata_input = $factory->text(
"text_input");
369 $file_input = $factory->file(
379 ])->withNameFrom($this->name_source);
382 $expected = $this->getFormWrappedHtml(
386 <div class="ui-input-file">
387 <div class="ui-input-file-input-list">
388 <div class="ui-input-file-input">
389 <div class="ui-input-file-info"><span data-action="expand"><a tabindex="0" class="glyph" href="#"
390 aria-label="expand_content"><span class="glyphicon glyphicon-triangle-right"
391 aria-hidden="true"></span></a></span><span data-action="collapse"><a tabindex="0"
392 class="glyph" href="#" aria-label="collapse_content"><span
393 class="glyphicon glyphicon-triangle-bottom"
394 aria-hidden="true"></span></a></span><span data-dz-name>test file name 1</span><span
395 data-dz-size>1 MB</span><span data-action="remove"><a tabindex="0" class="glyph" href="#"
396 aria-label="close"><span class="glyphicon glyphicon-remove"
397 aria-hidden="true"></span></a></span><span class="ui-input-file-input-error-msg"
398 data-dz-error-msg></span></div>
399 <div class="ui-input-file-metadata" style="display: none;"><input id="id_1" type="hidden"
400 name="name_0[input_1][]" value="test_file_id_1" />
401 <fieldset class="c-input" data-il-ui-component="text-field-input"
402 data-il-ui-input-name="name_0[input_2][]"><label for="id_2">text_input</label>
403 <div class="c-input__field"><input id="id_2" type="text" value="test"
404 name="name_0[input_2][]" class="c-field-text" /></div>
407 <div class="ui-input-file-input-progress-container">
408 <div class="ui-input-file-input-progress-indicator"></div>
411 <div class="ui-input-file-input">
412 <div class="ui-input-file-info"><span data-action="expand"><a tabindex="0" class="glyph"
413 href="#" aria-label="expand_content"><span
414 class="glyphicon glyphicon-triangle-right"
415 aria-hidden="true"></span></a></span><span data-action="collapse"><a
416 tabindex="0" class="glyph" href="#" aria-label="collapse_content"><span
417 class="glyphicon glyphicon-triangle-bottom"
418 aria-hidden="true"></span></a></span><span data-dz-name></span><span
419 data-dz-size></span><span data-action="remove"><a tabindex="0" class="glyph" href="#"
420 aria-label="close"><span class="glyphicon glyphicon-remove"
421 aria-hidden="true"></span></a></span><span class="ui-input-file-input-error-msg"
422 data-dz-error-msg></span></div>
423 <div class="ui-input-file-metadata" style="display: none;"><input id="id_3" type="hidden"
424 name="name_0[input_1][]" value="" />
425 <fieldset class="c-input" data-il-ui-component="text-field-input"
426 data-il-ui-input-name="name_0[input_2][]"><label for="id_4">text_input</label>
427 <div class="c-input__field"><input id="id_4" type="text" name="name_0[input_2][]"
428 class="c-field-text" /></div>
431 <div class="ui-input-file-input-progress-container">
432 <div class="ui-input-file-input-progress-indicator"></div>
437 <div class="ui-input-file-input-dropzone"><button class="btn btn-link" data-action="#"
438 id="id_5">select_files_from_computer</button><span class="ui-input-file-input-error-msg"
439 data-dz-error-msg></span></div>
440 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
447 $this->assertEquals($expected, $this->render($file_input));
452 return new I\Button\Factory();
457 return new I\Symbol\Factory(
Builds a Color from either hex- or rgb values.
Provides common functionality for UI tests.
Interface FileInfoResult.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.