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