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/migration/wsc53/libraries/">
14 <link rel=
"prev" href=
"../templates/">
17 <link rel=
"next" href=
"../../wsc52/php/">
19 <link rel=
"icon" href=
"../../../assets/default.favicon.ico">
20 <meta name=
"generator" content=
"mkdocs-1.4.3, mkdocs-material-9.1.15">
24 <title>Third Party Libraries - WoltLab Suite Documentation
</title>
28 <link rel=
"stylesheet" href=
"../../../assets/stylesheets/main.26e3688c.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=
"#migrating-from-woltlab-suite-53-third-party-libraries" 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">
116 Third Party Libraries
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">
242 <li class=
"md-nav__item md-nav__item--nested">
247 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2" >
251 <label class=
"md-nav__link" for=
"__nav_2" id=
"__nav_2_label" tabindex=
"0">
253 <span class=
"md-nav__icon md-icon"></span>
256 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_2_label" aria-expanded=
"false">
257 <label class=
"md-nav__title" for=
"__nav_2">
258 <span class=
"md-nav__icon md-icon"></span>
261 <ul class=
"md-nav__list" data-md-scrollfix
>
268 <li class=
"md-nav__item">
269 <a href=
"../../../php/pages/" class=
"md-nav__link">
282 <li class=
"md-nav__item">
283 <a href=
"../../../php/database-objects/" class=
"md-nav__link">
296 <li class=
"md-nav__item">
297 <a href=
"../../../php/database-access/" class=
"md-nav__link">
310 <li class=
"md-nav__item">
311 <a href=
"../../../php/exceptions/" class=
"md-nav__link">
325 <li class=
"md-nav__item md-nav__item--nested">
330 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5" >
334 <label class=
"md-nav__link" for=
"__nav_2_5" id=
"__nav_2_5_label" tabindex=
"0">
336 <span class=
"md-nav__icon md-icon"></span>
339 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_2_5_label" aria-expanded=
"false">
340 <label class=
"md-nav__title" for=
"__nav_2_5">
341 <span class=
"md-nav__icon md-icon"></span>
344 <ul class=
"md-nav__list" data-md-scrollfix
>
352 <li class=
"md-nav__item md-nav__item--nested">
357 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5_1" >
361 <label class=
"md-nav__link" for=
"__nav_2_5_1" id=
"__nav_2_5_1_label" tabindex=
"0">
363 <span class=
"md-nav__icon md-icon"></span>
366 <nav class=
"md-nav" data-md-level=
"3" aria-labelledby=
"__nav_2_5_1_label" aria-expanded=
"false">
367 <label class=
"md-nav__title" for=
"__nav_2_5_1">
368 <span class=
"md-nav__icon md-icon"></span>
371 <ul class=
"md-nav__list" data-md-scrollfix
>
378 <li class=
"md-nav__item">
379 <a href=
"../../../php/api/caches/" class=
"md-nav__link">
392 <li class=
"md-nav__item">
393 <a href=
"../../../php/api/caches_persistent-caches/" class=
"md-nav__link">
406 <li class=
"md-nav__item">
407 <a href=
"../../../php/api/caches_runtime-caches/" class=
"md-nav__link">
427 <li class=
"md-nav__item">
428 <a href=
"../../../php/api/comments/" class=
"md-nav__link">
441 <li class=
"md-nav__item">
442 <a href=
"../../../php/api/cronjobs/" class=
"md-nav__link">
455 <li class=
"md-nav__item">
456 <a href=
"../../../php/api/events/" class=
"md-nav__link">
470 <li class=
"md-nav__item md-nav__item--nested">
475 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5_5" >
479 <label class=
"md-nav__link" for=
"__nav_2_5_5" id=
"__nav_2_5_5_label" tabindex=
"0">
481 <span class=
"md-nav__icon md-icon"></span>
484 <nav class=
"md-nav" data-md-level=
"3" aria-labelledby=
"__nav_2_5_5_label" aria-expanded=
"false">
485 <label class=
"md-nav__title" for=
"__nav_2_5_5">
486 <span class=
"md-nav__icon md-icon"></span>
489 <ul class=
"md-nav__list" data-md-scrollfix
>
496 <li class=
"md-nav__item">
497 <a href=
"../../../php/api/form_builder/overview/" class=
"md-nav__link">
510 <li class=
"md-nav__item">
511 <a href=
"../../../php/api/form_builder/structure/" class=
"md-nav__link">
524 <li class=
"md-nav__item">
525 <a href=
"../../../php/api/form_builder/form_fields/" class=
"md-nav__link">
538 <li class=
"md-nav__item">
539 <a href=
"../../../php/api/form_builder/validation_data/" class=
"md-nav__link">
552 <li class=
"md-nav__item">
553 <a href=
"../../../php/api/form_builder/dependencies/" class=
"md-nav__link">
573 <li class=
"md-nav__item">
574 <a href=
"../../../php/api/package_installation_plugins/" class=
"md-nav__link">
575 Package Installation Plugins
587 <li class=
"md-nav__item">
588 <a href=
"../../../php/api/user_activity_points/" class=
"md-nav__link">
601 <li class=
"md-nav__item">
602 <a href=
"../../../php/api/user_notifications/" class=
"md-nav__link">
615 <li class=
"md-nav__item">
616 <a href=
"../../../php/api/sitemaps/" class=
"md-nav__link">
636 <li class=
"md-nav__item">
637 <a href=
"../../../php/code-style/" class=
"md-nav__link">
650 <li class=
"md-nav__item">
651 <a href=
"../../../php/apps/" class=
"md-nav__link">
664 <li class=
"md-nav__item">
665 <a href=
"../../../php/gdpr/" class=
"md-nav__link">
687 <li class=
"md-nav__item md-nav__item--nested">
692 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_3" >
696 <label class=
"md-nav__link" for=
"__nav_3" id=
"__nav_3_label" tabindex=
"0">
697 Languages, Templates & CSS
698 <span class=
"md-nav__icon md-icon"></span>
701 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_3_label" aria-expanded=
"false">
702 <label class=
"md-nav__title" for=
"__nav_3">
703 <span class=
"md-nav__icon md-icon"></span>
704 Languages, Templates & CSS
706 <ul class=
"md-nav__list" data-md-scrollfix
>
713 <li class=
"md-nav__item">
714 <a href=
"../../../view/languages/" class=
"md-nav__link">
727 <li class=
"md-nav__item">
728 <a href=
"../../../view/templates/" class=
"md-nav__link">
741 <li class=
"md-nav__item">
742 <a href=
"../../../view/template-modifiers/" class=
"md-nav__link">
755 <li class=
"md-nav__item">
756 <a href=
"../../../view/template-plugins/" class=
"md-nav__link">
769 <li class=
"md-nav__item">
770 <a href=
"../../../view/css/" class=
"md-nav__link">
792 <li class=
"md-nav__item md-nav__item--nested">
797 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4" >
801 <label class=
"md-nav__link" for=
"__nav_4" id=
"__nav_4_label" tabindex=
"0">
802 TypeScript and JavaScript API
803 <span class=
"md-nav__icon md-icon"></span>
806 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_4_label" aria-expanded=
"false">
807 <label class=
"md-nav__title" for=
"__nav_4">
808 <span class=
"md-nav__icon md-icon"></span>
809 TypeScript and JavaScript API
811 <ul class=
"md-nav__list" data-md-scrollfix
>
818 <li class=
"md-nav__item">
819 <a href=
"../../../javascript/general-usage/" class=
"md-nav__link">
832 <li class=
"md-nav__item">
833 <a href=
"../../../javascript/typescript/" class=
"md-nav__link">
847 <li class=
"md-nav__item md-nav__item--nested">
852 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4_3" >
856 <label class=
"md-nav__link" for=
"__nav_4_3" id=
"__nav_4_3_label" tabindex=
"0">
858 <span class=
"md-nav__icon md-icon"></span>
861 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_4_3_label" aria-expanded=
"false">
862 <label class=
"md-nav__title" for=
"__nav_4_3">
863 <span class=
"md-nav__icon md-icon"></span>
866 <ul class=
"md-nav__list" data-md-scrollfix
>
873 <li class=
"md-nav__item">
874 <a href=
"../../../javascript/components_confirmation/" class=
"md-nav__link">
887 <li class=
"md-nav__item">
888 <a href=
"../../../javascript/components_dialog/" class=
"md-nav__link">
901 <li class=
"md-nav__item">
902 <a href=
"../../../javascript/components_google_maps/" class=
"md-nav__link">
915 <li class=
"md-nav__item">
916 <a href=
"../../../javascript/components_pagination/" class=
"md-nav__link">
937 <li class=
"md-nav__item md-nav__item--nested">
942 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4_4" >
946 <label class=
"md-nav__link" for=
"__nav_4_4" id=
"__nav_4_4_label" tabindex=
"0">
948 <span class=
"md-nav__icon md-icon"></span>
951 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_4_4_label" aria-expanded=
"false">
952 <label class=
"md-nav__title" for=
"__nav_4_4">
953 <span class=
"md-nav__icon md-icon"></span>
956 <ul class=
"md-nav__list" data-md-scrollfix
>
963 <li class=
"md-nav__item">
964 <a href=
"../../../javascript/new-api_writing-a-module/" class=
"md-nav__link">
977 <li class=
"md-nav__item">
978 <a href=
"../../../javascript/new-api_core/" class=
"md-nav__link">
991 <li class=
"md-nav__item">
992 <a href=
"../../../javascript/new-api_dom/" class=
"md-nav__link">
1005 <li class=
"md-nav__item">
1006 <a href=
"../../../javascript/new-api_events/" class=
"md-nav__link">
1019 <li class=
"md-nav__item">
1020 <a href=
"../../../javascript/new-api_ajax/" class=
"md-nav__link">
1033 <li class=
"md-nav__item">
1034 <a href=
"../../../javascript/new-api_dialogs/" class=
"md-nav__link">
1047 <li class=
"md-nav__item">
1048 <a href=
"../../../javascript/new-api_browser/" class=
"md-nav__link">
1049 Browser and Screen Sizes
1061 <li class=
"md-nav__item">
1062 <a href=
"../../../javascript/new-api_ui/" class=
"md-nav__link">
1082 <li class=
"md-nav__item">
1083 <a href=
"../../../javascript/legacy-api/" class=
"md-nav__link">
1096 <li class=
"md-nav__item">
1097 <a href=
"../../../javascript/code-snippets/" class=
"md-nav__link">
1119 <li class=
"md-nav__item md-nav__item--nested">
1124 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_5" >
1128 <label class=
"md-nav__link" for=
"__nav_5" id=
"__nav_5_label" tabindex=
"0">
1130 <span class=
"md-nav__icon md-icon"></span>
1133 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_5_label" aria-expanded=
"false">
1134 <label class=
"md-nav__title" for=
"__nav_5">
1135 <span class=
"md-nav__icon md-icon"></span>
1138 <ul class=
"md-nav__list" data-md-scrollfix
>
1145 <li class=
"md-nav__item">
1146 <a href=
"../../../package/package-xml/" class=
"md-nav__link">
1160 <li class=
"md-nav__item md-nav__item--nested">
1165 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_5_2" >
1169 <label class=
"md-nav__link" for=
"__nav_5_2" id=
"__nav_5_2_label" tabindex=
"0">
1171 <span class=
"md-nav__icon md-icon"></span>
1174 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_5_2_label" aria-expanded=
"false">
1175 <label class=
"md-nav__title" for=
"__nav_5_2">
1176 <span class=
"md-nav__icon md-icon"></span>
1179 <ul class=
"md-nav__list" data-md-scrollfix
>
1186 <li class=
"md-nav__item">
1187 <a href=
"../../../package/pip/" class=
"md-nav__link">
1200 <li class=
"md-nav__item">
1201 <a href=
"../../../package/pip/acl-option/" class=
"md-nav__link">
1214 <li class=
"md-nav__item">
1215 <a href=
"../../../package/pip/acp-menu/" class=
"md-nav__link">
1228 <li class=
"md-nav__item">
1229 <a href=
"../../../package/pip/acp-search-provider/" class=
"md-nav__link">
1242 <li class=
"md-nav__item">
1243 <a href=
"../../../package/pip/acp-template/" class=
"md-nav__link">
1256 <li class=
"md-nav__item">
1257 <a href=
"../../../package/pip/acp-template-delete/" class=
"md-nav__link">
1270 <li class=
"md-nav__item">
1271 <a href=
"../../../package/pip/bbcode/" class=
"md-nav__link">
1284 <li class=
"md-nav__item">
1285 <a href=
"../../../package/pip/box/" class=
"md-nav__link">
1298 <li class=
"md-nav__item">
1299 <a href=
"../../../package/pip/clipboard-action/" class=
"md-nav__link">
1312 <li class=
"md-nav__item">
1313 <a href=
"../../../package/pip/core-object/" class=
"md-nav__link">
1326 <li class=
"md-nav__item">
1327 <a href=
"../../../package/pip/cronjob/" class=
"md-nav__link">
1340 <li class=
"md-nav__item">
1341 <a href=
"../../../package/pip/database/" class=
"md-nav__link">
1354 <li class=
"md-nav__item">
1355 <a href=
"../../../package/pip/event-listener/" class=
"md-nav__link">
1368 <li class=
"md-nav__item">
1369 <a href=
"../../../package/pip/file/" class=
"md-nav__link">
1382 <li class=
"md-nav__item">
1383 <a href=
"../../../package/pip/file-delete/" class=
"md-nav__link">
1396 <li class=
"md-nav__item">
1397 <a href=
"../../../package/pip/language/" class=
"md-nav__link">
1410 <li class=
"md-nav__item">
1411 <a href=
"../../../package/pip/media-provider/" class=
"md-nav__link">
1424 <li class=
"md-nav__item">
1425 <a href=
"../../../package/pip/menu/" class=
"md-nav__link">
1438 <li class=
"md-nav__item">
1439 <a href=
"../../../package/pip/menu-item/" class=
"md-nav__link">
1452 <li class=
"md-nav__item">
1453 <a href=
"../../../package/pip/object-type/" class=
"md-nav__link">
1466 <li class=
"md-nav__item">
1467 <a href=
"../../../package/pip/object-type-definition/" class=
"md-nav__link">
1468 objectTypeDefinition
1480 <li class=
"md-nav__item">
1481 <a href=
"../../../package/pip/option/" class=
"md-nav__link">
1494 <li class=
"md-nav__item">
1495 <a href=
"../../../package/pip/page/" class=
"md-nav__link">
1508 <li class=
"md-nav__item">
1509 <a href=
"../../../package/pip/pip/" class=
"md-nav__link">
1522 <li class=
"md-nav__item">
1523 <a href=
"../../../package/pip/script/" class=
"md-nav__link">
1536 <li class=
"md-nav__item">
1537 <a href=
"../../../package/pip/smiley/" class=
"md-nav__link">
1550 <li class=
"md-nav__item">
1551 <a href=
"../../../package/pip/sql/" class=
"md-nav__link">
1564 <li class=
"md-nav__item">
1565 <a href=
"../../../package/pip/style/" class=
"md-nav__link">
1578 <li class=
"md-nav__item">
1579 <a href=
"../../../package/pip/template/" class=
"md-nav__link">
1592 <li class=
"md-nav__item">
1593 <a href=
"../../../package/pip/template-delete/" class=
"md-nav__link">
1606 <li class=
"md-nav__item">
1607 <a href=
"../../../package/pip/template-listener/" class=
"md-nav__link">
1620 <li class=
"md-nav__item">
1621 <a href=
"../../../package/pip/user-group-option/" class=
"md-nav__link">
1634 <li class=
"md-nav__item">
1635 <a href=
"../../../package/pip/user-menu/" class=
"md-nav__link">
1648 <li class=
"md-nav__item">
1649 <a href=
"../../../package/pip/user-notification-event/" class=
"md-nav__link">
1650 userNotificationEvent
1662 <li class=
"md-nav__item">
1663 <a href=
"../../../package/pip/user-option/" class=
"md-nav__link">
1676 <li class=
"md-nav__item">
1677 <a href=
"../../../package/pip/user-profile-menu/" class=
"md-nav__link">
1697 <li class=
"md-nav__item">
1698 <a href=
"../../../package/database-php-api/" class=
"md-nav__link">
1722 <li class=
"md-nav__item md-nav__item--active md-nav__item--nested">
1727 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6" checked
>
1731 <label class=
"md-nav__link" for=
"__nav_6" id=
"__nav_6_label" tabindex=
"0">
1733 <span class=
"md-nav__icon md-icon"></span>
1736 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_6_label" aria-expanded=
"true">
1737 <label class=
"md-nav__title" for=
"__nav_6">
1738 <span class=
"md-nav__icon md-icon"></span>
1741 <ul class=
"md-nav__list" data-md-scrollfix
>
1749 <li class=
"md-nav__item md-nav__item--nested">
1754 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_1" >
1758 <label class=
"md-nav__link" for=
"__nav_6_1" id=
"__nav_6_1_label" tabindex=
"0">
1759 From WoltLab Suite
5.5
1760 <span class=
"md-nav__icon md-icon"></span>
1763 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_1_label" aria-expanded=
"false">
1764 <label class=
"md-nav__title" for=
"__nav_6_1">
1765 <span class=
"md-nav__icon md-icon"></span>
1766 From WoltLab Suite
5.5
1768 <ul class=
"md-nav__list" data-md-scrollfix
>
1775 <li class=
"md-nav__item">
1776 <a href=
"../../wsc55/php/" class=
"md-nav__link">
1789 <li class=
"md-nav__item">
1790 <a href=
"../../wsc55/javascript/" class=
"md-nav__link">
1791 TypeScript and JavaScript
1803 <li class=
"md-nav__item">
1804 <a href=
"../../wsc55/templates/" class=
"md-nav__link">
1817 <li class=
"md-nav__item">
1818 <a href=
"../../wsc55/icons/" class=
"md-nav__link">
1831 <li class=
"md-nav__item">
1832 <a href=
"../../wsc55/dialogs/" class=
"md-nav__link">
1845 <li class=
"md-nav__item">
1846 <a href=
"../../wsc55/libraries/" class=
"md-nav__link">
1847 Third Party Libraries
1859 <li class=
"md-nav__item">
1860 <a href=
"../../wsc55/deprecations_removals/" class=
"md-nav__link">
1861 Deprecations and Removals
1881 <li class=
"md-nav__item md-nav__item--nested">
1886 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_2" >
1890 <label class=
"md-nav__link" for=
"__nav_6_2" id=
"__nav_6_2_label" tabindex=
"0">
1891 From WoltLab Suite
5.4
1892 <span class=
"md-nav__icon md-icon"></span>
1895 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_2_label" aria-expanded=
"false">
1896 <label class=
"md-nav__title" for=
"__nav_6_2">
1897 <span class=
"md-nav__icon md-icon"></span>
1898 From WoltLab Suite
5.4
1900 <ul class=
"md-nav__list" data-md-scrollfix
>
1907 <li class=
"md-nav__item">
1908 <a href=
"../../wsc54/php/" class=
"md-nav__link">
1921 <li class=
"md-nav__item">
1922 <a href=
"../../wsc54/javascript/" class=
"md-nav__link">
1923 TypeScript and JavaScript
1935 <li class=
"md-nav__item">
1936 <a href=
"../../wsc54/templates/" class=
"md-nav__link">
1949 <li class=
"md-nav__item">
1950 <a href=
"../../wsc54/libraries/" class=
"md-nav__link">
1951 Third Party Libraries
1963 <li class=
"md-nav__item">
1964 <a href=
"../../wsc54/deprecations_removals/" class=
"md-nav__link">
1965 Deprecations and Removals
1987 <li class=
"md-nav__item md-nav__item--active md-nav__item--nested">
1992 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_3" checked
>
1996 <label class=
"md-nav__link" for=
"__nav_6_3" id=
"__nav_6_3_label" tabindex=
"0">
1997 From WoltLab Suite
5.3
1998 <span class=
"md-nav__icon md-icon"></span>
2001 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_3_label" aria-expanded=
"true">
2002 <label class=
"md-nav__title" for=
"__nav_6_3">
2003 <span class=
"md-nav__icon md-icon"></span>
2004 From WoltLab Suite
5.3
2006 <ul class=
"md-nav__list" data-md-scrollfix
>
2013 <li class=
"md-nav__item">
2014 <a href=
"../php/" class=
"md-nav__link">
2027 <li class=
"md-nav__item">
2028 <a href=
"../session/" class=
"md-nav__link">
2029 Session Handling and Authentication
2041 <li class=
"md-nav__item">
2042 <a href=
"../javascript/" class=
"md-nav__link">
2043 TypeScript and JavaScript
2055 <li class=
"md-nav__item">
2056 <a href=
"../templates/" class=
"md-nav__link">
2071 <li class=
"md-nav__item md-nav__item--active">
2073 <input class=
"md-nav__toggle md-toggle" type=
"checkbox" id=
"__toc">
2079 <label class=
"md-nav__link md-nav__link--active" for=
"__toc">
2080 Third Party Libraries
2081 <span class=
"md-nav__icon md-icon"></span>
2084 <a href=
"./" class=
"md-nav__link md-nav__link--active">
2085 Third Party Libraries
2090 <nav class=
"md-nav md-nav--secondary" aria-label=
"Table of contents">
2097 <label class=
"md-nav__title" for=
"__toc">
2098 <span class=
"md-nav__icon md-icon"></span>
2101 <ul class=
"md-nav__list" data-md-component=
"toc" data-md-scrollfix
>
2103 <li class=
"md-nav__item">
2104 <a href=
"#guzzle" class=
"md-nav__link">
2110 <li class=
"md-nav__item">
2111 <a href=
"#emogrifier-css-inliner" class=
"md-nav__link">
2112 Emogrifier / CSS Inliner
2117 <li class=
"md-nav__item">
2118 <a href=
"#scssphp" class=
"md-nav__link">
2124 <li class=
"md-nav__item">
2125 <a href=
"#constant-time-encoder" class=
"md-nav__link">
2126 Constant Time Encoder
2153 <li class=
"md-nav__item md-nav__item--nested">
2158 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_4" >
2162 <label class=
"md-nav__link" for=
"__nav_6_4" id=
"__nav_6_4_label" tabindex=
"0">
2163 From WoltLab Suite
5.2
2164 <span class=
"md-nav__icon md-icon"></span>
2167 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_4_label" aria-expanded=
"false">
2168 <label class=
"md-nav__title" for=
"__nav_6_4">
2169 <span class=
"md-nav__icon md-icon"></span>
2170 From WoltLab Suite
5.2
2172 <ul class=
"md-nav__list" data-md-scrollfix
>
2179 <li class=
"md-nav__item">
2180 <a href=
"../../wsc52/php/" class=
"md-nav__link">
2193 <li class=
"md-nav__item">
2194 <a href=
"../../wsc52/templates/" class=
"md-nav__link">
2195 Templates and Languages
2207 <li class=
"md-nav__item">
2208 <a href=
"../../wsc52/libraries/" class=
"md-nav__link">
2209 Third Party Libraries
2229 <li class=
"md-nav__item md-nav__item--nested">
2234 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_5" >
2238 <label class=
"md-nav__link" for=
"__nav_6_5" id=
"__nav_6_5_label" tabindex=
"0">
2239 From WoltLab Suite
3.1
2240 <span class=
"md-nav__icon md-icon"></span>
2243 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_5_label" aria-expanded=
"false">
2244 <label class=
"md-nav__title" for=
"__nav_6_5">
2245 <span class=
"md-nav__icon md-icon"></span>
2246 From WoltLab Suite
3.1
2248 <ul class=
"md-nav__list" data-md-scrollfix
>
2255 <li class=
"md-nav__item">
2256 <a href=
"../../wsc31/php/" class=
"md-nav__link">
2277 <li class=
"md-nav__item md-nav__item--nested">
2282 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_6" >
2286 <label class=
"md-nav__link" for=
"__nav_6_6" id=
"__nav_6_6_label" tabindex=
"0">
2287 From WoltLab Suite
3.0
2288 <span class=
"md-nav__icon md-icon"></span>
2291 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_6_label" aria-expanded=
"false">
2292 <label class=
"md-nav__title" for=
"__nav_6_6">
2293 <span class=
"md-nav__icon md-icon"></span>
2294 From WoltLab Suite
3.0
2296 <ul class=
"md-nav__list" data-md-scrollfix
>
2303 <li class=
"md-nav__item">
2304 <a href=
"../../wsc30/php/" class=
"md-nav__link">
2317 <li class=
"md-nav__item">
2318 <a href=
"../../wsc30/javascript/" class=
"md-nav__link">
2331 <li class=
"md-nav__item">
2332 <a href=
"../../wsc30/templates/" class=
"md-nav__link">
2345 <li class=
"md-nav__item">
2346 <a href=
"../../wsc30/css/" class=
"md-nav__link">
2359 <li class=
"md-nav__item">
2360 <a href=
"../../wsc30/package/" class=
"md-nav__link">
2381 <li class=
"md-nav__item md-nav__item--nested">
2386 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_7" >
2390 <label class=
"md-nav__link" for=
"__nav_6_7" id=
"__nav_6_7_label" tabindex=
"0">
2392 <span class=
"md-nav__icon md-icon"></span>
2395 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_7_label" aria-expanded=
"false">
2396 <label class=
"md-nav__title" for=
"__nav_6_7">
2397 <span class=
"md-nav__icon md-icon"></span>
2400 <ul class=
"md-nav__list" data-md-scrollfix
>
2407 <li class=
"md-nav__item">
2408 <a href=
"../../wcf21/php/" class=
"md-nav__link">
2421 <li class=
"md-nav__item">
2422 <a href=
"../../wcf21/templates/" class=
"md-nav__link">
2435 <li class=
"md-nav__item">
2436 <a href=
"../../wcf21/css/" class=
"md-nav__link">
2449 <li class=
"md-nav__item">
2450 <a href=
"../../wcf21/package/" class=
"md-nav__link">
2479 <li class=
"md-nav__item md-nav__item--nested">
2484 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_7" >
2488 <label class=
"md-nav__link" for=
"__nav_7" id=
"__nav_7_label" tabindex=
"0">
2490 <span class=
"md-nav__icon md-icon"></span>
2493 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_7_label" aria-expanded=
"false">
2494 <label class=
"md-nav__title" for=
"__nav_7">
2495 <span class=
"md-nav__icon md-icon"></span>
2498 <ul class=
"md-nav__list" data-md-scrollfix
>
2506 <li class=
"md-nav__item md-nav__item--nested">
2511 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_7_1" >
2515 <label class=
"md-nav__link" for=
"__nav_7_1" id=
"__nav_7_1_label" tabindex=
"0">
2517 <span class=
"md-nav__icon md-icon"></span>
2520 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_7_1_label" aria-expanded=
"false">
2521 <label class=
"md-nav__title" for=
"__nav_7_1">
2522 <span class=
"md-nav__icon md-icon"></span>
2525 <ul class=
"md-nav__list" data-md-scrollfix
>
2532 <li class=
"md-nav__item">
2533 <a href=
"../../../tutorial/series/overview/" class=
"md-nav__link">
2546 <li class=
"md-nav__item">
2547 <a href=
"../../../tutorial/series/part_1/" class=
"md-nav__link">
2560 <li class=
"md-nav__item">
2561 <a href=
"../../../tutorial/series/part_2/" class=
"md-nav__link">
2574 <li class=
"md-nav__item">
2575 <a href=
"../../../tutorial/series/part_3/" class=
"md-nav__link">
2588 <li class=
"md-nav__item">
2589 <a href=
"../../../tutorial/series/part_4/" class=
"md-nav__link">
2602 <li class=
"md-nav__item">
2603 <a href=
"../../../tutorial/series/part_5/" class=
"md-nav__link">
2616 <li class=
"md-nav__item">
2617 <a href=
"../../../tutorial/series/part_6/" class=
"md-nav__link">
2646 <div class=
"md-sidebar md-sidebar--secondary" data-md-component=
"sidebar" data-md-type=
"toc" >
2647 <div class=
"md-sidebar__scrollwrap">
2648 <div class=
"md-sidebar__inner">
2651 <nav class=
"md-nav md-nav--secondary" aria-label=
"Table of contents">
2658 <label class=
"md-nav__title" for=
"__toc">
2659 <span class=
"md-nav__icon md-icon"></span>
2662 <ul class=
"md-nav__list" data-md-component=
"toc" data-md-scrollfix
>
2664 <li class=
"md-nav__item">
2665 <a href=
"#guzzle" class=
"md-nav__link">
2671 <li class=
"md-nav__item">
2672 <a href=
"#emogrifier-css-inliner" class=
"md-nav__link">
2673 Emogrifier / CSS Inliner
2678 <li class=
"md-nav__item">
2679 <a href=
"#scssphp" class=
"md-nav__link">
2685 <li class=
"md-nav__item">
2686 <a href=
"#constant-time-encoder" class=
"md-nav__link">
2687 Constant Time Encoder
2701 <div class=
"md-content" data-md-component=
"content">
2702 <article class=
"md-content__inner md-typeset">
2710 <h1 id=
"migrating-from-woltlab-suite-53-third-party-libraries">Migrating from WoltLab Suite
5.3 - Third Party Libraries
<a class=
"headerlink" href=
"#migrating-from-woltlab-suite-53-third-party-libraries" title=
"Permanent link">#
</a></h1>
2711 <h2 id=
"guzzle">Guzzle
<a class=
"headerlink" href=
"#guzzle" title=
"Permanent link">#
</a></h2>
2712 <p>The bundled Guzzle version was updated to Guzzle
7.
2713 No breaking changes are expected for simple uses.
2714 A detailed
<a href=
"https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#60-to-70">Guzzle migration guide
</a> can be found in the Guzzle documentation.
</p>
2715 <p>The explicit
<code>sink
</code> that was recommended in the
<a href=
"../../wsc52/libraries/#guzzle">migration guide for WoltLab Suite
5.2</a> can now be removed, as
<a href=
"https://github.com/guzzle/guzzle/issues/2735">the Guzzle issue #
2735</a> was fixed in Guzzle
7.
</p>
2716 <h2 id=
"emogrifier-css-inliner">Emogrifier / CSS Inliner
<a class=
"headerlink" href=
"#emogrifier-css-inliner" title=
"Permanent link">#
</a></h2>
2717 <p>The Emogrifier library was updated from version
2.2 to
5.0.
2718 This update comes with a breaking change, as the
<code>Emogrifier
</code> class was removed.
2719 With the updated Emogrifier library, the
<code>CssInliner
</code> class must be used instead.
</p>
2720 <p>No compatibility layer was added for the
<code>Emogrifier
</code> class, as the Emogrifier library's purpose was to be used within the email subsystem of WoltLab Suite.
2721 In case you use Emogrifier directly within your own code, you will need to adjust the usage.
2722 Refer to the
<a href=
"https://github.com/MyIntervals/emogrifier/blob/v5.0.0/CHANGELOG.md">Emogrifier CHANGELOG
</a> and
<a href=
"https://github.com/WoltLab/WCF/pull/3738">WoltLab/WCF #
3738</a> if you need help making the necessary adjustments.
</p>
2723 <p>If you only use Emogrifier indirectly by sending HTML mail via the email subsystem then you might notice unexpected visual changes due to the improved CSS support.
2724 Double check your CSS declarations and particularly the specificity of your selectors in these cases.
</p>
2725 <h2 id=
"scssphp">scssphp
<a class=
"headerlink" href=
"#scssphp" title=
"Permanent link">#
</a></h2>
2726 <p>scssphp was updated from version
1.1 to
1.4.
</p>
2727 <p>If you interact with scssphp only by deploying
<code>.scss
</code> files, then you should not experience any breaking changes, except when the improved SCSS compatibility interprets your SCSS code differently.
</p>
2728 <p>If you happen to directly use scssphp in your PHP code, you should be aware that scssphp deprecated the use of output formatters in favor of a simple output style enum.
</p>
2729 <p>Refer to
<a href=
"https://github.com/WoltLab/WCF/pull/3851">WoltLab/WCF #
3851</a> and the
<a href=
"https://github.com/scssphp/scssphp/releases">scssphp releases
</a> for details.
</p>
2730 <h2 id=
"constant-time-encoder">Constant Time Encoder
<a class=
"headerlink" href=
"#constant-time-encoder" title=
"Permanent link">#
</a></h2>
2731 <p>WoltLab Suite
5.4 ships the
<a href=
"https://github.com/paragonie/constant_time_encoding"><code>paragonie/constant_time_encoding
</code> library
</a>.
2732 It is recommended to use this library to perform encoding and decoding of secrets to prevent leaks via cache timing attacks.
2733 Refer to
<a href=
"https://paragonie.com/blog/2016/06/constant-time-encoding-boring-cryptography-rfc-4648-and-you">the library author’s blog post
</a> for more background detail.
</p>
2734 <p>For the common case of encoding the bytes taken from a CSPRNG in hexadecimal form, the required change would look like the following:
</p>
2736 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
2737 <span class=
"normal">2</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"o"><?
</span><span class=
"nx">php
</span>
2738 <span class=
"nv">$encoded
</span> <span class=
"o">=
</span> <span class=
"nb">hex2bin
</span><span class=
"p">(
</span><span class=
"nb">random_bytes
</span><span class=
"p">(
</span><span class=
"mi">16</span><span class=
"p">));
</span>
2739 </code></pre></div></td></tr></table></div>
2741 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
2742 <span class=
"normal">2</span>
2743 <span class=
"normal">3</span>
2744 <span class=
"normal">4</span>
2745 <span class=
"normal">5</span>
2746 <span class=
"normal">6</span>
2747 <span class=
"normal">7</span>
2748 <span class=
"normal">8</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"o"><?
</span><span class=
"nx">php
</span>
2749 <span class=
"k">use
</span> <span class=
"nx">ParagonIE\ConstantTime\Hex
</span><span class=
"p">;
</span>
2751 <span class=
"c1">// For security reasons you should add the backslash
</span>
2752 <span class=
"c1">// to ensure you refer to the `random_bytes` function
</span>
2753 <span class=
"c1">// within the global namespace and not a function
</span>
2754 <span class=
"c1">// defined in the current namespace.
</span>
2755 <span class=
"nv">$encoded
</span> <span class=
"o">=
</span> <span class=
"nx">Hex
</span><span class=
"o">::
</span><span class=
"na">encode
</span><span class=
"p">(
</span><span class=
"nx">\random_bytes
</span><span class=
"p">(
</span><span class=
"mi">16</span><span class=
"p">));
</span>
2756 </code></pre></div></td></tr></table></div>
2757 <p>Please refer to the documentation and source code of the
<code>paragonie/constant_time_encoding
</code> library to learn how to use the library with different encodings (e.g. base64).
</p>
2760 <div class=
"md-source-file">
2782 <footer class=
"md-footer">
2784 <div class=
"md-footer-meta md-typeset">
2785 <div class=
"md-footer-meta__inner md-grid">
2786 <div class=
"md-copyright">
2788 <div class=
"md-copyright__highlight">
2789 Copyright ©
2020 WoltLab GmbH
2794 <a href=
"https://squidfunk.github.io/mkdocs-material/" target=
"_blank" rel=
"noopener">
2800 <div class=
"md-copyright">
2801 <a href=
"https://www.woltlab.com/legal-notice/">Legal Notice
</a>
2802 <a href=
"https://www.woltlab.com/privacy-policy/">Privacy Policy
</a>
2810 <div class=
"md-dialog" data-md-component=
"dialog">
2811 <div class=
"md-dialog__inner md-typeset"></div>
2814 <script id=
"__config" type=
"application/json">{
"base":
"../../..",
"features": [
"navigation.tracking"],
"search":
"../../../assets/javascripts/workers/search.208ed371.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>
2817 <script src=
"../../../assets/javascripts/bundle.b4d07000.min.js"></script>