3 <html lang=
"en" class=
"no-js">
7 <meta name=
"viewport" content=
"width=device-width,initial-scale=1">
11 <link rel=
"canonical" href=
"https://docs.woltlab.com/6.0/php/api/form_builder/form_fields/">
14 <link rel=
"prev" href=
"../structure/">
17 <link rel=
"next" href=
"../validation_data/">
19 <link rel=
"icon" href=
"../../../../assets/default.favicon.ico">
20 <meta name=
"generator" content=
"mkdocs-1.5.1, mkdocs-material-9.1.21">
24 <title>Fields - WoltLab Suite Documentation
</title>
28 <link rel=
"stylesheet" href=
"../../../../assets/stylesheets/main.eebd395e.min.css">
31 <link rel=
"stylesheet" href=
"../../../../assets/stylesheets/palette.ecc896b0.min.css">
41 <link rel=
"stylesheet" href=
"../../../../stylesheets/extra.css">
43 <script>__md_scope=new URL(
"../../../..",location),__md_hash=e=
>[...e].reduce((e,_)=
>(e<
<5)-e+_.charCodeAt(
0),
0),__md_get=(e,_=localStorage,t=__md_scope)=
>JSON.parse(_.getItem(t.pathname+
"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=
>{try{t.setItem(a.pathname+
"."+e,JSON.stringify(_))}catch(e){}}
</script>
58 <body dir=
"ltr" data-md-color-scheme=
"default" data-md-color-primary=
"teal" data-md-color-accent=
"indigo">
62 <input class=
"md-toggle" data-md-toggle=
"drawer" type=
"checkbox" id=
"__drawer" autocomplete=
"off">
63 <input class=
"md-toggle" data-md-toggle=
"search" type=
"checkbox" id=
"__search" autocomplete=
"off">
64 <label class=
"md-overlay" for=
"__drawer"></label>
65 <div data-md-component=
"skip">
68 <a href=
"#form-builder-fields" class=
"md-skip">
73 <div data-md-component=
"announce">
75 <aside class=
"md-banner">
76 <div class=
"md-banner__inner md-grid md-typeset">
79 <a href=
"https://www.woltlab.com">Back to
<strong>woltlab.com
</strong></a>
87 <div data-md-color-scheme=
"default" data-md-component=
"outdated" hidden
>
96 <header class=
"md-header md-header--shadow" data-md-component=
"header">
97 <nav class=
"md-header__inner md-grid" aria-label=
"Header">
98 <a href=
"../../../.." title=
"WoltLab Suite Documentation" class=
"md-header__button md-logo" aria-label=
"WoltLab Suite Documentation" data-md-component=
"logo">
100 <img src=
"../../../../assets/logo.png" alt=
"logo">
103 <label class=
"md-header__button md-icon" for=
"__drawer">
104 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
106 <div class=
"md-header__title" data-md-component=
"header-title">
107 <div class=
"md-header__ellipsis">
108 <div class=
"md-header__topic">
109 <span class=
"md-ellipsis">
110 WoltLab Suite Documentation
113 <div class=
"md-header__topic" data-md-component=
"header-topic">
114 <span class=
"md-ellipsis">
127 <label class=
"md-header__button md-icon" for=
"__search">
128 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
130 <div class=
"md-search" data-md-component=
"search" role=
"dialog">
131 <label class=
"md-search__overlay" for=
"__search"></label>
132 <div class=
"md-search__inner" role=
"search">
133 <form class=
"md-search__form" name=
"search">
134 <input type=
"text" class=
"md-search__input" name=
"query" aria-label=
"Search" placeholder=
"Search" autocapitalize=
"off" autocorrect=
"off" autocomplete=
"off" spellcheck=
"false" data-md-component=
"search-query" required
>
135 <label class=
"md-search__icon md-icon" for=
"__search">
136 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
137 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
139 <nav class=
"md-search__options" aria-label=
"Search">
141 <button type=
"reset" class=
"md-search__icon md-icon" title=
"Clear" aria-label=
"Clear" tabindex=
"-1">
142 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
147 <div class=
"md-search__output">
148 <div class=
"md-search__scrollwrap" data-md-scrollfix
>
149 <div class=
"md-search-result" data-md-component=
"search-result">
150 <div class=
"md-search-result__meta">
153 <ol class=
"md-search-result__list" role=
"presentation"></ol>
161 <div class=
"md-header__source">
162 <a href=
"https://github.com/WoltLab/docs.woltlab.com/" title=
"Go to repository" class=
"md-source" data-md-component=
"source">
163 <div class=
"md-source__icon md-icon">
165 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d=
"M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
167 <div class=
"md-source__repository">
177 <div class=
"md-container" data-md-component=
"container">
184 <main class=
"md-main" data-md-component=
"main">
185 <div class=
"md-main__inner md-grid">
189 <div class=
"md-sidebar md-sidebar--primary" data-md-component=
"sidebar" data-md-type=
"navigation" >
190 <div class=
"md-sidebar__scrollwrap">
191 <div class=
"md-sidebar__inner">
195 <nav class=
"md-nav md-nav--primary" aria-label=
"Navigation" data-md-level=
"0">
196 <label class=
"md-nav__title" for=
"__drawer">
197 <a href=
"../../../.." title=
"WoltLab Suite Documentation" class=
"md-nav__button md-logo" aria-label=
"WoltLab Suite Documentation" data-md-component=
"logo">
199 <img src=
"../../../../assets/logo.png" alt=
"logo">
202 WoltLab Suite Documentation
205 <div class=
"md-nav__source">
206 <a href=
"https://github.com/WoltLab/docs.woltlab.com/" title=
"Go to repository" class=
"md-source" data-md-component=
"source">
207 <div class=
"md-source__icon md-icon">
209 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d=
"M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
211 <div class=
"md-source__repository">
217 <ul class=
"md-nav__list" data-md-scrollfix
>
226 <li class=
"md-nav__item">
227 <a href=
"../../../../getting-started/" class=
"md-nav__link">
244 <li class=
"md-nav__item md-nav__item--active md-nav__item--nested">
249 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2" checked
>
253 <label class=
"md-nav__link" for=
"__nav_2" id=
"__nav_2_label" tabindex=
"0">
255 <span class=
"md-nav__icon md-icon"></span>
258 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_2_label" aria-expanded=
"true">
259 <label class=
"md-nav__title" for=
"__nav_2">
260 <span class=
"md-nav__icon md-icon"></span>
263 <ul class=
"md-nav__list" data-md-scrollfix
>
270 <li class=
"md-nav__item">
271 <a href=
"../../../pages/" class=
"md-nav__link">
284 <li class=
"md-nav__item">
285 <a href=
"../../../database-objects/" class=
"md-nav__link">
298 <li class=
"md-nav__item">
299 <a href=
"../../../database-access/" class=
"md-nav__link">
312 <li class=
"md-nav__item">
313 <a href=
"../../../exceptions/" class=
"md-nav__link">
329 <li class=
"md-nav__item md-nav__item--active md-nav__item--nested">
334 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5" checked
>
338 <label class=
"md-nav__link" for=
"__nav_2_5" id=
"__nav_2_5_label" tabindex=
"0">
340 <span class=
"md-nav__icon md-icon"></span>
343 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_2_5_label" aria-expanded=
"true">
344 <label class=
"md-nav__title" for=
"__nav_2_5">
345 <span class=
"md-nav__icon md-icon"></span>
348 <ul class=
"md-nav__list" data-md-scrollfix
>
356 <li class=
"md-nav__item md-nav__item--nested">
361 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5_1" >
365 <label class=
"md-nav__link" for=
"__nav_2_5_1" id=
"__nav_2_5_1_label" tabindex=
"0">
367 <span class=
"md-nav__icon md-icon"></span>
370 <nav class=
"md-nav" data-md-level=
"3" aria-labelledby=
"__nav_2_5_1_label" aria-expanded=
"false">
371 <label class=
"md-nav__title" for=
"__nav_2_5_1">
372 <span class=
"md-nav__icon md-icon"></span>
375 <ul class=
"md-nav__list" data-md-scrollfix
>
382 <li class=
"md-nav__item">
383 <a href=
"../../caches/" class=
"md-nav__link">
396 <li class=
"md-nav__item">
397 <a href=
"../../caches_persistent-caches/" class=
"md-nav__link">
410 <li class=
"md-nav__item">
411 <a href=
"../../caches_runtime-caches/" class=
"md-nav__link">
431 <li class=
"md-nav__item">
432 <a href=
"../../comments/" class=
"md-nav__link">
445 <li class=
"md-nav__item">
446 <a href=
"../../cronjobs/" class=
"md-nav__link">
459 <li class=
"md-nav__item">
460 <a href=
"../../events/" class=
"md-nav__link">
476 <li class=
"md-nav__item md-nav__item--active md-nav__item--nested">
481 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5_5" checked
>
485 <label class=
"md-nav__link" for=
"__nav_2_5_5" id=
"__nav_2_5_5_label" tabindex=
"0">
487 <span class=
"md-nav__icon md-icon"></span>
490 <nav class=
"md-nav" data-md-level=
"3" aria-labelledby=
"__nav_2_5_5_label" aria-expanded=
"true">
491 <label class=
"md-nav__title" for=
"__nav_2_5_5">
492 <span class=
"md-nav__icon md-icon"></span>
495 <ul class=
"md-nav__list" data-md-scrollfix
>
502 <li class=
"md-nav__item">
503 <a href=
"../overview/" class=
"md-nav__link">
516 <li class=
"md-nav__item">
517 <a href=
"../structure/" class=
"md-nav__link">
532 <li class=
"md-nav__item md-nav__item--active">
534 <input class=
"md-nav__toggle md-toggle" type=
"checkbox" id=
"__toc">
540 <label class=
"md-nav__link md-nav__link--active" for=
"__toc">
542 <span class=
"md-nav__icon md-icon"></span>
545 <a href=
"./" class=
"md-nav__link md-nav__link--active">
551 <nav class=
"md-nav md-nav--secondary" aria-label=
"Table of contents">
558 <label class=
"md-nav__title" for=
"__toc">
559 <span class=
"md-nav__icon md-icon"></span>
562 <ul class=
"md-nav__list" data-md-component=
"toc" data-md-scrollfix
>
564 <li class=
"md-nav__item">
565 <a href=
"#abstract-form-fields" class=
"md-nav__link">
569 <nav class=
"md-nav" aria-label=
"Abstract Form Fields">
570 <ul class=
"md-nav__list">
572 <li class=
"md-nav__item">
573 <a href=
"#abstractformfield" class=
"md-nav__link">
579 <li class=
"md-nav__item">
580 <a href=
"#abstractnumericformfield" class=
"md-nav__link">
581 AbstractNumericFormField
586 <li class=
"md-nav__item">
587 <a href=
"#abstractformfielddecorator" class=
"md-nav__link">
588 AbstractFormFieldDecorator
598 <li class=
"md-nav__item">
599 <a href=
"#general-form-fields" class=
"md-nav__link">
603 <nav class=
"md-nav" aria-label=
"General Form Fields">
604 <ul class=
"md-nav__list">
606 <li class=
"md-nav__item">
607 <a href=
"#booleanformfield" class=
"md-nav__link">
613 <li class=
"md-nav__item">
614 <a href=
"#checkboxformfield" class=
"md-nav__link">
620 <li class=
"md-nav__item">
621 <a href=
"#classnameformfield" class=
"md-nav__link">
627 <li class=
"md-nav__item">
628 <a href=
"#dateformfield" class=
"md-nav__link">
634 <li class=
"md-nav__item">
635 <a href=
"#descriptionformfield" class=
"md-nav__link">
641 <li class=
"md-nav__item">
642 <a href=
"#emailformfield" class=
"md-nav__link">
648 <li class=
"md-nav__item">
649 <a href=
"#floatformfield" class=
"md-nav__link">
655 <li class=
"md-nav__item">
656 <a href=
"#hiddenformfield" class=
"md-nav__link">
662 <li class=
"md-nav__item">
663 <a href=
"#iconformfield" class=
"md-nav__link">
669 <li class=
"md-nav__item">
670 <a href=
"#integerformfield" class=
"md-nav__link">
676 <li class=
"md-nav__item">
677 <a href=
"#isdisabledformfield" class=
"md-nav__link">
683 <li class=
"md-nav__item">
684 <a href=
"#itemlistformfield" class=
"md-nav__link">
690 <li class=
"md-nav__item">
691 <a href=
"#multilinetextformfield" class=
"md-nav__link">
692 MultilineTextFormField
697 <li class=
"md-nav__item">
698 <a href=
"#multipleselectionformfield" class=
"md-nav__link">
699 MultipleSelectionFormField
704 <li class=
"md-nav__item">
705 <a href=
"#radiobuttonformfield" class=
"md-nav__link">
711 <li class=
"md-nav__item">
712 <a href=
"#ratingformfield" class=
"md-nav__link">
718 <li class=
"md-nav__item">
719 <a href=
"#selectformfield" class=
"md-nav__link">
725 <li class=
"md-nav__item">
726 <a href=
"#showorderformfield" class=
"md-nav__link">
732 <li class=
"md-nav__item">
733 <a href=
"#singleselectionformfield" class=
"md-nav__link">
734 SingleSelectionFormField
739 <li class=
"md-nav__item">
740 <a href=
"#sortorderformfield" class=
"md-nav__link">
746 <li class=
"md-nav__item">
747 <a href=
"#textformfield" class=
"md-nav__link">
753 <li class=
"md-nav__item">
754 <a href=
"#titleformfield" class=
"md-nav__link">
760 <li class=
"md-nav__item">
761 <a href=
"#urlformfield" class=
"md-nav__link">
772 <li class=
"md-nav__item">
773 <a href=
"#specific-fields" class=
"md-nav__link">
777 <nav class=
"md-nav" aria-label=
"Specific Fields">
778 <ul class=
"md-nav__list">
780 <li class=
"md-nav__item">
781 <a href=
"#aclformfield" class=
"md-nav__link">
787 <li class=
"md-nav__item">
788 <a href=
"#buttonformfield" class=
"md-nav__link">
794 <li class=
"md-nav__item">
795 <a href=
"#captchaformfield" class=
"md-nav__link">
801 <li class=
"md-nav__item">
802 <a href=
"#colorformfield" class=
"md-nav__link">
808 <li class=
"md-nav__item">
809 <a href=
"#contentlanguageformfield" class=
"md-nav__link">
810 ContentLanguageFormField
815 <li class=
"md-nav__item">
816 <a href=
"#labelformfield" class=
"md-nav__link">
822 <li class=
"md-nav__item">
823 <a href=
"#optionformfield" class=
"md-nav__link">
829 <li class=
"md-nav__item">
830 <a href=
"#simpleaclformfield" class=
"md-nav__link">
836 <li class=
"md-nav__item">
837 <a href=
"#singlemediaselectionformfield" class=
"md-nav__link">
838 SingleMediaSelectionFormField
843 <li class=
"md-nav__item">
844 <a href=
"#tagformfield" class=
"md-nav__link">
850 <li class=
"md-nav__item">
851 <a href=
"#uploadformfield" class=
"md-nav__link">
855 <nav class=
"md-nav" aria-label=
"UploadFormField">
856 <ul class=
"md-nav__list">
858 <li class=
"md-nav__item">
859 <a href=
"#provide-value-from-database-object" class=
"md-nav__link">
860 Provide value from database object
865 <li class=
"md-nav__item">
866 <a href=
"#process-files" class=
"md-nav__link">
877 <li class=
"md-nav__item">
878 <a href=
"#userformfield" class=
"md-nav__link">
884 <li class=
"md-nav__item">
885 <a href=
"#userpasswordfield" class=
"md-nav__link">
891 <li class=
"md-nav__item">
892 <a href=
"#usergroupoptionformfield" class=
"md-nav__link">
893 UserGroupOptionFormField
898 <li class=
"md-nav__item">
899 <a href=
"#usernameformfield" class=
"md-nav__link">
910 <li class=
"md-nav__item">
911 <a href=
"#wysiwyg-form-container" class=
"md-nav__link">
912 Wysiwyg form container
915 <nav class=
"md-nav" aria-label=
"Wysiwyg form container">
916 <ul class=
"md-nav__list">
918 <li class=
"md-nav__item">
919 <a href=
"#wysiwygattachmentformfield" class=
"md-nav__link">
920 WysiwygAttachmentFormField
925 <li class=
"md-nav__item">
926 <a href=
"#wysiwygpollformcontainer" class=
"md-nav__link">
927 WysiwygPollFormContainer
932 <li class=
"md-nav__item">
933 <a href=
"#wysiwygsmileyformcontainer" class=
"md-nav__link">
934 WysiwygSmileyFormContainer
937 <nav class=
"md-nav" aria-label=
"WysiwygSmileyFormContainer">
938 <ul class=
"md-nav__list">
940 <li class=
"md-nav__item">
941 <a href=
"#wysiwygsmileyformnode" class=
"md-nav__link">
942 WysiwygSmileyFormNode
952 <li class=
"md-nav__item">
953 <a href=
"#example" class=
"md-nav__link">
959 <li class=
"md-nav__item">
960 <a href=
"#wysiwygformfield" class=
"md-nav__link">
966 <li class=
"md-nav__item">
967 <a href=
"#twysiwygformnode" class=
"md-nav__link">
978 <li class=
"md-nav__item">
979 <a href=
"#application-specific-form-fields" class=
"md-nav__link">
980 Application-Specific Form Fields
983 <nav class=
"md-nav" aria-label=
"Application-Specific Form Fields">
984 <ul class=
"md-nav__list">
986 <li class=
"md-nav__item">
987 <a href=
"#woltlab-suite-forum" class=
"md-nav__link">
991 <nav class=
"md-nav" aria-label=
"WoltLab Suite Forum">
992 <ul class=
"md-nav__list">
994 <li class=
"md-nav__item">
995 <a href=
"#multipleboardselectionformfield" class=
"md-nav__link">
996 MultipleBoardSelectionFormField
1011 <li class=
"md-nav__item">
1012 <a href=
"#single-use-form-fields" class=
"md-nav__link">
1013 Single-Use Form Fields
1016 <nav class=
"md-nav" aria-label=
"Single-Use Form Fields">
1017 <ul class=
"md-nav__list">
1019 <li class=
"md-nav__item">
1020 <a href=
"#bbcodeattributesformfield" class=
"md-nav__link">
1021 BBCodeAttributesFormField
1026 <li class=
"md-nav__item">
1027 <a href=
"#devtoolsprojectexcludedpackagesformfield" class=
"md-nav__link">
1028 DevtoolsProjectExcludedPackagesFormField
1033 <li class=
"md-nav__item">
1034 <a href=
"#devtoolsprojectinstructionsformfield" class=
"md-nav__link">
1035 DevtoolsProjectInstructionsFormField
1040 <li class=
"md-nav__item">
1041 <a href=
"#devtoolsprojectoptionalpackagesformfield" class=
"md-nav__link">
1042 DevtoolsProjectOptionalPackagesFormField
1047 <li class=
"md-nav__item">
1048 <a href=
"#devtoolsprojectrequiredpackagesformfield" class=
"md-nav__link">
1049 DevtoolsProjectRequiredPackagesFormField
1073 <li class=
"md-nav__item">
1074 <a href=
"../validation_data/" class=
"md-nav__link">
1087 <li class=
"md-nav__item">
1088 <a href=
"../dependencies/" class=
"md-nav__link">
1108 <li class=
"md-nav__item">
1109 <a href=
"../../package_installation_plugins/" class=
"md-nav__link">
1110 Package Installation Plugins
1122 <li class=
"md-nav__item">
1123 <a href=
"../../user_activity_points/" class=
"md-nav__link">
1124 User Activity Points
1136 <li class=
"md-nav__item">
1137 <a href=
"../../user_notifications/" class=
"md-nav__link">
1150 <li class=
"md-nav__item">
1151 <a href=
"../../sitemaps/" class=
"md-nav__link">
1171 <li class=
"md-nav__item">
1172 <a href=
"../../../code-style/" class=
"md-nav__link">
1185 <li class=
"md-nav__item">
1186 <a href=
"../../../apps/" class=
"md-nav__link">
1199 <li class=
"md-nav__item">
1200 <a href=
"../../../gdpr/" class=
"md-nav__link">
1222 <li class=
"md-nav__item md-nav__item--nested">
1227 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_3" >
1231 <label class=
"md-nav__link" for=
"__nav_3" id=
"__nav_3_label" tabindex=
"0">
1232 Languages, Templates & CSS
1233 <span class=
"md-nav__icon md-icon"></span>
1236 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_3_label" aria-expanded=
"false">
1237 <label class=
"md-nav__title" for=
"__nav_3">
1238 <span class=
"md-nav__icon md-icon"></span>
1239 Languages, Templates & CSS
1241 <ul class=
"md-nav__list" data-md-scrollfix
>
1248 <li class=
"md-nav__item">
1249 <a href=
"../../../../view/languages/" class=
"md-nav__link">
1262 <li class=
"md-nav__item">
1263 <a href=
"../../../../view/templates/" class=
"md-nav__link">
1276 <li class=
"md-nav__item">
1277 <a href=
"../../../../view/template-modifiers/" class=
"md-nav__link">
1290 <li class=
"md-nav__item">
1291 <a href=
"../../../../view/template-plugins/" class=
"md-nav__link">
1304 <li class=
"md-nav__item">
1305 <a href=
"../../../../view/css/" class=
"md-nav__link">
1327 <li class=
"md-nav__item md-nav__item--nested">
1332 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4" >
1336 <label class=
"md-nav__link" for=
"__nav_4" id=
"__nav_4_label" tabindex=
"0">
1337 TypeScript and JavaScript API
1338 <span class=
"md-nav__icon md-icon"></span>
1341 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_4_label" aria-expanded=
"false">
1342 <label class=
"md-nav__title" for=
"__nav_4">
1343 <span class=
"md-nav__icon md-icon"></span>
1344 TypeScript and JavaScript API
1346 <ul class=
"md-nav__list" data-md-scrollfix
>
1353 <li class=
"md-nav__item">
1354 <a href=
"../../../../javascript/general-usage/" class=
"md-nav__link">
1367 <li class=
"md-nav__item">
1368 <a href=
"../../../../javascript/typescript/" class=
"md-nav__link">
1382 <li class=
"md-nav__item md-nav__item--nested">
1387 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4_3" >
1391 <label class=
"md-nav__link" for=
"__nav_4_3" id=
"__nav_4_3_label" tabindex=
"0">
1393 <span class=
"md-nav__icon md-icon"></span>
1396 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_4_3_label" aria-expanded=
"false">
1397 <label class=
"md-nav__title" for=
"__nav_4_3">
1398 <span class=
"md-nav__icon md-icon"></span>
1401 <ul class=
"md-nav__list" data-md-scrollfix
>
1408 <li class=
"md-nav__item">
1409 <a href=
"../../../../javascript/components_ckeditor5/" class=
"md-nav__link">
1422 <li class=
"md-nav__item">
1423 <a href=
"../../../../javascript/components_confirmation/" class=
"md-nav__link">
1436 <li class=
"md-nav__item">
1437 <a href=
"../../../../javascript/components_dialog/" class=
"md-nav__link">
1450 <li class=
"md-nav__item">
1451 <a href=
"../../../../javascript/components_google_maps/" class=
"md-nav__link">
1464 <li class=
"md-nav__item">
1465 <a href=
"../../../../javascript/components_pagination/" class=
"md-nav__link">
1486 <li class=
"md-nav__item md-nav__item--nested">
1491 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4_4" >
1495 <label class=
"md-nav__link" for=
"__nav_4_4" id=
"__nav_4_4_label" tabindex=
"0">
1497 <span class=
"md-nav__icon md-icon"></span>
1500 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_4_4_label" aria-expanded=
"false">
1501 <label class=
"md-nav__title" for=
"__nav_4_4">
1502 <span class=
"md-nav__icon md-icon"></span>
1505 <ul class=
"md-nav__list" data-md-scrollfix
>
1512 <li class=
"md-nav__item">
1513 <a href=
"../../../../javascript/new-api_writing-a-module/" class=
"md-nav__link">
1526 <li class=
"md-nav__item">
1527 <a href=
"../../../../javascript/new-api_core/" class=
"md-nav__link">
1540 <li class=
"md-nav__item">
1541 <a href=
"../../../../javascript/new-api_dom/" class=
"md-nav__link">
1554 <li class=
"md-nav__item">
1555 <a href=
"../../../../javascript/new-api_events/" class=
"md-nav__link">
1568 <li class=
"md-nav__item">
1569 <a href=
"../../../../javascript/new-api_ajax/" class=
"md-nav__link">
1582 <li class=
"md-nav__item">
1583 <a href=
"../../../../javascript/new-api_dialogs/" class=
"md-nav__link">
1596 <li class=
"md-nav__item">
1597 <a href=
"../../../../javascript/new-api_browser/" class=
"md-nav__link">
1598 Browser and Screen Sizes
1610 <li class=
"md-nav__item">
1611 <a href=
"../../../../javascript/new-api_ui/" class=
"md-nav__link">
1631 <li class=
"md-nav__item">
1632 <a href=
"../../../../javascript/legacy-api/" class=
"md-nav__link">
1645 <li class=
"md-nav__item">
1646 <a href=
"../../../../javascript/code-snippets/" class=
"md-nav__link">
1668 <li class=
"md-nav__item md-nav__item--nested">
1673 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_5" >
1677 <label class=
"md-nav__link" for=
"__nav_5" id=
"__nav_5_label" tabindex=
"0">
1679 <span class=
"md-nav__icon md-icon"></span>
1682 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_5_label" aria-expanded=
"false">
1683 <label class=
"md-nav__title" for=
"__nav_5">
1684 <span class=
"md-nav__icon md-icon"></span>
1687 <ul class=
"md-nav__list" data-md-scrollfix
>
1694 <li class=
"md-nav__item">
1695 <a href=
"../../../../package/package-xml/" class=
"md-nav__link">
1709 <li class=
"md-nav__item md-nav__item--nested">
1714 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_5_2" >
1718 <label class=
"md-nav__link" for=
"__nav_5_2" id=
"__nav_5_2_label" tabindex=
"0">
1720 <span class=
"md-nav__icon md-icon"></span>
1723 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_5_2_label" aria-expanded=
"false">
1724 <label class=
"md-nav__title" for=
"__nav_5_2">
1725 <span class=
"md-nav__icon md-icon"></span>
1728 <ul class=
"md-nav__list" data-md-scrollfix
>
1735 <li class=
"md-nav__item">
1736 <a href=
"../../../../package/pip/" class=
"md-nav__link">
1749 <li class=
"md-nav__item">
1750 <a href=
"../../../../package/pip/acl-option/" class=
"md-nav__link">
1763 <li class=
"md-nav__item">
1764 <a href=
"../../../../package/pip/acp-menu/" class=
"md-nav__link">
1777 <li class=
"md-nav__item">
1778 <a href=
"../../../../package/pip/acp-search-provider/" class=
"md-nav__link">
1791 <li class=
"md-nav__item">
1792 <a href=
"../../../../package/pip/acp-template/" class=
"md-nav__link">
1805 <li class=
"md-nav__item">
1806 <a href=
"../../../../package/pip/acp-template-delete/" class=
"md-nav__link">
1819 <li class=
"md-nav__item">
1820 <a href=
"../../../../package/pip/bbcode/" class=
"md-nav__link">
1833 <li class=
"md-nav__item">
1834 <a href=
"../../../../package/pip/box/" class=
"md-nav__link">
1847 <li class=
"md-nav__item">
1848 <a href=
"../../../../package/pip/clipboard-action/" class=
"md-nav__link">
1861 <li class=
"md-nav__item">
1862 <a href=
"../../../../package/pip/core-object/" class=
"md-nav__link">
1875 <li class=
"md-nav__item">
1876 <a href=
"../../../../package/pip/cronjob/" class=
"md-nav__link">
1889 <li class=
"md-nav__item">
1890 <a href=
"../../../../package/pip/database/" class=
"md-nav__link">
1903 <li class=
"md-nav__item">
1904 <a href=
"../../../../package/pip/event-listener/" class=
"md-nav__link">
1917 <li class=
"md-nav__item">
1918 <a href=
"../../../../package/pip/file/" class=
"md-nav__link">
1931 <li class=
"md-nav__item">
1932 <a href=
"../../../../package/pip/file-delete/" class=
"md-nav__link">
1945 <li class=
"md-nav__item">
1946 <a href=
"../../../../package/pip/language/" class=
"md-nav__link">
1959 <li class=
"md-nav__item">
1960 <a href=
"../../../../package/pip/media-provider/" class=
"md-nav__link">
1973 <li class=
"md-nav__item">
1974 <a href=
"../../../../package/pip/menu/" class=
"md-nav__link">
1987 <li class=
"md-nav__item">
1988 <a href=
"../../../../package/pip/menu-item/" class=
"md-nav__link">
2001 <li class=
"md-nav__item">
2002 <a href=
"../../../../package/pip/object-type/" class=
"md-nav__link">
2015 <li class=
"md-nav__item">
2016 <a href=
"../../../../package/pip/object-type-definition/" class=
"md-nav__link">
2017 objectTypeDefinition
2029 <li class=
"md-nav__item">
2030 <a href=
"../../../../package/pip/option/" class=
"md-nav__link">
2043 <li class=
"md-nav__item">
2044 <a href=
"../../../../package/pip/page/" class=
"md-nav__link">
2057 <li class=
"md-nav__item">
2058 <a href=
"../../../../package/pip/pip/" class=
"md-nav__link">
2071 <li class=
"md-nav__item">
2072 <a href=
"../../../../package/pip/script/" class=
"md-nav__link">
2085 <li class=
"md-nav__item">
2086 <a href=
"../../../../package/pip/smiley/" class=
"md-nav__link">
2099 <li class=
"md-nav__item">
2100 <a href=
"../../../../package/pip/sql/" class=
"md-nav__link">
2113 <li class=
"md-nav__item">
2114 <a href=
"../../../../package/pip/style/" class=
"md-nav__link">
2127 <li class=
"md-nav__item">
2128 <a href=
"../../../../package/pip/template/" class=
"md-nav__link">
2141 <li class=
"md-nav__item">
2142 <a href=
"../../../../package/pip/template-delete/" class=
"md-nav__link">
2155 <li class=
"md-nav__item">
2156 <a href=
"../../../../package/pip/template-listener/" class=
"md-nav__link">
2169 <li class=
"md-nav__item">
2170 <a href=
"../../../../package/pip/user-group-option/" class=
"md-nav__link">
2183 <li class=
"md-nav__item">
2184 <a href=
"../../../../package/pip/user-menu/" class=
"md-nav__link">
2197 <li class=
"md-nav__item">
2198 <a href=
"../../../../package/pip/user-notification-event/" class=
"md-nav__link">
2199 userNotificationEvent
2211 <li class=
"md-nav__item">
2212 <a href=
"../../../../package/pip/user-option/" class=
"md-nav__link">
2225 <li class=
"md-nav__item">
2226 <a href=
"../../../../package/pip/user-profile-menu/" class=
"md-nav__link">
2246 <li class=
"md-nav__item">
2247 <a href=
"../../../../package/database-php-api/" class=
"md-nav__link">
2269 <li class=
"md-nav__item md-nav__item--nested">
2274 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6" >
2278 <label class=
"md-nav__link" for=
"__nav_6" id=
"__nav_6_label" tabindex=
"0">
2280 <span class=
"md-nav__icon md-icon"></span>
2283 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_6_label" aria-expanded=
"false">
2284 <label class=
"md-nav__title" for=
"__nav_6">
2285 <span class=
"md-nav__icon md-icon"></span>
2288 <ul class=
"md-nav__list" data-md-scrollfix
>
2296 <li class=
"md-nav__item md-nav__item--nested">
2301 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_1" >
2305 <label class=
"md-nav__link" for=
"__nav_6_1" id=
"__nav_6_1_label" tabindex=
"0">
2306 From WoltLab Suite
5.5
2307 <span class=
"md-nav__icon md-icon"></span>
2310 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_1_label" aria-expanded=
"false">
2311 <label class=
"md-nav__title" for=
"__nav_6_1">
2312 <span class=
"md-nav__icon md-icon"></span>
2313 From WoltLab Suite
5.5
2315 <ul class=
"md-nav__list" data-md-scrollfix
>
2322 <li class=
"md-nav__item">
2323 <a href=
"../../../../migration/wsc55/php/" class=
"md-nav__link">
2336 <li class=
"md-nav__item">
2337 <a href=
"../../../../migration/wsc55/javascript/" class=
"md-nav__link">
2338 TypeScript and JavaScript
2350 <li class=
"md-nav__item">
2351 <a href=
"../../../../migration/wsc55/templates/" class=
"md-nav__link">
2364 <li class=
"md-nav__item">
2365 <a href=
"../../../../migration/wsc55/icons/" class=
"md-nav__link">
2378 <li class=
"md-nav__item">
2379 <a href=
"../../../../migration/wsc55/dialogs/" class=
"md-nav__link">
2392 <li class=
"md-nav__item">
2393 <a href=
"../../../../migration/wsc55/libraries/" class=
"md-nav__link">
2394 Third Party Libraries
2406 <li class=
"md-nav__item">
2407 <a href=
"../../../../migration/wsc55/deprecations_removals/" class=
"md-nav__link">
2408 Deprecations and Removals
2428 <li class=
"md-nav__item md-nav__item--nested">
2433 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_2" >
2437 <label class=
"md-nav__link" for=
"__nav_6_2" id=
"__nav_6_2_label" tabindex=
"0">
2438 From WoltLab Suite
5.4
2439 <span class=
"md-nav__icon md-icon"></span>
2442 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_2_label" aria-expanded=
"false">
2443 <label class=
"md-nav__title" for=
"__nav_6_2">
2444 <span class=
"md-nav__icon md-icon"></span>
2445 From WoltLab Suite
5.4
2447 <ul class=
"md-nav__list" data-md-scrollfix
>
2454 <li class=
"md-nav__item">
2455 <a href=
"../../../../migration/wsc54/php/" class=
"md-nav__link">
2468 <li class=
"md-nav__item">
2469 <a href=
"../../../../migration/wsc54/javascript/" class=
"md-nav__link">
2470 TypeScript and JavaScript
2482 <li class=
"md-nav__item">
2483 <a href=
"../../../../migration/wsc54/templates/" class=
"md-nav__link">
2496 <li class=
"md-nav__item">
2497 <a href=
"../../../../migration/wsc54/libraries/" class=
"md-nav__link">
2498 Third Party Libraries
2510 <li class=
"md-nav__item">
2511 <a href=
"../../../../migration/wsc54/deprecations_removals/" class=
"md-nav__link">
2512 Deprecations and Removals
2532 <li class=
"md-nav__item md-nav__item--nested">
2537 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_3" >
2541 <label class=
"md-nav__link" for=
"__nav_6_3" id=
"__nav_6_3_label" tabindex=
"0">
2542 From WoltLab Suite
5.3
2543 <span class=
"md-nav__icon md-icon"></span>
2546 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_3_label" aria-expanded=
"false">
2547 <label class=
"md-nav__title" for=
"__nav_6_3">
2548 <span class=
"md-nav__icon md-icon"></span>
2549 From WoltLab Suite
5.3
2551 <ul class=
"md-nav__list" data-md-scrollfix
>
2558 <li class=
"md-nav__item">
2559 <a href=
"../../../../migration/wsc53/php/" class=
"md-nav__link">
2572 <li class=
"md-nav__item">
2573 <a href=
"../../../../migration/wsc53/session/" class=
"md-nav__link">
2574 Session Handling and Authentication
2586 <li class=
"md-nav__item">
2587 <a href=
"../../../../migration/wsc53/javascript/" class=
"md-nav__link">
2588 TypeScript and JavaScript
2600 <li class=
"md-nav__item">
2601 <a href=
"../../../../migration/wsc53/templates/" class=
"md-nav__link">
2614 <li class=
"md-nav__item">
2615 <a href=
"../../../../migration/wsc53/libraries/" class=
"md-nav__link">
2616 Third Party Libraries
2636 <li class=
"md-nav__item md-nav__item--nested">
2641 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_4" >
2645 <label class=
"md-nav__link" for=
"__nav_6_4" id=
"__nav_6_4_label" tabindex=
"0">
2646 From WoltLab Suite
5.2
2647 <span class=
"md-nav__icon md-icon"></span>
2650 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_4_label" aria-expanded=
"false">
2651 <label class=
"md-nav__title" for=
"__nav_6_4">
2652 <span class=
"md-nav__icon md-icon"></span>
2653 From WoltLab Suite
5.2
2655 <ul class=
"md-nav__list" data-md-scrollfix
>
2662 <li class=
"md-nav__item">
2663 <a href=
"../../../../migration/wsc52/php/" class=
"md-nav__link">
2676 <li class=
"md-nav__item">
2677 <a href=
"../../../../migration/wsc52/templates/" class=
"md-nav__link">
2678 Templates and Languages
2690 <li class=
"md-nav__item">
2691 <a href=
"../../../../migration/wsc52/libraries/" class=
"md-nav__link">
2692 Third Party Libraries
2712 <li class=
"md-nav__item md-nav__item--nested">
2717 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_5" >
2721 <label class=
"md-nav__link" for=
"__nav_6_5" id=
"__nav_6_5_label" tabindex=
"0">
2722 From WoltLab Suite
3.1
2723 <span class=
"md-nav__icon md-icon"></span>
2726 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_5_label" aria-expanded=
"false">
2727 <label class=
"md-nav__title" for=
"__nav_6_5">
2728 <span class=
"md-nav__icon md-icon"></span>
2729 From WoltLab Suite
3.1
2731 <ul class=
"md-nav__list" data-md-scrollfix
>
2738 <li class=
"md-nav__item">
2739 <a href=
"../../../../migration/wsc31/php/" class=
"md-nav__link">
2760 <li class=
"md-nav__item md-nav__item--nested">
2765 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_6" >
2769 <label class=
"md-nav__link" for=
"__nav_6_6" id=
"__nav_6_6_label" tabindex=
"0">
2770 From WoltLab Suite
3.0
2771 <span class=
"md-nav__icon md-icon"></span>
2774 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_6_label" aria-expanded=
"false">
2775 <label class=
"md-nav__title" for=
"__nav_6_6">
2776 <span class=
"md-nav__icon md-icon"></span>
2777 From WoltLab Suite
3.0
2779 <ul class=
"md-nav__list" data-md-scrollfix
>
2786 <li class=
"md-nav__item">
2787 <a href=
"../../../../migration/wsc30/php/" class=
"md-nav__link">
2800 <li class=
"md-nav__item">
2801 <a href=
"../../../../migration/wsc30/javascript/" class=
"md-nav__link">
2814 <li class=
"md-nav__item">
2815 <a href=
"../../../../migration/wsc30/templates/" class=
"md-nav__link">
2828 <li class=
"md-nav__item">
2829 <a href=
"../../../../migration/wsc30/css/" class=
"md-nav__link">
2842 <li class=
"md-nav__item">
2843 <a href=
"../../../../migration/wsc30/package/" class=
"md-nav__link">
2864 <li class=
"md-nav__item md-nav__item--nested">
2869 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_7" >
2873 <label class=
"md-nav__link" for=
"__nav_6_7" id=
"__nav_6_7_label" tabindex=
"0">
2875 <span class=
"md-nav__icon md-icon"></span>
2878 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_7_label" aria-expanded=
"false">
2879 <label class=
"md-nav__title" for=
"__nav_6_7">
2880 <span class=
"md-nav__icon md-icon"></span>
2883 <ul class=
"md-nav__list" data-md-scrollfix
>
2890 <li class=
"md-nav__item">
2891 <a href=
"../../../../migration/wcf21/php/" class=
"md-nav__link">
2904 <li class=
"md-nav__item">
2905 <a href=
"../../../../migration/wcf21/templates/" class=
"md-nav__link">
2918 <li class=
"md-nav__item">
2919 <a href=
"../../../../migration/wcf21/css/" class=
"md-nav__link">
2932 <li class=
"md-nav__item">
2933 <a href=
"../../../../migration/wcf21/package/" class=
"md-nav__link">
2962 <li class=
"md-nav__item md-nav__item--nested">
2967 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_7" >
2971 <label class=
"md-nav__link" for=
"__nav_7" id=
"__nav_7_label" tabindex=
"0">
2973 <span class=
"md-nav__icon md-icon"></span>
2976 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_7_label" aria-expanded=
"false">
2977 <label class=
"md-nav__title" for=
"__nav_7">
2978 <span class=
"md-nav__icon md-icon"></span>
2981 <ul class=
"md-nav__list" data-md-scrollfix
>
2989 <li class=
"md-nav__item md-nav__item--nested">
2994 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_7_1" >
2998 <label class=
"md-nav__link" for=
"__nav_7_1" id=
"__nav_7_1_label" tabindex=
"0">
3000 <span class=
"md-nav__icon md-icon"></span>
3003 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_7_1_label" aria-expanded=
"false">
3004 <label class=
"md-nav__title" for=
"__nav_7_1">
3005 <span class=
"md-nav__icon md-icon"></span>
3008 <ul class=
"md-nav__list" data-md-scrollfix
>
3015 <li class=
"md-nav__item">
3016 <a href=
"../../../../tutorial/series/overview/" class=
"md-nav__link">
3029 <li class=
"md-nav__item">
3030 <a href=
"../../../../tutorial/series/part_1/" class=
"md-nav__link">
3043 <li class=
"md-nav__item">
3044 <a href=
"../../../../tutorial/series/part_2/" class=
"md-nav__link">
3057 <li class=
"md-nav__item">
3058 <a href=
"../../../../tutorial/series/part_3/" class=
"md-nav__link">
3071 <li class=
"md-nav__item">
3072 <a href=
"../../../../tutorial/series/part_4/" class=
"md-nav__link">
3085 <li class=
"md-nav__item">
3086 <a href=
"../../../../tutorial/series/part_5/" class=
"md-nav__link">
3099 <li class=
"md-nav__item">
3100 <a href=
"../../../../tutorial/series/part_6/" class=
"md-nav__link">
3129 <div class=
"md-sidebar md-sidebar--secondary" data-md-component=
"sidebar" data-md-type=
"toc" >
3130 <div class=
"md-sidebar__scrollwrap">
3131 <div class=
"md-sidebar__inner">
3134 <nav class=
"md-nav md-nav--secondary" aria-label=
"Table of contents">
3141 <label class=
"md-nav__title" for=
"__toc">
3142 <span class=
"md-nav__icon md-icon"></span>
3145 <ul class=
"md-nav__list" data-md-component=
"toc" data-md-scrollfix
>
3147 <li class=
"md-nav__item">
3148 <a href=
"#abstract-form-fields" class=
"md-nav__link">
3149 Abstract Form Fields
3152 <nav class=
"md-nav" aria-label=
"Abstract Form Fields">
3153 <ul class=
"md-nav__list">
3155 <li class=
"md-nav__item">
3156 <a href=
"#abstractformfield" class=
"md-nav__link">
3162 <li class=
"md-nav__item">
3163 <a href=
"#abstractnumericformfield" class=
"md-nav__link">
3164 AbstractNumericFormField
3169 <li class=
"md-nav__item">
3170 <a href=
"#abstractformfielddecorator" class=
"md-nav__link">
3171 AbstractFormFieldDecorator
3181 <li class=
"md-nav__item">
3182 <a href=
"#general-form-fields" class=
"md-nav__link">
3186 <nav class=
"md-nav" aria-label=
"General Form Fields">
3187 <ul class=
"md-nav__list">
3189 <li class=
"md-nav__item">
3190 <a href=
"#booleanformfield" class=
"md-nav__link">
3196 <li class=
"md-nav__item">
3197 <a href=
"#checkboxformfield" class=
"md-nav__link">
3203 <li class=
"md-nav__item">
3204 <a href=
"#classnameformfield" class=
"md-nav__link">
3210 <li class=
"md-nav__item">
3211 <a href=
"#dateformfield" class=
"md-nav__link">
3217 <li class=
"md-nav__item">
3218 <a href=
"#descriptionformfield" class=
"md-nav__link">
3219 DescriptionFormField
3224 <li class=
"md-nav__item">
3225 <a href=
"#emailformfield" class=
"md-nav__link">
3231 <li class=
"md-nav__item">
3232 <a href=
"#floatformfield" class=
"md-nav__link">
3238 <li class=
"md-nav__item">
3239 <a href=
"#hiddenformfield" class=
"md-nav__link">
3245 <li class=
"md-nav__item">
3246 <a href=
"#iconformfield" class=
"md-nav__link">
3252 <li class=
"md-nav__item">
3253 <a href=
"#integerformfield" class=
"md-nav__link">
3259 <li class=
"md-nav__item">
3260 <a href=
"#isdisabledformfield" class=
"md-nav__link">
3266 <li class=
"md-nav__item">
3267 <a href=
"#itemlistformfield" class=
"md-nav__link">
3273 <li class=
"md-nav__item">
3274 <a href=
"#multilinetextformfield" class=
"md-nav__link">
3275 MultilineTextFormField
3280 <li class=
"md-nav__item">
3281 <a href=
"#multipleselectionformfield" class=
"md-nav__link">
3282 MultipleSelectionFormField
3287 <li class=
"md-nav__item">
3288 <a href=
"#radiobuttonformfield" class=
"md-nav__link">
3289 RadioButtonFormField
3294 <li class=
"md-nav__item">
3295 <a href=
"#ratingformfield" class=
"md-nav__link">
3301 <li class=
"md-nav__item">
3302 <a href=
"#selectformfield" class=
"md-nav__link">
3308 <li class=
"md-nav__item">
3309 <a href=
"#showorderformfield" class=
"md-nav__link">
3315 <li class=
"md-nav__item">
3316 <a href=
"#singleselectionformfield" class=
"md-nav__link">
3317 SingleSelectionFormField
3322 <li class=
"md-nav__item">
3323 <a href=
"#sortorderformfield" class=
"md-nav__link">
3329 <li class=
"md-nav__item">
3330 <a href=
"#textformfield" class=
"md-nav__link">
3336 <li class=
"md-nav__item">
3337 <a href=
"#titleformfield" class=
"md-nav__link">
3343 <li class=
"md-nav__item">
3344 <a href=
"#urlformfield" class=
"md-nav__link">
3355 <li class=
"md-nav__item">
3356 <a href=
"#specific-fields" class=
"md-nav__link">
3360 <nav class=
"md-nav" aria-label=
"Specific Fields">
3361 <ul class=
"md-nav__list">
3363 <li class=
"md-nav__item">
3364 <a href=
"#aclformfield" class=
"md-nav__link">
3370 <li class=
"md-nav__item">
3371 <a href=
"#buttonformfield" class=
"md-nav__link">
3377 <li class=
"md-nav__item">
3378 <a href=
"#captchaformfield" class=
"md-nav__link">
3384 <li class=
"md-nav__item">
3385 <a href=
"#colorformfield" class=
"md-nav__link">
3391 <li class=
"md-nav__item">
3392 <a href=
"#contentlanguageformfield" class=
"md-nav__link">
3393 ContentLanguageFormField
3398 <li class=
"md-nav__item">
3399 <a href=
"#labelformfield" class=
"md-nav__link">
3405 <li class=
"md-nav__item">
3406 <a href=
"#optionformfield" class=
"md-nav__link">
3412 <li class=
"md-nav__item">
3413 <a href=
"#simpleaclformfield" class=
"md-nav__link">
3419 <li class=
"md-nav__item">
3420 <a href=
"#singlemediaselectionformfield" class=
"md-nav__link">
3421 SingleMediaSelectionFormField
3426 <li class=
"md-nav__item">
3427 <a href=
"#tagformfield" class=
"md-nav__link">
3433 <li class=
"md-nav__item">
3434 <a href=
"#uploadformfield" class=
"md-nav__link">
3438 <nav class=
"md-nav" aria-label=
"UploadFormField">
3439 <ul class=
"md-nav__list">
3441 <li class=
"md-nav__item">
3442 <a href=
"#provide-value-from-database-object" class=
"md-nav__link">
3443 Provide value from database object
3448 <li class=
"md-nav__item">
3449 <a href=
"#process-files" class=
"md-nav__link">
3460 <li class=
"md-nav__item">
3461 <a href=
"#userformfield" class=
"md-nav__link">
3467 <li class=
"md-nav__item">
3468 <a href=
"#userpasswordfield" class=
"md-nav__link">
3474 <li class=
"md-nav__item">
3475 <a href=
"#usergroupoptionformfield" class=
"md-nav__link">
3476 UserGroupOptionFormField
3481 <li class=
"md-nav__item">
3482 <a href=
"#usernameformfield" class=
"md-nav__link">
3493 <li class=
"md-nav__item">
3494 <a href=
"#wysiwyg-form-container" class=
"md-nav__link">
3495 Wysiwyg form container
3498 <nav class=
"md-nav" aria-label=
"Wysiwyg form container">
3499 <ul class=
"md-nav__list">
3501 <li class=
"md-nav__item">
3502 <a href=
"#wysiwygattachmentformfield" class=
"md-nav__link">
3503 WysiwygAttachmentFormField
3508 <li class=
"md-nav__item">
3509 <a href=
"#wysiwygpollformcontainer" class=
"md-nav__link">
3510 WysiwygPollFormContainer
3515 <li class=
"md-nav__item">
3516 <a href=
"#wysiwygsmileyformcontainer" class=
"md-nav__link">
3517 WysiwygSmileyFormContainer
3520 <nav class=
"md-nav" aria-label=
"WysiwygSmileyFormContainer">
3521 <ul class=
"md-nav__list">
3523 <li class=
"md-nav__item">
3524 <a href=
"#wysiwygsmileyformnode" class=
"md-nav__link">
3525 WysiwygSmileyFormNode
3535 <li class=
"md-nav__item">
3536 <a href=
"#example" class=
"md-nav__link">
3542 <li class=
"md-nav__item">
3543 <a href=
"#wysiwygformfield" class=
"md-nav__link">
3549 <li class=
"md-nav__item">
3550 <a href=
"#twysiwygformnode" class=
"md-nav__link">
3561 <li class=
"md-nav__item">
3562 <a href=
"#application-specific-form-fields" class=
"md-nav__link">
3563 Application-Specific Form Fields
3566 <nav class=
"md-nav" aria-label=
"Application-Specific Form Fields">
3567 <ul class=
"md-nav__list">
3569 <li class=
"md-nav__item">
3570 <a href=
"#woltlab-suite-forum" class=
"md-nav__link">
3574 <nav class=
"md-nav" aria-label=
"WoltLab Suite Forum">
3575 <ul class=
"md-nav__list">
3577 <li class=
"md-nav__item">
3578 <a href=
"#multipleboardselectionformfield" class=
"md-nav__link">
3579 MultipleBoardSelectionFormField
3594 <li class=
"md-nav__item">
3595 <a href=
"#single-use-form-fields" class=
"md-nav__link">
3596 Single-Use Form Fields
3599 <nav class=
"md-nav" aria-label=
"Single-Use Form Fields">
3600 <ul class=
"md-nav__list">
3602 <li class=
"md-nav__item">
3603 <a href=
"#bbcodeattributesformfield" class=
"md-nav__link">
3604 BBCodeAttributesFormField
3609 <li class=
"md-nav__item">
3610 <a href=
"#devtoolsprojectexcludedpackagesformfield" class=
"md-nav__link">
3611 DevtoolsProjectExcludedPackagesFormField
3616 <li class=
"md-nav__item">
3617 <a href=
"#devtoolsprojectinstructionsformfield" class=
"md-nav__link">
3618 DevtoolsProjectInstructionsFormField
3623 <li class=
"md-nav__item">
3624 <a href=
"#devtoolsprojectoptionalpackagesformfield" class=
"md-nav__link">
3625 DevtoolsProjectOptionalPackagesFormField
3630 <li class=
"md-nav__item">
3631 <a href=
"#devtoolsprojectrequiredpackagesformfield" class=
"md-nav__link">
3632 DevtoolsProjectRequiredPackagesFormField
3651 <div class=
"md-content" data-md-component=
"content">
3652 <article class=
"md-content__inner md-typeset">
3660 <h1 id=
"form-builder-fields">Form Builder Fields
<a class=
"headerlink" href=
"#form-builder-fields" title=
"Permanent link">#
</a></h1>
3661 <h2 id=
"abstract-form-fields">Abstract Form Fields
<a class=
"headerlink" href=
"#abstract-form-fields" title=
"Permanent link">#
</a></h2>
3662 <p>The following form field classes cannot be instantiated directly because they are abstract, but they can/must be used when creating own form field classes.
</p>
3663 <h3 id=
"abstractformfield"><code>AbstractFormField
</code><a class=
"headerlink" href=
"#abstractformfield" title=
"Permanent link">#
</a></h3>
3664 <p><code>AbstractFormField
</code> is the abstract default implementation of the
<code>IFormField
</code> interface and it is expected that every implementation of
<code>IFormField
</code> implements the interface by extending this class.
</p>
3665 <h3 id=
"abstractnumericformfield"><code>AbstractNumericFormField
</code><a class=
"headerlink" href=
"#abstractnumericformfield" title=
"Permanent link">#
</a></h3>
3666 <p><code>AbstractNumericFormField
</code> is the abstract implementation of a form field handling a single numeric value.
3667 The class implements
<code>IAttributeFormField
</code>,
<code>IAutoCompleteFormField
</code>,
<code>ICssClassFormField
</code>,
<code>IImmutableFormField
</code>,
<code>IInputModeFormField
</code>,
<code>IMaximumFormField
</code>,
<code>IMinimumFormField
</code>,
<code>INullableFormField
</code>,
<code>IPlaceholderFormField
</code> and
<code>ISuffixedFormField
</code>.
3668 If the property
<code>$integerValues
</code> is
<code>true
</code>, the form field works with integer values, otherwise it works with floating point numbers.
3669 The methods
<code>step($step = null)
</code> and
<code>getStep()
</code> can be used to set and get the step attribute of the
<code>input
</code> element.
3670 The default step for form fields with integer values is
<code>1</code>.
3671 Otherwise, the default step is
<code>any
</code>.
</p>
3672 <h3 id=
"abstractformfielddecorator"><code>AbstractFormFieldDecorator
</code><a class=
"headerlink" href=
"#abstractformfielddecorator" title=
"Permanent link">#
</a></h3>
3673 <p><code>AbstractFormFieldDecorator
</code> is a default implementation of a decorator for form fields that forwards calls to all methods defined in
<code>IFormField
</code> to the respective method of the decorated object.
3674 The class implements
<code>IFormfield
</code>.
3675 If the implementation of a more specific interface is required then the remaining methods must be implemented in the concrete decorator derived from
<code>AbstractFormFieldDecorator
</code> and the type of the
<code>$field
</code> property must be narrowed appropriately.
</p>
3676 <h2 id=
"general-form-fields">General Form Fields
<a class=
"headerlink" href=
"#general-form-fields" title=
"Permanent link">#
</a></h2>
3677 <p>The following form fields are general reusable fields without any underlying context.
</p>
3678 <h3 id=
"booleanformfield"><code>BooleanFormField
</code><a class=
"headerlink" href=
"#booleanformfield" title=
"Permanent link">#
</a></h3>
3679 <p><code>BooleanFormField
</code> is used for boolean (
<code>0</code> or
<code>1</code>,
<code>yes
</code> or
<code>no
</code>) values.
3680 Objects of this class require a label.
3681 The return value of
<code>getSaveValue()
</code> is the integer representation of the boolean value, i.e.
<code>0</code> or
<code>1</code>.
3682 The class implements
<code>IAttributeFormField
</code>,
<code>IAutoFocusFormField
</code>,
<code>ICssClassFormField
</code>, and
<code>IImmutableFormField
</code>.
</p>
3683 <h3 id=
"checkboxformfield"><code>CheckboxFormField
</code><a class=
"headerlink" href=
"#checkboxformfield" title=
"Permanent link">#
</a></h3>
3684 <p><code>CheckboxFormField
</code> extends
<code>BooleanFormField
</code> and offers a simple HTML checkbox.
</p>
3685 <h3 id=
"classnameformfield"><code>ClassNameFormField
</code><a class=
"headerlink" href=
"#classnameformfield" title=
"Permanent link">#
</a></h3>
3686 <p><code>ClassNameFormField
</code> is a
<a href=
"#textformfield">text form field
</a> that supports additional settings, specific to entering a PHP class name:
</p>
3688 <li><code>classExists($classExists = true)
</code> and
<code>getClassExists()
</code> can be used to ensure that the entered class currently exists in the installation.
3689 By default, the existance of the entered class is required.
</li>
3690 <li><code>implementedInterface($interface)
</code> and
<code>getImplementedInterface()
</code> can be used to ensure that the entered class implements the specified interface.
3691 By default, no interface is required.
</li>
3692 <li><code>parentClass($parentClass)
</code> and
<code>getParentClass()
</code> can be used to ensure that the entered class extends the specified class.
3693 By default, no parent class is required.
</li>
3694 <li><code>instantiable($instantiable = true)
</code> and
<code>isInstantiable()
</code> can be used to ensure that the entered class is instantiable.
3695 By default, entered classes have to instantiable.
</li>
3697 <p>Additionally, the default id of a
<code>ClassNameFormField
</code> object is
<code>className
</code>, the default label is
<code>wcf.form.field.className
</code>, and if either an interface or a parent class is required, a default description is set if no description has already been set (
<code>wcf.form.field.className.description.interface
</code> and
<code>wcf.form.field.className.description.parentClass
</code>, respectively).
</p>
3698 <h3 id=
"dateformfield"><code>DateFormField
</code><a class=
"headerlink" href=
"#dateformfield" title=
"Permanent link">#
</a></h3>
3699 <p><code>DateFormField
</code> is a form field to enter a date (and optionally a time).
3700 The class implements
<code>IAttributeFormField
</code>,
<code>IAutoFocusFormField
</code>,
<code>ICssClassFormField
</code>,
<code>IImmutableFormField
</code>, and
<code>INullableFormField
</code>.
3701 The following methods are specific to this form field class:
</p>
3703 <li><code>earliestDate($earliestDate)
</code> and
<code>getEarliestDate()
</code> can be used to get and set the earliest selectable/valid date and
<code>latestDate($latestDate)
</code> and
<code>getLatestDate()
</code> can be used to get and set the latest selectable/valid date.
3704 The date passed to the setters must have the same format as set via
<code>saveValueFormat()
</code>.
3705 If a custom format is used, that format has to be set via
<code>saveValueFormat()
</code> before calling any of the setters.
</li>
3706 <li><code>saveValueFormat($saveValueFormat)
</code> and
<code>getSaveValueFormat()
</code> can be used to specify the date format of the value returned by
<code>getSaveValue()
</code>.
3707 By default,
<code>U
</code> is used as format.
3708 The
<a href=
"https://secure.php.net/manual/en/function.date.php">PHP manual
</a> provides an overview of supported formats.
</li>
3709 <li><code>supportTime($supportsTime = true)
</code> and
<code>supportsTime()
</code> can be used to toggle whether, in addition to a date, a time can also be specified.
3710 By default, specifying a time is disabled.
</li>
3712 <h3 id=
"descriptionformfield"><code>DescriptionFormField
</code><a class=
"headerlink" href=
"#descriptionformfield" title=
"Permanent link">#
</a></h3>
3713 <p><code>DescriptionFormField
</code> is a
<a href=
"#multilinetextformfield">multi-line text form field
</a> with
<code>description
</code> as the default id and
<code>wcf.global.description
</code> as the default label.
</p>
3714 <h3 id=
"emailformfield"><code>EmailFormField
</code><a class=
"headerlink" href=
"#emailformfield" title=
"Permanent link">#
</a></h3>
3715 <p><code>EmailFormField
</code> is a form field to enter an email address which is internally validated using
<code>UserUtil::isValidEmail()
</code>.
3716 The class implements
<code>IAttributeFormField
</code>,
<code>IAutoCompleteFormField
</code>,
<code>IAutoFocusFormField
</code>,
<code>ICssClassFormField
</code>,
<code>II18nFormField
</code>,
<code>IImmutableFormField
</code>,
<code>IInputModeFormField
</code>,
<code>IPatternFormField
</code>, and
<code>IPlaceholderFormField
</code>.
</p>
3717 <h3 id=
"floatformfield"><code>FloatFormField
</code><a class=
"headerlink" href=
"#floatformfield" title=
"Permanent link">#
</a></h3>
3718 <p><code>FloatFormField
</code> is an implementation of
<a href=
"#abstractnumericformfield">AbstractNumericFormField
</a> for floating point numbers.
</p>
3719 <h3 id=
"hiddenformfield"><code>HiddenFormField
</code><a class=
"headerlink" href=
"#hiddenformfield" title=
"Permanent link">#
</a></h3>
3720 <p><code>HiddenFormField
</code> is a form field without any user-visible UI.
3721 Even though the form field is invisible to the user, the value can still be modified by the user, e.g. by leveraging the web browsers developer tools.
3722 The
<code>HiddenFormField
</code> <em>must not
</em> be used to transfer sensitive information or information that the user should not be able to modify.
</p>
3723 <h3 id=
"iconformfield"><code>IconFormField
</code><a class=
"headerlink" href=
"#iconformfield" title=
"Permanent link">#
</a></h3>
3724 <p><code>IconFormField
</code> is a form field to select a FontAwesome icon.
</p>
3725 <h3 id=
"integerformfield"><code>IntegerFormField
</code><a class=
"headerlink" href=
"#integerformfield" title=
"Permanent link">#
</a></h3>
3726 <p><code>IntegerFormField
</code> is an implementation of
<a href=
"#abstractnumericformfield">AbstractNumericFormField
</a> for integers.
</p>
3727 <h3 id=
"isdisabledformfield"><code>IsDisabledFormField
</code><a class=
"headerlink" href=
"#isdisabledformfield" title=
"Permanent link">#
</a></h3>
3728 <p><code>IsDisabledFormField
</code> is a
<a href=
"#booleanformfield">boolean form field
</a> with
<code>isDisabled
</code> as the default id.
</p>
3729 <h3 id=
"itemlistformfield"><code>ItemListFormField
</code><a class=
"headerlink" href=
"#itemlistformfield" title=
"Permanent link">#
</a></h3>
3730 <p><code>ItemListFormField
</code> is a form field in which multiple values can be entered and returned in different formats as save value.
3731 The class implements
<code>IAttributeFormField
</code>,
<code>IAutoFocusFormField
</code>,
<code>ICssClassFormField
</code>,
<code>IImmutableFormField
</code>, and
<code>IMultipleFormField
</code>.
3732 The
<code>saveValueType($saveValueType)
</code> and
<code>getSaveValueType()
</code> methods are specific to this form field class and determine the format of the save value.
3733 The following save value types are supported:
</p>
3735 <li><code>ItemListFormField::SAVE_VALUE_TYPE_ARRAY
</code> adds a custom data processor that writes the form field data directly in the parameters array and not in the data sub-array of the parameters array.
</li>
3736 <li><code>ItemListFormField::SAVE_VALUE_TYPE_CSV
</code> lets the value be returned as a string in which the values are concatenated by commas.
</li>
3737 <li><code>ItemListFormField::SAVE_VALUE_TYPE_NSV
</code> lets the value be returned as a string in which the values are concatenated by
<code>\n
</code>.
</li>
3738 <li><code>ItemListFormField::SAVE_VALUE_TYPE_SSV
</code> lets the value be returned as a string in which the values are concatenated by spaces.
</li>
3740 <p>By default,
<code>ItemListFormField::SAVE_VALUE_TYPE_CSV
</code> is used.
</p>
3741 <p>If
<code>ItemListFormField::SAVE_VALUE_TYPE_ARRAY
</code> is used as save value type,
<code>ItemListFormField
</code> objects register a
<a href=
"../validation_data/#customformfielddataprocessor">custom form field data processor
</a> to add the relevant array into the
<code>$parameters
</code> array directly using the object property as the array key.
</p>
3742 <h3 id=
"multilinetextformfield"><code>MultilineTextFormField
</code><a class=
"headerlink" href=
"#multilinetextformfield" title=
"Permanent link">#
</a></h3>
3743 <p><code>MultilineTextFormField
</code> is a
<a href=
"#textformfield">text form field
</a> that supports multiple rows of text.
3744 The methods
<code>rows($rows)
</code> and
<code>getRows()
</code> can be used to set and get the number of rows of the
<code>textarea
</code> elements.
3745 The default number of rows is
<code>10</code>.
3746 These methods do
<strong>not
</strong>, however, restrict the number of text rows that can be entered.
</p>
3747 <h3 id=
"multipleselectionformfield"><code>MultipleSelectionFormField
</code><a class=
"headerlink" href=
"#multipleselectionformfield" title=
"Permanent link">#
</a></h3>
3748 <p><code>MultipleSelectionFormField
</code> is a form fields that allows the selection of multiple options out of a predefined list of available options.
3749 The class implements
<code>IAttributeFormField
</code>,
<code>ICssClassFormField
</code>,
<code>IFilterableSelectionFormField
</code>, and
<code>IImmutableFormField
</code>.
</p>
3750 <h3 id=
"radiobuttonformfield"><code>RadioButtonFormField
</code><a class=
"headerlink" href=
"#radiobuttonformfield" title=
"Permanent link">#
</a></h3>
3751 <p><code>RadioButtonFormField
</code> is a form fields that allows the selection of a single option out of a predefined list of available options using radiobuttons.
3752 The class implements
<code>IAttributeFormField
</code>,
<code>ICssClassFormField
</code>,
<code>IImmutableFormField
</code>, and
<code>ISelectionFormField
</code>.
</p>
3753 <h3 id=
"ratingformfield"><code>RatingFormField
</code><a class=
"headerlink" href=
"#ratingformfield" title=
"Permanent link">#
</a></h3>
3754 <p><code>RatingFormField
</code> is a form field to set a rating for an object.
3755 The class implements
<code>IImmutableFormField
</code>,
<code>IMaximumFormField
</code>,
<code>IMinimumFormField
</code>, and
<code>INullableFormField
</code>.
3756 Form fields of this class have
<code>rating
</code> as their default id,
<code>wcf.form.field.rating
</code> as their default label,
<code>1</code> as their default minimum, and
<code>5</code> as their default maximum.
3757 For this field, the minimum and maximum refer to the minimum and maximum rating an object can get.
3758 When the field is shown, there will be
<code>maximum() - minimum() +
1</code> icons be shown with additional CSS classes that can be set and gotten via
<code>defaultCssClasses(array $cssClasses)
</code> and
<code>getDefaultCssClasses()
</code>.
3759 If a rating values is set, the first
<code>getValue()
</code> icons will instead use the classes that can be set and gotten via
<code>activeCssClasses(array $cssClasses)
</code> and
<code>getActiveCssClasses()
</code>.
3760 By default, the only default class is
<code>fa-star-o
</code> and the active classes are
<code>fa-star
</code> and
<code>orange
</code>.
</p>
3761 <h3 id=
"selectformfield"><code>SelectFormField
</code><a class=
"headerlink" href=
"#selectformfield" title=
"Permanent link">#
</a></h3>
3762 <p><code>SelectFormField
</code> is a form fields that allows the selection of a single option out of a predefined list of available options.
3763 The class implements
<code>ICssClassFormField
</code> and
<code>IImmutableFormField
</code>.
</p>
3765 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3766 <span class=
"normal">2</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"nx">SelectFormField
</span><span class=
"o">::
</span><span class=
"na">create
</span><span class=
"p">(
</span><span class=
"s1">'select
'</span><span class=
"p">)
</span>
3767 <span class=
"o">-
></span><span class=
"na">options
</span><span class=
"p">([
</span><span class=
"s1">'option1
'</span><span class=
"p">,
</span> <span class=
"s1">'option2
'</span><span class=
"p">,
</span> <span class=
"s1">'option3
'</span><span class=
"p">]);
</span>
3768 </code></pre></div></td></tr></table></div>
3769 <h3 id=
"showorderformfield"><code>ShowOrderFormField
</code><a class=
"headerlink" href=
"#showorderformfield" title=
"Permanent link">#
</a></h3>
3770 <p><code>ShowOrderFormField
</code> is a
<a href=
"#singleselectionformfield">single selection form field
</a> for which the selected value determines the position at which an object is shown.
3771 The show order field provides a list of all siblings and the object will be positioned
<strong>after
</strong> the selected sibling.
3772 To insert objects at the very beginning, the
<code>options()
</code> automatically method prepends an additional option for that case so that only the existing siblings need to be passed.
3773 The default id of instances of this class is
<code>showOrder
</code> and their default label is
<code>wcf.form.field.showOrder
</code>.
</p>
3774 <div class=
"admonition info">
3775 <p class=
"admonition-title">It is important that the relevant object property is always kept updated. Whenever a new object is added or an existing object is edited or delete, the values of the other objects have to be adjusted to ensure consecutive numbering.
</p>
3777 <h3 id=
"singleselectionformfield"><code>SingleSelectionFormField
</code><a class=
"headerlink" href=
"#singleselectionformfield" title=
"Permanent link">#
</a></h3>
3778 <p><code>SingleSelectionFormField
</code> is a form fields that allows the selection of a single option out of a predefined list of available options.
3779 The class implements
<code>ICssClassFormField
</code>,
<code>IFilterableSelectionFormField
</code>,
<code>IImmutableFormField
</code>, and
<code>INullableFormField
</code>.
3780 If the field is nullable and the current form field value is considered
<code>empty
</code> by PHP,
<code>null
</code> is returned as the save value.
</p>
3781 <h3 id=
"sortorderformfield"><code>SortOrderFormField
</code><a class=
"headerlink" href=
"#sortorderformfield" title=
"Permanent link">#
</a></h3>
3782 <p><code>SingleSelectionFormField
</code> is a
<a href=
"#singleselectionformfield">single selection form field
</a> with default id
<code>sortOrder
</code>, default label
<code>wcf.global.showOrder
</code> and default options
<code>ASC: wcf.global.sortOrder.ascending
</code> and
<code>DESC: wcf.global.sortOrder.descending
</code>.
</p>
3783 <h3 id=
"textformfield"><code>TextFormField
</code><a class=
"headerlink" href=
"#textformfield" title=
"Permanent link">#
</a></h3>
3784 <p><code>TextFormField
</code> is a form field that allows entering a single line of text.
3785 The class implements
<code>IAttributeFormField
</code>,
<code>IAutoCompleteFormField
</code>,
<code>ICssClassFormField
</code>,
<code>IImmutableFormField
</code>,
<code>II18nFormField
</code>,
<code>IInputModeFormField
</code>,
<code>IMaximumLengthFormField
</code>,
<code>IMinimumLengthFormField
</code>,
<code>IPatternFormField
</code>, and
<code>IPlaceholderFormField
</code>.
</p>
3786 <h3 id=
"titleformfield"><code>TitleFormField
</code><a class=
"headerlink" href=
"#titleformfield" title=
"Permanent link">#
</a></h3>
3787 <p><code>TitleFormField
</code> is a
<a href=
"#textformfield">text form field
</a> with
<code>title
</code> as the default id and
<code>wcf.global.title
</code> as the default label.
</p>
3788 <h3 id=
"urlformfield"><code>UrlFormField
</code><a class=
"headerlink" href=
"#urlformfield" title=
"Permanent link">#
</a></h3>
3789 <p><code>UrlFormField
</code> is a
<a href=
"#textformfield">text form field
</a> whose values are checked via
<code>Url::is()
</code>.
</p>
3790 <h2 id=
"specific-fields">Specific Fields
<a class=
"headerlink" href=
"#specific-fields" title=
"Permanent link">#
</a></h2>
3791 <p>The following form fields are reusable fields that generally are bound to a certain API or
<code>DatabaseObject
</code> implementation.
</p>
3792 <h3 id=
"aclformfield"><code>AclFormField
</code><a class=
"headerlink" href=
"#aclformfield" title=
"Permanent link">#
</a></h3>
3793 <p><code>AclFormField
</code> is used for setting up acl values for specific objects.
3794 The class implements
<code>IObjectTypeFormField
</code> and requires an object type of the object type definition
<code>com.woltlab.wcf.acl
</code>.
3795 Additionally, the class provides the methods
<code>categoryName($categoryName)
</code> and
<code>getCategoryName()
</code> that allow setting a specific name or filter for the acl option categories whose acl options are shown.
3796 A category name of
<code>null
</code> signals that no category filter is used.
</p>
3797 <div class=
"admonition info">
3798 <p class=
"admonition-title">Since version
5.5, the category name also supports filtering using a wildcard like
<code>user.*
</code>, see
<a href=
"https://github.com/WoltLab/WCF/pull/4355">WoltLab/WCF#
4355</a>.
</p>
3800 <p><code>AclFormField
</code> objects register a
<a href=
"../validation_data/#customformfielddataprocessor">custom form field data processor
</a> to add the relevant ACL object type id into the
<code>$parameters
</code> array directly using
<code>{$objectProperty}_aclObjectTypeID
</code> as the array key.
3801 The relevant database object action method is expected, based on the given ACL object type id, to save the ACL option values appropriately.
</p>
3802 <h3 id=
"buttonformfield"><code>ButtonFormField
</code><a class=
"headerlink" href=
"#buttonformfield" title=
"Permanent link">#
</a></h3>
3803 <p><code>ButtonFormField
</code> shows a submit button as part of the form.
3804 The class implements
<code>IAttributeFormField
</code> and
<code>ICssClassFormField
</code>.
</p>
3805 <p>Specifically for this form field, there is the
<code>IsNotClickedFormFieldDependency
</code> dependency with which certain parts of the form will only be processed if the relevent button has not clicked.
</p>
3806 <h3 id=
"captchaformfield"><code>CaptchaFormField
</code><a class=
"headerlink" href=
"#captchaformfield" title=
"Permanent link">#
</a></h3>
3807 <p><code>CaptchaFormField
</code> is used to add captcha protection to the form.
</p>
3808 <p>You must specify a captcha object type (
<code>com.woltlab.wcf.captcha
</code>) using the
<code>objectType()
</code> method.
</p>
3809 <h3 id=
"colorformfield"><code>ColorFormField
</code><a class=
"headerlink" href=
"#colorformfield" title=
"Permanent link">#
</a></h3>
3810 <p><code>ColorFormField
</code> is used to specify RGBA colors using the
<code>rgba(r, g, b, a)
</code> format.
3811 The class implements
<code>IImmutableFormField
</code>.
</p>
3812 <h3 id=
"contentlanguageformfield"><code>ContentLanguageFormField
</code><a class=
"headerlink" href=
"#contentlanguageformfield" title=
"Permanent link">#
</a></h3>
3813 <p><code>ContentLanguageFormField
</code> is used to select the content language of an object.
3814 Fields of this class are only available if multilingualism is enabled and if there are content languages.
3815 The class implements
<code>IImmutableFormField
</code>.
</p>
3816 <h3 id=
"labelformfield"><code>LabelFormField
</code><a class=
"headerlink" href=
"#labelformfield" title=
"Permanent link">#
</a></h3>
3817 <p><code>LabelFormField
</code> is used to select a label from a specific label group.
3818 The class implements
<code>IObjectTypeFormNode
</code>.
</p>
3819 <p>The
<code>labelGroup(ViewableLabelGroup $labelGroup)
</code> and
<code>getLabelGroup()
</code> methods are specific to this form field class and can be used to set and get the label group whose labels can be selected.
3820 Additionally, there is the static method
<code>createFields($objectType, array $labelGroups, $objectProperty = 'labelIDs)
</code> that can be used to create all relevant label form fields for a given list of label groups.
3821 In most cases,
<code>LabelFormField::createFields()
</code> should be used.
</p>
3822 <h3 id=
"optionformfield"><code>OptionFormField
</code><a class=
"headerlink" href=
"#optionformfield" title=
"Permanent link">#
</a></h3>
3823 <p><code>OptionFormField
</code> is an
<a href=
"#itemlistformfield">item list form field
</a> to set a list of options.
3824 The class implements
<code>IPackagesFormField
</code> and only options of the set packages are considered available.
3825 The default label of instances of this class is
<code>wcf.form.field.option
</code> and their default id is
<code>options
</code>.
</p>
3826 <h3 id=
"simpleaclformfield"><code>SimpleAclFormField
</code><a class=
"headerlink" href=
"#simpleaclformfield" title=
"Permanent link">#
</a></h3>
3827 <p><code>SimpleAclFormField
</code> is used for setting up simple acl values (one
<code>yes
</code>/
<code>no
</code> option per user and user group) for specific objects.
</p>
3828 <p><code>SimpleAclFormField
</code> objects register a
<a href=
"../validation_data/#customformfielddataprocessor">custom form field data processor
</a> to add the relevant simple ACL data array into the
<code>$parameters
</code> array directly using the object property as the array key.
</p>
3829 <div class=
"admonition info">
3830 <p class=
"admonition-title">Since version
5.5, the field also supports inverted permissions, see
<a href=
"https://github.com/WoltLab/WCF/pull/4570">WoltLab/WCF#
4570</a>.
</p>
3832 <p>The
<code>SimpleAclFormField
</code> supports inverted permissions, allowing the administrator to grant access to all non-selected users and groups. If this behavior is desired, it needs to be enabled by calling
<code>supportInvertedPermissions
</code>. An
<code>invertPermissions
</code> key containing a boolean value with the users selection will be provided together with the ACL values when saving the field.
</p>
3833 <h3 id=
"singlemediaselectionformfield"><code>SingleMediaSelectionFormField
</code><a class=
"headerlink" href=
"#singlemediaselectionformfield" title=
"Permanent link">#
</a></h3>
3834 <p><code>SingleMediaSelectionFormField
</code> is used to select a specific media file.
3835 The class implements
<code>IImmutableFormField
</code>.
</p>
3836 <p>The following methods are specific to this form field class:
</p>
3838 <li><code>imageOnly($imageOnly = true)
</code> and
<code>isImageOnly()
</code> can be used to set and check if only images may be selected.
</li>
3839 <li><code>getMedia()
</code> returns the media file based on the current field value if a field is set.
</li>
3841 <h3 id=
"tagformfield"><code>TagFormField
</code><a class=
"headerlink" href=
"#tagformfield" title=
"Permanent link">#
</a></h3>
3842 <p><code>TagFormField
</code> is a form field to enter tags.
3843 The class implements
<code>IAttributeFormField
</code> and
<code>IObjectTypeFormNode
</code>.
3844 Arrays passed to
<code>TagFormField::values()
</code> can contain tag names as strings and
<code>Tag
</code> objects.
3845 The default label of instances of this class is
<code>wcf.tagging.tags
</code> and their default description is
<code>wcf.tagging.tags.description
</code>.
</p>
3846 <p><code>TagFormField
</code> objects register a
<a href=
"../validation_data/#customformfielddataprocessor">custom form field data processor
</a> to add the array with entered tag names into the
<code>$parameters
</code> array directly using the object property as the array key.
</p>
3847 <h3 id=
"uploadformfield"><code>UploadFormField
</code><a class=
"headerlink" href=
"#uploadformfield" title=
"Permanent link">#
</a></h3>
3848 <p><code>UploadFormField
</code> is a form field that allows uploading files by the user.
</p>
3849 <p><code>UploadFormField
</code> objects register a
<a href=
"../validation_data/#customformfielddataprocessor">custom form field data processor
</a> to add the array of
<code>wcf\system\file\upload\UploadFile\UploadFile
</code> into the
<code>$parameters
</code> array directly using the object property as the array key. Also it registers the removed files as an array of
<code>wcf\system\file\upload\UploadFile\UploadFile
</code> into the
<code>$parameters
</code> array directly using the object property with the suffix
<code>_removedFiles
</code> as the array key.
</p>
3850 <p>The field supports additional settings:
</p>
3852 <li><code>imageOnly($imageOnly = true)
</code> and
<code>isImageOnly()
</code> can be used to ensure that the uploaded files are only images.
</li>
3853 <li><code>allowSvgImage($allowSvgImages = true)
</code> and
<code>svgImageAllowed()
</code> can be used to allow SVG images, if the image only mode is enabled (otherwise, the method will throw an exception). By default, SVG images are not allowed.
</li>
3855 <h4 id=
"provide-value-from-database-object">Provide value from database object
<a class=
"headerlink" href=
"#provide-value-from-database-object" title=
"Permanent link">#
</a></h4>
3856 <p>To provide values from a database object, you should implement the method
<code>get{$objectProperty}UploadFileLocations()
</code> to your database object class. This method must return an array of strings with the locations of the files.
</p>
3857 <h4 id=
"process-files">Process files
<a class=
"headerlink" href=
"#process-files" title=
"Permanent link">#
</a></h4>
3858 <p>To process files in the database object action class, you must
<a href=
"https://secure.php.net/manual/en/function.rename.php"><code>rename
</code></a> the file to the final destination. You get the temporary location, by calling the method
<code>getLocation()
</code> on the given
<code>UploadFile
</code> objects. After that, you call
<code>setProcessed($location)
</code> with
<code>$location
</code> contains the new file location. This method sets the
<code>isProcessed
</code> flag to true and saves the new location. For updating files, it is relevant, whether a given file is already processed or not. For this case, the
<code>UploadFile
</code> object has an method
<code>isProcessed()
</code> which indicates, whether a file is already processed or new uploaded.
</p>
3859 <h3 id=
"userformfield"><code>UserFormField
</code><a class=
"headerlink" href=
"#userformfield" title=
"Permanent link">#
</a></h3>
3860 <p><code>UserFormField
</code> is a form field to enter existing users.
3861 The class implements
<code>IAutoCompleteFormField
</code>,
<code>IAutoFocusFormField
</code>,
<code>IImmutableFormField
</code>,
<code>IMultipleFormField
</code>, and
<code>INullableFormField
</code>.
3862 While the user is presented the names of the specified users in the user interface, the field returns the ids of the users as data.
3863 The relevant
<code>UserProfile
</code> objects can be accessed via the
<code>getUsers()
</code> method.
</p>
3864 <h3 id=
"userpasswordfield"><code>UserPasswordField
</code><a class=
"headerlink" href=
"#userpasswordfield" title=
"Permanent link">#
</a></h3>
3865 <p><code>UserPasswordField
</code> is a form field for users' to enter their current password.
3866 The class implements
<code>IAttributeFormField
</code>,
<code>IAttributeFormField
</code>,
<code>IAutoCompleteFormField
</code>,
<code>IAutoFocusFormField
</code>, and
<code>IPlaceholderFormField
</code></p>
3867 <h3 id=
"usergroupoptionformfield"><code>UserGroupOptionFormField
</code><a class=
"headerlink" href=
"#usergroupoptionformfield" title=
"Permanent link">#
</a></h3>
3868 <p><code>UserGroupOptionFormField
</code> is an
<a href=
"#itemlistformfield">item list form field
</a> to set a list of user group options/permissions.
3869 The class implements
<code>IPackagesFormField
</code> and only user group options of the set packages are considered available.
3870 The default label of instances of this class is
<code>wcf.form.field.userGroupOption
</code> and their default id is
<code>permissions
</code>.
</p>
3871 <h3 id=
"usernameformfield"><code>UsernameFormField
</code><a class=
"headerlink" href=
"#usernameformfield" title=
"Permanent link">#
</a></h3>
3872 <p><code>UsernameFormField
</code> is used for entering one non-existing username.
3873 The class implements
<code>IAttributeFormField
</code>,
<code>IImmutableFormField
</code>,
<code>IMaximumLengthFormField
</code>,
<code>IMinimumLengthFormField
</code>,
<code>INullableFormField
</code>, and
<code>IPlaceholderFormField
</code>.
3874 As usernames have a system-wide restriction of a minimum length of
3 and a maximum length of
100 characters, these values are also used as the default value for the field’s minimum and maximum length.
</p>
3875 <h2 id=
"wysiwyg-form-container">Wysiwyg form container
<a class=
"headerlink" href=
"#wysiwyg-form-container" title=
"Permanent link">#
</a></h2>
3876 <p>To integrate a wysiwyg editor into a form, you have to create a
<code>WysiwygFormContainer
</code> object.
3877 This container takes care of creating all necessary form nodes listed below for a wysiwyg editor.
</p>
3878 <div class=
"admonition warning">
3879 <p class=
"admonition-title">When creating the container object, its id has to be the id of the form field that will manage the actual text.
</p>
3881 <p>The following methods are specific to this form container class:
</p>
3883 <li><code>addSettingsNode(IFormChildNode $settingsNode)
</code> and
<code>addSettingsNodes(array $settingsNodes)
</code> can be used to add nodes to the settings tab container.
</li>
3884 <li><code>attachmentData($objectType, $parentObjectID)
</code> can be used to set the data relevant for attachment support.
3885 By default, not attachment data is set, thus attachments are not supported.
</li>
3886 <li><code>getAttachmentField()
</code>,
<code>getPollContainer()
</code>,
<code>getSettingsContainer()
</code>,
<code>getSmiliesContainer()
</code>, and
<code>getWysiwygField()
</code> can be used to get the different components of the wysiwyg form container once the form has been built.
</li>
3887 <li><code>enablePreviewButton($enablePreviewButton)
</code> can be used to set whether the preview button for the message is shown or not.
3888 By default, the preview button is shown.
3889 This method is only relevant before the form is built.
3890 Afterwards, the preview button availability can not be changed.
</li>
3891 <li><code>getObjectId()
</code> returns the id of the edited object or
<code>0</code> if no object is edited.
</li>
3892 <li><code>getPreselect()
</code>,
<code>preselect($preselect)
</code> can be used to set the value of the wysiwyg tab menu's
<code>data-preselect
</code> attribute used to determine which tab is preselected.
3893 By default, the preselect is
<code>'true'
</code> which is used to pre-select the first tab.
</li>
3894 <li><code>messageObjectType($messageObjectType)
</code> can be used to set the message object type.
</li>
3895 <li><code>pollObjectType($pollObjectType)
</code> can be used to set the poll object type.
3896 By default, no poll object type is set, thus the poll form field container is not available.
</li>
3897 <li><code>supportMentions($supportMentions)
</code> can be used to set if mentions are supported.
3898 By default, mentions are not supported.
3899 This method is only relevant before the form is built.
3900 Afterwards, mention support can only be changed via the wysiwyg form field.
</li>
3901 <li><code>supportSmilies($supportSmilies)
</code> can be used to set if smilies are supported.
3902 By default, smilies are supported.
3903 This method is only relevant before the form is built.
3904 Afterwards, smiley availability can only be changed via changing the availability of the smilies form container.
</li>
3906 <h3 id=
"wysiwygattachmentformfield"><code>WysiwygAttachmentFormField
</code><a class=
"headerlink" href=
"#wysiwygattachmentformfield" title=
"Permanent link">#
</a></h3>
3907 <p><code>WysiwygAttachmentFormField
</code> provides attachment support for a wysiwyg editor via a tab in the menu below the editor.
3908 This class should not be used directly but only via
<code>WysiwygFormContainer
</code>.
3909 The methods
<code>attachmentHandler(AttachmentHandler $attachmentHandler)
</code> and
<code>getAttachmentHandler()
</code> can be used to set and get the
<code>AttachmentHandler
</code> object that is used for uploaded attachments.
</p>
3910 <h3 id=
"wysiwygpollformcontainer"><code>WysiwygPollFormContainer
</code><a class=
"headerlink" href=
"#wysiwygpollformcontainer" title=
"Permanent link">#
</a></h3>
3911 <p><code>WysiwygPollFormContainer
</code> provides poll support for a wysiwyg editor via a tab in the menu below the editor.
3912 This class should not be used directly but only via
<code>WysiwygFormContainer
</code>.
3913 <code>WysiwygPollFormContainer
</code> contains all form fields that are required to create polls and requires edited objects to implement
<code>IPollContainer
</code>.
</p>
3914 <p>The following methods are specific to this form container class:
</p>
3916 <li><code>getEndTimeField()
</code> returns the form field to set the end time of the poll once the form has been built.
</li>
3917 <li><code>getIsChangeableField()
</code> returns the form field to set if poll votes can be changed once the form has been built.
</li>
3918 <li><code>getIsPublicField()
</code> returns the form field to set if poll results are public once the form has been built.
</li>
3919 <li><code>getMaxVotesField()
</code> returns the form field to set the maximum number of votes once the form has been built.
</li>
3920 <li><code>getOptionsField()
</code> returns the form field to set the poll options once the form has been built.
</li>
3921 <li><code>getQuestionField()
</code> returns the form field to set the poll question once the form has been built.
</li>
3922 <li><code>getResultsRequireVoteField()
</code> returns the form field to set if viewing the poll results requires voting once the form has been built.
</li>
3923 <li><code>getSortByVotesField()
</code> returns the form field to set if the results are sorted by votes once the form has been built.
</li>
3925 <h3 id=
"wysiwygsmileyformcontainer"><code>WysiwygSmileyFormContainer
</code><a class=
"headerlink" href=
"#wysiwygsmileyformcontainer" title=
"Permanent link">#
</a></h3>
3926 <p><code>WysiwygSmileyFormContainer
</code> provides smiley support for a wysiwyg editor via a tab in the menu below the editor.
3927 This class should not be used directly but only via
<code>WysiwygFormContainer
</code>.
3928 <code>WysiwygSmileyFormContainer
</code> creates a sub-tab for each smiley category.
</p>
3929 <h4 id=
"wysiwygsmileyformnode"><code>WysiwygSmileyFormNode
</code><a class=
"headerlink" href=
"#wysiwygsmileyformnode" title=
"Permanent link">#
</a></h4>
3930 <p><code>WysiwygSmileyFormNode
</code> is contains the smilies of a specific category.
3931 This class should not be used directly but only via
<code>WysiwygSmileyFormContainer
</code>.
</p>
3932 <h3 id=
"example">Example
<a class=
"headerlink" href=
"#example" title=
"Permanent link">#
</a></h3>
3933 <p>The following code creates a WYSIWYG editor component for a
<code>message
</code> object property.
3934 As smilies are supported by default and an attachment object type is given, the tab menu below the editor has two tabs: “Smilies” and “Attachments”.
3935 Additionally, mentions and quotes are supported.
</p>
3936 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3937 <span class=
"normal">2</span>
3938 <span class=
"normal">3</span>
3939 <span class=
"normal">4</span>
3940 <span class=
"normal">5</span>
3941 <span class=
"normal">6</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"nx">WysiwygFormContainer
</span><span class=
"o">::
</span><span class=
"na">create
</span><span class=
"p">(
</span><span class=
"s1">'message
'</span><span class=
"p">)
</span>
3942 <span class=
"o">-
></span><span class=
"na">label
</span><span class=
"p">(
</span><span class=
"s1">'foo.bar.message
'</span><span class=
"p">)
</span>
3943 <span class=
"o">-
></span><span class=
"na">messageObjectType
</span><span class=
"p">(
</span><span class=
"s1">'com.example.foo.bar
'</span><span class=
"p">)
</span>
3944 <span class=
"o">-
></span><span class=
"na">attachmentData
</span><span class=
"p">(
</span><span class=
"s1">'com.example.foo.bar
'</span><span class=
"p">)
</span>
3945 <span class=
"o">-
></span><span class=
"na">supportMentions
</span><span class=
"p">()
</span>
3946 <span class=
"o">-
></span><span class=
"na">supportQuotes
</span><span class=
"p">()
</span>
3947 </code></pre></div></td></tr></table></div>
3948 <h3 id=
"wysiwygformfield"><code>WysiwygFormField
</code><a class=
"headerlink" href=
"#wysiwygformfield" title=
"Permanent link">#
</a></h3>
3949 <p><code>WysiwygFormField
</code> is used for wysiwyg editor form fields.
3950 This class should, in general, not be used directly but only via
<code>WysiwygFormContainer
</code>.
3951 The class implements
<code>IAttributeFormField
</code>,
<code>IMaximumLengthFormField
</code>,
<code>IMinimumLengthFormField
</code>, and
<code>IObjectTypeFormNode
</code> and requires an object type of the object type definition
<code>com.woltlab.wcf.message
</code>.
3952 The following methods are specific to this form field class:
</p>
3954 <li><code>autosaveId($autosaveId)
</code> and
<code>getAutosaveId()
</code> can be used enable automatically saving the current editor contents in the browser using the given id.
3955 An empty string signals that autosaving is disabled.
</li>
3956 <li><code>lastEditTime($lastEditTime)
</code> and
<code>getLastEditTime()
</code> can be used to set the last time the contents have been edited and saved so that the JavaScript can determine if the contents stored in the browser are older or newer.
3957 <code>0</code> signals that no last edit time has been set.
</li>
3959 <p><code>supportAttachments($supportAttachments)
</code> and
<code>supportsAttachments()
</code> can be used to set and check if the form field supports attachments.
</p>
3960 <div class=
"admonition warning">
3961 <p class=
"admonition-title">It is not sufficient to simply signal attachment support via these methods for attachments to work. These methods are relevant internally to signal the Javascript code that the editor supports attachments. Actual attachment support is provided by
<code>WysiwygAttachmentFormField
</code>.
</p>
3965 <p><code>supportMentions($supportMentions)
</code> and
<code>supportsMentions()
</code> can be used to set and check if the form field supports mentions of other users.
</p>
3968 <p><code>WysiwygFormField
</code> objects register a
<a href=
"../validation_data/#customformfielddataprocessor">custom form field data processor
</a> to add the relevant simple ACL data array into the
<code>$parameters
</code> array directly using the object property as the array key.
</p>
3969 <h3 id=
"twysiwygformnode"><code>TWysiwygFormNode
</code><a class=
"headerlink" href=
"#twysiwygformnode" title=
"Permanent link">#
</a></h3>
3970 <p>All form nodes that need to know the id of the
<code>WysiwygFormField
</code> field should use
<code>TWysiwygFormNode
</code>.
3971 This trait provides
<code>getWysiwygId()
</code> and
<code>wysiwygId($wysiwygId)
</code> to get and set the relevant wysiwyg editor id.
</p>
3972 <h2 id=
"application-specific-form-fields">Application-Specific Form Fields
<a class=
"headerlink" href=
"#application-specific-form-fields" title=
"Permanent link">#
</a></h2>
3973 <h3 id=
"woltlab-suite-forum">WoltLab Suite Forum
<a class=
"headerlink" href=
"#woltlab-suite-forum" title=
"Permanent link">#
</a></h3>
3974 <h4 id=
"multipleboardselectionformfield"><code>MultipleBoardSelectionFormField
</code><a class=
"headerlink" href=
"#multipleboardselectionformfield" title=
"Permanent link">#
</a></h4>
3975 <p><code>MultipleBoardSelectionFormField
</code> is used to select multiple forums.
3976 The class implements
<code>IAttributeFormField
</code>,
<code>ICssClassFormField
</code>, and
<code>IImmutableFormField
</code>.
</p>
3977 <p>The field supports additional settings:
</p>
3979 <li><code>boardNodeList(BoardNodeList $boardNodeList): self
</code> and
<code>getBoardNodeList(): BoardNodeList
</code> are used to set and get the list of board nodes used to render the board selection.
3980 <code>boardNodeList(BoardNodeList $boardNodeList): self
</code> will automatically call
<code>readNodeTree()
</code> on the given board node list.
</li>
3981 <li><code>categoriesSelectable(bool $categoriesSelectable = true): self
</code> and
<code>areCategoriesSelectable(): bool
</code> are used to set and check if the categories in the board node list are selectable.
3982 By default, categories are selectable.
3983 This option is useful if only actual boards, in which threads can be posted, should be selectable but the categories must still be shown so that the overall forum structure is still properly shown.
</li>
3984 <li><code>supportExternalLinks(bool $supportExternalLinks): self
</code> and
<code>supportsExternalLinks(): bool
</code> are used to set and check if external links will be shown in the selection list.
3985 By default, external links are shown.
3986 Like in the example given before, in cases where only actual boards, in which threads can be posted, are relevant, this option allows to exclude external links.
</li>
3988 <h2 id=
"single-use-form-fields">Single-Use Form Fields
<a class=
"headerlink" href=
"#single-use-form-fields" title=
"Permanent link">#
</a></h2>
3989 <p>The following form fields are specific for certain forms and hardly reusable in other contexts.
</p>
3990 <h3 id=
"bbcodeattributesformfield"><code>BBCodeAttributesFormField
</code><a class=
"headerlink" href=
"#bbcodeattributesformfield" title=
"Permanent link">#
</a></h3>
3991 <p><code>BBCodeAttributesFormField
</code> is a form field for setting the attributes of a BBCode.
</p>
3992 <h3 id=
"devtoolsprojectexcludedpackagesformfield"><code>DevtoolsProjectExcludedPackagesFormField
</code><a class=
"headerlink" href=
"#devtoolsprojectexcludedpackagesformfield" title=
"Permanent link">#
</a></h3>
3993 <p><code>DevtoolsProjectExcludedPackagesFormField
</code> is a form field for setting the excluded packages of a devtools project.
</p>
3994 <h3 id=
"devtoolsprojectinstructionsformfield"><code>DevtoolsProjectInstructionsFormField
</code><a class=
"headerlink" href=
"#devtoolsprojectinstructionsformfield" title=
"Permanent link">#
</a></h3>
3995 <p><code>DevtoolsProjectInstructionsFormField
</code> is a form field for setting the installation and update instructions of a devtools project.
</p>
3996 <h3 id=
"devtoolsprojectoptionalpackagesformfield"><code>DevtoolsProjectOptionalPackagesFormField
</code><a class=
"headerlink" href=
"#devtoolsprojectoptionalpackagesformfield" title=
"Permanent link">#
</a></h3>
3997 <p><code>DevtoolsProjectOptionalPackagesFormField
</code> is a form field for setting the optional packages of a devtools project.
</p>
3998 <h3 id=
"devtoolsprojectrequiredpackagesformfield"><code>DevtoolsProjectRequiredPackagesFormField
</code><a class=
"headerlink" href=
"#devtoolsprojectrequiredpackagesformfield" title=
"Permanent link">#
</a></h3>
3999 <p><code>DevtoolsProjectRequiredPackagesFormField
</code> is a form field for setting the required packages of a devtools project.
</p>
4002 <div class=
"md-source-file">
4024 <footer class=
"md-footer">
4026 <div class=
"md-footer-meta md-typeset">
4027 <div class=
"md-footer-meta__inner md-grid">
4028 <div class=
"md-copyright">
4030 <div class=
"md-copyright__highlight">
4031 Copyright ©
2020 WoltLab GmbH
4036 <a href=
"https://squidfunk.github.io/mkdocs-material/" target=
"_blank" rel=
"noopener">
4042 <div class=
"md-copyright">
4043 <a href=
"https://www.woltlab.com/legal-notice/">Legal Notice
</a>
4044 <a href=
"https://www.woltlab.com/privacy-policy/">Privacy Policy
</a>
4052 <div class=
"md-dialog" data-md-component=
"dialog">
4053 <div class=
"md-dialog__inner md-typeset"></div>
4056 <script id=
"__config" type=
"application/json">{
"base":
"../../../..",
"features": [
"navigation.tracking"],
"search":
"../../../../assets/javascripts/workers/search.74e28a9f.min.js",
"translations": {
"clipboard.copied":
"Copied to clipboard",
"clipboard.copy":
"Copy to clipboard",
"search.result.more.one":
"1 more on this page",
"search.result.more.other":
"# more on this page",
"search.result.none":
"No matching documents",
"search.result.one":
"1 matching document",
"search.result.other":
"# matching documents",
"search.result.placeholder":
"Type to start searching",
"search.result.term.missing":
"Missing",
"select.version":
"Select version"},
"version": {
"provider":
"mike"}}
</script>
4059 <script src=
"../../../../assets/javascripts/bundle.220ee61c.min.js"></script>