Deployed f0743ff to 5.4 with MkDocs 1.1.2 and mike 1.0.0
[GitHub/WoltLab/woltlab.github.io.git] / 5.4 / php / api / form_builder / form_fields / index.html
1
2 <!doctype html>
3 <html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9
10
11
12 <link rel="icon" href="../../../../assets/default.favicon.ico">
13 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.2">
14
15
16
17 <title>Fields - WoltLab Suite Documentation</title>
18
19
20
21 <link rel="stylesheet" href="../../../../assets/stylesheets/main.6f955dcd.min.css">
22
23
24 <link rel="stylesheet" href="../../../../assets/stylesheets/palette.ef6f36e2.min.css">
25
26
27
28 <meta name="theme-color" content="#009485">
29
30
31
32
33
34
35
36
37
38 <link rel="stylesheet" href="../../../../stylesheets/extra.css">
39
40
41
42
43
44 </head>
45
46
47
48
49
50
51
52 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
53
54
55 <script>function __prefix(e){return new URL("../../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
56
57 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
58 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
59 <label class="md-overlay" for="__drawer"></label>
60 <div data-md-component="skip">
61
62
63 <a href="#form-builder-fields" class="md-skip">
64 Skip to content
65 </a>
66
67 </div>
68 <div data-md-component="announce">
69
70 <aside class="md-announce">
71 <div class="md-announce__inner md-grid md-typeset">
72
73 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
74
75 </div>
76 </aside>
77
78 </div>
79
80 <header class="md-header" data-md-component="header">
81 <nav class="md-header__inner md-grid" aria-label="Header">
82 <a href="../../../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
83
84 <img src="../../../../assets/logo.png" alt="logo">
85
86 </a>
87 <label class="md-header__button md-icon" for="__drawer">
88 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
89 </label>
90 <div class="md-header__title" data-md-component="header-title">
91 <div class="md-header__ellipsis">
92 <div class="md-header__topic">
93 <span class="md-ellipsis">
94 WoltLab Suite Documentation
95 </span>
96 </div>
97 <div class="md-header__topic" data-md-component="header-topic">
98 <span class="md-ellipsis">
99
100 Fields
101
102 </span>
103 </div>
104 </div>
105 </div>
106
107
108
109 <label class="md-header__button md-icon" for="__search">
110 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
111 </label>
112
113 <div class="md-search" data-md-component="search" role="dialog">
114 <label class="md-search__overlay" for="__search"></label>
115 <div class="md-search__inner" role="search">
116 <form class="md-search__form" name="search">
117 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
118 <label class="md-search__icon md-icon" for="__search">
119 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
120 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
121 </label>
122 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
123 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
124 </button>
125 </form>
126 <div class="md-search__output">
127 <div class="md-search__scrollwrap" data-md-scrollfix>
128 <div class="md-search-result" data-md-component="search-result">
129 <div class="md-search-result__meta">
130 Initializing search
131 </div>
132 <ol class="md-search-result__list"></ol>
133 </div>
134 </div>
135 </div>
136 </div>
137 </div>
138
139
140 <div class="md-header__source">
141
142 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
143 <div class="md-source__icon md-icon">
144
145 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
146 </div>
147 <div class="md-source__repository">
148 GitHub
149 </div>
150 </a>
151 </div>
152
153 </nav>
154 </header>
155
156 <div class="md-container" data-md-component="container">
157
158
159
160
161 <main class="md-main" data-md-component="main">
162 <div class="md-main__inner md-grid">
163
164
165
166 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
167 <div class="md-sidebar__scrollwrap">
168 <div class="md-sidebar__inner">
169
170
171
172 <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
173 <label class="md-nav__title" for="__drawer">
174 <a href="../../../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
175
176 <img src="../../../../assets/logo.png" alt="logo">
177
178 </a>
179 WoltLab Suite Documentation
180 </label>
181
182 <div class="md-nav__source">
183
184 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
185 <div class="md-source__icon md-icon">
186
187 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
188 </div>
189 <div class="md-source__repository">
190 GitHub
191 </div>
192 </a>
193 </div>
194
195 <ul class="md-nav__list" data-md-scrollfix>
196
197
198
199
200
201
202
203
204 <li class="md-nav__item">
205 <a href="../../../../getting-started/" class="md-nav__link">
206 Getting Started
207 </a>
208 </li>
209
210
211
212
213
214
215
216
217
218
219
220
221
222 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
223
224
225 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
226
227 <label class="md-nav__link" for="__nav_2">
228 PHP API
229 <span class="md-nav__icon md-icon"></span>
230 </label>
231 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
232 <label class="md-nav__title" for="__nav_2">
233 <span class="md-nav__icon md-icon"></span>
234 PHP API
235 </label>
236 <ul class="md-nav__list" data-md-scrollfix>
237
238
239
240
241
242 <li class="md-nav__item">
243 <a href="../../../pages/" class="md-nav__link">
244 Pages
245 </a>
246 </li>
247
248
249
250
251
252
253
254 <li class="md-nav__item">
255 <a href="../../../database-objects/" class="md-nav__link">
256 Database Objects
257 </a>
258 </li>
259
260
261
262
263
264
265
266 <li class="md-nav__item">
267 <a href="../../../database-access/" class="md-nav__link">
268 Database Access
269 </a>
270 </li>
271
272
273
274
275
276
277
278 <li class="md-nav__item">
279 <a href="../../../exceptions/" class="md-nav__link">
280 Exceptions
281 </a>
282 </li>
283
284
285
286
287
288
289
290
291
292
293 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
294
295
296 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" checked>
297
298 <label class="md-nav__link" for="__nav_2_5">
299 API
300 <span class="md-nav__icon md-icon"></span>
301 </label>
302 <nav class="md-nav" aria-label="API" data-md-level="2">
303 <label class="md-nav__title" for="__nav_2_5">
304 <span class="md-nav__icon md-icon"></span>
305 API
306 </label>
307 <ul class="md-nav__list" data-md-scrollfix>
308
309
310
311
312
313
314 <li class="md-nav__item md-nav__item--nested">
315
316
317 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_1" type="checkbox" id="__nav_2_5_1" >
318
319 <label class="md-nav__link" for="__nav_2_5_1">
320 Caches
321 <span class="md-nav__icon md-icon"></span>
322 </label>
323 <nav class="md-nav" aria-label="Caches" data-md-level="3">
324 <label class="md-nav__title" for="__nav_2_5_1">
325 <span class="md-nav__icon md-icon"></span>
326 Caches
327 </label>
328 <ul class="md-nav__list" data-md-scrollfix>
329
330
331
332
333
334 <li class="md-nav__item">
335 <a href="../../caches/" class="md-nav__link">
336 Overview
337 </a>
338 </li>
339
340
341
342
343
344
345
346 <li class="md-nav__item">
347 <a href="../../caches_persistent-caches/" class="md-nav__link">
348 Persistent Caches
349 </a>
350 </li>
351
352
353
354
355
356
357
358 <li class="md-nav__item">
359 <a href="../../caches_runtime-caches/" class="md-nav__link">
360 Runtime Caches
361 </a>
362 </li>
363
364
365
366 </ul>
367 </nav>
368 </li>
369
370
371
372
373
374
375
376 <li class="md-nav__item">
377 <a href="../../comments/" class="md-nav__link">
378 Comments
379 </a>
380 </li>
381
382
383
384
385
386
387
388 <li class="md-nav__item">
389 <a href="../../cronjobs/" class="md-nav__link">
390 Cronjobs
391 </a>
392 </li>
393
394
395
396
397
398
399
400 <li class="md-nav__item">
401 <a href="../../events/" class="md-nav__link">
402 Events
403 </a>
404 </li>
405
406
407
408
409
410
411
412
413
414
415 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
416
417
418 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" checked>
419
420 <label class="md-nav__link" for="__nav_2_5_5">
421 Form Builder
422 <span class="md-nav__icon md-icon"></span>
423 </label>
424 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
425 <label class="md-nav__title" for="__nav_2_5_5">
426 <span class="md-nav__icon md-icon"></span>
427 Form Builder
428 </label>
429 <ul class="md-nav__list" data-md-scrollfix>
430
431
432
433
434
435 <li class="md-nav__item">
436 <a href="../overview/" class="md-nav__link">
437 Overview
438 </a>
439 </li>
440
441
442
443
444
445
446
447 <li class="md-nav__item">
448 <a href="../structure/" class="md-nav__link">
449 Structure
450 </a>
451 </li>
452
453
454
455
456
457
458
459
460
461 <li class="md-nav__item md-nav__item--active">
462
463 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
464
465
466
467
468
469 <label class="md-nav__link md-nav__link--active" for="__toc">
470 Fields
471 <span class="md-nav__icon md-icon"></span>
472 </label>
473
474 <a href="./" class="md-nav__link md-nav__link--active">
475 Fields
476 </a>
477
478
479 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
480
481
482
483
484
485
486 <label class="md-nav__title" for="__toc">
487 <span class="md-nav__icon md-icon"></span>
488 Table of contents
489 </label>
490 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
491
492 <li class="md-nav__item">
493 <a href="#abstract-form-fields" class="md-nav__link">
494 Abstract Form Fields
495 </a>
496
497 <nav class="md-nav" aria-label="Abstract Form Fields">
498 <ul class="md-nav__list">
499
500 <li class="md-nav__item">
501 <a href="#abstractformfield" class="md-nav__link">
502 AbstractFormField
503 </a>
504
505 </li>
506
507 <li class="md-nav__item">
508 <a href="#abstractnumericformfield" class="md-nav__link">
509 AbstractNumericFormField
510 </a>
511
512 </li>
513
514 </ul>
515 </nav>
516
517 </li>
518
519 <li class="md-nav__item">
520 <a href="#general-form-fields" class="md-nav__link">
521 General Form Fields
522 </a>
523
524 <nav class="md-nav" aria-label="General Form Fields">
525 <ul class="md-nav__list">
526
527 <li class="md-nav__item">
528 <a href="#booleanformfield" class="md-nav__link">
529 BooleanFormField
530 </a>
531
532 </li>
533
534 <li class="md-nav__item">
535 <a href="#checkboxformfield" class="md-nav__link">
536 CheckboxFormField
537 </a>
538
539 </li>
540
541 <li class="md-nav__item">
542 <a href="#classnameformfield" class="md-nav__link">
543 ClassNameFormField
544 </a>
545
546 </li>
547
548 <li class="md-nav__item">
549 <a href="#dateformfield" class="md-nav__link">
550 DateFormField
551 </a>
552
553 </li>
554
555 <li class="md-nav__item">
556 <a href="#descriptionformfield" class="md-nav__link">
557 DescriptionFormField
558 </a>
559
560 </li>
561
562 <li class="md-nav__item">
563 <a href="#emailformfield" class="md-nav__link">
564 EmailFormField
565 </a>
566
567 </li>
568
569 <li class="md-nav__item">
570 <a href="#floatformfield" class="md-nav__link">
571 FloatFormField
572 </a>
573
574 </li>
575
576 <li class="md-nav__item">
577 <a href="#iconformfield" class="md-nav__link">
578 IconFormField
579 </a>
580
581 </li>
582
583 <li class="md-nav__item">
584 <a href="#integerformfield" class="md-nav__link">
585 IntegerFormField
586 </a>
587
588 </li>
589
590 <li class="md-nav__item">
591 <a href="#isdisabledformfield" class="md-nav__link">
592 IsDisabledFormField
593 </a>
594
595 </li>
596
597 <li class="md-nav__item">
598 <a href="#itemlistformfield" class="md-nav__link">
599 ItemListFormField
600 </a>
601
602 </li>
603
604 <li class="md-nav__item">
605 <a href="#multilinetextformfield" class="md-nav__link">
606 MultilineTextFormField
607 </a>
608
609 </li>
610
611 <li class="md-nav__item">
612 <a href="#multipleselectionformfield" class="md-nav__link">
613 MultipleSelectionFormField
614 </a>
615
616 </li>
617
618 <li class="md-nav__item">
619 <a href="#radiobuttonformfield" class="md-nav__link">
620 RadioButtonFormField
621 </a>
622
623 </li>
624
625 <li class="md-nav__item">
626 <a href="#ratingformfield" class="md-nav__link">
627 RatingFormField
628 </a>
629
630 </li>
631
632 <li class="md-nav__item">
633 <a href="#showorderformfield" class="md-nav__link">
634 ShowOrderFormField
635 </a>
636
637 </li>
638
639 <li class="md-nav__item">
640 <a href="#singleselectionformfield" class="md-nav__link">
641 SingleSelectionFormField
642 </a>
643
644 </li>
645
646 <li class="md-nav__item">
647 <a href="#sortorderformfield" class="md-nav__link">
648 SortOrderFormField
649 </a>
650
651 </li>
652
653 <li class="md-nav__item">
654 <a href="#textformfield" class="md-nav__link">
655 TextFormField
656 </a>
657
658 </li>
659
660 <li class="md-nav__item">
661 <a href="#titleformfield" class="md-nav__link">
662 TitleFormField
663 </a>
664
665 </li>
666
667 <li class="md-nav__item">
668 <a href="#urlformfield" class="md-nav__link">
669 UrlFormField
670 </a>
671
672 </li>
673
674 </ul>
675 </nav>
676
677 </li>
678
679 <li class="md-nav__item">
680 <a href="#specific-fields" class="md-nav__link">
681 Specific Fields
682 </a>
683
684 <nav class="md-nav" aria-label="Specific Fields">
685 <ul class="md-nav__list">
686
687 <li class="md-nav__item">
688 <a href="#aclformfield" class="md-nav__link">
689 AclFormField
690 </a>
691
692 </li>
693
694 <li class="md-nav__item">
695 <a href="#buttonformfield" class="md-nav__link">
696 ButtonFormField
697 </a>
698
699 </li>
700
701 <li class="md-nav__item">
702 <a href="#captchaformfield" class="md-nav__link">
703 CaptchaFormField
704 </a>
705
706 </li>
707
708 <li class="md-nav__item">
709 <a href="#contentlanguageformfield" class="md-nav__link">
710 ContentLanguageFormField
711 </a>
712
713 </li>
714
715 <li class="md-nav__item">
716 <a href="#labelformfield" class="md-nav__link">
717 LabelFormField
718 </a>
719
720 </li>
721
722 <li class="md-nav__item">
723 <a href="#optionformfield" class="md-nav__link">
724 OptionFormField
725 </a>
726
727 </li>
728
729 <li class="md-nav__item">
730 <a href="#simpleaclformfield" class="md-nav__link">
731 SimpleAclFormField
732 </a>
733
734 </li>
735
736 <li class="md-nav__item">
737 <a href="#singlemediaselectionformfield" class="md-nav__link">
738 SingleMediaSelectionFormField
739 </a>
740
741 </li>
742
743 <li class="md-nav__item">
744 <a href="#tagformfield" class="md-nav__link">
745 TagFormField
746 </a>
747
748 </li>
749
750 <li class="md-nav__item">
751 <a href="#uploadformfield" class="md-nav__link">
752 UploadFormField
753 </a>
754
755 <nav class="md-nav" aria-label="UploadFormField">
756 <ul class="md-nav__list">
757
758 <li class="md-nav__item">
759 <a href="#provide-value-from-database-object" class="md-nav__link">
760 Provide value from database object
761 </a>
762
763 </li>
764
765 <li class="md-nav__item">
766 <a href="#process-files" class="md-nav__link">
767 Process files
768 </a>
769
770 </li>
771
772 </ul>
773 </nav>
774
775 </li>
776
777 <li class="md-nav__item">
778 <a href="#userformfield" class="md-nav__link">
779 UserFormField
780 </a>
781
782 </li>
783
784 <li class="md-nav__item">
785 <a href="#userpasswordfield" class="md-nav__link">
786 UserPasswordField
787 </a>
788
789 </li>
790
791 <li class="md-nav__item">
792 <a href="#usergroupoptionformfield" class="md-nav__link">
793 UserGroupOptionFormField
794 </a>
795
796 </li>
797
798 <li class="md-nav__item">
799 <a href="#usernameformfield" class="md-nav__link">
800 UsernameFormField
801 </a>
802
803 </li>
804
805 </ul>
806 </nav>
807
808 </li>
809
810 <li class="md-nav__item">
811 <a href="#wysiwyg-form-container" class="md-nav__link">
812 Wysiwyg form container
813 </a>
814
815 <nav class="md-nav" aria-label="Wysiwyg form container">
816 <ul class="md-nav__list">
817
818 <li class="md-nav__item">
819 <a href="#wysiwygattachmentformfield" class="md-nav__link">
820 WysiwygAttachmentFormField
821 </a>
822
823 </li>
824
825 <li class="md-nav__item">
826 <a href="#wysiwygpollformcontainer" class="md-nav__link">
827 WysiwygPollFormContainer
828 </a>
829
830 </li>
831
832 <li class="md-nav__item">
833 <a href="#wysiwygsmileyformcontainer" class="md-nav__link">
834 WysiwygSmileyFormContainer
835 </a>
836
837 <nav class="md-nav" aria-label="WysiwygSmileyFormContainer">
838 <ul class="md-nav__list">
839
840 <li class="md-nav__item">
841 <a href="#wysiwygsmileyformnode" class="md-nav__link">
842 WysiwygSmileyFormNode
843 </a>
844
845 </li>
846
847 </ul>
848 </nav>
849
850 </li>
851
852 <li class="md-nav__item">
853 <a href="#example" class="md-nav__link">
854 Example
855 </a>
856
857 </li>
858
859 <li class="md-nav__item">
860 <a href="#wysiwygformfield" class="md-nav__link">
861 WysiwygFormField
862 </a>
863
864 </li>
865
866 <li class="md-nav__item">
867 <a href="#twysiwygformnode" class="md-nav__link">
868 TWysiwygFormNode
869 </a>
870
871 </li>
872
873 </ul>
874 </nav>
875
876 </li>
877
878 <li class="md-nav__item">
879 <a href="#single-use-form-fields" class="md-nav__link">
880 Single-Use Form Fields
881 </a>
882
883 <nav class="md-nav" aria-label="Single-Use Form Fields">
884 <ul class="md-nav__list">
885
886 <li class="md-nav__item">
887 <a href="#bbcodeattributesformfield" class="md-nav__link">
888 BBCodeAttributesFormField
889 </a>
890
891 </li>
892
893 <li class="md-nav__item">
894 <a href="#devtoolsprojectexcludedpackagesformfield" class="md-nav__link">
895 DevtoolsProjectExcludedPackagesFormField
896 </a>
897
898 </li>
899
900 <li class="md-nav__item">
901 <a href="#devtoolsprojectinstructionsformfield" class="md-nav__link">
902 DevtoolsProjectInstructionsFormField
903 </a>
904
905 </li>
906
907 <li class="md-nav__item">
908 <a href="#devtoolsprojectoptionalpackagesformfield" class="md-nav__link">
909 DevtoolsProjectOptionalPackagesFormField
910 </a>
911
912 </li>
913
914 <li class="md-nav__item">
915 <a href="#devtoolsprojectrequiredpackagesformfield" class="md-nav__link">
916 DevtoolsProjectRequiredPackagesFormField
917 </a>
918
919 </li>
920
921 </ul>
922 </nav>
923
924 </li>
925
926 </ul>
927
928 </nav>
929
930 </li>
931
932
933
934
935
936
937
938 <li class="md-nav__item">
939 <a href="../validation_data/" class="md-nav__link">
940 Validation and Data
941 </a>
942 </li>
943
944
945
946
947
948
949
950 <li class="md-nav__item">
951 <a href="../dependencies/" class="md-nav__link">
952 Dependencies
953 </a>
954 </li>
955
956
957
958 </ul>
959 </nav>
960 </li>
961
962
963
964
965
966
967
968 <li class="md-nav__item">
969 <a href="../../package_installation_plugins/" class="md-nav__link">
970 Package Installation Plugins
971 </a>
972 </li>
973
974
975
976
977
978
979
980 <li class="md-nav__item">
981 <a href="../../user_activity_points/" class="md-nav__link">
982 User Activity Points
983 </a>
984 </li>
985
986
987
988
989
990
991
992 <li class="md-nav__item">
993 <a href="../../user_notifications/" class="md-nav__link">
994 User Notifications
995 </a>
996 </li>
997
998
999
1000
1001
1002
1003
1004 <li class="md-nav__item">
1005 <a href="../../sitemaps/" class="md-nav__link">
1006 Sitemaps
1007 </a>
1008 </li>
1009
1010
1011
1012 </ul>
1013 </nav>
1014 </li>
1015
1016
1017
1018
1019
1020
1021
1022 <li class="md-nav__item">
1023 <a href="../../../code-style/" class="md-nav__link">
1024 Code Style
1025 </a>
1026 </li>
1027
1028
1029
1030
1031
1032
1033
1034 <li class="md-nav__item">
1035 <a href="../../../apps/" class="md-nav__link">
1036 Apps
1037 </a>
1038 </li>
1039
1040
1041
1042
1043
1044
1045
1046 <li class="md-nav__item">
1047 <a href="../../../gdpr/" class="md-nav__link">
1048 GDPR
1049 </a>
1050 </li>
1051
1052
1053
1054 </ul>
1055 </nav>
1056 </li>
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068 <li class="md-nav__item md-nav__item--nested">
1069
1070
1071 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
1072
1073 <label class="md-nav__link" for="__nav_3">
1074 Languages, Templates & CSS
1075 <span class="md-nav__icon md-icon"></span>
1076 </label>
1077 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
1078 <label class="md-nav__title" for="__nav_3">
1079 <span class="md-nav__icon md-icon"></span>
1080 Languages, Templates & CSS
1081 </label>
1082 <ul class="md-nav__list" data-md-scrollfix>
1083
1084
1085
1086
1087
1088 <li class="md-nav__item">
1089 <a href="../../../../view/languages/" class="md-nav__link">
1090 Languages
1091 </a>
1092 </li>
1093
1094
1095
1096
1097
1098
1099
1100 <li class="md-nav__item">
1101 <a href="../../../../view/templates/" class="md-nav__link">
1102 Templates
1103 </a>
1104 </li>
1105
1106
1107
1108
1109
1110
1111
1112 <li class="md-nav__item">
1113 <a href="../../../../view/template-plugins/" class="md-nav__link">
1114 Template Plugins
1115 </a>
1116 </li>
1117
1118
1119
1120
1121
1122
1123
1124 <li class="md-nav__item">
1125 <a href="../../../../view/css/" class="md-nav__link">
1126 CSS
1127 </a>
1128 </li>
1129
1130
1131
1132 </ul>
1133 </nav>
1134 </li>
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146 <li class="md-nav__item md-nav__item--nested">
1147
1148
1149 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
1150
1151 <label class="md-nav__link" for="__nav_4">
1152 TypeScript and JavaScript API
1153 <span class="md-nav__icon md-icon"></span>
1154 </label>
1155 <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1">
1156 <label class="md-nav__title" for="__nav_4">
1157 <span class="md-nav__icon md-icon"></span>
1158 TypeScript and JavaScript API
1159 </label>
1160 <ul class="md-nav__list" data-md-scrollfix>
1161
1162
1163
1164
1165
1166 <li class="md-nav__item">
1167 <a href="../../../../javascript/general-usage/" class="md-nav__link">
1168 General Usage
1169 </a>
1170 </li>
1171
1172
1173
1174
1175
1176
1177
1178 <li class="md-nav__item">
1179 <a href="../../../../javascript/typescript/" class="md-nav__link">
1180 TypeScript
1181 </a>
1182 </li>
1183
1184
1185
1186
1187
1188
1189
1190
1191 <li class="md-nav__item md-nav__item--nested">
1192
1193
1194 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
1195
1196 <label class="md-nav__link" for="__nav_4_3">
1197 New API
1198 <span class="md-nav__icon md-icon"></span>
1199 </label>
1200 <nav class="md-nav" aria-label="New API" data-md-level="2">
1201 <label class="md-nav__title" for="__nav_4_3">
1202 <span class="md-nav__icon md-icon"></span>
1203 New API
1204 </label>
1205 <ul class="md-nav__list" data-md-scrollfix>
1206
1207
1208
1209
1210
1211 <li class="md-nav__item">
1212 <a href="../../../../javascript/new-api_writing-a-module/" class="md-nav__link">
1213 Writing a module
1214 </a>
1215 </li>
1216
1217
1218
1219
1220
1221
1222
1223 <li class="md-nav__item">
1224 <a href="../../../../javascript/new-api_data-structures/" class="md-nav__link">
1225 Data Structures
1226 </a>
1227 </li>
1228
1229
1230
1231
1232
1233
1234
1235 <li class="md-nav__item">
1236 <a href="../../../../javascript/new-api_core/" class="md-nav__link">
1237 Core Functions
1238 </a>
1239 </li>
1240
1241
1242
1243
1244
1245
1246
1247 <li class="md-nav__item">
1248 <a href="../../../../javascript/new-api_dom/" class="md-nav__link">
1249 DOM
1250 </a>
1251 </li>
1252
1253
1254
1255
1256
1257
1258
1259 <li class="md-nav__item">
1260 <a href="../../../../javascript/new-api_events/" class="md-nav__link">
1261 Event Handling
1262 </a>
1263 </li>
1264
1265
1266
1267
1268
1269
1270
1271 <li class="md-nav__item">
1272 <a href="../../../../javascript/new-api_ajax/" class="md-nav__link">
1273 Ajax
1274 </a>
1275 </li>
1276
1277
1278
1279
1280
1281
1282
1283 <li class="md-nav__item">
1284 <a href="../../../../javascript/new-api_dialogs/" class="md-nav__link">
1285 Dialogs
1286 </a>
1287 </li>
1288
1289
1290
1291
1292
1293
1294
1295 <li class="md-nav__item">
1296 <a href="../../../../javascript/new-api_browser/" class="md-nav__link">
1297 Browser and Screen Sizes
1298 </a>
1299 </li>
1300
1301
1302
1303
1304
1305
1306
1307 <li class="md-nav__item">
1308 <a href="../../../../javascript/new-api_ui/" class="md-nav__link">
1309 User Interface
1310 </a>
1311 </li>
1312
1313
1314
1315 </ul>
1316 </nav>
1317 </li>
1318
1319
1320
1321
1322
1323
1324
1325 <li class="md-nav__item">
1326 <a href="../../../../javascript/legacy-api/" class="md-nav__link">
1327 Legacy API
1328 </a>
1329 </li>
1330
1331
1332
1333
1334
1335
1336
1337 <li class="md-nav__item">
1338 <a href="../../../../javascript/helper-functions/" class="md-nav__link">
1339 Helper Functions
1340 </a>
1341 </li>
1342
1343
1344
1345
1346
1347
1348
1349 <li class="md-nav__item">
1350 <a href="../../../../javascript/code-snippets/" class="md-nav__link">
1351 Code Snippets
1352 </a>
1353 </li>
1354
1355
1356
1357 </ul>
1358 </nav>
1359 </li>
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371 <li class="md-nav__item md-nav__item--nested">
1372
1373
1374 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
1375
1376 <label class="md-nav__link" for="__nav_5">
1377 Package Components
1378 <span class="md-nav__icon md-icon"></span>
1379 </label>
1380 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
1381 <label class="md-nav__title" for="__nav_5">
1382 <span class="md-nav__icon md-icon"></span>
1383 Package Components
1384 </label>
1385 <ul class="md-nav__list" data-md-scrollfix>
1386
1387
1388
1389
1390
1391 <li class="md-nav__item">
1392 <a href="../../../../package/package-xml/" class="md-nav__link">
1393 package.xml
1394 </a>
1395 </li>
1396
1397
1398
1399
1400
1401
1402
1403
1404 <li class="md-nav__item md-nav__item--nested">
1405
1406
1407 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
1408
1409 <label class="md-nav__link" for="__nav_5_2">
1410 PIPs
1411 <span class="md-nav__icon md-icon"></span>
1412 </label>
1413 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
1414 <label class="md-nav__title" for="__nav_5_2">
1415 <span class="md-nav__icon md-icon"></span>
1416 PIPs
1417 </label>
1418 <ul class="md-nav__list" data-md-scrollfix>
1419
1420
1421
1422
1423
1424 <li class="md-nav__item">
1425 <a href="../../../../package/pip/" class="md-nav__link">
1426 Overview
1427 </a>
1428 </li>
1429
1430
1431
1432
1433
1434
1435
1436 <li class="md-nav__item">
1437 <a href="../../../../package/pip/acl-option/" class="md-nav__link">
1438 aclOption
1439 </a>
1440 </li>
1441
1442
1443
1444
1445
1446
1447
1448 <li class="md-nav__item">
1449 <a href="../../../../package/pip/acp-menu/" class="md-nav__link">
1450 acpMenu
1451 </a>
1452 </li>
1453
1454
1455
1456
1457
1458
1459
1460 <li class="md-nav__item">
1461 <a href="../../../../package/pip/acp-search-provider/" class="md-nav__link">
1462 acpSearchProvider
1463 </a>
1464 </li>
1465
1466
1467
1468
1469
1470
1471
1472 <li class="md-nav__item">
1473 <a href="../../../../package/pip/acp-template/" class="md-nav__link">
1474 acpTemplate
1475 </a>
1476 </li>
1477
1478
1479
1480
1481
1482
1483
1484 <li class="md-nav__item">
1485 <a href="../../../../package/pip/bbcode/" class="md-nav__link">
1486 bbcode
1487 </a>
1488 </li>
1489
1490
1491
1492
1493
1494
1495
1496 <li class="md-nav__item">
1497 <a href="../../../../package/pip/box/" class="md-nav__link">
1498 box
1499 </a>
1500 </li>
1501
1502
1503
1504
1505
1506
1507
1508 <li class="md-nav__item">
1509 <a href="../../../../package/pip/clipboard-action/" class="md-nav__link">
1510 clipboardAction
1511 </a>
1512 </li>
1513
1514
1515
1516
1517
1518
1519
1520 <li class="md-nav__item">
1521 <a href="../../../../package/pip/core-object/" class="md-nav__link">
1522 coreObject
1523 </a>
1524 </li>
1525
1526
1527
1528
1529
1530
1531
1532 <li class="md-nav__item">
1533 <a href="../../../../package/pip/cronjob/" class="md-nav__link">
1534 cronjob
1535 </a>
1536 </li>
1537
1538
1539
1540
1541
1542
1543
1544 <li class="md-nav__item">
1545 <a href="../../../../package/pip/database/" class="md-nav__link">
1546 database
1547 </a>
1548 </li>
1549
1550
1551
1552
1553
1554
1555
1556 <li class="md-nav__item">
1557 <a href="../../../../package/pip/event-listener/" class="md-nav__link">
1558 eventListener
1559 </a>
1560 </li>
1561
1562
1563
1564
1565
1566
1567
1568 <li class="md-nav__item">
1569 <a href="../../../../package/pip/file/" class="md-nav__link">
1570 file
1571 </a>
1572 </li>
1573
1574
1575
1576
1577
1578
1579
1580 <li class="md-nav__item">
1581 <a href="../../../../package/pip/language/" class="md-nav__link">
1582 language
1583 </a>
1584 </li>
1585
1586
1587
1588
1589
1590
1591
1592 <li class="md-nav__item">
1593 <a href="../../../../package/pip/media-provider/" class="md-nav__link">
1594 mediaProvider
1595 </a>
1596 </li>
1597
1598
1599
1600
1601
1602
1603
1604 <li class="md-nav__item">
1605 <a href="../../../../package/pip/menu/" class="md-nav__link">
1606 menu
1607 </a>
1608 </li>
1609
1610
1611
1612
1613
1614
1615
1616 <li class="md-nav__item">
1617 <a href="../../../../package/pip/menu-item/" class="md-nav__link">
1618 menuItem
1619 </a>
1620 </li>
1621
1622
1623
1624
1625
1626
1627
1628 <li class="md-nav__item">
1629 <a href="../../../../package/pip/object-type/" class="md-nav__link">
1630 objectType
1631 </a>
1632 </li>
1633
1634
1635
1636
1637
1638
1639
1640 <li class="md-nav__item">
1641 <a href="../../../../package/pip/object-type-definition/" class="md-nav__link">
1642 objectTypeDefinition
1643 </a>
1644 </li>
1645
1646
1647
1648
1649
1650
1651
1652 <li class="md-nav__item">
1653 <a href="../../../../package/pip/option/" class="md-nav__link">
1654 option
1655 </a>
1656 </li>
1657
1658
1659
1660
1661
1662
1663
1664 <li class="md-nav__item">
1665 <a href="../../../../package/pip/page/" class="md-nav__link">
1666 page
1667 </a>
1668 </li>
1669
1670
1671
1672
1673
1674
1675
1676 <li class="md-nav__item">
1677 <a href="../../../../package/pip/pip/" class="md-nav__link">
1678 pip
1679 </a>
1680 </li>
1681
1682
1683
1684
1685
1686
1687
1688 <li class="md-nav__item">
1689 <a href="../../../../package/pip/script/" class="md-nav__link">
1690 script
1691 </a>
1692 </li>
1693
1694
1695
1696
1697
1698
1699
1700 <li class="md-nav__item">
1701 <a href="../../../../package/pip/smiley/" class="md-nav__link">
1702 smiley
1703 </a>
1704 </li>
1705
1706
1707
1708
1709
1710
1711
1712 <li class="md-nav__item">
1713 <a href="../../../../package/pip/sql/" class="md-nav__link">
1714 sql
1715 </a>
1716 </li>
1717
1718
1719
1720
1721
1722
1723
1724 <li class="md-nav__item">
1725 <a href="../../../../package/pip/style/" class="md-nav__link">
1726 style
1727 </a>
1728 </li>
1729
1730
1731
1732
1733
1734
1735
1736 <li class="md-nav__item">
1737 <a href="../../../../package/pip/template/" class="md-nav__link">
1738 template
1739 </a>
1740 </li>
1741
1742
1743
1744
1745
1746
1747
1748 <li class="md-nav__item">
1749 <a href="../../../../package/pip/template-listener/" class="md-nav__link">
1750 templateListener
1751 </a>
1752 </li>
1753
1754
1755
1756
1757
1758
1759
1760 <li class="md-nav__item">
1761 <a href="../../../../package/pip/user-group-option/" class="md-nav__link">
1762 userGroupOption
1763 </a>
1764 </li>
1765
1766
1767
1768
1769
1770
1771
1772 <li class="md-nav__item">
1773 <a href="../../../../package/pip/user-menu/" class="md-nav__link">
1774 userMenu
1775 </a>
1776 </li>
1777
1778
1779
1780
1781
1782
1783
1784 <li class="md-nav__item">
1785 <a href="../../../../package/pip/user-notification-event/" class="md-nav__link">
1786 userNotificationEvent
1787 </a>
1788 </li>
1789
1790
1791
1792
1793
1794
1795
1796 <li class="md-nav__item">
1797 <a href="../../../../package/pip/user-option/" class="md-nav__link">
1798 userOption
1799 </a>
1800 </li>
1801
1802
1803
1804
1805
1806
1807
1808 <li class="md-nav__item">
1809 <a href="../../../../package/pip/user-profile-menu/" class="md-nav__link">
1810 userProfileMenu
1811 </a>
1812 </li>
1813
1814
1815
1816 </ul>
1817 </nav>
1818 </li>
1819
1820
1821
1822
1823
1824
1825
1826 <li class="md-nav__item">
1827 <a href="../../../../package/database-php-api/" class="md-nav__link">
1828 Database PHP API
1829 </a>
1830 </li>
1831
1832
1833
1834 </ul>
1835 </nav>
1836 </li>
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848 <li class="md-nav__item md-nav__item--nested">
1849
1850
1851 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1852
1853 <label class="md-nav__link" for="__nav_6">
1854 Migration
1855 <span class="md-nav__icon md-icon"></span>
1856 </label>
1857 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1858 <label class="md-nav__title" for="__nav_6">
1859 <span class="md-nav__icon md-icon"></span>
1860 Migration
1861 </label>
1862 <ul class="md-nav__list" data-md-scrollfix>
1863
1864
1865
1866
1867
1868
1869 <li class="md-nav__item md-nav__item--nested">
1870
1871
1872 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1873
1874 <label class="md-nav__link" for="__nav_6_1">
1875 Migrating from WSC 5.3
1876 <span class="md-nav__icon md-icon"></span>
1877 </label>
1878 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1879 <label class="md-nav__title" for="__nav_6_1">
1880 <span class="md-nav__icon md-icon"></span>
1881 Migrating from WSC 5.3
1882 </label>
1883 <ul class="md-nav__list" data-md-scrollfix>
1884
1885
1886
1887
1888
1889 <li class="md-nav__item">
1890 <a href="../../../../migration/wsc53/php/" class="md-nav__link">
1891 PHP API
1892 </a>
1893 </li>
1894
1895
1896
1897
1898
1899
1900
1901 <li class="md-nav__item">
1902 <a href="../../../../migration/wsc53/session/" class="md-nav__link">
1903 Session Handling and Authentication
1904 </a>
1905 </li>
1906
1907
1908
1909
1910
1911
1912
1913 <li class="md-nav__item">
1914 <a href="../../../../migration/wsc53/javascript/" class="md-nav__link">
1915 TypeScript and JavaScript
1916 </a>
1917 </li>
1918
1919
1920
1921
1922
1923
1924
1925 <li class="md-nav__item">
1926 <a href="../../../../migration/wsc53/templates/" class="md-nav__link">
1927 Templates
1928 </a>
1929 </li>
1930
1931
1932
1933
1934
1935
1936
1937 <li class="md-nav__item">
1938 <a href="../../../../migration/wsc53/libraries/" class="md-nav__link">
1939 Third Party Libraries
1940 </a>
1941 </li>
1942
1943
1944
1945 </ul>
1946 </nav>
1947 </li>
1948
1949
1950
1951
1952
1953
1954
1955
1956 <li class="md-nav__item md-nav__item--nested">
1957
1958
1959 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1960
1961 <label class="md-nav__link" for="__nav_6_2">
1962 Migrating from WSC 5.2
1963 <span class="md-nav__icon md-icon"></span>
1964 </label>
1965 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1966 <label class="md-nav__title" for="__nav_6_2">
1967 <span class="md-nav__icon md-icon"></span>
1968 Migrating from WSC 5.2
1969 </label>
1970 <ul class="md-nav__list" data-md-scrollfix>
1971
1972
1973
1974
1975
1976 <li class="md-nav__item">
1977 <a href="../../../../migration/wsc52/php/" class="md-nav__link">
1978 PHP API
1979 </a>
1980 </li>
1981
1982
1983
1984
1985
1986
1987
1988 <li class="md-nav__item">
1989 <a href="../../../../migration/wsc52/templates/" class="md-nav__link">
1990 Templates and Languages
1991 </a>
1992 </li>
1993
1994
1995
1996
1997
1998
1999
2000 <li class="md-nav__item">
2001 <a href="../../../../migration/wsc52/libraries/" class="md-nav__link">
2002 Third Party Libraries
2003 </a>
2004 </li>
2005
2006
2007
2008 </ul>
2009 </nav>
2010 </li>
2011
2012
2013
2014
2015
2016
2017
2018
2019 <li class="md-nav__item md-nav__item--nested">
2020
2021
2022 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
2023
2024 <label class="md-nav__link" for="__nav_6_3">
2025 Migrating from WSC 3.1
2026 <span class="md-nav__icon md-icon"></span>
2027 </label>
2028 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
2029 <label class="md-nav__title" for="__nav_6_3">
2030 <span class="md-nav__icon md-icon"></span>
2031 Migrating from WSC 3.1
2032 </label>
2033 <ul class="md-nav__list" data-md-scrollfix>
2034
2035
2036
2037
2038
2039 <li class="md-nav__item">
2040 <a href="../../../../migration/wsc31/php/" class="md-nav__link">
2041 PHP API
2042 </a>
2043 </li>
2044
2045
2046
2047 </ul>
2048 </nav>
2049 </li>
2050
2051
2052
2053
2054
2055
2056
2057
2058 <li class="md-nav__item md-nav__item--nested">
2059
2060
2061 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
2062
2063 <label class="md-nav__link" for="__nav_6_4">
2064 Migrating from WSC 3.0
2065 <span class="md-nav__icon md-icon"></span>
2066 </label>
2067 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
2068 <label class="md-nav__title" for="__nav_6_4">
2069 <span class="md-nav__icon md-icon"></span>
2070 Migrating from WSC 3.0
2071 </label>
2072 <ul class="md-nav__list" data-md-scrollfix>
2073
2074
2075
2076
2077
2078 <li class="md-nav__item">
2079 <a href="../../../../migration/wsc30/php/" class="md-nav__link">
2080 PHP API
2081 </a>
2082 </li>
2083
2084
2085
2086
2087
2088
2089
2090 <li class="md-nav__item">
2091 <a href="../../../../migration/wsc30/javascript/" class="md-nav__link">
2092 JavaScript API
2093 </a>
2094 </li>
2095
2096
2097
2098
2099
2100
2101
2102 <li class="md-nav__item">
2103 <a href="../../../../migration/wsc30/templates/" class="md-nav__link">
2104 Templates
2105 </a>
2106 </li>
2107
2108
2109
2110
2111
2112
2113
2114 <li class="md-nav__item">
2115 <a href="../../../../migration/wsc30/css/" class="md-nav__link">
2116 CSS
2117 </a>
2118 </li>
2119
2120
2121
2122
2123
2124
2125
2126 <li class="md-nav__item">
2127 <a href="../../../../migration/wsc30/package/" class="md-nav__link">
2128 Package Components
2129 </a>
2130 </li>
2131
2132
2133
2134 </ul>
2135 </nav>
2136 </li>
2137
2138
2139
2140
2141
2142
2143
2144
2145 <li class="md-nav__item md-nav__item--nested">
2146
2147
2148 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
2149
2150 <label class="md-nav__link" for="__nav_6_5">
2151 Migrating from WCF 2.1
2152 <span class="md-nav__icon md-icon"></span>
2153 </label>
2154 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
2155 <label class="md-nav__title" for="__nav_6_5">
2156 <span class="md-nav__icon md-icon"></span>
2157 Migrating from WCF 2.1
2158 </label>
2159 <ul class="md-nav__list" data-md-scrollfix>
2160
2161
2162
2163
2164
2165 <li class="md-nav__item">
2166 <a href="../../../../migration/wcf21/php/" class="md-nav__link">
2167 PHP API
2168 </a>
2169 </li>
2170
2171
2172
2173
2174
2175
2176
2177 <li class="md-nav__item">
2178 <a href="../../../../migration/wcf21/templates/" class="md-nav__link">
2179 Templates
2180 </a>
2181 </li>
2182
2183
2184
2185
2186
2187
2188
2189 <li class="md-nav__item">
2190 <a href="../../../../migration/wcf21/css/" class="md-nav__link">
2191 CSS
2192 </a>
2193 </li>
2194
2195
2196
2197
2198
2199
2200
2201 <li class="md-nav__item">
2202 <a href="../../../../migration/wcf21/package/" class="md-nav__link">
2203 Package Components
2204 </a>
2205 </li>
2206
2207
2208
2209 </ul>
2210 </nav>
2211 </li>
2212
2213
2214
2215 </ul>
2216 </nav>
2217 </li>
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229 <li class="md-nav__item md-nav__item--nested">
2230
2231
2232 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
2233
2234 <label class="md-nav__link" for="__nav_7">
2235 Tutorials
2236 <span class="md-nav__icon md-icon"></span>
2237 </label>
2238 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
2239 <label class="md-nav__title" for="__nav_7">
2240 <span class="md-nav__icon md-icon"></span>
2241 Tutorials
2242 </label>
2243 <ul class="md-nav__list" data-md-scrollfix>
2244
2245
2246
2247
2248
2249
2250 <li class="md-nav__item md-nav__item--nested">
2251
2252
2253 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
2254
2255 <label class="md-nav__link" for="__nav_7_1">
2256 Tutorial Series
2257 <span class="md-nav__icon md-icon"></span>
2258 </label>
2259 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
2260 <label class="md-nav__title" for="__nav_7_1">
2261 <span class="md-nav__icon md-icon"></span>
2262 Tutorial Series
2263 </label>
2264 <ul class="md-nav__list" data-md-scrollfix>
2265
2266
2267
2268
2269
2270 <li class="md-nav__item">
2271 <a href="../../../../tutorial/series/overview/" class="md-nav__link">
2272 Overview
2273 </a>
2274 </li>
2275
2276
2277
2278
2279
2280
2281
2282 <li class="md-nav__item">
2283 <a href="../../../../tutorial/series/part_1/" class="md-nav__link">
2284 Part 1
2285 </a>
2286 </li>
2287
2288
2289
2290
2291
2292
2293
2294 <li class="md-nav__item">
2295 <a href="../../../../tutorial/series/part_2/" class="md-nav__link">
2296 Part 2
2297 </a>
2298 </li>
2299
2300
2301
2302
2303
2304
2305
2306 <li class="md-nav__item">
2307 <a href="../../../../tutorial/series/part_3/" class="md-nav__link">
2308 Part 3
2309 </a>
2310 </li>
2311
2312
2313
2314
2315
2316
2317
2318 <li class="md-nav__item">
2319 <a href="../../../../tutorial/series/part_4/" class="md-nav__link">
2320 Part 4
2321 </a>
2322 </li>
2323
2324
2325
2326
2327
2328
2329
2330 <li class="md-nav__item">
2331 <a href="../../../../tutorial/series/part_5/" class="md-nav__link">
2332 Part 5
2333 </a>
2334 </li>
2335
2336
2337
2338 </ul>
2339 </nav>
2340 </li>
2341
2342
2343
2344 </ul>
2345 </nav>
2346 </li>
2347
2348
2349
2350 </ul>
2351 </nav>
2352 </div>
2353 </div>
2354 </div>
2355
2356
2357
2358 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
2359 <div class="md-sidebar__scrollwrap">
2360 <div class="md-sidebar__inner">
2361
2362 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
2363
2364
2365
2366
2367
2368
2369 <label class="md-nav__title" for="__toc">
2370 <span class="md-nav__icon md-icon"></span>
2371 Table of contents
2372 </label>
2373 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2374
2375 <li class="md-nav__item">
2376 <a href="#abstract-form-fields" class="md-nav__link">
2377 Abstract Form Fields
2378 </a>
2379
2380 <nav class="md-nav" aria-label="Abstract Form Fields">
2381 <ul class="md-nav__list">
2382
2383 <li class="md-nav__item">
2384 <a href="#abstractformfield" class="md-nav__link">
2385 AbstractFormField
2386 </a>
2387
2388 </li>
2389
2390 <li class="md-nav__item">
2391 <a href="#abstractnumericformfield" class="md-nav__link">
2392 AbstractNumericFormField
2393 </a>
2394
2395 </li>
2396
2397 </ul>
2398 </nav>
2399
2400 </li>
2401
2402 <li class="md-nav__item">
2403 <a href="#general-form-fields" class="md-nav__link">
2404 General Form Fields
2405 </a>
2406
2407 <nav class="md-nav" aria-label="General Form Fields">
2408 <ul class="md-nav__list">
2409
2410 <li class="md-nav__item">
2411 <a href="#booleanformfield" class="md-nav__link">
2412 BooleanFormField
2413 </a>
2414
2415 </li>
2416
2417 <li class="md-nav__item">
2418 <a href="#checkboxformfield" class="md-nav__link">
2419 CheckboxFormField
2420 </a>
2421
2422 </li>
2423
2424 <li class="md-nav__item">
2425 <a href="#classnameformfield" class="md-nav__link">
2426 ClassNameFormField
2427 </a>
2428
2429 </li>
2430
2431 <li class="md-nav__item">
2432 <a href="#dateformfield" class="md-nav__link">
2433 DateFormField
2434 </a>
2435
2436 </li>
2437
2438 <li class="md-nav__item">
2439 <a href="#descriptionformfield" class="md-nav__link">
2440 DescriptionFormField
2441 </a>
2442
2443 </li>
2444
2445 <li class="md-nav__item">
2446 <a href="#emailformfield" class="md-nav__link">
2447 EmailFormField
2448 </a>
2449
2450 </li>
2451
2452 <li class="md-nav__item">
2453 <a href="#floatformfield" class="md-nav__link">
2454 FloatFormField
2455 </a>
2456
2457 </li>
2458
2459 <li class="md-nav__item">
2460 <a href="#iconformfield" class="md-nav__link">
2461 IconFormField
2462 </a>
2463
2464 </li>
2465
2466 <li class="md-nav__item">
2467 <a href="#integerformfield" class="md-nav__link">
2468 IntegerFormField
2469 </a>
2470
2471 </li>
2472
2473 <li class="md-nav__item">
2474 <a href="#isdisabledformfield" class="md-nav__link">
2475 IsDisabledFormField
2476 </a>
2477
2478 </li>
2479
2480 <li class="md-nav__item">
2481 <a href="#itemlistformfield" class="md-nav__link">
2482 ItemListFormField
2483 </a>
2484
2485 </li>
2486
2487 <li class="md-nav__item">
2488 <a href="#multilinetextformfield" class="md-nav__link">
2489 MultilineTextFormField
2490 </a>
2491
2492 </li>
2493
2494 <li class="md-nav__item">
2495 <a href="#multipleselectionformfield" class="md-nav__link">
2496 MultipleSelectionFormField
2497 </a>
2498
2499 </li>
2500
2501 <li class="md-nav__item">
2502 <a href="#radiobuttonformfield" class="md-nav__link">
2503 RadioButtonFormField
2504 </a>
2505
2506 </li>
2507
2508 <li class="md-nav__item">
2509 <a href="#ratingformfield" class="md-nav__link">
2510 RatingFormField
2511 </a>
2512
2513 </li>
2514
2515 <li class="md-nav__item">
2516 <a href="#showorderformfield" class="md-nav__link">
2517 ShowOrderFormField
2518 </a>
2519
2520 </li>
2521
2522 <li class="md-nav__item">
2523 <a href="#singleselectionformfield" class="md-nav__link">
2524 SingleSelectionFormField
2525 </a>
2526
2527 </li>
2528
2529 <li class="md-nav__item">
2530 <a href="#sortorderformfield" class="md-nav__link">
2531 SortOrderFormField
2532 </a>
2533
2534 </li>
2535
2536 <li class="md-nav__item">
2537 <a href="#textformfield" class="md-nav__link">
2538 TextFormField
2539 </a>
2540
2541 </li>
2542
2543 <li class="md-nav__item">
2544 <a href="#titleformfield" class="md-nav__link">
2545 TitleFormField
2546 </a>
2547
2548 </li>
2549
2550 <li class="md-nav__item">
2551 <a href="#urlformfield" class="md-nav__link">
2552 UrlFormField
2553 </a>
2554
2555 </li>
2556
2557 </ul>
2558 </nav>
2559
2560 </li>
2561
2562 <li class="md-nav__item">
2563 <a href="#specific-fields" class="md-nav__link">
2564 Specific Fields
2565 </a>
2566
2567 <nav class="md-nav" aria-label="Specific Fields">
2568 <ul class="md-nav__list">
2569
2570 <li class="md-nav__item">
2571 <a href="#aclformfield" class="md-nav__link">
2572 AclFormField
2573 </a>
2574
2575 </li>
2576
2577 <li class="md-nav__item">
2578 <a href="#buttonformfield" class="md-nav__link">
2579 ButtonFormField
2580 </a>
2581
2582 </li>
2583
2584 <li class="md-nav__item">
2585 <a href="#captchaformfield" class="md-nav__link">
2586 CaptchaFormField
2587 </a>
2588
2589 </li>
2590
2591 <li class="md-nav__item">
2592 <a href="#contentlanguageformfield" class="md-nav__link">
2593 ContentLanguageFormField
2594 </a>
2595
2596 </li>
2597
2598 <li class="md-nav__item">
2599 <a href="#labelformfield" class="md-nav__link">
2600 LabelFormField
2601 </a>
2602
2603 </li>
2604
2605 <li class="md-nav__item">
2606 <a href="#optionformfield" class="md-nav__link">
2607 OptionFormField
2608 </a>
2609
2610 </li>
2611
2612 <li class="md-nav__item">
2613 <a href="#simpleaclformfield" class="md-nav__link">
2614 SimpleAclFormField
2615 </a>
2616
2617 </li>
2618
2619 <li class="md-nav__item">
2620 <a href="#singlemediaselectionformfield" class="md-nav__link">
2621 SingleMediaSelectionFormField
2622 </a>
2623
2624 </li>
2625
2626 <li class="md-nav__item">
2627 <a href="#tagformfield" class="md-nav__link">
2628 TagFormField
2629 </a>
2630
2631 </li>
2632
2633 <li class="md-nav__item">
2634 <a href="#uploadformfield" class="md-nav__link">
2635 UploadFormField
2636 </a>
2637
2638 <nav class="md-nav" aria-label="UploadFormField">
2639 <ul class="md-nav__list">
2640
2641 <li class="md-nav__item">
2642 <a href="#provide-value-from-database-object" class="md-nav__link">
2643 Provide value from database object
2644 </a>
2645
2646 </li>
2647
2648 <li class="md-nav__item">
2649 <a href="#process-files" class="md-nav__link">
2650 Process files
2651 </a>
2652
2653 </li>
2654
2655 </ul>
2656 </nav>
2657
2658 </li>
2659
2660 <li class="md-nav__item">
2661 <a href="#userformfield" class="md-nav__link">
2662 UserFormField
2663 </a>
2664
2665 </li>
2666
2667 <li class="md-nav__item">
2668 <a href="#userpasswordfield" class="md-nav__link">
2669 UserPasswordField
2670 </a>
2671
2672 </li>
2673
2674 <li class="md-nav__item">
2675 <a href="#usergroupoptionformfield" class="md-nav__link">
2676 UserGroupOptionFormField
2677 </a>
2678
2679 </li>
2680
2681 <li class="md-nav__item">
2682 <a href="#usernameformfield" class="md-nav__link">
2683 UsernameFormField
2684 </a>
2685
2686 </li>
2687
2688 </ul>
2689 </nav>
2690
2691 </li>
2692
2693 <li class="md-nav__item">
2694 <a href="#wysiwyg-form-container" class="md-nav__link">
2695 Wysiwyg form container
2696 </a>
2697
2698 <nav class="md-nav" aria-label="Wysiwyg form container">
2699 <ul class="md-nav__list">
2700
2701 <li class="md-nav__item">
2702 <a href="#wysiwygattachmentformfield" class="md-nav__link">
2703 WysiwygAttachmentFormField
2704 </a>
2705
2706 </li>
2707
2708 <li class="md-nav__item">
2709 <a href="#wysiwygpollformcontainer" class="md-nav__link">
2710 WysiwygPollFormContainer
2711 </a>
2712
2713 </li>
2714
2715 <li class="md-nav__item">
2716 <a href="#wysiwygsmileyformcontainer" class="md-nav__link">
2717 WysiwygSmileyFormContainer
2718 </a>
2719
2720 <nav class="md-nav" aria-label="WysiwygSmileyFormContainer">
2721 <ul class="md-nav__list">
2722
2723 <li class="md-nav__item">
2724 <a href="#wysiwygsmileyformnode" class="md-nav__link">
2725 WysiwygSmileyFormNode
2726 </a>
2727
2728 </li>
2729
2730 </ul>
2731 </nav>
2732
2733 </li>
2734
2735 <li class="md-nav__item">
2736 <a href="#example" class="md-nav__link">
2737 Example
2738 </a>
2739
2740 </li>
2741
2742 <li class="md-nav__item">
2743 <a href="#wysiwygformfield" class="md-nav__link">
2744 WysiwygFormField
2745 </a>
2746
2747 </li>
2748
2749 <li class="md-nav__item">
2750 <a href="#twysiwygformnode" class="md-nav__link">
2751 TWysiwygFormNode
2752 </a>
2753
2754 </li>
2755
2756 </ul>
2757 </nav>
2758
2759 </li>
2760
2761 <li class="md-nav__item">
2762 <a href="#single-use-form-fields" class="md-nav__link">
2763 Single-Use Form Fields
2764 </a>
2765
2766 <nav class="md-nav" aria-label="Single-Use Form Fields">
2767 <ul class="md-nav__list">
2768
2769 <li class="md-nav__item">
2770 <a href="#bbcodeattributesformfield" class="md-nav__link">
2771 BBCodeAttributesFormField
2772 </a>
2773
2774 </li>
2775
2776 <li class="md-nav__item">
2777 <a href="#devtoolsprojectexcludedpackagesformfield" class="md-nav__link">
2778 DevtoolsProjectExcludedPackagesFormField
2779 </a>
2780
2781 </li>
2782
2783 <li class="md-nav__item">
2784 <a href="#devtoolsprojectinstructionsformfield" class="md-nav__link">
2785 DevtoolsProjectInstructionsFormField
2786 </a>
2787
2788 </li>
2789
2790 <li class="md-nav__item">
2791 <a href="#devtoolsprojectoptionalpackagesformfield" class="md-nav__link">
2792 DevtoolsProjectOptionalPackagesFormField
2793 </a>
2794
2795 </li>
2796
2797 <li class="md-nav__item">
2798 <a href="#devtoolsprojectrequiredpackagesformfield" class="md-nav__link">
2799 DevtoolsProjectRequiredPackagesFormField
2800 </a>
2801
2802 </li>
2803
2804 </ul>
2805 </nav>
2806
2807 </li>
2808
2809 </ul>
2810
2811 </nav>
2812 </div>
2813 </div>
2814 </div>
2815
2816
2817 <div class="md-content" data-md-component="content">
2818 <article class="md-content__inner md-typeset">
2819
2820
2821 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/api/form_builder/form_fields.md" title="Edit this page" class="md-content__button md-icon">
2822 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
2823 </a>
2824
2825
2826 <h1 id="form-builder-fields">Form Builder Fields<a class="headerlink" href="#form-builder-fields" title="Permanent link">#</a></h1>
2827 <h2 id="abstract-form-fields">Abstract Form Fields<a class="headerlink" href="#abstract-form-fields" title="Permanent link">#</a></h2>
2828 <p>The following form field classes cannot be instantiated directly because they are abstract, but they can/must be used when creating own form field classes. </p>
2829 <h3 id="abstractformfield"><code>AbstractFormField</code><a class="headerlink" href="#abstractformfield" title="Permanent link">#</a></h3>
2830 <p><code>AbstractFormField</code> is the abstract default implementation of the <code>IFormField</code> interface and it is expected that every implementation of <code>IFormField</code> implements the interface by extending this class.</p>
2831 <h3 id="abstractnumericformfield"><code>AbstractNumericFormField</code><a class="headerlink" href="#abstractnumericformfield" title="Permanent link">#</a></h3>
2832 <p><code>AbstractNumericFormField</code> is the abstract implementation of a form field handling a single numeric value.
2833 The class implements <code>IAttributeFormField</code>, <code>IAutoCompleteFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, <code>IInputModeFormField</code>, <code>IMaximumFormField</code>, <code>IMinimumFormField</code>, <code>INullableFormField</code>, <code>IPlaceholderFormField</code> and <code>ISuffixedFormField</code>.
2834 If the property <code>$integerValues</code> is <code>true</code>, the form field works with integer values, otherwise it works with floating point numbers.
2835 The methods <code>step($step = null)</code> and <code>getStep()</code> can be used to set and get the step attribute of the <code>input</code> element.
2836 The default step for form fields with integer values is <code>1</code>.
2837 Otherwise, the default step is <code>any</code>.</p>
2838 <h2 id="general-form-fields">General Form Fields<a class="headerlink" href="#general-form-fields" title="Permanent link">#</a></h2>
2839 <p>The following form fields are general reusable fields without any underlying context.</p>
2840 <h3 id="booleanformfield"><code>BooleanFormField</code><a class="headerlink" href="#booleanformfield" title="Permanent link">#</a></h3>
2841 <p><code>BooleanFormField</code> is used for boolean (<code>0</code> or <code>1</code>, <code>yes</code> or <code>no</code>) values.
2842 Objects of this class require a label.
2843 The return value of <code>getSaveValue()</code> is the integer representation of the boolean value, i.e. <code>0</code> or <code>1</code>.
2844 The class implements <code>IAttributeFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, and <code>IImmutableFormField</code>.</p>
2845 <h3 id="checkboxformfield"><code>CheckboxFormField</code><a class="headerlink" href="#checkboxformfield" title="Permanent link">#</a></h3>
2846 <div class="admonition info">
2847 <p class="admonition-title">Only available since version 5.3.2.</p>
2848 </div>
2849 <p><code>CheckboxFormField</code> extends <code>BooleanFormField</code> and offers a simple HTML checkbox.</p>
2850 <h3 id="classnameformfield"><code>ClassNameFormField</code><a class="headerlink" href="#classnameformfield" title="Permanent link">#</a></h3>
2851 <p><code>ClassNameFormField</code> is a <a href="#textformfield">text form field</a> that supports additional settings, specific to entering a PHP class name:</p>
2852 <ul>
2853 <li><code>classExists($classExists = true)</code> and <code>getClassExists()</code> can be used to ensure that the entered class currently exists in the installation.
2854 By default, the existance of the entered class is required.</li>
2855 <li><code>implementedInterface($interface)</code> and <code>getImplementedInterface()</code> can be used to ensure that the entered class implements the specified interface.
2856 By default, no interface is required.</li>
2857 <li><code>parentClass($parentClass)</code> and <code>getParentClass()</code> can be used to ensure that the entered class extends the specified class.
2858 By default, no parent class is required.</li>
2859 <li><code>instantiable($instantiable = true)</code> and <code>isInstantiable()</code> can be used to ensure that the entered class is instantiable.
2860 By default, entered classes have to instantiable.</li>
2861 </ul>
2862 <p>Additionally, the default id of a <code>ClassNameFormField</code> object is <code>className</code>, the default label is <code>wcf.form.field.className</code>, and if either an interface or a parent class is required, a default description is set if no description has already been set (<code>wcf.form.field.className.description.interface</code> and <code>wcf.form.field.className.description.parentClass</code>, respectively).</p>
2863 <h3 id="dateformfield"><code>DateFormField</code><a class="headerlink" href="#dateformfield" title="Permanent link">#</a></h3>
2864 <p><code>DateFormField</code> is a form field to enter a date (and optionally a time).
2865 The class implements <code>IAttributeFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, and <code>INullableFormField</code>.
2866 The following methods are specific to this form field class:</p>
2867 <ul>
2868 <li><code>earliestDate($earliestDate)</code> and <code>getEarliestDate()</code> can be used to get and set the earliest selectable/valid date and <code>latestDate($latestDate)</code> and <code>getLatestDate()</code> can be used to get and set the latest selectable/valid date.
2869 The date passed to the setters must have the same format as set via <code>saveValueFormat()</code>.
2870 If a custom format is used, that format has to be set via <code>saveValueFormat()</code> before calling any of the setters.</li>
2871 <li><code>saveValueFormat($saveValueFormat)</code> and <code>getSaveValueFormat()</code> can be used to specify the date format of the value returned by <code>getSaveValue()</code>.
2872 By default, <code>U</code> is used as format.
2873 The <a href="https://secure.php.net/manual/en/function.date.php">PHP manual</a> provides an overview of supported formats.</li>
2874 <li><code>supportTime($supportsTime = true)</code> and <code>supportsTime()</code> can be used to toggle whether, in addition to a date, a time can also be specified.
2875 By default, specifying a time is disabled.</li>
2876 </ul>
2877 <h3 id="descriptionformfield"><code>DescriptionFormField</code><a class="headerlink" href="#descriptionformfield" title="Permanent link">#</a></h3>
2878 <p><code>DescriptionFormField</code> is a <a href="#multilinetextformfield">multi-line text form field</a> with <code>description</code> as the default id and <code>wcf.global.description</code> as the default label.</p>
2879 <h3 id="emailformfield"><code>EmailFormField</code><a class="headerlink" href="#emailformfield" title="Permanent link">#</a></h3>
2880 <p><code>EmailFormField</code> is a form field to enter an email address which is internally validated using <code>UserUtil::isValidEmail()</code>.
2881 The class implements <code>IAttributeFormField</code>, <code>IAutoCompleteFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, <code>II18nFormField</code>, <code>IImmutableFormField</code>, <code>IInputModeFormField</code>, <code>IPatternFormField</code>, and <code>IPlaceholderFormField</code>.</p>
2882 <h3 id="floatformfield"><code>FloatFormField</code><a class="headerlink" href="#floatformfield" title="Permanent link">#</a></h3>
2883 <p><code>FloatFormField</code> is an implementation of <a href="#abstractnumericformfield">AbstractNumericFormField</a> for floating point numbers.</p>
2884 <h3 id="iconformfield"><code>IconFormField</code><a class="headerlink" href="#iconformfield" title="Permanent link">#</a></h3>
2885 <p><code>IconFormField</code> is a form field to select a FontAwesome icon.</p>
2886 <h3 id="integerformfield"><code>IntegerFormField</code><a class="headerlink" href="#integerformfield" title="Permanent link">#</a></h3>
2887 <p><code>IntegerFormField</code> is an implementation of <a href="#abstractnumericformfield">AbstractNumericFormField</a> for integers.</p>
2888 <h3 id="isdisabledformfield"><code>IsDisabledFormField</code><a class="headerlink" href="#isdisabledformfield" title="Permanent link">#</a></h3>
2889 <p><code>IsDisabledFormField</code> is a <a href="#booleanformfield">boolean form field</a> with <code>isDisabled</code> as the default id.</p>
2890 <h3 id="itemlistformfield"><code>ItemListFormField</code><a class="headerlink" href="#itemlistformfield" title="Permanent link">#</a></h3>
2891 <p><code>ItemListFormField</code> is a form field in which multiple values can be entered and returned in different formats as save value.
2892 The class implements <code>IAttributeFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, and <code>IMultipleFormField</code>.
2893 The <code>saveValueType($saveValueType)</code> and <code>getSaveValueType()</code> methods are specific to this form field class and determine the format of the save value.
2894 The following save value types are supported:</p>
2895 <ul>
2896 <li><code>ItemListFormField::SAVE_VALUE_TYPE_ARRAY</code> adds a custom data processor that writes the form field data directly in the parameters array and not in the data sub-array of the parameters array.</li>
2897 <li><code>ItemListFormField::SAVE_VALUE_TYPE_CSV</code> lets the value be returned as a string in which the values are concatenated by commas.</li>
2898 <li><code>ItemListFormField::SAVE_VALUE_TYPE_NSV</code> lets the value be returned as a string in which the values are concatenated by <code>\n</code>.</li>
2899 <li><code>ItemListFormField::SAVE_VALUE_TYPE_SSV</code> lets the value be returned as a string in which the values are concatenated by spaces.</li>
2900 </ul>
2901 <p>By default, <code>ItemListFormField::SAVE_VALUE_TYPE_CSV</code> is used.</p>
2902 <p>If <code>ItemListFormField::SAVE_VALUE_TYPE_ARRAY</code> is used as save value type, <code>ItemListFormField</code> objects register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the relevant array into the <code>$parameters</code> array directly using the object property as the array key.</p>
2903 <h3 id="multilinetextformfield"><code>MultilineTextFormField</code><a class="headerlink" href="#multilinetextformfield" title="Permanent link">#</a></h3>
2904 <p><code>MultilineTextFormField</code> is a <a href="#textformfield">text form field</a> that supports multiple rows of text.
2905 The methods <code>rows($rows)</code> and <code>getRows()</code> can be used to set and get the number of rows of the <code>textarea</code> elements.
2906 The default number of rows is <code>10</code>.
2907 These methods do <strong>not</strong>, however, restrict the number of text rows that canbe entered.</p>
2908 <h3 id="multipleselectionformfield"><code>MultipleSelectionFormField</code><a class="headerlink" href="#multipleselectionformfield" title="Permanent link">#</a></h3>
2909 <p><code>MultipleSelectionFormField</code> is a form fields that allows the selection of multiple options out of a predefined list of available options.
2910 The class implements <code>IAttributeFormField</code>, <code>ICssClassFormField</code>, <code>IFilterableSelectionFormField</code>, <code>IImmutableFormField</code>, and <code>INullableFormField</code>.
2911 If the field is nullable and no option is selected, <code>null</code> is returned as the save value.</p>
2912 <h3 id="radiobuttonformfield"><code>RadioButtonFormField</code><a class="headerlink" href="#radiobuttonformfield" title="Permanent link">#</a></h3>
2913 <p><code>RadioButtonFormField</code> is a form fields that allows the selection of a single option out of a predefined list of available options using radiobuttons.
2914 The class implements <code>IAttributeFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, and <code>ISelectionFormField</code>.</p>
2915 <h3 id="ratingformfield"><code>RatingFormField</code><a class="headerlink" href="#ratingformfield" title="Permanent link">#</a></h3>
2916 <p><code>RatingFormField</code> is a form field to set a rating for an object.
2917 The class implements <code>IImmutableFormField</code>, <code>IMaximumFormField</code>, <code>IMinimumFormField</code>, and <code>INullableFormField</code>.
2918 Form fields of this class have <code>rating</code> as their default id, <code>wcf.form.field.rating</code> as their default label, <code>1</code> as their default minimum, and <code>5</code> as their default maximum.
2919 For this field, the minimum and maximum refer to the minimum and maximum rating an object can get.
2920 When the field is shown, there will be <code>maximum() - minimum() + 1</code> icons be shown with additional CSS classes that can be set and gotten via <code>defaultCssClasses(array $cssClasses)</code> and <code>getDefaultCssClasses()</code>.
2921 If a rating values is set, the first <code>getValue()</code> icons will instead use the classes that can be set and gotten via <code>activeCssClasses(array $cssClasses)</code> and <code>getActiveCssClasses()</code>.
2922 By default, the only default class is <code>fa-star-o</code> and the active classes are <code>fa-star</code> and <code>orange</code>. </p>
2923 <h3 id="showorderformfield"><code>ShowOrderFormField</code><a class="headerlink" href="#showorderformfield" title="Permanent link">#</a></h3>
2924 <p><code>ShowOrderFormField</code> is a <a href="#singleselectionformfield">single selection form field</a> for which the selected value determines the position at which an object is shown.
2925 The show order field provides a list of all siblings and the object will be positioned <strong>after</strong> the selected sibling.
2926 To insert objects at the very beginning, the <code>options()</code> automatically method prepends an additional option for that case so that only the existing siblings need to be passed.
2927 The default id of instances of this class is <code>showOrder</code> and their default label is <code>wcf.form.field.showOrder</code>.</p>
2928 <div class="admonition info">
2929 <p class="admonition-title">It is important that the relevant object property is always kept updated. Whenever a new object is added or an existing object is edited or delete, the values of the other objects have to be adjusted to ensure consecutive numbering.</p>
2930 </div>
2931 <h3 id="singleselectionformfield"><code>SingleSelectionFormField</code><a class="headerlink" href="#singleselectionformfield" title="Permanent link">#</a></h3>
2932 <p><code>SingleSelectionFormField</code> is a form fields that allows the selection of a single option out of a predefined list of available options.
2933 The class implements <code>ICssClassFormField</code>, <code>IFilterableSelectionFormField</code>, <code>IImmutableFormField</code>, and <code>INullableFormField</code>.
2934 If the field is nullable and the current form field value is considered <code>empty</code> by PHP, <code>null</code> is returned as the save value.</p>
2935 <h3 id="sortorderformfield"><code>SortOrderFormField</code><a class="headerlink" href="#sortorderformfield" title="Permanent link">#</a></h3>
2936 <p><code>SingleSelectionFormField</code> is a <a href="#singleselectionformfield">single selection form field</a> with default id <code>sortOrder</code>, default label <code>wcf.global.showOrder</code> and default options <code>ASC: wcf.global.sortOrder.ascending</code> and <code>DESC: wcf.global.sortOrder.descending</code>.</p>
2937 <h3 id="textformfield"><code>TextFormField</code><a class="headerlink" href="#textformfield" title="Permanent link">#</a></h3>
2938 <p><code>TextFormField</code> is a form field that allows entering a single line of text.
2939 The class implements <code>IAttributeFormField</code>, <code>IAutoCompleteFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, <code>II18nFormField</code>, <code>IInputModeFormField</code>, <code>IMaximumLengthFormField</code>, <code>IMinimumLengthFormField</code>, <code>IPatternFormField</code>, and <code>IPlaceholderFormField</code>.</p>
2940 <h3 id="titleformfield"><code>TitleFormField</code><a class="headerlink" href="#titleformfield" title="Permanent link">#</a></h3>
2941 <p><code>TitleFormField</code> is a <a href="#textformfield">text form field</a> with <code>title</code> as the default id and <code>wcf.global.title</code> as the default label.</p>
2942 <h3 id="urlformfield"><code>UrlFormField</code><a class="headerlink" href="#urlformfield" title="Permanent link">#</a></h3>
2943 <p><code>UrlFormField</code> is a <a href="#textformfield">text form field</a> whose values are checked via <code>Url::is()</code>.</p>
2944 <h2 id="specific-fields">Specific Fields<a class="headerlink" href="#specific-fields" title="Permanent link">#</a></h2>
2945 <p>The following form fields are reusable fields that generally are bound to a certain API or <code>DatabaseObject</code> implementation.</p>
2946 <h3 id="aclformfield"><code>AclFormField</code><a class="headerlink" href="#aclformfield" title="Permanent link">#</a></h3>
2947 <p><code>AclFormField</code> is used for setting up acl values for specific objects.
2948 The class implements <code>IObjectTypeFormField</code> and requires an object type of the object type definition <code>com.woltlab.wcf.acl</code>.
2949 Additionally, the class provides the methods <code>categoryName($categoryName)</code> and <code>getCategoryName()</code> that allow setting a specific name or filter for the acl option categories whose acl options are shown.
2950 A category name of <code>null</code> signals that no category filter is used.</p>
2951 <p><code>AclFormField</code> objects register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the relevant ACL object type id into the <code>$parameters</code> array directly using <code>{$objectProperty}_aclObjectTypeID</code> as the array key.
2952 The relevant database object action method is expected, based on the given ACL object type id, to save the ACL option values appropriately.</p>
2953 <h3 id="buttonformfield"><code>ButtonFormField</code><a class="headerlink" href="#buttonformfield" title="Permanent link">#</a></h3>
2954 <div class="admonition info">
2955 <p class="admonition-title">Only available since version 5.4.</p>
2956 </div>
2957 <p><code>ButtonFormField</code> shows a submit button as part of the form.
2958 The class implements <code>IAttributeFormField</code> and <code>ICssClassFormField</code>.</p>
2959 <p>Specifically for this form field, there is the <code>IsNotClickedFormFieldDependency</code> dependency with which certain parts of the form will only be processed if the relevent button has not clicked. </p>
2960 <h3 id="captchaformfield"><code>CaptchaFormField</code><a class="headerlink" href="#captchaformfield" title="Permanent link">#</a></h3>
2961 <p><code>CaptchaFormField</code> is used to add captcha protection to the form.</p>
2962 <p>You must specify a captcha object type (<code>com.woltlab.wcf.captcha</code>) using the <code>objectType()</code> method.</p>
2963 <h3 id="contentlanguageformfield"><code>ContentLanguageFormField</code><a class="headerlink" href="#contentlanguageformfield" title="Permanent link">#</a></h3>
2964 <p><code>ContentLanguageFormField</code> is used to select the content language of an object.
2965 Fields of this class are only available if multilingualism is enabled and if there are content languages.
2966 The class implements <code>IImmutableFormField</code>.</p>
2967 <h3 id="labelformfield"><code>LabelFormField</code><a class="headerlink" href="#labelformfield" title="Permanent link">#</a></h3>
2968 <p><code>LabelFormField</code> is used to select a label from a specific label group.
2969 The class implements <code>IObjectTypeFormNode</code>.</p>
2970 <p>The <code>labelGroup(ViewableLabelGroup $labelGroup)</code> and <code>getLabelGroup()</code> methods are specific to this form field class and can be used to set and get the label group whose labels can be selected.
2971 Additionally, there is the static method <code>createFields($objectType, array $labelGroups, $objectProperty = 'labelIDs)</code> that can be used to create all relevant label form fields for a given list of label groups.
2972 In most cases, <code>LabelFormField::createFields()</code> should be used.</p>
2973 <h3 id="optionformfield"><code>OptionFormField</code><a class="headerlink" href="#optionformfield" title="Permanent link">#</a></h3>
2974 <p><code>OptionFormField</code> is an <a href="#itemlistformfield">item list form field</a> to set a list of options.
2975 The class implements <code>IPackagesFormField</code> and only options of the set packages are considered available.
2976 The default label of instances of this class is <code>wcf.form.field.option</code> and their default id is <code>options</code>.</p>
2977 <h3 id="simpleaclformfield"><code>SimpleAclFormField</code><a class="headerlink" href="#simpleaclformfield" title="Permanent link">#</a></h3>
2978 <p><code>SimpleAclFormField</code> is used for setting up simple acl values (one <code>yes</code>/<code>no</code> option per user and user group) for specific objects.</p>
2979 <p><code>SimpleAclFormField</code> objects register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the relevant simple ACL data array into the <code>$parameters</code> array directly using the object property as the array key.</p>
2980 <h3 id="singlemediaselectionformfield"><code>SingleMediaSelectionFormField</code><a class="headerlink" href="#singlemediaselectionformfield" title="Permanent link">#</a></h3>
2981 <p><code>SingleMediaSelectionFormField</code> is used to select a specific media file.
2982 The class implements <code>IImmutableFormField</code>.</p>
2983 <p>The following methods are specific to this form field class:</p>
2984 <ul>
2985 <li><code>imageOnly($imageOnly = true)</code> and <code>isImageOnly()</code> can be used to set and check if only images may be selected.</li>
2986 <li><code>getMedia()</code> returns the media file based on the current field value if a field is set.</li>
2987 </ul>
2988 <h3 id="tagformfield"><code>TagFormField</code><a class="headerlink" href="#tagformfield" title="Permanent link">#</a></h3>
2989 <p><code>TagFormField</code> is a form field to enter tags.
2990 The class implements <code>IAttributeFormField</code> and <code>IObjectTypeFormNode</code>.
2991 Arrays passed to <code>TagFormField::values()</code> can contain tag names as strings and <code>Tag</code> objects.
2992 The default label of instances of this class is <code>wcf.tagging.tags</code> and their default description is <code>wcf.tagging.tags.description</code>.</p>
2993 <p><code>TagFormField</code> objects register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the array with entered tag names into the <code>$parameters</code> array directly using the object property as the array key.</p>
2994 <h3 id="uploadformfield"><code>UploadFormField</code><a class="headerlink" href="#uploadformfield" title="Permanent link">#</a></h3>
2995 <p><code>UploadFormField</code> is a form field that allows uploading files by the user.</p>
2996 <p><code>UploadFormField</code> objects register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the array of <code>wcf\system\file\upload\UploadFile\UploadFile</code> into the <code>$parameters</code> array directly using the object property as the array key. Also it registers the removed files as an array of <code>wcf\system\file\upload\UploadFile\UploadFile</code> into the <code>$parameters</code> array directly using the object property with the suffix <code>_removedFiles</code> as the array key. </p>
2997 <p>The field supports additional settings:
2998 - <code>imageOnly($imageOnly = true)</code> and <code>isImageOnly()</code> can be used to ensure that the uploaded files are only images.
2999 - <code>allowSvgImage($allowSvgImages = true)</code> and <code>svgImageAllowed()</code> can be used to allow SVG images, if the image only mode is enabled (otherwise, the method will throw an exception). By default, SVG images are not allowed.</p>
3000 <h4 id="provide-value-from-database-object">Provide value from database object<a class="headerlink" href="#provide-value-from-database-object" title="Permanent link">#</a></h4>
3001 <p>To provide values from a database object, you should implement the method <code>get{$objectProperty}UploadFileLocations()</code> to your database object class. This method must return an array of strings with the locations of the files.</p>
3002 <h4 id="process-files">Process files<a class="headerlink" href="#process-files" title="Permanent link">#</a></h4>
3003 <p>To process files in the database object action class, you must <a href="https://secure.php.net/manual/en/function.rename.php"><code>rename</code></a> the file to the final destination. You get the temporary location, by calling the method <code>getLocation()</code> on the given <code>UploadFile</code> objects. After that, you call <code>setProcessed($location)</code> with <code>$location</code> contains the new file location. This method sets the <code>isProcessed</code> flag to true and saves the new location. For updating files, it is relevant, whether a given file is already processed or not. For this case, the <code>UploadFile</code> object has an method <code>isProcessed()</code> which indicates, whether a file is already processed or new uploaded.</p>
3004 <h3 id="userformfield"><code>UserFormField</code><a class="headerlink" href="#userformfield" title="Permanent link">#</a></h3>
3005 <p><code>UserFormField</code> is a form field to enter existing users.
3006 The class implements <code>IAutoCompleteFormField</code>, <code>IAutoFocusFormField</code>, <code>IImmutableFormField</code>, <code>IMultipleFormField</code>, and <code>INullableFormField</code>.
3007 While the user is presented the names of the specified users in the user interface, the field returns the ids of the users as data.
3008 The relevant <code>UserProfile</code> objects can be accessed via the <code>getUsers()</code> method.</p>
3009 <h3 id="userpasswordfield"><code>UserPasswordField</code><a class="headerlink" href="#userpasswordfield" title="Permanent link">#</a></h3>
3010 <div class="admonition info">
3011 <p class="admonition-title">Only available since version 5.4.</p>
3012 </div>
3013 <p><code>UserPasswordField</code> is a form field for users' to enter their current password.
3014 The class implements <code>IAttributeFormField</code>, <code>IAttributeFormField</code>, <code>IAutoCompleteFormField</code>, <code>IAutoFocusFormField</code>, and <code>IPlaceholderFormField</code></p>
3015 <h3 id="usergroupoptionformfield"><code>UserGroupOptionFormField</code><a class="headerlink" href="#usergroupoptionformfield" title="Permanent link">#</a></h3>
3016 <p><code>UserGroupOptionFormField</code> is an <a href="#itemlistformfield">item list form field</a> to set a list of user group options/permissions.
3017 The class implements <code>IPackagesFormField</code> and only user group options of the set packages are considered available.
3018 The default label of instances of this class is <code>wcf.form.field.userGroupOption</code> and their default id is <code>permissions</code>.</p>
3019 <h3 id="usernameformfield"><code>UsernameFormField</code><a class="headerlink" href="#usernameformfield" title="Permanent link">#</a></h3>
3020 <p><code>UsernameFormField</code> is used for entering one non-existing username.
3021 The class implements <code>IAttributeFormField</code>, <code>IImmutableFormField</code>, <code>IMaximumLengthFormField</code>, <code>IMinimumLengthFormField</code>, <code>INullableFormField</code>, and <code>IPlaceholderFormField</code>.
3022 As usernames have a system-wide restriction of a minimum length of 3 and a maximum length of 100 characters, these values are also used as the default value for the field’s minimum and maximum length.</p>
3023 <h2 id="wysiwyg-form-container">Wysiwyg form container<a class="headerlink" href="#wysiwyg-form-container" title="Permanent link">#</a></h2>
3024 <p>To integrate a wysiwyg editor into a form, you have to create a <code>WysiwygFormContainer</code> object.
3025 This container takes care of creating all necessary form nodes listed below for a wysiwyg editor.</p>
3026 <div class="admonition warning">
3027 <p class="admonition-title">When creating the container object, its id has to be the id of the form field that will manage the actual text.</p>
3028 </div>
3029 <p>The following methods are specific to this form container class:</p>
3030 <ul>
3031 <li><code>addSettingsNode(IFormChildNode $settingsNode)</code> and <code>addSettingsNodes(array $settingsNodes)</code> can be used to add nodes to the settings tab container.</li>
3032 <li><code>attachmentData($objectType, $parentObjectID)</code> can be used to set the data relevant for attachment support.
3033 By default, not attachment data is set, thus attachments are not supported.</li>
3034 <li><code>getAttachmentField()</code>, <code>getPollContainer()</code>, <code>getSettingsContainer()</code>, <code>getSmiliesContainer()</code>, and <code>getWysiwygField()</code> can be used to get the different components of the wysiwyg form container once the form has been built.</li>
3035 <li><code>enablePreviewButton($enablePreviewButton)</code> can be used to set whether the preview button for the message is shown or not.
3036 By default, the preview button is shown.
3037 This method is only relevant before the form is built.
3038 Afterwards, the preview button availability can not be changed.
3039 Only available since WoltLab Suite Core 5.3.</li>
3040 <li><code>getObjectId()</code> returns the id of the edited object or <code>0</code> if no object is edited.</li>
3041 <li><code>getPreselect()</code>, <code>preselect($preselect)</code> can be used to set the value of the wysiwyg tab menu's <code>data-preselect</code> attribute used to determine which tab is preselected.
3042 By default, the preselect is <code>'true'</code> which is used to pre-select the first tab.</li>
3043 <li><code>messageObjectType($messageObjectType)</code> can be used to set the message object type.</li>
3044 <li><code>pollObjectType($pollObjectType)</code> can be used to set the poll object type.
3045 By default, no poll object type is set, thus the poll form field container is not available.</li>
3046 <li><code>supportMentions($supportMentions)</code> can be used to set if mentions are supported.
3047 By default, mentions are not supported.
3048 This method is only relevant before the form is built.
3049 Afterwards, mention support can only be changed via the wysiwyg form field.</li>
3050 <li><code>supportSmilies($supportSmilies)</code> can be used to set if smilies are supported.
3051 By default, smilies are supported.
3052 This method is only relevant before the form is built.
3053 Afterwards, smiley availability can only be changed via changing the availability of the smilies form container.</li>
3054 </ul>
3055 <h3 id="wysiwygattachmentformfield"><code>WysiwygAttachmentFormField</code><a class="headerlink" href="#wysiwygattachmentformfield" title="Permanent link">#</a></h3>
3056 <p><code>WysiwygAttachmentFormField</code> provides attachment support for a wysiwyg editor via a tab in the menu below the editor.
3057 This class should not be used directly but only via <code>WysiwygFormContainer</code>.
3058 The methods <code>attachmentHandler(AttachmentHandler $attachmentHandler)</code> and <code>getAttachmentHandler()</code> can be used to set and get the <code>AttachmentHandler</code> object that is used for uploaded attachments.</p>
3059 <h3 id="wysiwygpollformcontainer"><code>WysiwygPollFormContainer</code><a class="headerlink" href="#wysiwygpollformcontainer" title="Permanent link">#</a></h3>
3060 <p><code>WysiwygPollFormContainer</code> provides poll support for a wysiwyg editor via a tab in the menu below the editor.
3061 This class should not be used directly but only via <code>WysiwygFormContainer</code>.
3062 <code>WysiwygPollFormContainer</code> contains all form fields that are required to create polls and requires edited objects to implement <code>IPollContainer</code>.</p>
3063 <p>The following methods are specific to this form container class:</p>
3064 <ul>
3065 <li><code>getEndTimeField()</code> returns the form field to set the end time of the poll once the form has been built.</li>
3066 <li><code>getIsChangeableField()</code> returns the form field to set if poll votes can be changed once the form has been built.</li>
3067 <li><code>getIsPublicField()</code> returns the form field to set if poll results are public once the form has been built.</li>
3068 <li><code>getMaxVotesField()</code> returns the form field to set the maximum number of votes once the form has been built.</li>
3069 <li><code>getOptionsField()</code> returns the form field to set the poll options once the form has been built.</li>
3070 <li><code>getQuestionField()</code> returns the form field to set the poll question once the form has been built.</li>
3071 <li><code>getResultsRequireVoteField()</code> returns the form field to set if viewing the poll results requires voting once the form has been built.</li>
3072 <li><code>getSortByVotesField()</code> returns the form field to set if the results are sorted by votes once the form has been built.</li>
3073 </ul>
3074 <h3 id="wysiwygsmileyformcontainer"><code>WysiwygSmileyFormContainer</code><a class="headerlink" href="#wysiwygsmileyformcontainer" title="Permanent link">#</a></h3>
3075 <p><code>WysiwygSmileyFormContainer</code> provides smiley support for a wysiwyg editor via a tab in the menu below the editor.
3076 This class should not be used directly but only via <code>WysiwygFormContainer</code>.
3077 <code>WysiwygSmileyFormContainer</code> creates a sub-tab for each smiley category.</p>
3078 <h4 id="wysiwygsmileyformnode"><code>WysiwygSmileyFormNode</code><a class="headerlink" href="#wysiwygsmileyformnode" title="Permanent link">#</a></h4>
3079 <p><code>WysiwygSmileyFormNode</code> is contains the smilies of a specific category.
3080 This class should not be used directly but only via <code>WysiwygSmileyFormContainer</code>.</p>
3081 <h3 id="example">Example<a class="headerlink" href="#example" title="Permanent link">#</a></h3>
3082 <p>The following code creates a WYSIWYG editor component for a <code>message</code> object property.
3083 As smilies are supported by default and an attachment object type is given, the tab menu below the editor has two tabs: “Smilies” and “Attachments”.
3084 Additionally, mentions and quotes are supported.</p>
3085 <table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
3086 <span class="normal">2</span>
3087 <span class="normal">3</span>
3088 <span class="normal">4</span>
3089 <span class="normal">5</span>
3090 <span class="normal">6</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="nx">WysiwygFormContainer</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">)</span>
3091 <span class="o">-&gt;</span><span class="na">label</span><span class="p">(</span><span class="s1">&#39;foo.bar.message&#39;</span><span class="p">)</span>
3092 <span class="o">-&gt;</span><span class="na">messageObjectType</span><span class="p">(</span><span class="s1">&#39;com.example.foo.bar&#39;</span><span class="p">)</span>
3093 <span class="o">-&gt;</span><span class="na">attachmentData</span><span class="p">(</span><span class="s1">&#39;com.example.foo.bar&#39;</span><span class="p">)</span>
3094 <span class="o">-&gt;</span><span class="na">supportMentions</span><span class="p">()</span>
3095 <span class="o">-&gt;</span><span class="na">supportQuotes</span><span class="p">()</span>
3096 </code></pre></div>
3097 </td></tr></table>
3098 <h3 id="wysiwygformfield"><code>WysiwygFormField</code><a class="headerlink" href="#wysiwygformfield" title="Permanent link">#</a></h3>
3099 <p><code>WysiwygFormField</code> is used for wysiwyg editor form fields.
3100 This class should, in general, not be used directly but only via <code>WysiwygFormContainer</code>.
3101 The class implements <code>IAttributeFormField</code>, <code>IMaximumLengthFormField</code>, <code>IMinimumLengthFormField</code>, and <code>IObjectTypeFormNode</code> and requires an object type of the object type definition <code>com.woltlab.wcf.message</code>.
3102 The following methods are specific to this form field class:</p>
3103 <ul>
3104 <li><code>autosaveId($autosaveId)</code> and <code>getAutosaveId()</code> can be used enable automatically saving the current editor contents in the browser using the given id.
3105 An empty string signals that autosaving is disabled.</li>
3106 <li><code>lastEditTime($lastEditTime)</code> and <code>getLastEditTime()</code> can be used to set the last time the contents have been edited and saved so that the JavaScript can determine if the contents stored in the browser are older or newer.
3107 <code>0</code> signals that no last edit time has been set.</li>
3108 <li><code>supportAttachments($supportAttachments)</code> and <code>supportsAttachments()</code> can be used to set and check if the form field supports attachments.</li>
3109 </ul>
3110 <p>!!! warning "It is not sufficient to simply signal attachment support via these methods for attachments to work. These methods are relevant internally to signal the Javascript code that the editor supports attachments. Actual attachment support is provided by <code>WysiwygAttachmentFormField</code>."
3111 - <code>supportMentions($supportMentions)</code> and <code>supportsMentions()</code> can be used to set and check if the form field supports mentions of other users.</p>
3112 <p><code>WysiwygFormField</code> objects register a <a href="../validation_data/#customformfielddataprocessor">custom form field data processor</a> to add the relevant simple ACL data array into the <code>$parameters</code> array directly using the object property as the array key.</p>
3113 <h3 id="twysiwygformnode"><code>TWysiwygFormNode</code><a class="headerlink" href="#twysiwygformnode" title="Permanent link">#</a></h3>
3114 <p>All form nodes that need to know the id of the <code>WysiwygFormField</code> field should use <code>TWysiwygFormNode</code>.
3115 This trait provides <code>getWysiwygId()</code> and <code>wysiwygId($wysiwygId)</code> to get and set the relevant wysiwyg editor id.</p>
3116 <h2 id="single-use-form-fields">Single-Use Form Fields<a class="headerlink" href="#single-use-form-fields" title="Permanent link">#</a></h2>
3117 <p>The following form fields are specific for certain forms and hardly reusable in other contexts.</p>
3118 <h3 id="bbcodeattributesformfield"><code>BBCodeAttributesFormField</code><a class="headerlink" href="#bbcodeattributesformfield" title="Permanent link">#</a></h3>
3119 <p><code>DevtoolsProjectExcludedPackagesFormField</code> is a form field for setting the attributes of a BBCode.</p>
3120 <h3 id="devtoolsprojectexcludedpackagesformfield"><code>DevtoolsProjectExcludedPackagesFormField</code><a class="headerlink" href="#devtoolsprojectexcludedpackagesformfield" title="Permanent link">#</a></h3>
3121 <p><code>DevtoolsProjectExcludedPackagesFormField</code> is a form field for setting the excluded packages of a devtools project.</p>
3122 <h3 id="devtoolsprojectinstructionsformfield"><code>DevtoolsProjectInstructionsFormField</code><a class="headerlink" href="#devtoolsprojectinstructionsformfield" title="Permanent link">#</a></h3>
3123 <p><code>DevtoolsProjectExcludedPackagesFormField</code> is a form field for setting the installation and update instructions of a devtools project.</p>
3124 <h3 id="devtoolsprojectoptionalpackagesformfield"><code>DevtoolsProjectOptionalPackagesFormField</code><a class="headerlink" href="#devtoolsprojectoptionalpackagesformfield" title="Permanent link">#</a></h3>
3125 <p><code>DevtoolsProjectExcludedPackagesFormField</code> is a form field for setting the optional packages of a devtools project.</p>
3126 <h3 id="devtoolsprojectrequiredpackagesformfield"><code>DevtoolsProjectRequiredPackagesFormField</code><a class="headerlink" href="#devtoolsprojectrequiredpackagesformfield" title="Permanent link">#</a></h3>
3127 <p><code>DevtoolsProjectExcludedPackagesFormField</code> is a form field for setting the required packages of a devtools project.</p>
3128
3129
3130
3131
3132 <hr>
3133 <div class="md-source-date">
3134 <small>
3135
3136 Last update: 2021-01-16
3137
3138 </small>
3139 </div>
3140
3141
3142
3143
3144
3145
3146
3147
3148 </article>
3149 </div>
3150 </div>
3151
3152 </main>
3153
3154
3155 <footer class="md-footer">
3156
3157 <nav class="md-footer__inner md-grid" aria-label="Footer">
3158
3159 <a href="../structure/" class="md-footer__link md-footer__link--prev" rel="prev">
3160 <div class="md-footer__button md-icon">
3161 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
3162 </div>
3163 <div class="md-footer__title">
3164 <div class="md-ellipsis">
3165 <span class="md-footer__direction">
3166 Previous
3167 </span>
3168 Structure
3169 </div>
3170 </div>
3171 </a>
3172
3173
3174 <a href="../validation_data/" class="md-footer__link md-footer__link--next" rel="next">
3175 <div class="md-footer__title">
3176 <div class="md-ellipsis">
3177 <span class="md-footer__direction">
3178 Next
3179 </span>
3180 Validation and Data
3181 </div>
3182 </div>
3183 <div class="md-footer__button md-icon">
3184 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
3185 </div>
3186 </a>
3187
3188 </nav>
3189
3190 <div class="md-footer-meta md-typeset">
3191 <div class="md-footer-meta__inner md-grid">
3192 <div class="md-footer-copyright">
3193
3194 <div class="md-footer-copyright__highlight">
3195 Copyright © 2020 WoltLab GmbH
3196 </div>
3197
3198 Made with
3199 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
3200 Material for MkDocs
3201 </a>
3202
3203 </div>
3204 <div class="md-footer-copyright">
3205 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
3206 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
3207 </div>
3208 </div>
3209 </div>
3210 </footer>
3211
3212 </div>
3213 <div class="md-dialog" data-md-component="dialog">
3214 <div class="md-dialog__inner md-typeset"></div>
3215 </div>
3216 <script id="__config" type="application/json">{"base": "../../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../../assets/javascripts/workers/search.fe42c31b.min.js", "version": {"provider": "mike"}}</script>
3217
3218
3219 <script src="../../../../assets/javascripts/bundle.4ea5477f.min.js"></script>
3220
3221
3222 </body>
3223 </html>