8d785c97ddc762bf60a455092bc1417e90945a2c
[GitHub/WoltLab/woltlab.github.io.git] / 6.0 / 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 <link rel="canonical" href="https://docs.woltlab.com/6.0/php/api/form_builder/form_fields/">
12
13
14 <link rel="prev" href="../structure/">
15
16
17 <link rel="next" href="../validation_data/">
18
19 <link rel="icon" href="../../../../assets/default.favicon.ico">
20 <meta name="generator" content="mkdocs-1.5.1, mkdocs-material-9.1.21">
21
22
23
24 <title>Fields - WoltLab Suite Documentation</title>
25
26
27
28 <link rel="stylesheet" href="../../../../assets/stylesheets/main.eebd395e.min.css">
29
30
31 <link rel="stylesheet" href="../../../../assets/stylesheets/palette.ecc896b0.min.css">
32
33
34
35
36
37
38
39
40
41 <link rel="stylesheet" href="../../../../stylesheets/extra.css">
42
43 <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
44
45
46
47
48
49
50 </head>
51
52
53
54
55
56
57
58 <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="indigo">
59
60
61
62 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
63 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
64 <label class="md-overlay" for="__drawer"></label>
65 <div data-md-component="skip">
66
67
68 <a href="#form-builder-fields" class="md-skip">
69 Skip to content
70 </a>
71
72 </div>
73 <div data-md-component="announce">
74
75 <aside class="md-banner">
76 <div class="md-banner__inner md-grid md-typeset">
77
78
79 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
80
81 </div>
82
83 </aside>
84
85 </div>
86
87 <div data-md-color-scheme="default" data-md-component="outdated" hidden>
88
89 </div>
90
91
92
93
94
95
96 <header class="md-header md-header--shadow" data-md-component="header">
97 <nav class="md-header__inner md-grid" aria-label="Header">
98 <a href="../../../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
99
100 <img src="../../../../assets/logo.png" alt="logo">
101
102 </a>
103 <label class="md-header__button md-icon" for="__drawer">
104 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
105 </label>
106 <div class="md-header__title" data-md-component="header-title">
107 <div class="md-header__ellipsis">
108 <div class="md-header__topic">
109 <span class="md-ellipsis">
110 WoltLab Suite Documentation
111 </span>
112 </div>
113 <div class="md-header__topic" data-md-component="header-topic">
114 <span class="md-ellipsis">
115
116 Fields
117
118 </span>
119 </div>
120 </div>
121 </div>
122
123
124
125
126
127 <label class="md-header__button md-icon" for="__search">
128 <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>
129 </label>
130 <div class="md-search" data-md-component="search" role="dialog">
131 <label class="md-search__overlay" for="__search"></label>
132 <div class="md-search__inner" role="search">
133 <form class="md-search__form" name="search">
134 <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" required>
135 <label class="md-search__icon md-icon" for="__search">
136 <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>
137 <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>
138 </label>
139 <nav class="md-search__options" aria-label="Search">
140
141 <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
142 <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>
143 </button>
144 </nav>
145
146 </form>
147 <div class="md-search__output">
148 <div class="md-search__scrollwrap" data-md-scrollfix>
149 <div class="md-search-result" data-md-component="search-result">
150 <div class="md-search-result__meta">
151 Initializing search
152 </div>
153 <ol class="md-search-result__list" role="presentation"></ol>
154 </div>
155 </div>
156 </div>
157 </div>
158 </div>
159
160
161 <div class="md-header__source">
162 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
163 <div class="md-source__icon md-icon">
164
165 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><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>
166 </div>
167 <div class="md-source__repository">
168 GitHub
169 </div>
170 </a>
171 </div>
172
173 </nav>
174
175 </header>
176
177 <div class="md-container" data-md-component="container">
178
179
180
181
182
183
184 <main class="md-main" data-md-component="main">
185 <div class="md-main__inner md-grid">
186
187
188
189 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
190 <div class="md-sidebar__scrollwrap">
191 <div class="md-sidebar__inner">
192
193
194
195 <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
196 <label class="md-nav__title" for="__drawer">
197 <a href="../../../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
198
199 <img src="../../../../assets/logo.png" alt="logo">
200
201 </a>
202 WoltLab Suite Documentation
203 </label>
204
205 <div class="md-nav__source">
206 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
207 <div class="md-source__icon md-icon">
208
209 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><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>
210 </div>
211 <div class="md-source__repository">
212 GitHub
213 </div>
214 </a>
215 </div>
216
217 <ul class="md-nav__list" data-md-scrollfix>
218
219
220
221
222
223
224
225
226 <li class="md-nav__item">
227 <a href="../../../../getting-started/" class="md-nav__link">
228 Getting Started
229 </a>
230 </li>
231
232
233
234
235
236
237
238
239
240
241
242
243
244 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
245
246
247
248
249 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
250
251
252
253 <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
254 PHP API
255 <span class="md-nav__icon md-icon"></span>
256 </label>
257
258 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
259 <label class="md-nav__title" for="__nav_2">
260 <span class="md-nav__icon md-icon"></span>
261 PHP API
262 </label>
263 <ul class="md-nav__list" data-md-scrollfix>
264
265
266
267
268
269
270 <li class="md-nav__item">
271 <a href="../../../pages/" class="md-nav__link">
272 Pages
273 </a>
274 </li>
275
276
277
278
279
280
281
282
283
284 <li class="md-nav__item">
285 <a href="../../../database-objects/" class="md-nav__link">
286 Database Objects
287 </a>
288 </li>
289
290
291
292
293
294
295
296
297
298 <li class="md-nav__item">
299 <a href="../../../database-access/" class="md-nav__link">
300 Database Access
301 </a>
302 </li>
303
304
305
306
307
308
309
310
311
312 <li class="md-nav__item">
313 <a href="../../../exceptions/" class="md-nav__link">
314 Exceptions
315 </a>
316 </li>
317
318
319
320
321
322
323
324
325
326
327
328
329 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
330
331
332
333
334 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5" checked>
335
336
337
338 <label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0">
339 API
340 <span class="md-nav__icon md-icon"></span>
341 </label>
342
343 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="true">
344 <label class="md-nav__title" for="__nav_2_5">
345 <span class="md-nav__icon md-icon"></span>
346 API
347 </label>
348 <ul class="md-nav__list" data-md-scrollfix>
349
350
351
352
353
354
355
356 <li class="md-nav__item md-nav__item--nested">
357
358
359
360
361 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_1" >
362
363
364
365 <label class="md-nav__link" for="__nav_2_5_1" id="__nav_2_5_1_label" tabindex="0">
366 Caches
367 <span class="md-nav__icon md-icon"></span>
368 </label>
369
370 <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_1_label" aria-expanded="false">
371 <label class="md-nav__title" for="__nav_2_5_1">
372 <span class="md-nav__icon md-icon"></span>
373 Caches
374 </label>
375 <ul class="md-nav__list" data-md-scrollfix>
376
377
378
379
380
381
382 <li class="md-nav__item">
383 <a href="../../caches/" class="md-nav__link">
384 Overview
385 </a>
386 </li>
387
388
389
390
391
392
393
394
395
396 <li class="md-nav__item">
397 <a href="../../caches_persistent-caches/" class="md-nav__link">
398 Persistent Caches
399 </a>
400 </li>
401
402
403
404
405
406
407
408
409
410 <li class="md-nav__item">
411 <a href="../../caches_runtime-caches/" class="md-nav__link">
412 Runtime Caches
413 </a>
414 </li>
415
416
417
418
419 </ul>
420 </nav>
421 </li>
422
423
424
425
426
427
428
429
430
431 <li class="md-nav__item">
432 <a href="../../comments/" class="md-nav__link">
433 Comments
434 </a>
435 </li>
436
437
438
439
440
441
442
443
444
445 <li class="md-nav__item">
446 <a href="../../cronjobs/" class="md-nav__link">
447 Cronjobs
448 </a>
449 </li>
450
451
452
453
454
455
456
457
458
459 <li class="md-nav__item">
460 <a href="../../events/" class="md-nav__link">
461 Events
462 </a>
463 </li>
464
465
466
467
468
469
470
471
472
473
474
475
476 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
477
478
479
480
481 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_5" checked>
482
483
484
485 <label class="md-nav__link" for="__nav_2_5_5" id="__nav_2_5_5_label" tabindex="0">
486 Form Builder
487 <span class="md-nav__icon md-icon"></span>
488 </label>
489
490 <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_5_label" aria-expanded="true">
491 <label class="md-nav__title" for="__nav_2_5_5">
492 <span class="md-nav__icon md-icon"></span>
493 Form Builder
494 </label>
495 <ul class="md-nav__list" data-md-scrollfix>
496
497
498
499
500
501
502 <li class="md-nav__item">
503 <a href="../overview/" class="md-nav__link">
504 Overview
505 </a>
506 </li>
507
508
509
510
511
512
513
514
515
516 <li class="md-nav__item">
517 <a href="../structure/" class="md-nav__link">
518 Structure
519 </a>
520 </li>
521
522
523
524
525
526
527
528
529
530
531
532 <li class="md-nav__item md-nav__item--active">
533
534 <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
535
536
537
538
539
540 <label class="md-nav__link md-nav__link--active" for="__toc">
541 Fields
542 <span class="md-nav__icon md-icon"></span>
543 </label>
544
545 <a href="./" class="md-nav__link md-nav__link--active">
546 Fields
547 </a>
548
549
550
551 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
552
553
554
555
556
557
558 <label class="md-nav__title" for="__toc">
559 <span class="md-nav__icon md-icon"></span>
560 Table of contents
561 </label>
562 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
563
564 <li class="md-nav__item">
565 <a href="#abstract-form-fields" class="md-nav__link">
566 Abstract Form Fields
567 </a>
568
569 <nav class="md-nav" aria-label="Abstract Form Fields">
570 <ul class="md-nav__list">
571
572 <li class="md-nav__item">
573 <a href="#abstractformfield" class="md-nav__link">
574 AbstractFormField
575 </a>
576
577 </li>
578
579 <li class="md-nav__item">
580 <a href="#abstractnumericformfield" class="md-nav__link">
581 AbstractNumericFormField
582 </a>
583
584 </li>
585
586 <li class="md-nav__item">
587 <a href="#abstractformfielddecorator" class="md-nav__link">
588 AbstractFormFieldDecorator
589 </a>
590
591 </li>
592
593 </ul>
594 </nav>
595
596 </li>
597
598 <li class="md-nav__item">
599 <a href="#general-form-fields" class="md-nav__link">
600 General Form Fields
601 </a>
602
603 <nav class="md-nav" aria-label="General Form Fields">
604 <ul class="md-nav__list">
605
606 <li class="md-nav__item">
607 <a href="#booleanformfield" class="md-nav__link">
608 BooleanFormField
609 </a>
610
611 </li>
612
613 <li class="md-nav__item">
614 <a href="#checkboxformfield" class="md-nav__link">
615 CheckboxFormField
616 </a>
617
618 </li>
619
620 <li class="md-nav__item">
621 <a href="#classnameformfield" class="md-nav__link">
622 ClassNameFormField
623 </a>
624
625 </li>
626
627 <li class="md-nav__item">
628 <a href="#dateformfield" class="md-nav__link">
629 DateFormField
630 </a>
631
632 </li>
633
634 <li class="md-nav__item">
635 <a href="#descriptionformfield" class="md-nav__link">
636 DescriptionFormField
637 </a>
638
639 </li>
640
641 <li class="md-nav__item">
642 <a href="#emailformfield" class="md-nav__link">
643 EmailFormField
644 </a>
645
646 </li>
647
648 <li class="md-nav__item">
649 <a href="#floatformfield" class="md-nav__link">
650 FloatFormField
651 </a>
652
653 </li>
654
655 <li class="md-nav__item">
656 <a href="#hiddenformfield" class="md-nav__link">
657 HiddenFormField
658 </a>
659
660 </li>
661
662 <li class="md-nav__item">
663 <a href="#iconformfield" class="md-nav__link">
664 IconFormField
665 </a>
666
667 </li>
668
669 <li class="md-nav__item">
670 <a href="#integerformfield" class="md-nav__link">
671 IntegerFormField
672 </a>
673
674 </li>
675
676 <li class="md-nav__item">
677 <a href="#isdisabledformfield" class="md-nav__link">
678 IsDisabledFormField
679 </a>
680
681 </li>
682
683 <li class="md-nav__item">
684 <a href="#itemlistformfield" class="md-nav__link">
685 ItemListFormField
686 </a>
687
688 </li>
689
690 <li class="md-nav__item">
691 <a href="#multilinetextformfield" class="md-nav__link">
692 MultilineTextFormField
693 </a>
694
695 </li>
696
697 <li class="md-nav__item">
698 <a href="#multipleselectionformfield" class="md-nav__link">
699 MultipleSelectionFormField
700 </a>
701
702 </li>
703
704 <li class="md-nav__item">
705 <a href="#radiobuttonformfield" class="md-nav__link">
706 RadioButtonFormField
707 </a>
708
709 </li>
710
711 <li class="md-nav__item">
712 <a href="#ratingformfield" class="md-nav__link">
713 RatingFormField
714 </a>
715
716 </li>
717
718 <li class="md-nav__item">
719 <a href="#selectformfield" class="md-nav__link">
720 SelectFormField
721 </a>
722
723 </li>
724
725 <li class="md-nav__item">
726 <a href="#showorderformfield" class="md-nav__link">
727 ShowOrderFormField
728 </a>
729
730 </li>
731
732 <li class="md-nav__item">
733 <a href="#singleselectionformfield" class="md-nav__link">
734 SingleSelectionFormField
735 </a>
736
737 </li>
738
739 <li class="md-nav__item">
740 <a href="#sortorderformfield" class="md-nav__link">
741 SortOrderFormField
742 </a>
743
744 </li>
745
746 <li class="md-nav__item">
747 <a href="#textformfield" class="md-nav__link">
748 TextFormField
749 </a>
750
751 </li>
752
753 <li class="md-nav__item">
754 <a href="#titleformfield" class="md-nav__link">
755 TitleFormField
756 </a>
757
758 </li>
759
760 <li class="md-nav__item">
761 <a href="#urlformfield" class="md-nav__link">
762 UrlFormField
763 </a>
764
765 </li>
766
767 </ul>
768 </nav>
769
770 </li>
771
772 <li class="md-nav__item">
773 <a href="#specific-fields" class="md-nav__link">
774 Specific Fields
775 </a>
776
777 <nav class="md-nav" aria-label="Specific Fields">
778 <ul class="md-nav__list">
779
780 <li class="md-nav__item">
781 <a href="#aclformfield" class="md-nav__link">
782 AclFormField
783 </a>
784
785 </li>
786
787 <li class="md-nav__item">
788 <a href="#buttonformfield" class="md-nav__link">
789 ButtonFormField
790 </a>
791
792 </li>
793
794 <li class="md-nav__item">
795 <a href="#captchaformfield" class="md-nav__link">
796 CaptchaFormField
797 </a>
798
799 </li>
800
801 <li class="md-nav__item">
802 <a href="#colorformfield" class="md-nav__link">
803 ColorFormField
804 </a>
805
806 </li>
807
808 <li class="md-nav__item">
809 <a href="#contentlanguageformfield" class="md-nav__link">
810 ContentLanguageFormField
811 </a>
812
813 </li>
814
815 <li class="md-nav__item">
816 <a href="#labelformfield" class="md-nav__link">
817 LabelFormField
818 </a>
819
820 </li>
821
822 <li class="md-nav__item">
823 <a href="#optionformfield" class="md-nav__link">
824 OptionFormField
825 </a>
826
827 </li>
828
829 <li class="md-nav__item">
830 <a href="#simpleaclformfield" class="md-nav__link">
831 SimpleAclFormField
832 </a>
833
834 </li>
835
836 <li class="md-nav__item">
837 <a href="#singlemediaselectionformfield" class="md-nav__link">
838 SingleMediaSelectionFormField
839 </a>
840
841 </li>
842
843 <li class="md-nav__item">
844 <a href="#tagformfield" class="md-nav__link">
845 TagFormField
846 </a>
847
848 </li>
849
850 <li class="md-nav__item">
851 <a href="#uploadformfield" class="md-nav__link">
852 UploadFormField
853 </a>
854
855 <nav class="md-nav" aria-label="UploadFormField">
856 <ul class="md-nav__list">
857
858 <li class="md-nav__item">
859 <a href="#provide-value-from-database-object" class="md-nav__link">
860 Provide value from database object
861 </a>
862
863 </li>
864
865 <li class="md-nav__item">
866 <a href="#process-files" class="md-nav__link">
867 Process files
868 </a>
869
870 </li>
871
872 </ul>
873 </nav>
874
875 </li>
876
877 <li class="md-nav__item">
878 <a href="#userformfield" class="md-nav__link">
879 UserFormField
880 </a>
881
882 </li>
883
884 <li class="md-nav__item">
885 <a href="#userpasswordfield" class="md-nav__link">
886 UserPasswordField
887 </a>
888
889 </li>
890
891 <li class="md-nav__item">
892 <a href="#usergroupoptionformfield" class="md-nav__link">
893 UserGroupOptionFormField
894 </a>
895
896 </li>
897
898 <li class="md-nav__item">
899 <a href="#usernameformfield" class="md-nav__link">
900 UsernameFormField
901 </a>
902
903 </li>
904
905 </ul>
906 </nav>
907
908 </li>
909
910 <li class="md-nav__item">
911 <a href="#wysiwyg-form-container" class="md-nav__link">
912 Wysiwyg form container
913 </a>
914
915 <nav class="md-nav" aria-label="Wysiwyg form container">
916 <ul class="md-nav__list">
917
918 <li class="md-nav__item">
919 <a href="#wysiwygattachmentformfield" class="md-nav__link">
920 WysiwygAttachmentFormField
921 </a>
922
923 </li>
924
925 <li class="md-nav__item">
926 <a href="#wysiwygpollformcontainer" class="md-nav__link">
927 WysiwygPollFormContainer
928 </a>
929
930 </li>
931
932 <li class="md-nav__item">
933 <a href="#wysiwygsmileyformcontainer" class="md-nav__link">
934 WysiwygSmileyFormContainer
935 </a>
936
937 <nav class="md-nav" aria-label="WysiwygSmileyFormContainer">
938 <ul class="md-nav__list">
939
940 <li class="md-nav__item">
941 <a href="#wysiwygsmileyformnode" class="md-nav__link">
942 WysiwygSmileyFormNode
943 </a>
944
945 </li>
946
947 </ul>
948 </nav>
949
950 </li>
951
952 <li class="md-nav__item">
953 <a href="#example" class="md-nav__link">
954 Example
955 </a>
956
957 </li>
958
959 <li class="md-nav__item">
960 <a href="#wysiwygformfield" class="md-nav__link">
961 WysiwygFormField
962 </a>
963
964 </li>
965
966 <li class="md-nav__item">
967 <a href="#twysiwygformnode" class="md-nav__link">
968 TWysiwygFormNode
969 </a>
970
971 </li>
972
973 </ul>
974 </nav>
975
976 </li>
977
978 <li class="md-nav__item">
979 <a href="#application-specific-form-fields" class="md-nav__link">
980 Application-Specific Form Fields
981 </a>
982
983 <nav class="md-nav" aria-label="Application-Specific Form Fields">
984 <ul class="md-nav__list">
985
986 <li class="md-nav__item">
987 <a href="#woltlab-suite-forum" class="md-nav__link">
988 WoltLab Suite Forum
989 </a>
990
991 <nav class="md-nav" aria-label="WoltLab Suite Forum">
992 <ul class="md-nav__list">
993
994 <li class="md-nav__item">
995 <a href="#multipleboardselectionformfield" class="md-nav__link">
996 MultipleBoardSelectionFormField
997 </a>
998
999 </li>
1000
1001 </ul>
1002 </nav>
1003
1004 </li>
1005
1006 </ul>
1007 </nav>
1008
1009 </li>
1010
1011 <li class="md-nav__item">
1012 <a href="#single-use-form-fields" class="md-nav__link">
1013 Single-Use Form Fields
1014 </a>
1015
1016 <nav class="md-nav" aria-label="Single-Use Form Fields">
1017 <ul class="md-nav__list">
1018
1019 <li class="md-nav__item">
1020 <a href="#bbcodeattributesformfield" class="md-nav__link">
1021 BBCodeAttributesFormField
1022 </a>
1023
1024 </li>
1025
1026 <li class="md-nav__item">
1027 <a href="#devtoolsprojectexcludedpackagesformfield" class="md-nav__link">
1028 DevtoolsProjectExcludedPackagesFormField
1029 </a>
1030
1031 </li>
1032
1033 <li class="md-nav__item">
1034 <a href="#devtoolsprojectinstructionsformfield" class="md-nav__link">
1035 DevtoolsProjectInstructionsFormField
1036 </a>
1037
1038 </li>
1039
1040 <li class="md-nav__item">
1041 <a href="#devtoolsprojectoptionalpackagesformfield" class="md-nav__link">
1042 DevtoolsProjectOptionalPackagesFormField
1043 </a>
1044
1045 </li>
1046
1047 <li class="md-nav__item">
1048 <a href="#devtoolsprojectrequiredpackagesformfield" class="md-nav__link">
1049 DevtoolsProjectRequiredPackagesFormField
1050 </a>
1051
1052 </li>
1053
1054 </ul>
1055 </nav>
1056
1057 </li>
1058
1059 </ul>
1060
1061 </nav>
1062
1063 </li>
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073 <li class="md-nav__item">
1074 <a href="../validation_data/" class="md-nav__link">
1075 Validation and Data
1076 </a>
1077 </li>
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087 <li class="md-nav__item">
1088 <a href="../dependencies/" class="md-nav__link">
1089 Dependencies
1090 </a>
1091 </li>
1092
1093
1094
1095
1096 </ul>
1097 </nav>
1098 </li>
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108 <li class="md-nav__item">
1109 <a href="../../package_installation_plugins/" class="md-nav__link">
1110 Package Installation Plugins
1111 </a>
1112 </li>
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122 <li class="md-nav__item">
1123 <a href="../../user_activity_points/" class="md-nav__link">
1124 User Activity Points
1125 </a>
1126 </li>
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136 <li class="md-nav__item">
1137 <a href="../../user_notifications/" class="md-nav__link">
1138 User Notifications
1139 </a>
1140 </li>
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150 <li class="md-nav__item">
1151 <a href="../../sitemaps/" class="md-nav__link">
1152 Sitemaps
1153 </a>
1154 </li>
1155
1156
1157
1158
1159 </ul>
1160 </nav>
1161 </li>
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171 <li class="md-nav__item">
1172 <a href="../../../code-style/" class="md-nav__link">
1173 Code Style
1174 </a>
1175 </li>
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185 <li class="md-nav__item">
1186 <a href="../../../apps/" class="md-nav__link">
1187 Apps
1188 </a>
1189 </li>
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199 <li class="md-nav__item">
1200 <a href="../../../gdpr/" class="md-nav__link">
1201 GDPR
1202 </a>
1203 </li>
1204
1205
1206
1207
1208 </ul>
1209 </nav>
1210 </li>
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222 <li class="md-nav__item md-nav__item--nested">
1223
1224
1225
1226
1227 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
1228
1229
1230
1231 <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
1232 Languages, Templates & CSS
1233 <span class="md-nav__icon md-icon"></span>
1234 </label>
1235
1236 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
1237 <label class="md-nav__title" for="__nav_3">
1238 <span class="md-nav__icon md-icon"></span>
1239 Languages, Templates & CSS
1240 </label>
1241 <ul class="md-nav__list" data-md-scrollfix>
1242
1243
1244
1245
1246
1247
1248 <li class="md-nav__item">
1249 <a href="../../../../view/languages/" class="md-nav__link">
1250 Languages
1251 </a>
1252 </li>
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262 <li class="md-nav__item">
1263 <a href="../../../../view/templates/" class="md-nav__link">
1264 Templates
1265 </a>
1266 </li>
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276 <li class="md-nav__item">
1277 <a href="../../../../view/template-modifiers/" class="md-nav__link">
1278 Template Modifiers
1279 </a>
1280 </li>
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290 <li class="md-nav__item">
1291 <a href="../../../../view/template-plugins/" class="md-nav__link">
1292 Template Plugins
1293 </a>
1294 </li>
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304 <li class="md-nav__item">
1305 <a href="../../../../view/css/" class="md-nav__link">
1306 CSS
1307 </a>
1308 </li>
1309
1310
1311
1312
1313 </ul>
1314 </nav>
1315 </li>
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327 <li class="md-nav__item md-nav__item--nested">
1328
1329
1330
1331
1332 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
1333
1334
1335
1336 <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
1337 TypeScript and JavaScript API
1338 <span class="md-nav__icon md-icon"></span>
1339 </label>
1340
1341 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
1342 <label class="md-nav__title" for="__nav_4">
1343 <span class="md-nav__icon md-icon"></span>
1344 TypeScript and JavaScript API
1345 </label>
1346 <ul class="md-nav__list" data-md-scrollfix>
1347
1348
1349
1350
1351
1352
1353 <li class="md-nav__item">
1354 <a href="../../../../javascript/general-usage/" class="md-nav__link">
1355 General Usage
1356 </a>
1357 </li>
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367 <li class="md-nav__item">
1368 <a href="../../../../javascript/typescript/" class="md-nav__link">
1369 TypeScript
1370 </a>
1371 </li>
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382 <li class="md-nav__item md-nav__item--nested">
1383
1384
1385
1386
1387 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
1388
1389
1390
1391 <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
1392 Components
1393 <span class="md-nav__icon md-icon"></span>
1394 </label>
1395
1396 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
1397 <label class="md-nav__title" for="__nav_4_3">
1398 <span class="md-nav__icon md-icon"></span>
1399 Components
1400 </label>
1401 <ul class="md-nav__list" data-md-scrollfix>
1402
1403
1404
1405
1406
1407
1408 <li class="md-nav__item">
1409 <a href="../../../../javascript/components_ckeditor5/" class="md-nav__link">
1410 CKEditor 5
1411 </a>
1412 </li>
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422 <li class="md-nav__item">
1423 <a href="../../../../javascript/components_confirmation/" class="md-nav__link">
1424 Confirmation
1425 </a>
1426 </li>
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436 <li class="md-nav__item">
1437 <a href="../../../../javascript/components_dialog/" class="md-nav__link">
1438 Dialog
1439 </a>
1440 </li>
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450 <li class="md-nav__item">
1451 <a href="../../../../javascript/components_google_maps/" class="md-nav__link">
1452 Google Maps
1453 </a>
1454 </li>
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464 <li class="md-nav__item">
1465 <a href="../../../../javascript/components_pagination/" class="md-nav__link">
1466 Pagination
1467 </a>
1468 </li>
1469
1470
1471
1472
1473 </ul>
1474 </nav>
1475 </li>
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486 <li class="md-nav__item md-nav__item--nested">
1487
1488
1489
1490
1491 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" >
1492
1493
1494
1495 <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
1496 New API
1497 <span class="md-nav__icon md-icon"></span>
1498 </label>
1499
1500 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
1501 <label class="md-nav__title" for="__nav_4_4">
1502 <span class="md-nav__icon md-icon"></span>
1503 New API
1504 </label>
1505 <ul class="md-nav__list" data-md-scrollfix>
1506
1507
1508
1509
1510
1511
1512 <li class="md-nav__item">
1513 <a href="../../../../javascript/new-api_writing-a-module/" class="md-nav__link">
1514 Writing a module
1515 </a>
1516 </li>
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526 <li class="md-nav__item">
1527 <a href="../../../../javascript/new-api_core/" class="md-nav__link">
1528 Core Functions
1529 </a>
1530 </li>
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540 <li class="md-nav__item">
1541 <a href="../../../../javascript/new-api_dom/" class="md-nav__link">
1542 DOM
1543 </a>
1544 </li>
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554 <li class="md-nav__item">
1555 <a href="../../../../javascript/new-api_events/" class="md-nav__link">
1556 Event Handling
1557 </a>
1558 </li>
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568 <li class="md-nav__item">
1569 <a href="../../../../javascript/new-api_ajax/" class="md-nav__link">
1570 Ajax
1571 </a>
1572 </li>
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582 <li class="md-nav__item">
1583 <a href="../../../../javascript/new-api_dialogs/" class="md-nav__link">
1584 Dialogs
1585 </a>
1586 </li>
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596 <li class="md-nav__item">
1597 <a href="../../../../javascript/new-api_browser/" class="md-nav__link">
1598 Browser and Screen Sizes
1599 </a>
1600 </li>
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610 <li class="md-nav__item">
1611 <a href="../../../../javascript/new-api_ui/" class="md-nav__link">
1612 User Interface
1613 </a>
1614 </li>
1615
1616
1617
1618
1619 </ul>
1620 </nav>
1621 </li>
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631 <li class="md-nav__item">
1632 <a href="../../../../javascript/legacy-api/" class="md-nav__link">
1633 Legacy API
1634 </a>
1635 </li>
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645 <li class="md-nav__item">
1646 <a href="../../../../javascript/code-snippets/" class="md-nav__link">
1647 Code Snippets
1648 </a>
1649 </li>
1650
1651
1652
1653
1654 </ul>
1655 </nav>
1656 </li>
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668 <li class="md-nav__item md-nav__item--nested">
1669
1670
1671
1672
1673 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
1674
1675
1676
1677 <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
1678 Package Components
1679 <span class="md-nav__icon md-icon"></span>
1680 </label>
1681
1682 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
1683 <label class="md-nav__title" for="__nav_5">
1684 <span class="md-nav__icon md-icon"></span>
1685 Package Components
1686 </label>
1687 <ul class="md-nav__list" data-md-scrollfix>
1688
1689
1690
1691
1692
1693
1694 <li class="md-nav__item">
1695 <a href="../../../../package/package-xml/" class="md-nav__link">
1696 package.xml
1697 </a>
1698 </li>
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709 <li class="md-nav__item md-nav__item--nested">
1710
1711
1712
1713
1714 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
1715
1716
1717
1718 <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
1719 PIPs
1720 <span class="md-nav__icon md-icon"></span>
1721 </label>
1722
1723 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
1724 <label class="md-nav__title" for="__nav_5_2">
1725 <span class="md-nav__icon md-icon"></span>
1726 PIPs
1727 </label>
1728 <ul class="md-nav__list" data-md-scrollfix>
1729
1730
1731
1732
1733
1734
1735 <li class="md-nav__item">
1736 <a href="../../../../package/pip/" class="md-nav__link">
1737 Overview
1738 </a>
1739 </li>
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749 <li class="md-nav__item">
1750 <a href="../../../../package/pip/acl-option/" class="md-nav__link">
1751 aclOption
1752 </a>
1753 </li>
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763 <li class="md-nav__item">
1764 <a href="../../../../package/pip/acp-menu/" class="md-nav__link">
1765 acpMenu
1766 </a>
1767 </li>
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777 <li class="md-nav__item">
1778 <a href="../../../../package/pip/acp-search-provider/" class="md-nav__link">
1779 acpSearchProvider
1780 </a>
1781 </li>
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791 <li class="md-nav__item">
1792 <a href="../../../../package/pip/acp-template/" class="md-nav__link">
1793 acpTemplate
1794 </a>
1795 </li>
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805 <li class="md-nav__item">
1806 <a href="../../../../package/pip/acp-template-delete/" class="md-nav__link">
1807 acpTemplateDelete
1808 </a>
1809 </li>
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819 <li class="md-nav__item">
1820 <a href="../../../../package/pip/bbcode/" class="md-nav__link">
1821 bbcode
1822 </a>
1823 </li>
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833 <li class="md-nav__item">
1834 <a href="../../../../package/pip/box/" class="md-nav__link">
1835 box
1836 </a>
1837 </li>
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847 <li class="md-nav__item">
1848 <a href="../../../../package/pip/clipboard-action/" class="md-nav__link">
1849 clipboardAction
1850 </a>
1851 </li>
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861 <li class="md-nav__item">
1862 <a href="../../../../package/pip/core-object/" class="md-nav__link">
1863 coreObject
1864 </a>
1865 </li>
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875 <li class="md-nav__item">
1876 <a href="../../../../package/pip/cronjob/" class="md-nav__link">
1877 cronjob
1878 </a>
1879 </li>
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889 <li class="md-nav__item">
1890 <a href="../../../../package/pip/database/" class="md-nav__link">
1891 database
1892 </a>
1893 </li>
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903 <li class="md-nav__item">
1904 <a href="../../../../package/pip/event-listener/" class="md-nav__link">
1905 eventListener
1906 </a>
1907 </li>
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917 <li class="md-nav__item">
1918 <a href="../../../../package/pip/file/" class="md-nav__link">
1919 file
1920 </a>
1921 </li>
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931 <li class="md-nav__item">
1932 <a href="../../../../package/pip/file-delete/" class="md-nav__link">
1933 fileDelete
1934 </a>
1935 </li>
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945 <li class="md-nav__item">
1946 <a href="../../../../package/pip/language/" class="md-nav__link">
1947 language
1948 </a>
1949 </li>
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959 <li class="md-nav__item">
1960 <a href="../../../../package/pip/media-provider/" class="md-nav__link">
1961 mediaProvider
1962 </a>
1963 </li>
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973 <li class="md-nav__item">
1974 <a href="../../../../package/pip/menu/" class="md-nav__link">
1975 menu
1976 </a>
1977 </li>
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987 <li class="md-nav__item">
1988 <a href="../../../../package/pip/menu-item/" class="md-nav__link">
1989 menuItem
1990 </a>
1991 </li>
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001 <li class="md-nav__item">
2002 <a href="../../../../package/pip/object-type/" class="md-nav__link">
2003 objectType
2004 </a>
2005 </li>
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015 <li class="md-nav__item">
2016 <a href="../../../../package/pip/object-type-definition/" class="md-nav__link">
2017 objectTypeDefinition
2018 </a>
2019 </li>
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029 <li class="md-nav__item">
2030 <a href="../../../../package/pip/option/" class="md-nav__link">
2031 option
2032 </a>
2033 </li>
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043 <li class="md-nav__item">
2044 <a href="../../../../package/pip/page/" class="md-nav__link">
2045 page
2046 </a>
2047 </li>
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057 <li class="md-nav__item">
2058 <a href="../../../../package/pip/pip/" class="md-nav__link">
2059 pip
2060 </a>
2061 </li>
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071 <li class="md-nav__item">
2072 <a href="../../../../package/pip/script/" class="md-nav__link">
2073 script
2074 </a>
2075 </li>
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085 <li class="md-nav__item">
2086 <a href="../../../../package/pip/smiley/" class="md-nav__link">
2087 smiley
2088 </a>
2089 </li>
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099 <li class="md-nav__item">
2100 <a href="../../../../package/pip/sql/" class="md-nav__link">
2101 sql
2102 </a>
2103 </li>
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113 <li class="md-nav__item">
2114 <a href="../../../../package/pip/style/" class="md-nav__link">
2115 style
2116 </a>
2117 </li>
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127 <li class="md-nav__item">
2128 <a href="../../../../package/pip/template/" class="md-nav__link">
2129 template
2130 </a>
2131 </li>
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141 <li class="md-nav__item">
2142 <a href="../../../../package/pip/template-delete/" class="md-nav__link">
2143 templateDelete
2144 </a>
2145 </li>
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155 <li class="md-nav__item">
2156 <a href="../../../../package/pip/template-listener/" class="md-nav__link">
2157 templateListener
2158 </a>
2159 </li>
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169 <li class="md-nav__item">
2170 <a href="../../../../package/pip/user-group-option/" class="md-nav__link">
2171 userGroupOption
2172 </a>
2173 </li>
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183 <li class="md-nav__item">
2184 <a href="../../../../package/pip/user-menu/" class="md-nav__link">
2185 userMenu
2186 </a>
2187 </li>
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197 <li class="md-nav__item">
2198 <a href="../../../../package/pip/user-notification-event/" class="md-nav__link">
2199 userNotificationEvent
2200 </a>
2201 </li>
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211 <li class="md-nav__item">
2212 <a href="../../../../package/pip/user-option/" class="md-nav__link">
2213 userOption
2214 </a>
2215 </li>
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225 <li class="md-nav__item">
2226 <a href="../../../../package/pip/user-profile-menu/" class="md-nav__link">
2227 userProfileMenu
2228 </a>
2229 </li>
2230
2231
2232
2233
2234 </ul>
2235 </nav>
2236 </li>
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246 <li class="md-nav__item">
2247 <a href="../../../../package/database-php-api/" class="md-nav__link">
2248 Database PHP API
2249 </a>
2250 </li>
2251
2252
2253
2254
2255 </ul>
2256 </nav>
2257 </li>
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269 <li class="md-nav__item md-nav__item--nested">
2270
2271
2272
2273
2274 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
2275
2276
2277
2278 <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
2279 Migration
2280 <span class="md-nav__icon md-icon"></span>
2281 </label>
2282
2283 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
2284 <label class="md-nav__title" for="__nav_6">
2285 <span class="md-nav__icon md-icon"></span>
2286 Migration
2287 </label>
2288 <ul class="md-nav__list" data-md-scrollfix>
2289
2290
2291
2292
2293
2294
2295
2296 <li class="md-nav__item md-nav__item--nested">
2297
2298
2299
2300
2301 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_1" >
2302
2303
2304
2305 <label class="md-nav__link" for="__nav_6_1" id="__nav_6_1_label" tabindex="0">
2306 From WoltLab Suite 5.5
2307 <span class="md-nav__icon md-icon"></span>
2308 </label>
2309
2310 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_1_label" aria-expanded="false">
2311 <label class="md-nav__title" for="__nav_6_1">
2312 <span class="md-nav__icon md-icon"></span>
2313 From WoltLab Suite 5.5
2314 </label>
2315 <ul class="md-nav__list" data-md-scrollfix>
2316
2317
2318
2319
2320
2321
2322 <li class="md-nav__item">
2323 <a href="../../../../migration/wsc55/php/" class="md-nav__link">
2324 PHP API
2325 </a>
2326 </li>
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336 <li class="md-nav__item">
2337 <a href="../../../../migration/wsc55/javascript/" class="md-nav__link">
2338 TypeScript and JavaScript
2339 </a>
2340 </li>
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350 <li class="md-nav__item">
2351 <a href="../../../../migration/wsc55/templates/" class="md-nav__link">
2352 Templates
2353 </a>
2354 </li>
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364 <li class="md-nav__item">
2365 <a href="../../../../migration/wsc55/icons/" class="md-nav__link">
2366 Icons
2367 </a>
2368 </li>
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378 <li class="md-nav__item">
2379 <a href="../../../../migration/wsc55/dialogs/" class="md-nav__link">
2380 Dialogs
2381 </a>
2382 </li>
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392 <li class="md-nav__item">
2393 <a href="../../../../migration/wsc55/libraries/" class="md-nav__link">
2394 Third Party Libraries
2395 </a>
2396 </li>
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406 <li class="md-nav__item">
2407 <a href="../../../../migration/wsc55/deprecations_removals/" class="md-nav__link">
2408 Deprecations and Removals
2409 </a>
2410 </li>
2411
2412
2413
2414
2415 </ul>
2416 </nav>
2417 </li>
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428 <li class="md-nav__item md-nav__item--nested">
2429
2430
2431
2432
2433 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" >
2434
2435
2436
2437 <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
2438 From WoltLab Suite 5.4
2439 <span class="md-nav__icon md-icon"></span>
2440 </label>
2441
2442 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false">
2443 <label class="md-nav__title" for="__nav_6_2">
2444 <span class="md-nav__icon md-icon"></span>
2445 From WoltLab Suite 5.4
2446 </label>
2447 <ul class="md-nav__list" data-md-scrollfix>
2448
2449
2450
2451
2452
2453
2454 <li class="md-nav__item">
2455 <a href="../../../../migration/wsc54/php/" class="md-nav__link">
2456 PHP API
2457 </a>
2458 </li>
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468 <li class="md-nav__item">
2469 <a href="../../../../migration/wsc54/javascript/" class="md-nav__link">
2470 TypeScript and JavaScript
2471 </a>
2472 </li>
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482 <li class="md-nav__item">
2483 <a href="../../../../migration/wsc54/templates/" class="md-nav__link">
2484 Templates
2485 </a>
2486 </li>
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496 <li class="md-nav__item">
2497 <a href="../../../../migration/wsc54/libraries/" class="md-nav__link">
2498 Third Party Libraries
2499 </a>
2500 </li>
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510 <li class="md-nav__item">
2511 <a href="../../../../migration/wsc54/deprecations_removals/" class="md-nav__link">
2512 Deprecations and Removals
2513 </a>
2514 </li>
2515
2516
2517
2518
2519 </ul>
2520 </nav>
2521 </li>
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532 <li class="md-nav__item md-nav__item--nested">
2533
2534
2535
2536
2537 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_3" >
2538
2539
2540
2541 <label class="md-nav__link" for="__nav_6_3" id="__nav_6_3_label" tabindex="0">
2542 From WoltLab Suite 5.3
2543 <span class="md-nav__icon md-icon"></span>
2544 </label>
2545
2546 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_3_label" aria-expanded="false">
2547 <label class="md-nav__title" for="__nav_6_3">
2548 <span class="md-nav__icon md-icon"></span>
2549 From WoltLab Suite 5.3
2550 </label>
2551 <ul class="md-nav__list" data-md-scrollfix>
2552
2553
2554
2555
2556
2557
2558 <li class="md-nav__item">
2559 <a href="../../../../migration/wsc53/php/" class="md-nav__link">
2560 PHP API
2561 </a>
2562 </li>
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572 <li class="md-nav__item">
2573 <a href="../../../../migration/wsc53/session/" class="md-nav__link">
2574 Session Handling and Authentication
2575 </a>
2576 </li>
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586 <li class="md-nav__item">
2587 <a href="../../../../migration/wsc53/javascript/" class="md-nav__link">
2588 TypeScript and JavaScript
2589 </a>
2590 </li>
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600 <li class="md-nav__item">
2601 <a href="../../../../migration/wsc53/templates/" class="md-nav__link">
2602 Templates
2603 </a>
2604 </li>
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614 <li class="md-nav__item">
2615 <a href="../../../../migration/wsc53/libraries/" class="md-nav__link">
2616 Third Party Libraries
2617 </a>
2618 </li>
2619
2620
2621
2622
2623 </ul>
2624 </nav>
2625 </li>
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636 <li class="md-nav__item md-nav__item--nested">
2637
2638
2639
2640
2641 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_4" >
2642
2643
2644
2645 <label class="md-nav__link" for="__nav_6_4" id="__nav_6_4_label" tabindex="0">
2646 From WoltLab Suite 5.2
2647 <span class="md-nav__icon md-icon"></span>
2648 </label>
2649
2650 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_4_label" aria-expanded="false">
2651 <label class="md-nav__title" for="__nav_6_4">
2652 <span class="md-nav__icon md-icon"></span>
2653 From WoltLab Suite 5.2
2654 </label>
2655 <ul class="md-nav__list" data-md-scrollfix>
2656
2657
2658
2659
2660
2661
2662 <li class="md-nav__item">
2663 <a href="../../../../migration/wsc52/php/" class="md-nav__link">
2664 PHP API
2665 </a>
2666 </li>
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676 <li class="md-nav__item">
2677 <a href="../../../../migration/wsc52/templates/" class="md-nav__link">
2678 Templates and Languages
2679 </a>
2680 </li>
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690 <li class="md-nav__item">
2691 <a href="../../../../migration/wsc52/libraries/" class="md-nav__link">
2692 Third Party Libraries
2693 </a>
2694 </li>
2695
2696
2697
2698
2699 </ul>
2700 </nav>
2701 </li>
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712 <li class="md-nav__item md-nav__item--nested">
2713
2714
2715
2716
2717 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_5" >
2718
2719
2720
2721 <label class="md-nav__link" for="__nav_6_5" id="__nav_6_5_label" tabindex="0">
2722 From WoltLab Suite 3.1
2723 <span class="md-nav__icon md-icon"></span>
2724 </label>
2725
2726 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_5_label" aria-expanded="false">
2727 <label class="md-nav__title" for="__nav_6_5">
2728 <span class="md-nav__icon md-icon"></span>
2729 From WoltLab Suite 3.1
2730 </label>
2731 <ul class="md-nav__list" data-md-scrollfix>
2732
2733
2734
2735
2736
2737
2738 <li class="md-nav__item">
2739 <a href="../../../../migration/wsc31/php/" class="md-nav__link">
2740 PHP API
2741 </a>
2742 </li>
2743
2744
2745
2746
2747 </ul>
2748 </nav>
2749 </li>
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760 <li class="md-nav__item md-nav__item--nested">
2761
2762
2763
2764
2765 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_6" >
2766
2767
2768
2769 <label class="md-nav__link" for="__nav_6_6" id="__nav_6_6_label" tabindex="0">
2770 From WoltLab Suite 3.0
2771 <span class="md-nav__icon md-icon"></span>
2772 </label>
2773
2774 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_6_label" aria-expanded="false">
2775 <label class="md-nav__title" for="__nav_6_6">
2776 <span class="md-nav__icon md-icon"></span>
2777 From WoltLab Suite 3.0
2778 </label>
2779 <ul class="md-nav__list" data-md-scrollfix>
2780
2781
2782
2783
2784
2785
2786 <li class="md-nav__item">
2787 <a href="../../../../migration/wsc30/php/" class="md-nav__link">
2788 PHP API
2789 </a>
2790 </li>
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800 <li class="md-nav__item">
2801 <a href="../../../../migration/wsc30/javascript/" class="md-nav__link">
2802 JavaScript API
2803 </a>
2804 </li>
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814 <li class="md-nav__item">
2815 <a href="../../../../migration/wsc30/templates/" class="md-nav__link">
2816 Templates
2817 </a>
2818 </li>
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828 <li class="md-nav__item">
2829 <a href="../../../../migration/wsc30/css/" class="md-nav__link">
2830 CSS
2831 </a>
2832 </li>
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842 <li class="md-nav__item">
2843 <a href="../../../../migration/wsc30/package/" class="md-nav__link">
2844 Package Components
2845 </a>
2846 </li>
2847
2848
2849
2850
2851 </ul>
2852 </nav>
2853 </li>
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864 <li class="md-nav__item md-nav__item--nested">
2865
2866
2867
2868
2869 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" >
2870
2871
2872
2873 <label class="md-nav__link" for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
2874 From WCF 2.1
2875 <span class="md-nav__icon md-icon"></span>
2876 </label>
2877
2878 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="false">
2879 <label class="md-nav__title" for="__nav_6_7">
2880 <span class="md-nav__icon md-icon"></span>
2881 From WCF 2.1
2882 </label>
2883 <ul class="md-nav__list" data-md-scrollfix>
2884
2885
2886
2887
2888
2889
2890 <li class="md-nav__item">
2891 <a href="../../../../migration/wcf21/php/" class="md-nav__link">
2892 PHP API
2893 </a>
2894 </li>
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904 <li class="md-nav__item">
2905 <a href="../../../../migration/wcf21/templates/" class="md-nav__link">
2906 Templates
2907 </a>
2908 </li>
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918 <li class="md-nav__item">
2919 <a href="../../../../migration/wcf21/css/" class="md-nav__link">
2920 CSS
2921 </a>
2922 </li>
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932 <li class="md-nav__item">
2933 <a href="../../../../migration/wcf21/package/" class="md-nav__link">
2934 Package Components
2935 </a>
2936 </li>
2937
2938
2939
2940
2941 </ul>
2942 </nav>
2943 </li>
2944
2945
2946
2947
2948 </ul>
2949 </nav>
2950 </li>
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962 <li class="md-nav__item md-nav__item--nested">
2963
2964
2965
2966
2967 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
2968
2969
2970
2971 <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
2972 Tutorials
2973 <span class="md-nav__icon md-icon"></span>
2974 </label>
2975
2976 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
2977 <label class="md-nav__title" for="__nav_7">
2978 <span class="md-nav__icon md-icon"></span>
2979 Tutorials
2980 </label>
2981 <ul class="md-nav__list" data-md-scrollfix>
2982
2983
2984
2985
2986
2987
2988
2989 <li class="md-nav__item md-nav__item--nested">
2990
2991
2992
2993
2994 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1" >
2995
2996
2997
2998 <label class="md-nav__link" for="__nav_7_1" id="__nav_7_1_label" tabindex="0">
2999 Tutorial Series
3000 <span class="md-nav__icon md-icon"></span>
3001 </label>
3002
3003 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_1_label" aria-expanded="false">
3004 <label class="md-nav__title" for="__nav_7_1">
3005 <span class="md-nav__icon md-icon"></span>
3006 Tutorial Series
3007 </label>
3008 <ul class="md-nav__list" data-md-scrollfix>
3009
3010
3011
3012
3013
3014
3015 <li class="md-nav__item">
3016 <a href="../../../../tutorial/series/overview/" class="md-nav__link">
3017 Overview
3018 </a>
3019 </li>
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029 <li class="md-nav__item">
3030 <a href="../../../../tutorial/series/part_1/" class="md-nav__link">
3031 Part 1
3032 </a>
3033 </li>
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043 <li class="md-nav__item">
3044 <a href="../../../../tutorial/series/part_2/" class="md-nav__link">
3045 Part 2
3046 </a>
3047 </li>
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057 <li class="md-nav__item">
3058 <a href="../../../../tutorial/series/part_3/" class="md-nav__link">
3059 Part 3
3060 </a>
3061 </li>
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071 <li class="md-nav__item">
3072 <a href="../../../../tutorial/series/part_4/" class="md-nav__link">
3073 Part 4
3074 </a>
3075 </li>
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085 <li class="md-nav__item">
3086 <a href="../../../../tutorial/series/part_5/" class="md-nav__link">
3087 Part 5
3088 </a>
3089 </li>
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099 <li class="md-nav__item">
3100 <a href="../../../../tutorial/series/part_6/" class="md-nav__link">
3101 Part 6
3102 </a>
3103 </li>
3104
3105
3106
3107
3108 </ul>
3109 </nav>
3110 </li>
3111
3112
3113
3114
3115 </ul>
3116 </nav>
3117 </li>
3118
3119
3120
3121 </ul>
3122 </nav>
3123 </div>
3124 </div>
3125 </div>
3126
3127
3128
3129 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
3130 <div class="md-sidebar__scrollwrap">
3131 <div class="md-sidebar__inner">
3132
3133
3134 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
3135
3136
3137
3138
3139
3140
3141 <label class="md-nav__title" for="__toc">
3142 <span class="md-nav__icon md-icon"></span>
3143 Table of contents
3144 </label>
3145 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
3146
3147 <li class="md-nav__item">
3148 <a href="#abstract-form-fields" class="md-nav__link">
3149 Abstract Form Fields
3150 </a>
3151
3152 <nav class="md-nav" aria-label="Abstract Form Fields">
3153 <ul class="md-nav__list">
3154
3155 <li class="md-nav__item">
3156 <a href="#abstractformfield" class="md-nav__link">
3157 AbstractFormField
3158 </a>
3159
3160 </li>
3161
3162 <li class="md-nav__item">
3163 <a href="#abstractnumericformfield" class="md-nav__link">
3164 AbstractNumericFormField
3165 </a>
3166
3167 </li>
3168
3169 <li class="md-nav__item">
3170 <a href="#abstractformfielddecorator" class="md-nav__link">
3171 AbstractFormFieldDecorator
3172 </a>
3173
3174 </li>
3175
3176 </ul>
3177 </nav>
3178
3179 </li>
3180
3181 <li class="md-nav__item">
3182 <a href="#general-form-fields" class="md-nav__link">
3183 General Form Fields
3184 </a>
3185
3186 <nav class="md-nav" aria-label="General Form Fields">
3187 <ul class="md-nav__list">
3188
3189 <li class="md-nav__item">
3190 <a href="#booleanformfield" class="md-nav__link">
3191 BooleanFormField
3192 </a>
3193
3194 </li>
3195
3196 <li class="md-nav__item">
3197 <a href="#checkboxformfield" class="md-nav__link">
3198 CheckboxFormField
3199 </a>
3200
3201 </li>
3202
3203 <li class="md-nav__item">
3204 <a href="#classnameformfield" class="md-nav__link">
3205 ClassNameFormField
3206 </a>
3207
3208 </li>
3209
3210 <li class="md-nav__item">
3211 <a href="#dateformfield" class="md-nav__link">
3212 DateFormField
3213 </a>
3214
3215 </li>
3216
3217 <li class="md-nav__item">
3218 <a href="#descriptionformfield" class="md-nav__link">
3219 DescriptionFormField
3220 </a>
3221
3222 </li>
3223
3224 <li class="md-nav__item">
3225 <a href="#emailformfield" class="md-nav__link">
3226 EmailFormField
3227 </a>
3228
3229 </li>
3230
3231 <li class="md-nav__item">
3232 <a href="#floatformfield" class="md-nav__link">
3233 FloatFormField
3234 </a>
3235
3236 </li>
3237
3238 <li class="md-nav__item">
3239 <a href="#hiddenformfield" class="md-nav__link">
3240 HiddenFormField
3241 </a>
3242
3243 </li>
3244
3245 <li class="md-nav__item">
3246 <a href="#iconformfield" class="md-nav__link">
3247 IconFormField
3248 </a>
3249
3250 </li>
3251
3252 <li class="md-nav__item">
3253 <a href="#integerformfield" class="md-nav__link">
3254 IntegerFormField
3255 </a>
3256
3257 </li>
3258
3259 <li class="md-nav__item">
3260 <a href="#isdisabledformfield" class="md-nav__link">
3261 IsDisabledFormField
3262 </a>
3263
3264 </li>
3265
3266 <li class="md-nav__item">
3267 <a href="#itemlistformfield" class="md-nav__link">
3268 ItemListFormField
3269 </a>
3270
3271 </li>
3272
3273 <li class="md-nav__item">
3274 <a href="#multilinetextformfield" class="md-nav__link">
3275 MultilineTextFormField
3276 </a>
3277
3278 </li>
3279
3280 <li class="md-nav__item">
3281 <a href="#multipleselectionformfield" class="md-nav__link">
3282 MultipleSelectionFormField
3283 </a>
3284
3285 </li>
3286
3287 <li class="md-nav__item">
3288 <a href="#radiobuttonformfield" class="md-nav__link">
3289 RadioButtonFormField
3290 </a>
3291
3292 </li>
3293
3294 <li class="md-nav__item">
3295 <a href="#ratingformfield" class="md-nav__link">
3296 RatingFormField
3297 </a>
3298
3299 </li>
3300
3301 <li class="md-nav__item">
3302 <a href="#selectformfield" class="md-nav__link">
3303 SelectFormField
3304 </a>
3305
3306 </li>
3307
3308 <li class="md-nav__item">
3309 <a href="#showorderformfield" class="md-nav__link">
3310 ShowOrderFormField
3311 </a>
3312
3313 </li>
3314
3315 <li class="md-nav__item">
3316 <a href="#singleselectionformfield" class="md-nav__link">
3317 SingleSelectionFormField
3318 </a>
3319
3320 </li>
3321
3322 <li class="md-nav__item">
3323 <a href="#sortorderformfield" class="md-nav__link">
3324 SortOrderFormField
3325 </a>
3326
3327 </li>
3328
3329 <li class="md-nav__item">
3330 <a href="#textformfield" class="md-nav__link">
3331 TextFormField
3332 </a>
3333
3334 </li>
3335
3336 <li class="md-nav__item">
3337 <a href="#titleformfield" class="md-nav__link">
3338 TitleFormField
3339 </a>
3340
3341 </li>
3342
3343 <li class="md-nav__item">
3344 <a href="#urlformfield" class="md-nav__link">
3345 UrlFormField
3346 </a>
3347
3348 </li>
3349
3350 </ul>
3351 </nav>
3352
3353 </li>
3354
3355 <li class="md-nav__item">
3356 <a href="#specific-fields" class="md-nav__link">
3357 Specific Fields
3358 </a>
3359
3360 <nav class="md-nav" aria-label="Specific Fields">
3361 <ul class="md-nav__list">
3362
3363 <li class="md-nav__item">
3364 <a href="#aclformfield" class="md-nav__link">
3365 AclFormField
3366 </a>
3367
3368 </li>
3369
3370 <li class="md-nav__item">
3371 <a href="#buttonformfield" class="md-nav__link">
3372 ButtonFormField
3373 </a>
3374
3375 </li>
3376
3377 <li class="md-nav__item">
3378 <a href="#captchaformfield" class="md-nav__link">
3379 CaptchaFormField
3380 </a>
3381
3382 </li>
3383
3384 <li class="md-nav__item">
3385 <a href="#colorformfield" class="md-nav__link">
3386 ColorFormField
3387 </a>
3388
3389 </li>
3390
3391 <li class="md-nav__item">
3392 <a href="#contentlanguageformfield" class="md-nav__link">
3393 ContentLanguageFormField
3394 </a>
3395
3396 </li>
3397
3398 <li class="md-nav__item">
3399 <a href="#labelformfield" class="md-nav__link">
3400 LabelFormField
3401 </a>
3402
3403 </li>
3404
3405 <li class="md-nav__item">
3406 <a href="#optionformfield" class="md-nav__link">
3407 OptionFormField
3408 </a>
3409
3410 </li>
3411
3412 <li class="md-nav__item">
3413 <a href="#simpleaclformfield" class="md-nav__link">
3414 SimpleAclFormField
3415 </a>
3416
3417 </li>
3418
3419 <li class="md-nav__item">
3420 <a href="#singlemediaselectionformfield" class="md-nav__link">
3421 SingleMediaSelectionFormField
3422 </a>
3423
3424 </li>
3425
3426 <li class="md-nav__item">
3427 <a href="#tagformfield" class="md-nav__link">
3428 TagFormField
3429 </a>
3430
3431 </li>
3432
3433 <li class="md-nav__item">
3434 <a href="#uploadformfield" class="md-nav__link">
3435 UploadFormField
3436 </a>
3437
3438 <nav class="md-nav" aria-label="UploadFormField">
3439 <ul class="md-nav__list">
3440
3441 <li class="md-nav__item">
3442 <a href="#provide-value-from-database-object" class="md-nav__link">
3443 Provide value from database object
3444 </a>
3445
3446 </li>
3447
3448 <li class="md-nav__item">
3449 <a href="#process-files" class="md-nav__link">
3450 Process files
3451 </a>
3452
3453 </li>
3454
3455 </ul>
3456 </nav>
3457
3458 </li>
3459
3460 <li class="md-nav__item">
3461 <a href="#userformfield" class="md-nav__link">
3462 UserFormField
3463 </a>
3464
3465 </li>
3466
3467 <li class="md-nav__item">
3468 <a href="#userpasswordfield" class="md-nav__link">
3469 UserPasswordField
3470 </a>
3471
3472 </li>
3473
3474 <li class="md-nav__item">
3475 <a href="#usergroupoptionformfield" class="md-nav__link">
3476 UserGroupOptionFormField
3477 </a>
3478
3479 </li>
3480
3481 <li class="md-nav__item">
3482 <a href="#usernameformfield" class="md-nav__link">
3483 UsernameFormField
3484 </a>
3485
3486 </li>
3487
3488 </ul>
3489 </nav>
3490
3491 </li>
3492
3493 <li class="md-nav__item">
3494 <a href="#wysiwyg-form-container" class="md-nav__link">
3495 Wysiwyg form container
3496 </a>
3497
3498 <nav class="md-nav" aria-label="Wysiwyg form container">
3499 <ul class="md-nav__list">
3500
3501 <li class="md-nav__item">
3502 <a href="#wysiwygattachmentformfield" class="md-nav__link">
3503 WysiwygAttachmentFormField
3504 </a>
3505
3506 </li>
3507
3508 <li class="md-nav__item">
3509 <a href="#wysiwygpollformcontainer" class="md-nav__link">
3510 WysiwygPollFormContainer
3511 </a>
3512
3513 </li>
3514
3515 <li class="md-nav__item">
3516 <a href="#wysiwygsmileyformcontainer" class="md-nav__link">
3517 WysiwygSmileyFormContainer
3518 </a>
3519
3520 <nav class="md-nav" aria-label="WysiwygSmileyFormContainer">
3521 <ul class="md-nav__list">
3522
3523 <li class="md-nav__item">
3524 <a href="#wysiwygsmileyformnode" class="md-nav__link">
3525 WysiwygSmileyFormNode
3526 </a>
3527
3528 </li>
3529
3530 </ul>
3531 </nav>
3532
3533 </li>
3534
3535 <li class="md-nav__item">
3536 <a href="#example" class="md-nav__link">
3537 Example
3538 </a>
3539
3540 </li>
3541
3542 <li class="md-nav__item">
3543 <a href="#wysiwygformfield" class="md-nav__link">
3544 WysiwygFormField
3545 </a>
3546
3547 </li>
3548
3549 <li class="md-nav__item">
3550 <a href="#twysiwygformnode" class="md-nav__link">
3551 TWysiwygFormNode
3552 </a>
3553
3554 </li>
3555
3556 </ul>
3557 </nav>
3558
3559 </li>
3560
3561 <li class="md-nav__item">
3562 <a href="#application-specific-form-fields" class="md-nav__link">
3563 Application-Specific Form Fields
3564 </a>
3565
3566 <nav class="md-nav" aria-label="Application-Specific Form Fields">
3567 <ul class="md-nav__list">
3568
3569 <li class="md-nav__item">
3570 <a href="#woltlab-suite-forum" class="md-nav__link">
3571 WoltLab Suite Forum
3572 </a>
3573
3574 <nav class="md-nav" aria-label="WoltLab Suite Forum">
3575 <ul class="md-nav__list">
3576
3577 <li class="md-nav__item">
3578 <a href="#multipleboardselectionformfield" class="md-nav__link">
3579 MultipleBoardSelectionFormField
3580 </a>
3581
3582 </li>
3583
3584 </ul>
3585 </nav>
3586
3587 </li>
3588
3589 </ul>
3590 </nav>
3591
3592 </li>
3593
3594 <li class="md-nav__item">
3595 <a href="#single-use-form-fields" class="md-nav__link">
3596 Single-Use Form Fields
3597 </a>
3598
3599 <nav class="md-nav" aria-label="Single-Use Form Fields">
3600 <ul class="md-nav__list">
3601
3602 <li class="md-nav__item">
3603 <a href="#bbcodeattributesformfield" class="md-nav__link">
3604 BBCodeAttributesFormField
3605 </a>
3606
3607 </li>
3608
3609 <li class="md-nav__item">
3610 <a href="#devtoolsprojectexcludedpackagesformfield" class="md-nav__link">
3611 DevtoolsProjectExcludedPackagesFormField
3612 </a>
3613
3614 </li>
3615
3616 <li class="md-nav__item">
3617 <a href="#devtoolsprojectinstructionsformfield" class="md-nav__link">
3618 DevtoolsProjectInstructionsFormField
3619 </a>
3620
3621 </li>
3622
3623 <li class="md-nav__item">
3624 <a href="#devtoolsprojectoptionalpackagesformfield" class="md-nav__link">
3625 DevtoolsProjectOptionalPackagesFormField
3626 </a>
3627
3628 </li>
3629
3630 <li class="md-nav__item">
3631 <a href="#devtoolsprojectrequiredpackagesformfield" class="md-nav__link">
3632 DevtoolsProjectRequiredPackagesFormField
3633 </a>
3634
3635 </li>
3636
3637 </ul>
3638 </nav>
3639
3640 </li>
3641
3642 </ul>
3643
3644 </nav>
3645 </div>
3646 </div>
3647 </div>
3648
3649
3650
3651 <div class="md-content" data-md-component="content">
3652 <article class="md-content__inner md-typeset">
3653
3654
3655
3656
3657
3658
3659
3660 <h1 id="form-builder-fields">Form Builder Fields<a class="headerlink" href="#form-builder-fields" title="Permanent link">#</a></h1>
3661 <h2 id="abstract-form-fields">Abstract Form Fields<a class="headerlink" href="#abstract-form-fields" title="Permanent link">#</a></h2>
3662 <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>
3663 <h3 id="abstractformfield"><code>AbstractFormField</code><a class="headerlink" href="#abstractformfield" title="Permanent link">#</a></h3>
3664 <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>
3665 <h3 id="abstractnumericformfield"><code>AbstractNumericFormField</code><a class="headerlink" href="#abstractnumericformfield" title="Permanent link">#</a></h3>
3666 <p><code>AbstractNumericFormField</code> is the abstract implementation of a form field handling a single numeric value.
3667 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>.
3668 If the property <code>$integerValues</code> is <code>true</code>, the form field works with integer values, otherwise it works with floating point numbers.
3669 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.
3670 The default step for form fields with integer values is <code>1</code>.
3671 Otherwise, the default step is <code>any</code>.</p>
3672 <h3 id="abstractformfielddecorator"><code>AbstractFormFieldDecorator</code><a class="headerlink" href="#abstractformfielddecorator" title="Permanent link">#</a></h3>
3673 <p><code>AbstractFormFieldDecorator</code> is a default implementation of a decorator for form fields that forwards calls to all methods defined in <code>IFormField</code> to the respective method of the decorated object.
3674 The class implements <code>IFormfield</code>.
3675 If the implementation of a more specific interface is required then the remaining methods must be implemented in the concrete decorator derived from <code>AbstractFormFieldDecorator</code> and the type of the <code>$field</code> property must be narrowed appropriately.</p>
3676 <h2 id="general-form-fields">General Form Fields<a class="headerlink" href="#general-form-fields" title="Permanent link">#</a></h2>
3677 <p>The following form fields are general reusable fields without any underlying context.</p>
3678 <h3 id="booleanformfield"><code>BooleanFormField</code><a class="headerlink" href="#booleanformfield" title="Permanent link">#</a></h3>
3679 <p><code>BooleanFormField</code> is used for boolean (<code>0</code> or <code>1</code>, <code>yes</code> or <code>no</code>) values.
3680 Objects of this class require a label.
3681 The return value of <code>getSaveValue()</code> is the integer representation of the boolean value, i.e. <code>0</code> or <code>1</code>.
3682 The class implements <code>IAttributeFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, and <code>IImmutableFormField</code>.</p>
3683 <h3 id="checkboxformfield"><code>CheckboxFormField</code><a class="headerlink" href="#checkboxformfield" title="Permanent link">#</a></h3>
3684 <p><code>CheckboxFormField</code> extends <code>BooleanFormField</code> and offers a simple HTML checkbox.</p>
3685 <h3 id="classnameformfield"><code>ClassNameFormField</code><a class="headerlink" href="#classnameformfield" title="Permanent link">#</a></h3>
3686 <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>
3687 <ul>
3688 <li><code>classExists($classExists = true)</code> and <code>getClassExists()</code> can be used to ensure that the entered class currently exists in the installation.
3689 By default, the existance of the entered class is required.</li>
3690 <li><code>implementedInterface($interface)</code> and <code>getImplementedInterface()</code> can be used to ensure that the entered class implements the specified interface.
3691 By default, no interface is required.</li>
3692 <li><code>parentClass($parentClass)</code> and <code>getParentClass()</code> can be used to ensure that the entered class extends the specified class.
3693 By default, no parent class is required.</li>
3694 <li><code>instantiable($instantiable = true)</code> and <code>isInstantiable()</code> can be used to ensure that the entered class is instantiable.
3695 By default, entered classes have to instantiable.</li>
3696 </ul>
3697 <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>
3698 <h3 id="dateformfield"><code>DateFormField</code><a class="headerlink" href="#dateformfield" title="Permanent link">#</a></h3>
3699 <p><code>DateFormField</code> is a form field to enter a date (and optionally a time).
3700 The class implements <code>IAttributeFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, and <code>INullableFormField</code>.
3701 The following methods are specific to this form field class:</p>
3702 <ul>
3703 <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.
3704 The date passed to the setters must have the same format as set via <code>saveValueFormat()</code>.
3705 If a custom format is used, that format has to be set via <code>saveValueFormat()</code> before calling any of the setters.</li>
3706 <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>.
3707 By default, <code>U</code> is used as format.
3708 The <a href="https://secure.php.net/manual/en/function.date.php">PHP manual</a> provides an overview of supported formats.</li>
3709 <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.
3710 By default, specifying a time is disabled.</li>
3711 </ul>
3712 <h3 id="descriptionformfield"><code>DescriptionFormField</code><a class="headerlink" href="#descriptionformfield" title="Permanent link">#</a></h3>
3713 <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>
3714 <h3 id="emailformfield"><code>EmailFormField</code><a class="headerlink" href="#emailformfield" title="Permanent link">#</a></h3>
3715 <p><code>EmailFormField</code> is a form field to enter an email address which is internally validated using <code>UserUtil::isValidEmail()</code>.
3716 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>
3717 <h3 id="floatformfield"><code>FloatFormField</code><a class="headerlink" href="#floatformfield" title="Permanent link">#</a></h3>
3718 <p><code>FloatFormField</code> is an implementation of <a href="#abstractnumericformfield">AbstractNumericFormField</a> for floating point numbers.</p>
3719 <h3 id="hiddenformfield"><code>HiddenFormField</code><a class="headerlink" href="#hiddenformfield" title="Permanent link">#</a></h3>
3720 <p><code>HiddenFormField</code> is a form field without any user-visible UI.
3721 Even though the form field is invisible to the user, the value can still be modified by the user, e.g. by leveraging the web browsers developer tools.
3722 The <code>HiddenFormField</code> <em>must not</em> be used to transfer sensitive information or information that the user should not be able to modify.</p>
3723 <h3 id="iconformfield"><code>IconFormField</code><a class="headerlink" href="#iconformfield" title="Permanent link">#</a></h3>
3724 <p><code>IconFormField</code> is a form field to select a FontAwesome icon.</p>
3725 <h3 id="integerformfield"><code>IntegerFormField</code><a class="headerlink" href="#integerformfield" title="Permanent link">#</a></h3>
3726 <p><code>IntegerFormField</code> is an implementation of <a href="#abstractnumericformfield">AbstractNumericFormField</a> for integers.</p>
3727 <h3 id="isdisabledformfield"><code>IsDisabledFormField</code><a class="headerlink" href="#isdisabledformfield" title="Permanent link">#</a></h3>
3728 <p><code>IsDisabledFormField</code> is a <a href="#booleanformfield">boolean form field</a> with <code>isDisabled</code> as the default id.</p>
3729 <h3 id="itemlistformfield"><code>ItemListFormField</code><a class="headerlink" href="#itemlistformfield" title="Permanent link">#</a></h3>
3730 <p><code>ItemListFormField</code> is a form field in which multiple values can be entered and returned in different formats as save value.
3731 The class implements <code>IAttributeFormField</code>, <code>IAutoFocusFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, and <code>IMultipleFormField</code>.
3732 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.
3733 The following save value types are supported:</p>
3734 <ul>
3735 <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>
3736 <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>
3737 <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>
3738 <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>
3739 </ul>
3740 <p>By default, <code>ItemListFormField::SAVE_VALUE_TYPE_CSV</code> is used.</p>
3741 <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>
3742 <h3 id="multilinetextformfield"><code>MultilineTextFormField</code><a class="headerlink" href="#multilinetextformfield" title="Permanent link">#</a></h3>
3743 <p><code>MultilineTextFormField</code> is a <a href="#textformfield">text form field</a> that supports multiple rows of text.
3744 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.
3745 The default number of rows is <code>10</code>.
3746 These methods do <strong>not</strong>, however, restrict the number of text rows that can be entered.</p>
3747 <h3 id="multipleselectionformfield"><code>MultipleSelectionFormField</code><a class="headerlink" href="#multipleselectionformfield" title="Permanent link">#</a></h3>
3748 <p><code>MultipleSelectionFormField</code> is a form fields that allows the selection of multiple options out of a predefined list of available options.
3749 The class implements <code>IAttributeFormField</code>, <code>ICssClassFormField</code>, <code>IFilterableSelectionFormField</code>, and <code>IImmutableFormField</code>.</p>
3750 <h3 id="radiobuttonformfield"><code>RadioButtonFormField</code><a class="headerlink" href="#radiobuttonformfield" title="Permanent link">#</a></h3>
3751 <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.
3752 The class implements <code>IAttributeFormField</code>, <code>ICssClassFormField</code>, <code>IImmutableFormField</code>, and <code>ISelectionFormField</code>.</p>
3753 <h3 id="ratingformfield"><code>RatingFormField</code><a class="headerlink" href="#ratingformfield" title="Permanent link">#</a></h3>
3754 <p><code>RatingFormField</code> is a form field to set a rating for an object.
3755 The class implements <code>IImmutableFormField</code>, <code>IMaximumFormField</code>, <code>IMinimumFormField</code>, and <code>INullableFormField</code>.
3756 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.
3757 For this field, the minimum and maximum refer to the minimum and maximum rating an object can get.
3758 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>.
3759 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>.
3760 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>
3761 <h3 id="selectformfield"><code>SelectFormField</code><a class="headerlink" href="#selectformfield" title="Permanent link">#</a></h3>
3762 <p><code>SelectFormField</code> is a form fields that allows the selection of a single option out of a predefined list of available options.
3763 The class implements <code>ICssClassFormField</code> and <code>IImmutableFormField</code>.</p>
3764 <p>Example:</p>
3765 <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
3766 <span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nx">SelectFormField</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;select&#39;</span><span class="p">)</span>
3767 <span class="o">-&gt;</span><span class="na">options</span><span class="p">([</span><span class="s1">&#39;option1&#39;</span><span class="p">,</span> <span class="s1">&#39;option2&#39;</span><span class="p">,</span> <span class="s1">&#39;option3&#39;</span><span class="p">]);</span>
3768 </code></pre></div></td></tr></table></div>
3769 <h3 id="showorderformfield"><code>ShowOrderFormField</code><a class="headerlink" href="#showorderformfield" title="Permanent link">#</a></h3>
3770 <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.
3771 The show order field provides a list of all siblings and the object will be positioned <strong>after</strong> the selected sibling.
3772 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.
3773 The default id of instances of this class is <code>showOrder</code> and their default label is <code>wcf.form.field.showOrder</code>.</p>
3774 <div class="admonition info">
3775 <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>
3776 </div>
3777 <h3 id="singleselectionformfield"><code>SingleSelectionFormField</code><a class="headerlink" href="#singleselectionformfield" title="Permanent link">#</a></h3>
3778 <p><code>SingleSelectionFormField</code> is a form fields that allows the selection of a single option out of a predefined list of available options.
3779 The class implements <code>ICssClassFormField</code>, <code>IFilterableSelectionFormField</code>, <code>IImmutableFormField</code>, and <code>INullableFormField</code>.
3780 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>
3781 <h3 id="sortorderformfield"><code>SortOrderFormField</code><a class="headerlink" href="#sortorderformfield" title="Permanent link">#</a></h3>
3782 <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>
3783 <h3 id="textformfield"><code>TextFormField</code><a class="headerlink" href="#textformfield" title="Permanent link">#</a></h3>
3784 <p><code>TextFormField</code> is a form field that allows entering a single line of text.
3785 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>
3786 <h3 id="titleformfield"><code>TitleFormField</code><a class="headerlink" href="#titleformfield" title="Permanent link">#</a></h3>
3787 <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>
3788 <h3 id="urlformfield"><code>UrlFormField</code><a class="headerlink" href="#urlformfield" title="Permanent link">#</a></h3>
3789 <p><code>UrlFormField</code> is a <a href="#textformfield">text form field</a> whose values are checked via <code>Url::is()</code>.</p>
3790 <h2 id="specific-fields">Specific Fields<a class="headerlink" href="#specific-fields" title="Permanent link">#</a></h2>
3791 <p>The following form fields are reusable fields that generally are bound to a certain API or <code>DatabaseObject</code> implementation.</p>
3792 <h3 id="aclformfield"><code>AclFormField</code><a class="headerlink" href="#aclformfield" title="Permanent link">#</a></h3>
3793 <p><code>AclFormField</code> is used for setting up acl values for specific objects.
3794 The class implements <code>IObjectTypeFormField</code> and requires an object type of the object type definition <code>com.woltlab.wcf.acl</code>.
3795 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.
3796 A category name of <code>null</code> signals that no category filter is used.</p>
3797 <div class="admonition info">
3798 <p class="admonition-title">Since version 5.5, the category name also supports filtering using a wildcard like <code>user.*</code>, see <a href="https://github.com/WoltLab/WCF/pull/4355">WoltLab/WCF#4355</a>.</p>
3799 </div>
3800 <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.
3801 The relevant database object action method is expected, based on the given ACL object type id, to save the ACL option values appropriately.</p>
3802 <h3 id="buttonformfield"><code>ButtonFormField</code><a class="headerlink" href="#buttonformfield" title="Permanent link">#</a></h3>
3803 <p><code>ButtonFormField</code> shows a submit button as part of the form.
3804 The class implements <code>IAttributeFormField</code> and <code>ICssClassFormField</code>.</p>
3805 <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>
3806 <h3 id="captchaformfield"><code>CaptchaFormField</code><a class="headerlink" href="#captchaformfield" title="Permanent link">#</a></h3>
3807 <p><code>CaptchaFormField</code> is used to add captcha protection to the form.</p>
3808 <p>You must specify a captcha object type (<code>com.woltlab.wcf.captcha</code>) using the <code>objectType()</code> method.</p>
3809 <h3 id="colorformfield"><code>ColorFormField</code><a class="headerlink" href="#colorformfield" title="Permanent link">#</a></h3>
3810 <p><code>ColorFormField</code> is used to specify RGBA colors using the <code>rgba(r, g, b, a)</code> format.
3811 The class implements <code>IImmutableFormField</code>.</p>
3812 <h3 id="contentlanguageformfield"><code>ContentLanguageFormField</code><a class="headerlink" href="#contentlanguageformfield" title="Permanent link">#</a></h3>
3813 <p><code>ContentLanguageFormField</code> is used to select the content language of an object.
3814 Fields of this class are only available if multilingualism is enabled and if there are content languages.
3815 The class implements <code>IImmutableFormField</code>.</p>
3816 <h3 id="labelformfield"><code>LabelFormField</code><a class="headerlink" href="#labelformfield" title="Permanent link">#</a></h3>
3817 <p><code>LabelFormField</code> is used to select a label from a specific label group.
3818 The class implements <code>IObjectTypeFormNode</code>.</p>
3819 <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.
3820 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.
3821 In most cases, <code>LabelFormField::createFields()</code> should be used.</p>
3822 <h3 id="optionformfield"><code>OptionFormField</code><a class="headerlink" href="#optionformfield" title="Permanent link">#</a></h3>
3823 <p><code>OptionFormField</code> is an <a href="#itemlistformfield">item list form field</a> to set a list of options.
3824 The class implements <code>IPackagesFormField</code> and only options of the set packages are considered available.
3825 The default label of instances of this class is <code>wcf.form.field.option</code> and their default id is <code>options</code>.</p>
3826 <h3 id="simpleaclformfield"><code>SimpleAclFormField</code><a class="headerlink" href="#simpleaclformfield" title="Permanent link">#</a></h3>
3827 <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>
3828 <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>
3829 <div class="admonition info">
3830 <p class="admonition-title">Since version 5.5, the field also supports inverted permissions, see <a href="https://github.com/WoltLab/WCF/pull/4570">WoltLab/WCF#4570</a>.</p>
3831 </div>
3832 <p>The <code>SimpleAclFormField</code> supports inverted permissions, allowing the administrator to grant access to all non-selected users and groups. If this behavior is desired, it needs to be enabled by calling <code>supportInvertedPermissions</code>. An <code>invertPermissions</code> key containing a boolean value with the users selection will be provided together with the ACL values when saving the field.</p>
3833 <h3 id="singlemediaselectionformfield"><code>SingleMediaSelectionFormField</code><a class="headerlink" href="#singlemediaselectionformfield" title="Permanent link">#</a></h3>
3834 <p><code>SingleMediaSelectionFormField</code> is used to select a specific media file.
3835 The class implements <code>IImmutableFormField</code>.</p>
3836 <p>The following methods are specific to this form field class:</p>
3837 <ul>
3838 <li><code>imageOnly($imageOnly = true)</code> and <code>isImageOnly()</code> can be used to set and check if only images may be selected.</li>
3839 <li><code>getMedia()</code> returns the media file based on the current field value if a field is set.</li>
3840 </ul>
3841 <h3 id="tagformfield"><code>TagFormField</code><a class="headerlink" href="#tagformfield" title="Permanent link">#</a></h3>
3842 <p><code>TagFormField</code> is a form field to enter tags.
3843 The class implements <code>IAttributeFormField</code> and <code>IObjectTypeFormNode</code>.
3844 Arrays passed to <code>TagFormField::values()</code> can contain tag names as strings and <code>Tag</code> objects.
3845 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>
3846 <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>
3847 <h3 id="uploadformfield"><code>UploadFormField</code><a class="headerlink" href="#uploadformfield" title="Permanent link">#</a></h3>
3848 <p><code>UploadFormField</code> is a form field that allows uploading files by the user.</p>
3849 <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>
3850 <p>The field supports additional settings:</p>
3851 <ul>
3852 <li><code>imageOnly($imageOnly = true)</code> and <code>isImageOnly()</code> can be used to ensure that the uploaded files are only images.</li>
3853 <li><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.</li>
3854 </ul>
3855 <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>
3856 <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>
3857 <h4 id="process-files">Process files<a class="headerlink" href="#process-files" title="Permanent link">#</a></h4>
3858 <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>
3859 <h3 id="userformfield"><code>UserFormField</code><a class="headerlink" href="#userformfield" title="Permanent link">#</a></h3>
3860 <p><code>UserFormField</code> is a form field to enter existing users.
3861 The class implements <code>IAutoCompleteFormField</code>, <code>IAutoFocusFormField</code>, <code>IImmutableFormField</code>, <code>IMultipleFormField</code>, and <code>INullableFormField</code>.
3862 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.
3863 The relevant <code>UserProfile</code> objects can be accessed via the <code>getUsers()</code> method.</p>
3864 <h3 id="userpasswordfield"><code>UserPasswordField</code><a class="headerlink" href="#userpasswordfield" title="Permanent link">#</a></h3>
3865 <p><code>UserPasswordField</code> is a form field for users' to enter their current password.
3866 The class implements <code>IAttributeFormField</code>, <code>IAttributeFormField</code>, <code>IAutoCompleteFormField</code>, <code>IAutoFocusFormField</code>, and <code>IPlaceholderFormField</code></p>
3867 <h3 id="usergroupoptionformfield"><code>UserGroupOptionFormField</code><a class="headerlink" href="#usergroupoptionformfield" title="Permanent link">#</a></h3>
3868 <p><code>UserGroupOptionFormField</code> is an <a href="#itemlistformfield">item list form field</a> to set a list of user group options/permissions.
3869 The class implements <code>IPackagesFormField</code> and only user group options of the set packages are considered available.
3870 The default label of instances of this class is <code>wcf.form.field.userGroupOption</code> and their default id is <code>permissions</code>.</p>
3871 <h3 id="usernameformfield"><code>UsernameFormField</code><a class="headerlink" href="#usernameformfield" title="Permanent link">#</a></h3>
3872 <p><code>UsernameFormField</code> is used for entering one non-existing username.
3873 The class implements <code>IAttributeFormField</code>, <code>IImmutableFormField</code>, <code>IMaximumLengthFormField</code>, <code>IMinimumLengthFormField</code>, <code>INullableFormField</code>, and <code>IPlaceholderFormField</code>.
3874 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>
3875 <h2 id="wysiwyg-form-container">Wysiwyg form container<a class="headerlink" href="#wysiwyg-form-container" title="Permanent link">#</a></h2>
3876 <p>To integrate a wysiwyg editor into a form, you have to create a <code>WysiwygFormContainer</code> object.
3877 This container takes care of creating all necessary form nodes listed below for a wysiwyg editor.</p>
3878 <div class="admonition warning">
3879 <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>
3880 </div>
3881 <p>The following methods are specific to this form container class:</p>
3882 <ul>
3883 <li><code>addSettingsNode(IFormChildNode $settingsNode)</code> and <code>addSettingsNodes(array $settingsNodes)</code> can be used to add nodes to the settings tab container.</li>
3884 <li><code>attachmentData($objectType, $parentObjectID)</code> can be used to set the data relevant for attachment support.
3885 By default, not attachment data is set, thus attachments are not supported.</li>
3886 <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>
3887 <li><code>enablePreviewButton($enablePreviewButton)</code> can be used to set whether the preview button for the message is shown or not.
3888 By default, the preview button is shown.
3889 This method is only relevant before the form is built.
3890 Afterwards, the preview button availability can not be changed.</li>
3891 <li><code>getObjectId()</code> returns the id of the edited object or <code>0</code> if no object is edited.</li>
3892 <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.
3893 By default, the preselect is <code>'true'</code> which is used to pre-select the first tab.</li>
3894 <li><code>messageObjectType($messageObjectType)</code> can be used to set the message object type.</li>
3895 <li><code>pollObjectType($pollObjectType)</code> can be used to set the poll object type.
3896 By default, no poll object type is set, thus the poll form field container is not available.</li>
3897 <li><code>supportMentions($supportMentions)</code> can be used to set if mentions are supported.
3898 By default, mentions are not supported.
3899 This method is only relevant before the form is built.
3900 Afterwards, mention support can only be changed via the wysiwyg form field.</li>
3901 <li><code>supportSmilies($supportSmilies)</code> can be used to set if smilies are supported.
3902 By default, smilies are supported.
3903 This method is only relevant before the form is built.
3904 Afterwards, smiley availability can only be changed via changing the availability of the smilies form container.</li>
3905 </ul>
3906 <h3 id="wysiwygattachmentformfield"><code>WysiwygAttachmentFormField</code><a class="headerlink" href="#wysiwygattachmentformfield" title="Permanent link">#</a></h3>
3907 <p><code>WysiwygAttachmentFormField</code> provides attachment support for a wysiwyg editor via a tab in the menu below the editor.
3908 This class should not be used directly but only via <code>WysiwygFormContainer</code>.
3909 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>
3910 <h3 id="wysiwygpollformcontainer"><code>WysiwygPollFormContainer</code><a class="headerlink" href="#wysiwygpollformcontainer" title="Permanent link">#</a></h3>
3911 <p><code>WysiwygPollFormContainer</code> provides poll support for a wysiwyg editor via a tab in the menu below the editor.
3912 This class should not be used directly but only via <code>WysiwygFormContainer</code>.
3913 <code>WysiwygPollFormContainer</code> contains all form fields that are required to create polls and requires edited objects to implement <code>IPollContainer</code>.</p>
3914 <p>The following methods are specific to this form container class:</p>
3915 <ul>
3916 <li><code>getEndTimeField()</code> returns the form field to set the end time of the poll once the form has been built.</li>
3917 <li><code>getIsChangeableField()</code> returns the form field to set if poll votes can be changed once the form has been built.</li>
3918 <li><code>getIsPublicField()</code> returns the form field to set if poll results are public once the form has been built.</li>
3919 <li><code>getMaxVotesField()</code> returns the form field to set the maximum number of votes once the form has been built.</li>
3920 <li><code>getOptionsField()</code> returns the form field to set the poll options once the form has been built.</li>
3921 <li><code>getQuestionField()</code> returns the form field to set the poll question once the form has been built.</li>
3922 <li><code>getResultsRequireVoteField()</code> returns the form field to set if viewing the poll results requires voting once the form has been built.</li>
3923 <li><code>getSortByVotesField()</code> returns the form field to set if the results are sorted by votes once the form has been built.</li>
3924 </ul>
3925 <h3 id="wysiwygsmileyformcontainer"><code>WysiwygSmileyFormContainer</code><a class="headerlink" href="#wysiwygsmileyformcontainer" title="Permanent link">#</a></h3>
3926 <p><code>WysiwygSmileyFormContainer</code> provides smiley support for a wysiwyg editor via a tab in the menu below the editor.
3927 This class should not be used directly but only via <code>WysiwygFormContainer</code>.
3928 <code>WysiwygSmileyFormContainer</code> creates a sub-tab for each smiley category.</p>
3929 <h4 id="wysiwygsmileyformnode"><code>WysiwygSmileyFormNode</code><a class="headerlink" href="#wysiwygsmileyformnode" title="Permanent link">#</a></h4>
3930 <p><code>WysiwygSmileyFormNode</code> is contains the smilies of a specific category.
3931 This class should not be used directly but only via <code>WysiwygSmileyFormContainer</code>.</p>
3932 <h3 id="example">Example<a class="headerlink" href="#example" title="Permanent link">#</a></h3>
3933 <p>The following code creates a WYSIWYG editor component for a <code>message</code> object property.
3934 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”.
3935 Additionally, mentions and quotes are supported.</p>
3936 <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
3937 <span class="normal">2</span>
3938 <span class="normal">3</span>
3939 <span class="normal">4</span>
3940 <span class="normal">5</span>
3941 <span class="normal">6</span></pre></div></td><td class="code"><div><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>
3942 <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>
3943 <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>
3944 <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>
3945 <span class="o">-&gt;</span><span class="na">supportMentions</span><span class="p">()</span>
3946 <span class="o">-&gt;</span><span class="na">supportQuotes</span><span class="p">()</span>
3947 </code></pre></div></td></tr></table></div>
3948 <h3 id="wysiwygformfield"><code>WysiwygFormField</code><a class="headerlink" href="#wysiwygformfield" title="Permanent link">#</a></h3>
3949 <p><code>WysiwygFormField</code> is used for wysiwyg editor form fields.
3950 This class should, in general, not be used directly but only via <code>WysiwygFormContainer</code>.
3951 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>.
3952 The following methods are specific to this form field class:</p>
3953 <ul>
3954 <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.
3955 An empty string signals that autosaving is disabled.</li>
3956 <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.
3957 <code>0</code> signals that no last edit time has been set.</li>
3958 <li>
3959 <p><code>supportAttachments($supportAttachments)</code> and <code>supportsAttachments()</code> can be used to set and check if the form field supports attachments.</p>
3960 <div class="admonition warning">
3961 <p class="admonition-title">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>.</p>
3962 </div>
3963 </li>
3964 <li>
3965 <p><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>
3966 </li>
3967 </ul>
3968 <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>
3969 <h3 id="twysiwygformnode"><code>TWysiwygFormNode</code><a class="headerlink" href="#twysiwygformnode" title="Permanent link">#</a></h3>
3970 <p>All form nodes that need to know the id of the <code>WysiwygFormField</code> field should use <code>TWysiwygFormNode</code>.
3971 This trait provides <code>getWysiwygId()</code> and <code>wysiwygId($wysiwygId)</code> to get and set the relevant wysiwyg editor id.</p>
3972 <h2 id="application-specific-form-fields">Application-Specific Form Fields<a class="headerlink" href="#application-specific-form-fields" title="Permanent link">#</a></h2>
3973 <h3 id="woltlab-suite-forum">WoltLab Suite Forum<a class="headerlink" href="#woltlab-suite-forum" title="Permanent link">#</a></h3>
3974 <h4 id="multipleboardselectionformfield"><code>MultipleBoardSelectionFormField</code><a class="headerlink" href="#multipleboardselectionformfield" title="Permanent link">#</a></h4>
3975 <p><code>MultipleBoardSelectionFormField</code> is used to select multiple forums.
3976 The class implements <code>IAttributeFormField</code>, <code>ICssClassFormField</code>, and <code>IImmutableFormField</code>.</p>
3977 <p>The field supports additional settings:</p>
3978 <ul>
3979 <li><code>boardNodeList(BoardNodeList $boardNodeList): self</code> and <code>getBoardNodeList(): BoardNodeList</code> are used to set and get the list of board nodes used to render the board selection.
3980 <code>boardNodeList(BoardNodeList $boardNodeList): self</code> will automatically call <code>readNodeTree()</code> on the given board node list.</li>
3981 <li><code>categoriesSelectable(bool $categoriesSelectable = true): self</code> and <code>areCategoriesSelectable(): bool</code> are used to set and check if the categories in the board node list are selectable.
3982 By default, categories are selectable.
3983 This option is useful if only actual boards, in which threads can be posted, should be selectable but the categories must still be shown so that the overall forum structure is still properly shown.</li>
3984 <li><code>supportExternalLinks(bool $supportExternalLinks): self</code> and <code>supportsExternalLinks(): bool</code> are used to set and check if external links will be shown in the selection list.
3985 By default, external links are shown.
3986 Like in the example given before, in cases where only actual boards, in which threads can be posted, are relevant, this option allows to exclude external links.</li>
3987 </ul>
3988 <h2 id="single-use-form-fields">Single-Use Form Fields<a class="headerlink" href="#single-use-form-fields" title="Permanent link">#</a></h2>
3989 <p>The following form fields are specific for certain forms and hardly reusable in other contexts.</p>
3990 <h3 id="bbcodeattributesformfield"><code>BBCodeAttributesFormField</code><a class="headerlink" href="#bbcodeattributesformfield" title="Permanent link">#</a></h3>
3991 <p><code>BBCodeAttributesFormField</code> is a form field for setting the attributes of a BBCode.</p>
3992 <h3 id="devtoolsprojectexcludedpackagesformfield"><code>DevtoolsProjectExcludedPackagesFormField</code><a class="headerlink" href="#devtoolsprojectexcludedpackagesformfield" title="Permanent link">#</a></h3>
3993 <p><code>DevtoolsProjectExcludedPackagesFormField</code> is a form field for setting the excluded packages of a devtools project.</p>
3994 <h3 id="devtoolsprojectinstructionsformfield"><code>DevtoolsProjectInstructionsFormField</code><a class="headerlink" href="#devtoolsprojectinstructionsformfield" title="Permanent link">#</a></h3>
3995 <p><code>DevtoolsProjectInstructionsFormField</code> is a form field for setting the installation and update instructions of a devtools project.</p>
3996 <h3 id="devtoolsprojectoptionalpackagesformfield"><code>DevtoolsProjectOptionalPackagesFormField</code><a class="headerlink" href="#devtoolsprojectoptionalpackagesformfield" title="Permanent link">#</a></h3>
3997 <p><code>DevtoolsProjectOptionalPackagesFormField</code> is a form field for setting the optional packages of a devtools project.</p>
3998 <h3 id="devtoolsprojectrequiredpackagesformfield"><code>DevtoolsProjectRequiredPackagesFormField</code><a class="headerlink" href="#devtoolsprojectrequiredpackagesformfield" title="Permanent link">#</a></h3>
3999 <p><code>DevtoolsProjectRequiredPackagesFormField</code> is a form field for setting the required packages of a devtools project.</p>
4000
4001 <hr>
4002 <div class="md-source-file">
4003 <small>
4004
4005 Last update:
4006 2023-07-05
4007
4008 </small>
4009 </div>
4010
4011
4012
4013
4014
4015
4016 </article>
4017 </div>
4018
4019
4020 </div>
4021
4022 </main>
4023
4024 <footer class="md-footer">
4025
4026 <div class="md-footer-meta md-typeset">
4027 <div class="md-footer-meta__inner md-grid">
4028 <div class="md-copyright">
4029
4030 <div class="md-copyright__highlight">
4031 Copyright © 2020 WoltLab GmbH
4032 </div>
4033
4034
4035 Made with
4036 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
4037 Material for MkDocs
4038 </a>
4039
4040 </div>
4041
4042 <div class="md-copyright">
4043 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
4044 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
4045 </div>
4046
4047 </div>
4048 </div>
4049 </footer>
4050
4051 </div>
4052 <div class="md-dialog" data-md-component="dialog">
4053 <div class="md-dialog__inner md-typeset"></div>
4054 </div>
4055
4056 <script id="__config" type="application/json">{"base": "../../../..", "features": ["navigation.tracking"], "search": "../../../../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
4057
4058
4059 <script src="../../../../assets/javascripts/bundle.220ee61c.min.js"></script>
4060
4061
4062 </body>
4063 </html>