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;
71 $html = str_replace(
" />",
"/>", $html);
72 return parent::brutallyTrimHTML($html);
90 public function getUploadURL():
string
95 public function getFileRemovalURL():
string
103 public function getExistingFileInfoURL():
string
111 public function getInfoForExistingFiles(array $file_ids): array
116 public function getInfoResult(
string $identifier): ?
FileInfoResult
118 if (
null !== $this->file && $identifier === $this->file->getFileIdentifier()) {
125 public function supportsChunkedUploads():
bool
135 $f = $this->getFieldFactory();
140 $this->assertInstanceOf(Field\File::class,
$text);
146 $f = $this->getFieldFactory();
149 $file_input =
$f->file($this->
getUploadHandler(), $label, $byline)->withNameFrom($this->name_source);
151 $expected = $this->getFormWrappedHtml(
155 <div class="ui-input-file">
156 <div class="ui-input-file-input-list">
158 <div class="ui-input-file-input">
159 <div class="ui-input-file-info"><span data-action="expand"></span><span
160 data-action="collapse"></span><span data-dz-name></span><span data-dz-size></span><span
161 data-action="remove"><button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button></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 type="button" class="btn btn-link" data-action="#" id="id_2">select_file_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->renderInsideContainer($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 <button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button>
229 <span class="ui-input-file-input-error-msg" data-dz-error-msg></span>
231 <div class="ui-input-file-metadata" style="display: none;">
232 <input id="id_1" type="hidden" name="name_0[input_0][]" value="test_file_id_1"/>
234 <div class="ui-input-file-input-progress-container">
235 <div class="ui-input-file-input-progress-indicator"></div>
239 <div class="ui-input-file-input">
240 <div class="ui-input-file-info"><span data-action="expand"></span><span
241 data-action="collapse"></span><span data-dz-name></span><span data-dz-size></span><span
242 data-action="remove"><button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button></span><span
243 class="ui-input-file-input-error-msg" data-dz-error-msg></span></div>
244 <div class="ui-input-file-metadata" style="display: none;"><input id="id_2" type="hidden"
245 name="name_0[input_0][]" value="" /></div>
246 <div class="ui-input-file-input-progress-container">
247 <div class="ui-input-file-input-progress-indicator"></div>
252 <div class="ui-input-file-input-dropzone">
253 <button type="button" class="btn btn-link" data-action="#" id="id_3">select_file_from_computer</button>
254 <span class="ui-input-file-input-error-msg" data-dz-error-msg></span>
256 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
263 $this->assertEquals($expected, $this->renderInsideContainer($file_input));
269 $factory = $this->getFieldFactory();
270 $label =
'file_input';
271 $metadata_input = $factory->text(
"text_input");
272 $file_input = $factory->file(
282 ])->withNameFrom($this->name_source);
284 $expected = $this->getFormWrappedHtml(
288 <div class="ui-input-file">
289 <div class="ui-input-file-input-list">
290 <div class="ui-input-file-input">
291 <div class="ui-input-file-info"><span data-action="expand"><button type="button" class="btn btn-link" aria-label="expand_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span></span></button></span><span data-action="collapse"><button type="button" class="btn btn-link" aria-label="collapse_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span></span></button></span><span data-dz-name></span><span
292 data-dz-size></span><span data-action="remove"><button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button></span><span class="ui-input-file-input-error-msg"
293 data-dz-error-msg></span></div>
294 <div class="ui-input-file-metadata" style="display: none;"><input id="id_1" type="hidden"
295 name="name_0[input_1][]" value="file_id" />
296 <fieldset class="c-input" data-il-ui-component="text-field-input"
297 data-il-ui-input-name="name_0[input_2][]"><label for="id_2">text_input</label>
298 <div class="c-input__field"><input id="id_2" type="text" name="name_0[input_2][]"
299 class="c-field-text" /></div>
302 <div class="ui-input-file-input-progress-container">
303 <div class="ui-input-file-input-progress-indicator"></div>
306 <div class="ui-input-file-input">
307 <div class="ui-input-file-info"><span data-action="expand"><button type="button" class="btn btn-link" aria-label="expand_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span></span></button></span><span data-action="collapse"><button type="button" class="btn btn-link" aria-label="collapse_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span></span></button></span><span data-dz-name></span><span
308 data-dz-size></span><span data-action="remove"><button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button></span><span class="ui-input-file-input-error-msg"
309 data-dz-error-msg></span></div>
310 <div class="ui-input-file-metadata" style="display: none;"><input id="id_3" type="hidden"
311 name="name_0[input_1][]" value="" />
312 <fieldset class="c-input" data-il-ui-component="text-field-input"
313 data-il-ui-input-name="name_0[input_2][]"><label for="id_4">text_input</label>
314 <div class="c-input__field"><input id="id_4" type="text" name="name_0[input_2][]"
315 class="c-field-text" /></div>
318 <div class="ui-input-file-input-progress-container">
319 <div class="ui-input-file-input-progress-indicator"></div>
324 <div class="ui-input-file-input-dropzone"><button type="button" class="btn btn-link" data-action="#"
325 id="id_5">select_file_from_computer</button><span class="ui-input-file-input-error-msg"
326 data-dz-error-msg></span></div>
327 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
334 $this->assertEquals($expected, $this->renderInsideContainer($file_input));
340 $test_file_id =
"test_file_id_1";
341 $test_file_name =
"test file name 1";
343 $test_file_info = $this->createMock(FileInfoResult::class);
344 $test_file_info->method(
'getFileIdentifier')->willReturn(
"test_file_id_1");
345 $test_file_info->method(
'getName')->willReturn(
"test file name 1");
346 $test_file_info->method(
'getSize')->willReturn(1000 * 1000 + 1);
348 $factory = $this->getFieldFactory();
349 $label =
'file_input';
350 $metadata_input = $factory->text(
"text_input");
351 $file_input = $factory->file(
361 ])->withNameFrom($this->name_source);
364 $expected = $this->getFormWrappedHtml(
368 <div class="ui-input-file">
369 <div class="ui-input-file-input-list">
370 <div class="ui-input-file-input">
371 <div class="ui-input-file-info"><span data-action="expand"><button type="button" class="btn btn-link" aria-label="expand_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span></span></button></span><span data-action="collapse"><button type="button" class="btn btn-link" aria-label="collapse_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span></span></button></span><span data-dz-name>test file name 1</span><span
372 data-dz-size>1 MB</span><span data-action="remove"><button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button></span><span class="ui-input-file-input-error-msg"
373 data-dz-error-msg></span></div>
374 <div class="ui-input-file-metadata" style="display: none;"><input id="id_1" type="hidden"
375 name="name_0[input_1][]" value="test_file_id_1" />
376 <fieldset class="c-input" data-il-ui-component="text-field-input"
377 data-il-ui-input-name="name_0[input_2][]"><label for="id_2">text_input</label>
378 <div class="c-input__field"><input id="id_2" type="text" value="test"
379 name="name_0[input_2][]" class="c-field-text" /></div>
382 <div class="ui-input-file-input-progress-container">
383 <div class="ui-input-file-input-progress-indicator"></div>
386 <div class="ui-input-file-input">
387 <div class="ui-input-file-info"><span data-action="expand"><button type="button" class="btn btn-link" aria-label="expand_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span></span></button></span><span data-action="collapse"><button type="button" class="btn btn-link" aria-label="collapse_content" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span></span></button></span><span data-dz-name></span><span
388 data-dz-size></span><span data-action="remove"><button type="button" class="btn btn-link" aria-label="close" data-action=""><span class="glyph" aria-hidden="true"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></span></button></span><span class="ui-input-file-input-error-msg"
389 data-dz-error-msg></span></div>
390 <div class="ui-input-file-metadata" style="display: none;"><input id="id_3" type="hidden"
391 name="name_0[input_1][]" value="" />
392 <fieldset class="c-input" data-il-ui-component="text-field-input"
393 data-il-ui-input-name="name_0[input_2][]"><label for="id_4">text_input</label>
394 <div class="c-input__field"><input id="id_4" type="text" name="name_0[input_2][]"
395 class="c-field-text" /></div>
398 <div class="ui-input-file-input-progress-container">
399 <div class="ui-input-file-input-progress-indicator"></div>
404 <div class="ui-input-file-input-dropzone"><button type="button" class="btn btn-link" data-action="#"
405 id="id_5">select_file_from_computer</button><span class="ui-input-file-input-error-msg"
406 data-dz-error-msg></span></div>
407 <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div>
414 $this->assertEquals($expected, $this->renderInsideContainer($file_input));
419 return new I\Button\Factory();
424 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
getFileIdentifierParameterName()
Provided by the UploadHandler both users of this trait implement.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.