Deployed 41eea46 to 5.4 with MkDocs 1.1.2 and mike 1.0.0
[GitHub/WoltLab/woltlab.github.io.git] / 5.4 / php / api / package_installation_plugins / index.html
CommitLineData
45ca63d0
TD
1
2<!doctype html>
3<html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9
10
11
c8b4da45
WG
12 <link rel="canonical" href="https://docs.woltlab.com/5.4/php/api/package_installation_plugins/">
13
fb962f09 14 <link rel="icon" href="../../../assets/default.favicon.ico">
a4835aa6 15 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.2">
45ca63d0
TD
16
17
18
19 <title>Package Installation Plugins - WoltLab Suite Documentation</title>
20
21
22
a4835aa6 23 <link rel="stylesheet" href="../../../assets/stylesheets/main.6f955dcd.min.css">
45ca63d0
TD
24
25
fb962f09 26 <link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
45ca63d0
TD
27
28
29
30 <meta name="theme-color" content="#009485">
31
32
33
34
35
fd8430cb
WG
36
37
45ca63d0
TD
38
39
40 <link rel="stylesheet" href="../../../stylesheets/extra.css">
41
42
43
44
45
46 </head>
47
48
49
50
51
52
53
54 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
45ca63d0
TD
55
56
fb962f09
WG
57 <script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
58
45ca63d0
TD
59 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
60 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
61 <label class="md-overlay" for="__drawer"></label>
62 <div data-md-component="skip">
63
64
65 <a href="#package-installation-plugins" class="md-skip">
66 Skip to content
67 </a>
68
69 </div>
70 <div data-md-component="announce">
71
72 <aside class="md-announce">
73 <div class="md-announce__inner md-grid md-typeset">
74
75 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
76
77 </div>
78 </aside>
79
80 </div>
81
fb962f09 82 <header class="md-header" data-md-component="header">
45ca63d0 83 <nav class="md-header__inner md-grid" aria-label="Header">
fb962f09 84 <a href="../../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
45ca63d0
TD
85
86 <img src="../../../assets/logo.png" alt="logo">
87
88 </a>
89 <label class="md-header__button md-icon" for="__drawer">
90 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
91 </label>
92 <div class="md-header__title" data-md-component="header-title">
93 <div class="md-header__ellipsis">
94 <div class="md-header__topic">
95 <span class="md-ellipsis">
96 WoltLab Suite Documentation
97 </span>
98 </div>
99 <div class="md-header__topic" data-md-component="header-topic">
100 <span class="md-ellipsis">
101
102 Package Installation Plugins
103
104 </span>
105 </div>
106 </div>
45ca63d0
TD
107 </div>
108
fb962f09
WG
109
110
a3639e76
WG
111 <label class="md-header__button md-icon" for="__search">
112 <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>
113 </label>
114
115<div class="md-search" data-md-component="search" role="dialog">
116 <label class="md-search__overlay" for="__search"></label>
117 <div class="md-search__inner" role="search">
118 <form class="md-search__form" name="search">
119 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
120 <label class="md-search__icon md-icon" for="__search">
121 <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>
122 <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>
123 </label>
124 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
fb962f09 125 <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>
a3639e76
WG
126 </button>
127 </form>
128 <div class="md-search__output">
129 <div class="md-search__scrollwrap" data-md-scrollfix>
130 <div class="md-search-result" data-md-component="search-result">
131 <div class="md-search-result__meta">
132 Initializing search
133 </div>
134 <ol class="md-search-result__list"></ol>
135 </div>
136 </div>
137 </div>
138 </div>
139</div>
140
45ca63d0 141
7124f4cb
WG
142 <div class="md-header__source">
143
144<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
145 <div class="md-source__icon md-icon">
146
fb962f09 147 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
7124f4cb
WG
148 </div>
149 <div class="md-source__repository">
150 GitHub
151 </div>
152</a>
153 </div>
154
45ca63d0
TD
155 </nav>
156</header>
157
158 <div class="md-container" data-md-component="container">
159
160
161
162
163 <main class="md-main" data-md-component="main">
164 <div class="md-main__inner md-grid">
165
166
167
168 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
169 <div class="md-sidebar__scrollwrap">
170 <div class="md-sidebar__inner">
171
172
173
45ca63d0
TD
174<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
175 <label class="md-nav__title" for="__drawer">
fb962f09 176 <a href="../../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
45ca63d0
TD
177
178 <img src="../../../assets/logo.png" alt="logo">
179
180 </a>
181 WoltLab Suite Documentation
182 </label>
183
7124f4cb
WG
184 <div class="md-nav__source">
185
186<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
187 <div class="md-source__icon md-icon">
188
fb962f09 189 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
7124f4cb
WG
190 </div>
191 <div class="md-source__repository">
192 GitHub
193 </div>
194</a>
195 </div>
196
45ca63d0
TD
197 <ul class="md-nav__list" data-md-scrollfix>
198
199
200
201
202
203
204
205
206 <li class="md-nav__item">
207 <a href="../../../getting-started/" class="md-nav__link">
208 Getting Started
209 </a>
210 </li>
211
212
213
214
215
216
217
218
219
220
221
222
223
224 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
225
226
227 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
228
229 <label class="md-nav__link" for="__nav_2">
230 PHP API
231 <span class="md-nav__icon md-icon"></span>
232 </label>
233 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
234 <label class="md-nav__title" for="__nav_2">
235 <span class="md-nav__icon md-icon"></span>
236 PHP API
237 </label>
238 <ul class="md-nav__list" data-md-scrollfix>
239
240
241
242
243
244 <li class="md-nav__item">
245 <a href="../../pages/" class="md-nav__link">
246 Pages
247 </a>
248 </li>
249
250
251
252
253
254
255
256 <li class="md-nav__item">
257 <a href="../../database-objects/" class="md-nav__link">
258 Database Objects
259 </a>
260 </li>
261
262
263
264
265
266
267
268 <li class="md-nav__item">
269 <a href="../../database-access/" class="md-nav__link">
270 Database Access
271 </a>
272 </li>
273
274
275
276
277
278
279
280 <li class="md-nav__item">
281 <a href="../../exceptions/" class="md-nav__link">
282 Exceptions
283 </a>
284 </li>
285
286
287
288
289
290
291
292
293
294
295 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
296
297
298 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" checked>
299
300 <label class="md-nav__link" for="__nav_2_5">
301 API
302 <span class="md-nav__icon md-icon"></span>
303 </label>
304 <nav class="md-nav" aria-label="API" data-md-level="2">
305 <label class="md-nav__title" for="__nav_2_5">
306 <span class="md-nav__icon md-icon"></span>
307 API
308 </label>
309 <ul class="md-nav__list" data-md-scrollfix>
310
311
312
313
314
6923e968
WG
315
316 <li class="md-nav__item md-nav__item--nested">
317
318
319 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_1" type="checkbox" id="__nav_2_5_1" >
320
321 <label class="md-nav__link" for="__nav_2_5_1">
322 Caches
323 <span class="md-nav__icon md-icon"></span>
324 </label>
325 <nav class="md-nav" aria-label="Caches" data-md-level="3">
326 <label class="md-nav__title" for="__nav_2_5_1">
327 <span class="md-nav__icon md-icon"></span>
328 Caches
329 </label>
330 <ul class="md-nav__list" data-md-scrollfix>
331
332
333
334
335
45ca63d0
TD
336 <li class="md-nav__item">
337 <a href="../caches/" class="md-nav__link">
6923e968
WG
338 Overview
339 </a>
340 </li>
341
342
343
344
345
346
347
348 <li class="md-nav__item">
349 <a href="../caches_persistent-caches/" class="md-nav__link">
350 Persistent Caches
351 </a>
352 </li>
353
354
355
356
357
358
359
360 <li class="md-nav__item">
361 <a href="../caches_runtime-caches/" class="md-nav__link">
362 Runtime Caches
45ca63d0
TD
363 </a>
364 </li>
365
366
367
6923e968
WG
368 </ul>
369 </nav>
370 </li>
371
372
373
45ca63d0
TD
374
375
376
377
378 <li class="md-nav__item">
379 <a href="../comments/" class="md-nav__link">
380 Comments
381 </a>
382 </li>
383
384
385
386
387
388
389
390 <li class="md-nav__item">
391 <a href="../cronjobs/" class="md-nav__link">
392 Cronjobs
393 </a>
394 </li>
395
396
397
398
399
400
401
402 <li class="md-nav__item">
403 <a href="../events/" class="md-nav__link">
404 Events
405 </a>
406 </li>
407
408
409
410
411
412
413
414
415 <li class="md-nav__item md-nav__item--nested">
416
417
418 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" >
419
420 <label class="md-nav__link" for="__nav_2_5_5">
421 Form Builder
422 <span class="md-nav__icon md-icon"></span>
423 </label>
424 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
425 <label class="md-nav__title" for="__nav_2_5_5">
426 <span class="md-nav__icon md-icon"></span>
427 Form Builder
428 </label>
429 <ul class="md-nav__list" data-md-scrollfix>
430
431
432
433
434
435 <li class="md-nav__item">
436 <a href="../form_builder/overview/" class="md-nav__link">
437 Overview
438 </a>
439 </li>
440
441
442
443
444
445
446
447 <li class="md-nav__item">
448 <a href="../form_builder/structure/" class="md-nav__link">
449 Structure
450 </a>
451 </li>
452
453
454
455
456
457
458
459 <li class="md-nav__item">
460 <a href="../form_builder/form_fields/" class="md-nav__link">
461 Fields
462 </a>
463 </li>
464
465
466
467
468
469
470
471 <li class="md-nav__item">
472 <a href="../form_builder/validation_data/" class="md-nav__link">
473 Validation and Data
474 </a>
475 </li>
476
477
478
479
480
481
482
483 <li class="md-nav__item">
484 <a href="../form_builder/dependencies/" class="md-nav__link">
485 Dependencies
486 </a>
487 </li>
488
489
490
491 </ul>
492 </nav>
493 </li>
494
495
496
497
498
499
500
501
502
503 <li class="md-nav__item md-nav__item--active">
504
505 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
506
a4835aa6 507
45ca63d0
TD
508
509
510
511 <label class="md-nav__link md-nav__link--active" for="__toc">
512 Package Installation Plugins
513 <span class="md-nav__icon md-icon"></span>
514 </label>
515
516 <a href="./" class="md-nav__link md-nav__link--active">
517 Package Installation Plugins
518 </a>
519
520
521<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
522
523
a4835aa6 524
45ca63d0
TD
525
526
527
528 <label class="md-nav__title" for="__toc">
529 <span class="md-nav__icon md-icon"></span>
530 Table of contents
531 </label>
532 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
533
534 <li class="md-nav__item">
535 <a href="#abstractpackageinstallationplugin" class="md-nav__link">
536 AbstractPackageInstallationPlugin
537 </a>
538
539 <nav class="md-nav" aria-label="AbstractPackageInstallationPlugin">
540 <ul class="md-nav__list">
541
542 <li class="md-nav__item">
543 <a href="#class-members" class="md-nav__link">
544 Class Members
545 </a>
546
547 <nav class="md-nav" aria-label="Class Members">
548 <ul class="md-nav__list">
549
550 <li class="md-nav__item">
551 <a href="#installation" class="md-nav__link">
552 $installation
553 </a>
554
555</li>
556
557 <li class="md-nav__item">
558 <a href="#application" class="md-nav__link">
559 $application
560 </a>
561
562</li>
563
564 </ul>
565 </nav>
566
567</li>
568
569 </ul>
570 </nav>
571
572</li>
573
574 <li class="md-nav__item">
575 <a href="#abstractxmlpackageinstallationplugin" class="md-nav__link">
576 AbstractXMLPackageInstallationPlugin
577 </a>
578
579 <nav class="md-nav" aria-label="AbstractXMLPackageInstallationPlugin">
580 <ul class="md-nav__list">
581
582 <li class="md-nav__item">
583 <a href="#class-members_1" class="md-nav__link">
584 Class Members
585 </a>
586
587 <nav class="md-nav" aria-label="Class Members">
588 <ul class="md-nav__list">
589
590 <li class="md-nav__item">
591 <a href="#classname" class="md-nav__link">
592 $className
593 </a>
594
595</li>
596
597 <li class="md-nav__item">
598 <a href="#tagname" class="md-nav__link">
599 $tagName
600 </a>
601
602</li>
603
604 <li class="md-nav__item">
605 <a href="#prepareimportarray-data" class="md-nav__link">
606 prepareImport(array $data)
607 </a>
608
609</li>
610
611 <li class="md-nav__item">
612 <a href="#validateimportarray-data" class="md-nav__link">
613 validateImport(array $data)
614 </a>
615
616</li>
617
618 <li class="md-nav__item">
619 <a href="#findexistingitemarray-data" class="md-nav__link">
620 findExistingItem(array $data)
621 </a>
622
623</li>
624
625 <li class="md-nav__item">
626 <a href="#253-example" class="md-nav__link">
627 2.5.3. Example
628 </a>
629
630</li>
631
632 <li class="md-nav__item">
633 <a href="#handledeletearray-items" class="md-nav__link">
634 handleDelete(array $items)
635 </a>
636
637</li>
638
639 <li class="md-nav__item">
640 <a href="#postimport" class="md-nav__link">
641 postImport()
642 </a>
643
644</li>
645
646 </ul>
647 </nav>
648
649</li>
650
651 </ul>
652 </nav>
653
654</li>
655
656 <li class="md-nav__item">
657 <a href="#abstractoptionpackageinstallationplugin" class="md-nav__link">
658 AbstractOptionPackageInstallationPlugin
659 </a>
660
661 <nav class="md-nav" aria-label="AbstractOptionPackageInstallationPlugin">
662 <ul class="md-nav__list">
663
664 <li class="md-nav__item">
665 <a href="#differences-to-abstractxmlpackageinstallationplugin" class="md-nav__link">
666 Differences to AbstractXMLPackageInstallationPlugin
667 </a>
668
669 <nav class="md-nav" aria-label="Differences to AbstractXMLPackageInstallationPlugin">
670 <ul class="md-nav__list">
671
672 <li class="md-nav__item">
673 <a href="#reservedtags" class="md-nav__link">
674 $reservedTags
675 </a>
676
677</li>
678
679 </ul>
680 </nav>
681
682</li>
683
684 </ul>
685 </nav>
686
687</li>
688
689 </ul>
690
691</nav>
692
693 </li>
694
695
696
697
698
699
700
701 <li class="md-nav__item">
702 <a href="../user_activity_points/" class="md-nav__link">
703 User Activity Points
704 </a>
705 </li>
706
707
708
709
710
711
712
713 <li class="md-nav__item">
714 <a href="../user_notifications/" class="md-nav__link">
715 User Notifications
716 </a>
717 </li>
718
719
720
721
722
723
724
725 <li class="md-nav__item">
726 <a href="../sitemaps/" class="md-nav__link">
727 Sitemaps
728 </a>
729 </li>
730
731
732
733 </ul>
734 </nav>
735 </li>
736
737
738
739
740
741
742
743 <li class="md-nav__item">
744 <a href="../../code-style/" class="md-nav__link">
745 Code Style
746 </a>
747 </li>
748
749
750
751
752
753
754
755 <li class="md-nav__item">
756 <a href="../../apps/" class="md-nav__link">
757 Apps
758 </a>
759 </li>
760
761
762
763
764
765
766
767 <li class="md-nav__item">
768 <a href="../../gdpr/" class="md-nav__link">
769 GDPR
770 </a>
771 </li>
772
773
774
775 </ul>
776 </nav>
777 </li>
778
779
780
781
782
783
784
785
786
787
788
789 <li class="md-nav__item md-nav__item--nested">
790
791
792 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
793
794 <label class="md-nav__link" for="__nav_3">
795 Languages, Templates & CSS
796 <span class="md-nav__icon md-icon"></span>
797 </label>
798 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
799 <label class="md-nav__title" for="__nav_3">
800 <span class="md-nav__icon md-icon"></span>
801 Languages, Templates & CSS
802 </label>
803 <ul class="md-nav__list" data-md-scrollfix>
804
805
806
807
808
809 <li class="md-nav__item">
810 <a href="../../../view/languages/" class="md-nav__link">
811 Languages
812 </a>
813 </li>
814
815
816
817
818
819
820
821 <li class="md-nav__item">
822 <a href="../../../view/templates/" class="md-nav__link">
823 Templates
824 </a>
825 </li>
826
827
828
829
830
831
832
6923e968
WG
833 <li class="md-nav__item">
834 <a href="../../../view/template-plugins/" class="md-nav__link">
835 Template Plugins
836 </a>
837 </li>
838
839
840
841
842
843
844
45ca63d0
TD
845 <li class="md-nav__item">
846 <a href="../../../view/css/" class="md-nav__link">
847 CSS
848 </a>
849 </li>
850
851
852
853 </ul>
854 </nav>
855 </li>
856
857
858
859
860
861
862
863
864
865
866
867 <li class="md-nav__item md-nav__item--nested">
868
869
870 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
871
872 <label class="md-nav__link" for="__nav_4">
77efcd46 873 TypeScript and JavaScript API
45ca63d0
TD
874 <span class="md-nav__icon md-icon"></span>
875 </label>
77efcd46 876 <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1">
45ca63d0
TD
877 <label class="md-nav__title" for="__nav_4">
878 <span class="md-nav__icon md-icon"></span>
77efcd46 879 TypeScript and JavaScript API
45ca63d0
TD
880 </label>
881 <ul class="md-nav__list" data-md-scrollfix>
882
883
884
885
886
887 <li class="md-nav__item">
888 <a href="../../../javascript/general-usage/" class="md-nav__link">
889 General Usage
890 </a>
891 </li>
892
893
894
895
896
897
898
77efcd46
WG
899 <li class="md-nav__item">
900 <a href="../../../javascript/typescript/" class="md-nav__link">
901 TypeScript
902 </a>
903 </li>
904
905
906
907
908
909
910
45ca63d0
TD
911
912 <li class="md-nav__item md-nav__item--nested">
913
914
77efcd46 915 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
45ca63d0 916
77efcd46 917 <label class="md-nav__link" for="__nav_4_3">
45ca63d0
TD
918 New API
919 <span class="md-nav__icon md-icon"></span>
920 </label>
921 <nav class="md-nav" aria-label="New API" data-md-level="2">
77efcd46 922 <label class="md-nav__title" for="__nav_4_3">
45ca63d0
TD
923 <span class="md-nav__icon md-icon"></span>
924 New API
925 </label>
926 <ul class="md-nav__list" data-md-scrollfix>
927
928
929
930
931
932 <li class="md-nav__item">
933 <a href="../../../javascript/new-api_writing-a-module/" class="md-nav__link">
934 Writing a module
935 </a>
936 </li>
937
938
939
940
941
942
943
944 <li class="md-nav__item">
945 <a href="../../../javascript/new-api_data-structures/" class="md-nav__link">
946 Data Structures
947 </a>
948 </li>
949
950
951
952
953
954
955
956 <li class="md-nav__item">
957 <a href="../../../javascript/new-api_core/" class="md-nav__link">
958 Core Functions
959 </a>
960 </li>
961
962
963
964
965
966
967
968 <li class="md-nav__item">
969 <a href="../../../javascript/new-api_dom/" class="md-nav__link">
970 DOM
971 </a>
972 </li>
973
974
975
976
977
978
979
980 <li class="md-nav__item">
981 <a href="../../../javascript/new-api_events/" class="md-nav__link">
982 Event Handling
983 </a>
984 </li>
985
986
987
988
989
990
991
992 <li class="md-nav__item">
993 <a href="../../../javascript/new-api_ajax/" class="md-nav__link">
994 Ajax
995 </a>
996 </li>
997
998
999
1000
1001
1002
1003
1004 <li class="md-nav__item">
1005 <a href="../../../javascript/new-api_dialogs/" class="md-nav__link">
1006 Dialogs
1007 </a>
1008 </li>
1009
1010
1011
1012
1013
1014
1015
1016 <li class="md-nav__item">
1017 <a href="../../../javascript/new-api_browser/" class="md-nav__link">
1018 Browser and Screen Sizes
1019 </a>
1020 </li>
1021
1022
1023
1024
1025
1026
1027
1028 <li class="md-nav__item">
1029 <a href="../../../javascript/new-api_ui/" class="md-nav__link">
1030 User Interface
1031 </a>
1032 </li>
1033
1034
1035
1036 </ul>
1037 </nav>
1038 </li>
1039
1040
1041
1042
1043
1044
1045
1046 <li class="md-nav__item">
1047 <a href="../../../javascript/legacy-api/" class="md-nav__link">
1048 Legacy API
1049 </a>
1050 </li>
1051
1052
1053
1054
1055
1056
1057
1058 <li class="md-nav__item">
1059 <a href="../../../javascript/helper-functions/" class="md-nav__link">
1060 Helper Functions
1061 </a>
1062 </li>
1063
1064
1065
1066
1067
1068
1069
1070 <li class="md-nav__item">
1071 <a href="../../../javascript/code-snippets/" class="md-nav__link">
1072 Code Snippets
1073 </a>
1074 </li>
1075
1076
1077
1078 </ul>
1079 </nav>
1080 </li>
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092 <li class="md-nav__item md-nav__item--nested">
1093
1094
1095 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
1096
1097 <label class="md-nav__link" for="__nav_5">
1098 Package Components
1099 <span class="md-nav__icon md-icon"></span>
1100 </label>
1101 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
1102 <label class="md-nav__title" for="__nav_5">
1103 <span class="md-nav__icon md-icon"></span>
1104 Package Components
1105 </label>
1106 <ul class="md-nav__list" data-md-scrollfix>
1107
1108
1109
1110
1111
1112 <li class="md-nav__item">
1113 <a href="../../../package/package-xml/" class="md-nav__link">
1114 package.xml
1115 </a>
1116 </li>
1117
1118
1119
1120
1121
1122
1123
1124
1125 <li class="md-nav__item md-nav__item--nested">
1126
1127
1128 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
1129
1130 <label class="md-nav__link" for="__nav_5_2">
1131 PIPs
1132 <span class="md-nav__icon md-icon"></span>
1133 </label>
1134 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
1135 <label class="md-nav__title" for="__nav_5_2">
1136 <span class="md-nav__icon md-icon"></span>
1137 PIPs
1138 </label>
1139 <ul class="md-nav__list" data-md-scrollfix>
1140
1141
1142
1143
1144
1145 <li class="md-nav__item">
1146 <a href="../../../package/pip/" class="md-nav__link">
1147 Overview
1148 </a>
1149 </li>
1150
1151
1152
1153
1154
1155
1156
1157 <li class="md-nav__item">
1158 <a href="../../../package/pip/acl-option/" class="md-nav__link">
1159 aclOption
1160 </a>
1161 </li>
1162
1163
1164
1165
1166
1167
1168
1169 <li class="md-nav__item">
1170 <a href="../../../package/pip/acp-menu/" class="md-nav__link">
1171 acpMenu
1172 </a>
1173 </li>
1174
1175
1176
1177
1178
1179
1180
1181 <li class="md-nav__item">
1182 <a href="../../../package/pip/acp-search-provider/" class="md-nav__link">
1183 acpSearchProvider
1184 </a>
1185 </li>
1186
1187
1188
1189
1190
1191
1192
1193 <li class="md-nav__item">
1194 <a href="../../../package/pip/acp-template/" class="md-nav__link">
1195 acpTemplate
1196 </a>
1197 </li>
1198
1199
1200
1201
1202
1203
1204
1205 <li class="md-nav__item">
1206 <a href="../../../package/pip/bbcode/" class="md-nav__link">
1207 bbcode
1208 </a>
1209 </li>
1210
1211
1212
1213
1214
1215
1216
1217 <li class="md-nav__item">
1218 <a href="../../../package/pip/box/" class="md-nav__link">
1219 box
1220 </a>
1221 </li>
1222
1223
1224
1225
1226
1227
1228
1229 <li class="md-nav__item">
1230 <a href="../../../package/pip/clipboard-action/" class="md-nav__link">
1231 clipboardAction
1232 </a>
1233 </li>
1234
1235
1236
1237
1238
1239
1240
1241 <li class="md-nav__item">
1242 <a href="../../../package/pip/core-object/" class="md-nav__link">
1243 coreObject
1244 </a>
1245 </li>
1246
1247
1248
1249
1250
1251
1252
1253 <li class="md-nav__item">
1254 <a href="../../../package/pip/cronjob/" class="md-nav__link">
1255 cronjob
1256 </a>
1257 </li>
1258
1259
1260
1261
6923e968
WG
1262
1263
1264
1265 <li class="md-nav__item">
1266 <a href="../../../package/pip/database/" class="md-nav__link">
1267 database
1268 </a>
1269 </li>
1270
1271
1272
1273
45ca63d0
TD
1274
1275
1276
1277 <li class="md-nav__item">
1278 <a href="../../../package/pip/event-listener/" class="md-nav__link">
1279 eventListener
1280 </a>
1281 </li>
1282
1283
1284
1285
1286
1287
1288
1289 <li class="md-nav__item">
1290 <a href="../../../package/pip/file/" class="md-nav__link">
1291 file
1292 </a>
1293 </li>
1294
1295
1296
1297
1298
1299
1300
1301 <li class="md-nav__item">
1302 <a href="../../../package/pip/language/" class="md-nav__link">
1303 language
1304 </a>
1305 </li>
1306
1307
1308
1309
1310
1311
1312
1313 <li class="md-nav__item">
1314 <a href="../../../package/pip/media-provider/" class="md-nav__link">
1315 mediaProvider
1316 </a>
1317 </li>
1318
1319
1320
1321
1322
1323
1324
1325 <li class="md-nav__item">
1326 <a href="../../../package/pip/menu/" class="md-nav__link">
1327 menu
1328 </a>
1329 </li>
1330
1331
1332
1333
1334
1335
1336
1337 <li class="md-nav__item">
1338 <a href="../../../package/pip/menu-item/" class="md-nav__link">
1339 menuItem
1340 </a>
1341 </li>
1342
1343
1344
1345
1346
1347
1348
1349 <li class="md-nav__item">
1350 <a href="../../../package/pip/object-type/" class="md-nav__link">
1351 objectType
1352 </a>
1353 </li>
1354
1355
1356
1357
1358
1359
1360
1361 <li class="md-nav__item">
1362 <a href="../../../package/pip/object-type-definition/" class="md-nav__link">
1363 objectTypeDefinition
1364 </a>
1365 </li>
1366
1367
1368
1369
1370
1371
1372
1373 <li class="md-nav__item">
1374 <a href="../../../package/pip/option/" class="md-nav__link">
1375 option
1376 </a>
1377 </li>
1378
1379
1380
1381
1382
1383
1384
1385 <li class="md-nav__item">
1386 <a href="../../../package/pip/page/" class="md-nav__link">
1387 page
1388 </a>
1389 </li>
1390
1391
1392
1393
1394
1395
1396
1397 <li class="md-nav__item">
1398 <a href="../../../package/pip/pip/" class="md-nav__link">
1399 pip
1400 </a>
1401 </li>
1402
1403
1404
1405
1406
1407
1408
1409 <li class="md-nav__item">
1410 <a href="../../../package/pip/script/" class="md-nav__link">
1411 script
1412 </a>
1413 </li>
1414
1415
1416
1417
1418
1419
1420
1421 <li class="md-nav__item">
1422 <a href="../../../package/pip/smiley/" class="md-nav__link">
1423 smiley
1424 </a>
1425 </li>
1426
1427
1428
1429
1430
1431
1432
1433 <li class="md-nav__item">
1434 <a href="../../../package/pip/sql/" class="md-nav__link">
1435 sql
1436 </a>
1437 </li>
1438
1439
1440
1441
1442
1443
1444
1445 <li class="md-nav__item">
1446 <a href="../../../package/pip/style/" class="md-nav__link">
1447 style
1448 </a>
1449 </li>
1450
1451
1452
1453
1454
1455
1456
1457 <li class="md-nav__item">
1458 <a href="../../../package/pip/template/" class="md-nav__link">
1459 template
1460 </a>
1461 </li>
1462
1463
1464
1465
1466
1467
1468
1469 <li class="md-nav__item">
1470 <a href="../../../package/pip/template-listener/" class="md-nav__link">
1471 templateListener
1472 </a>
1473 </li>
1474
1475
1476
1477
1478
1479
1480
1481 <li class="md-nav__item">
1482 <a href="../../../package/pip/user-group-option/" class="md-nav__link">
1483 userGroupOption
1484 </a>
1485 </li>
1486
1487
1488
1489
1490
1491
1492
1493 <li class="md-nav__item">
1494 <a href="../../../package/pip/user-menu/" class="md-nav__link">
1495 userMenu
1496 </a>
1497 </li>
1498
1499
1500
1501
1502
1503
1504
1505 <li class="md-nav__item">
1506 <a href="../../../package/pip/user-notification-event/" class="md-nav__link">
1507 userNotificationEvent
1508 </a>
1509 </li>
1510
1511
1512
1513
1514
1515
1516
1517 <li class="md-nav__item">
1518 <a href="../../../package/pip/user-option/" class="md-nav__link">
1519 userOption
1520 </a>
1521 </li>
1522
1523
1524
1525
1526
1527
1528
1529 <li class="md-nav__item">
1530 <a href="../../../package/pip/user-profile-menu/" class="md-nav__link">
1531 userProfileMenu
1532 </a>
1533 </li>
1534
1535
1536
1537 </ul>
1538 </nav>
1539 </li>
1540
1541
1542
1543
1544
1545
1546
1547 <li class="md-nav__item">
1548 <a href="../../../package/database-php-api/" class="md-nav__link">
1549 Database PHP API
1550 </a>
1551 </li>
1552
1553
1554
1555 </ul>
1556 </nav>
1557 </li>
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569 <li class="md-nav__item md-nav__item--nested">
1570
1571
1572 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1573
1574 <label class="md-nav__link" for="__nav_6">
1575 Migration
1576 <span class="md-nav__icon md-icon"></span>
1577 </label>
1578 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1579 <label class="md-nav__title" for="__nav_6">
1580 <span class="md-nav__icon md-icon"></span>
1581 Migration
1582 </label>
1583 <ul class="md-nav__list" data-md-scrollfix>
1584
1585
1586
1587
1588
1589
1590 <li class="md-nav__item md-nav__item--nested">
1591
1592
1593 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1594
1595 <label class="md-nav__link" for="__nav_6_1">
1596 Migrating from WSC 5.3
1597 <span class="md-nav__icon md-icon"></span>
1598 </label>
1599 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1600 <label class="md-nav__title" for="__nav_6_1">
1601 <span class="md-nav__icon md-icon"></span>
1602 Migrating from WSC 5.3
1603 </label>
1604 <ul class="md-nav__list" data-md-scrollfix>
1605
1606
1607
1608
1609
1610 <li class="md-nav__item">
1611 <a href="../../../migration/wsc53/php/" class="md-nav__link">
1612 PHP API
1613 </a>
1614 </li>
1615
1616
1617
1618
1619
1620
1621
1622 <li class="md-nav__item">
1623 <a href="../../../migration/wsc53/session/" class="md-nav__link">
1624 Session Handling and Authentication
1625 </a>
1626 </li>
1627
1628
1629
1630
1631
1632
1633
1634 <li class="md-nav__item">
1635 <a href="../../../migration/wsc53/javascript/" class="md-nav__link">
77efcd46 1636 TypeScript and JavaScript
45ca63d0
TD
1637 </a>
1638 </li>
1639
1640
1641
1642
1643
1644
1645
1646 <li class="md-nav__item">
1647 <a href="../../../migration/wsc53/templates/" class="md-nav__link">
1648 Templates
1649 </a>
1650 </li>
1651
1652
1653
1654
1655
1656
1657
1658 <li class="md-nav__item">
1659 <a href="../../../migration/wsc53/libraries/" class="md-nav__link">
1660 Third Party Libraries
1661 </a>
1662 </li>
1663
1664
1665
1666 </ul>
1667 </nav>
1668 </li>
1669
1670
1671
1672
1673
1674
1675
1676
1677 <li class="md-nav__item md-nav__item--nested">
1678
1679
1680 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1681
1682 <label class="md-nav__link" for="__nav_6_2">
1683 Migrating from WSC 5.2
1684 <span class="md-nav__icon md-icon"></span>
1685 </label>
1686 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1687 <label class="md-nav__title" for="__nav_6_2">
1688 <span class="md-nav__icon md-icon"></span>
1689 Migrating from WSC 5.2
1690 </label>
1691 <ul class="md-nav__list" data-md-scrollfix>
1692
1693
1694
1695
1696
1697 <li class="md-nav__item">
1698 <a href="../../../migration/wsc52/php/" class="md-nav__link">
1699 PHP API
1700 </a>
1701 </li>
1702
1703
1704
1705
1706
1707
1708
1709 <li class="md-nav__item">
1710 <a href="../../../migration/wsc52/templates/" class="md-nav__link">
1711 Templates and Languages
1712 </a>
1713 </li>
1714
1715
1716
1717
1718
1719
1720
1721 <li class="md-nav__item">
1722 <a href="../../../migration/wsc52/libraries/" class="md-nav__link">
1723 Third Party Libraries
1724 </a>
1725 </li>
1726
1727
1728
1729 </ul>
1730 </nav>
1731 </li>
1732
1733
1734
1735
1736
1737
1738
1739
1740 <li class="md-nav__item md-nav__item--nested">
1741
1742
1743 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1744
1745 <label class="md-nav__link" for="__nav_6_3">
1746 Migrating from WSC 3.1
1747 <span class="md-nav__icon md-icon"></span>
1748 </label>
1749 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1750 <label class="md-nav__title" for="__nav_6_3">
1751 <span class="md-nav__icon md-icon"></span>
1752 Migrating from WSC 3.1
1753 </label>
1754 <ul class="md-nav__list" data-md-scrollfix>
1755
1756
1757
1758
1759
1760 <li class="md-nav__item">
1761 <a href="../../../migration/wsc31/php/" class="md-nav__link">
1762 PHP API
1763 </a>
1764 </li>
1765
1766
1767
1768 </ul>
1769 </nav>
1770 </li>
1771
1772
1773
1774
1775
1776
1777
1778
1779 <li class="md-nav__item md-nav__item--nested">
1780
1781
1782 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1783
1784 <label class="md-nav__link" for="__nav_6_4">
1785 Migrating from WSC 3.0
1786 <span class="md-nav__icon md-icon"></span>
1787 </label>
1788 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1789 <label class="md-nav__title" for="__nav_6_4">
1790 <span class="md-nav__icon md-icon"></span>
1791 Migrating from WSC 3.0
1792 </label>
1793 <ul class="md-nav__list" data-md-scrollfix>
1794
1795
1796
1797
1798
1799 <li class="md-nav__item">
1800 <a href="../../../migration/wsc30/php/" class="md-nav__link">
1801 PHP API
1802 </a>
1803 </li>
1804
1805
1806
1807
1808
1809
1810
1811 <li class="md-nav__item">
1812 <a href="../../../migration/wsc30/javascript/" class="md-nav__link">
1813 JavaScript API
1814 </a>
1815 </li>
1816
1817
1818
1819
1820
1821
1822
1823 <li class="md-nav__item">
1824 <a href="../../../migration/wsc30/templates/" class="md-nav__link">
1825 Templates
1826 </a>
1827 </li>
1828
1829
1830
1831
1832
1833
1834
1835 <li class="md-nav__item">
1836 <a href="../../../migration/wsc30/css/" class="md-nav__link">
1837 CSS
1838 </a>
1839 </li>
1840
1841
1842
1843
1844
1845
1846
1847 <li class="md-nav__item">
1848 <a href="../../../migration/wsc30/package/" class="md-nav__link">
1849 Package Components
1850 </a>
1851 </li>
1852
1853
1854
1855 </ul>
1856 </nav>
1857 </li>
1858
1859
1860
1861
1862
1863
1864
1865
1866 <li class="md-nav__item md-nav__item--nested">
1867
1868
1869 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1870
1871 <label class="md-nav__link" for="__nav_6_5">
1872 Migrating from WCF 2.1
1873 <span class="md-nav__icon md-icon"></span>
1874 </label>
1875 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1876 <label class="md-nav__title" for="__nav_6_5">
1877 <span class="md-nav__icon md-icon"></span>
1878 Migrating from WCF 2.1
1879 </label>
1880 <ul class="md-nav__list" data-md-scrollfix>
1881
1882
1883
1884
1885
1886 <li class="md-nav__item">
1887 <a href="../../../migration/wcf21/php/" class="md-nav__link">
1888 PHP API
1889 </a>
1890 </li>
1891
1892
1893
1894
1895
1896
1897
1898 <li class="md-nav__item">
1899 <a href="../../../migration/wcf21/templates/" class="md-nav__link">
1900 Templates
1901 </a>
1902 </li>
1903
1904
1905
1906
1907
1908
1909
1910 <li class="md-nav__item">
1911 <a href="../../../migration/wcf21/css/" class="md-nav__link">
1912 CSS
1913 </a>
1914 </li>
1915
1916
1917
1918
1919
1920
1921
1922 <li class="md-nav__item">
1923 <a href="../../../migration/wcf21/package/" class="md-nav__link">
1924 Package Components
1925 </a>
1926 </li>
1927
1928
1929
1930 </ul>
1931 </nav>
1932 </li>
1933
1934
1935
1936 </ul>
1937 </nav>
1938 </li>
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950 <li class="md-nav__item md-nav__item--nested">
1951
1952
1953 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1954
1955 <label class="md-nav__link" for="__nav_7">
1956 Tutorials
1957 <span class="md-nav__icon md-icon"></span>
1958 </label>
1959 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1960 <label class="md-nav__title" for="__nav_7">
1961 <span class="md-nav__icon md-icon"></span>
1962 Tutorials
1963 </label>
1964 <ul class="md-nav__list" data-md-scrollfix>
1965
1966
1967
1968
1969
1970
1971 <li class="md-nav__item md-nav__item--nested">
1972
1973
1974 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1975
1976 <label class="md-nav__link" for="__nav_7_1">
1977 Tutorial Series
1978 <span class="md-nav__icon md-icon"></span>
1979 </label>
1980 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1981 <label class="md-nav__title" for="__nav_7_1">
1982 <span class="md-nav__icon md-icon"></span>
1983 Tutorial Series
1984 </label>
1985 <ul class="md-nav__list" data-md-scrollfix>
1986
1987
1988
1989
1990
1991 <li class="md-nav__item">
1992 <a href="../../../tutorial/series/overview/" class="md-nav__link">
1993 Overview
1994 </a>
1995 </li>
1996
1997
1998
1999
2000
2001
2002
2003 <li class="md-nav__item">
2004 <a href="../../../tutorial/series/part_1/" class="md-nav__link">
2005 Part 1
2006 </a>
2007 </li>
2008
2009
2010
2011
2012
2013
2014
2015 <li class="md-nav__item">
2016 <a href="../../../tutorial/series/part_2/" class="md-nav__link">
2017 Part 2
2018 </a>
2019 </li>
2020
2021
2022
2023
2024
2025
2026
2027 <li class="md-nav__item">
2028 <a href="../../../tutorial/series/part_3/" class="md-nav__link">
2029 Part 3
2030 </a>
2031 </li>
2032
2033
2034
41eda543
WG
2035
2036
2037
2038
2039 <li class="md-nav__item">
2040 <a href="../../../tutorial/series/part_4/" class="md-nav__link">
2041 Part 4
2042 </a>
2043 </li>
2044
2045
2046
716a4ab6
WG
2047
2048
2049
2050
2051 <li class="md-nav__item">
2052 <a href="../../../tutorial/series/part_5/" class="md-nav__link">
2053 Part 5
2054 </a>
2055 </li>
2056
2057
2058
45ca63d0
TD
2059 </ul>
2060 </nav>
2061 </li>
2062
2063
2064
2065 </ul>
2066 </nav>
2067 </li>
2068
2069
2070
2071 </ul>
2072</nav>
2073 </div>
2074 </div>
2075 </div>
2076
2077
2078
2079 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
2080 <div class="md-sidebar__scrollwrap">
2081 <div class="md-sidebar__inner">
2082
2083<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
2084
2085
a4835aa6 2086
45ca63d0
TD
2087
2088
2089
2090 <label class="md-nav__title" for="__toc">
2091 <span class="md-nav__icon md-icon"></span>
2092 Table of contents
2093 </label>
2094 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2095
2096 <li class="md-nav__item">
2097 <a href="#abstractpackageinstallationplugin" class="md-nav__link">
2098 AbstractPackageInstallationPlugin
2099 </a>
2100
2101 <nav class="md-nav" aria-label="AbstractPackageInstallationPlugin">
2102 <ul class="md-nav__list">
2103
2104 <li class="md-nav__item">
2105 <a href="#class-members" class="md-nav__link">
2106 Class Members
2107 </a>
2108
2109 <nav class="md-nav" aria-label="Class Members">
2110 <ul class="md-nav__list">
2111
2112 <li class="md-nav__item">
2113 <a href="#installation" class="md-nav__link">
2114 $installation
2115 </a>
2116
2117</li>
2118
2119 <li class="md-nav__item">
2120 <a href="#application" class="md-nav__link">
2121 $application
2122 </a>
2123
2124</li>
2125
2126 </ul>
2127 </nav>
2128
2129</li>
2130
2131 </ul>
2132 </nav>
2133
2134</li>
2135
2136 <li class="md-nav__item">
2137 <a href="#abstractxmlpackageinstallationplugin" class="md-nav__link">
2138 AbstractXMLPackageInstallationPlugin
2139 </a>
2140
2141 <nav class="md-nav" aria-label="AbstractXMLPackageInstallationPlugin">
2142 <ul class="md-nav__list">
2143
2144 <li class="md-nav__item">
2145 <a href="#class-members_1" class="md-nav__link">
2146 Class Members
2147 </a>
2148
2149 <nav class="md-nav" aria-label="Class Members">
2150 <ul class="md-nav__list">
2151
2152 <li class="md-nav__item">
2153 <a href="#classname" class="md-nav__link">
2154 $className
2155 </a>
2156
2157</li>
2158
2159 <li class="md-nav__item">
2160 <a href="#tagname" class="md-nav__link">
2161 $tagName
2162 </a>
2163
2164</li>
2165
2166 <li class="md-nav__item">
2167 <a href="#prepareimportarray-data" class="md-nav__link">
2168 prepareImport(array $data)
2169 </a>
2170
2171</li>
2172
2173 <li class="md-nav__item">
2174 <a href="#validateimportarray-data" class="md-nav__link">
2175 validateImport(array $data)
2176 </a>
2177
2178</li>
2179
2180 <li class="md-nav__item">
2181 <a href="#findexistingitemarray-data" class="md-nav__link">
2182 findExistingItem(array $data)
2183 </a>
2184
2185</li>
2186
2187 <li class="md-nav__item">
2188 <a href="#253-example" class="md-nav__link">
2189 2.5.3. Example
2190 </a>
2191
2192</li>
2193
2194 <li class="md-nav__item">
2195 <a href="#handledeletearray-items" class="md-nav__link">
2196 handleDelete(array $items)
2197 </a>
2198
2199</li>
2200
2201 <li class="md-nav__item">
2202 <a href="#postimport" class="md-nav__link">
2203 postImport()
2204 </a>
2205
2206</li>
2207
2208 </ul>
2209 </nav>
2210
2211</li>
2212
2213 </ul>
2214 </nav>
2215
2216</li>
2217
2218 <li class="md-nav__item">
2219 <a href="#abstractoptionpackageinstallationplugin" class="md-nav__link">
2220 AbstractOptionPackageInstallationPlugin
2221 </a>
2222
2223 <nav class="md-nav" aria-label="AbstractOptionPackageInstallationPlugin">
2224 <ul class="md-nav__list">
2225
2226 <li class="md-nav__item">
2227 <a href="#differences-to-abstractxmlpackageinstallationplugin" class="md-nav__link">
2228 Differences to AbstractXMLPackageInstallationPlugin
2229 </a>
2230
2231 <nav class="md-nav" aria-label="Differences to AbstractXMLPackageInstallationPlugin">
2232 <ul class="md-nav__list">
2233
2234 <li class="md-nav__item">
2235 <a href="#reservedtags" class="md-nav__link">
2236 $reservedTags
2237 </a>
2238
2239</li>
2240
2241 </ul>
2242 </nav>
2243
2244</li>
2245
2246 </ul>
2247 </nav>
2248
2249</li>
2250
2251 </ul>
2252
2253</nav>
2254 </div>
2255 </div>
2256 </div>
2257
2258
2259 <div class="md-content" data-md-component="content">
2260 <article class="md-content__inner md-typeset">
2261
2262
9b8bddda 2263 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/api/package_installation_plugins.md" title="Edit this page" class="md-content__button md-icon">
7124f4cb
WG
2264 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
2265 </a>
2266
45ca63d0
TD
2267
2268 <h1 id="package-installation-plugins">Package Installation Plugins<a class="headerlink" href="#package-installation-plugins" title="Permanent link">#</a></h1>
2269<p>A package installation plugin (PIP) defines the behavior to handle a specific <a href="../../../package/package-xml/#instruction">instruction</a> during package installation, update or uninstallation.</p>
2270<h2 id="abstractpackageinstallationplugin"><code>AbstractPackageInstallationPlugin</code><a class="headerlink" href="#abstractpackageinstallationplugin" title="Permanent link">#</a></h2>
2271<p>Any package installation plugin has to implement the <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/package/plugin/IPackageInstallationPlugin.class.php">IPackageInstallationPlugin</a> interface.
2272It is recommended however, to extend the abstract implementation <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/package/plugin/AbstractPackageInstallationPlugin.class.php">AbstractPackageInstallationPlugin</a> of this interface instead of directly implementing the interface.
2273The abstract implementation will always provide sane methods in case of any API changes.</p>
2274<h3 id="class-members">Class Members<a class="headerlink" href="#class-members" title="Permanent link">#</a></h3>
2275<p>Package Installation Plugins have a few notable class members easing your work:</p>
2276<h4 id="installation"><code>$installation</code><a class="headerlink" href="#installation" title="Permanent link">#</a></h4>
2277<p>This member contains an instance of <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php">PackageInstallationDispatcher</a> which provides you with all meta data related to the current package being processed.
2278The most common usage is the retrieval of the package ID via <code>$this-&gt;installation-&gt;getPackageID()</code>.</p>
2279<h4 id="application"><code>$application</code><a class="headerlink" href="#application" title="Permanent link">#</a></h4>
2280<p>Represents the abbreviation of the target application, e.g. <code>wbb</code> (default value: <code>wcf</code>), used for the name of database table in which the installed data is stored.</p>
2281<h2 id="abstractxmlpackageinstallationplugin"><code>AbstractXMLPackageInstallationPlugin</code><a class="headerlink" href="#abstractxmlpackageinstallationplugin" title="Permanent link">#</a></h2>
2282<p><a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/package/plugin/AbstractPackageInstallationPlugin.class.php">AbstractPackageInstallationPlugin</a> is the default implementation for all package installation plugins based upon a single XML document.
2283It handles the evaluation of the document and provide you an object-orientated approach to handle its data.</p>
2284<h3 id="class-members_1">Class Members<a class="headerlink" href="#class-members_1" title="Permanent link">#</a></h3>
2285<h4 id="classname"><code>$className</code><a class="headerlink" href="#classname" title="Permanent link">#</a></h4>
2286<p>Value must be the qualified name of a class deriving from <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/data/DatabaseObjectEditor.class.php">DatabaseObjectEditor</a> which is used to create and update objects.</p>
2287<h4 id="tagname"><code>$tagName</code><a class="headerlink" href="#tagname" title="Permanent link">#</a></h4>
2288<p>Specifies the tag name within a <code>&lt;import&gt;</code> or <code>&lt;delete&gt;</code> section of the XML document used for each installed object.</p>
2289<h4 id="prepareimportarray-data"><code>prepareImport(array $data)</code><a class="headerlink" href="#prepareimportarray-data" title="Permanent link">#</a></h4>
2290<p>The passed array <code>$data</code> contains the parsed value from each evaluated tag in the <code>&lt;import&gt;</code> section:</p>
2291<ul>
2292<li><code>$data['elements']</code> contains a list of tag names and their value.</li>
2293<li><code>$data['attributes']</code> contains a list of attributes present on the tag identified by <a href="#tagname">$tagName</a>.</li>
2294</ul>
2295<p>This method should return an one-dimensional array, where each key maps to the corresponding database column name (key names are case-sensitive).
2296It will be passed to either <code>DatabaseObjectEditor::create()</code> or <code>DatabaseObjectEditor::update()</code>.</p>
2297<p>Example:</p>
704cbc4a
WG
2298<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
2299<span class="normal">2</span>
2300<span class="normal">3</span>
2301<span class="normal">4</span>
2302<span class="normal">5</span>
2303<span class="normal">6</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
45ca63d0
TD
2304<span class="k">return</span> <span class="p">[</span>
2305 <span class="s1">&#39;environment&#39;</span> <span class="o">=&gt;</span> <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;elements&#39;</span><span class="p">][</span><span class="s1">&#39;environment&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">],</span>
2306 <span class="s1">&#39;eventName&#39;</span> <span class="o">=&gt;</span> <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;elements&#39;</span><span class="p">][</span><span class="s1">&#39;eventname&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">],</span>
2307 <span class="s1">&#39;name&#39;</span> <span class="o">=&gt;</span> <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;attributes&#39;</span><span class="p">][</span><span class="s1">&#39;name&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">]</span>
2308<span class="p">];</span>
2309</code></pre></div>
704cbc4a 2310</td></tr></table>
45ca63d0
TD
2311<h4 id="validateimportarray-data"><code>validateImport(array $data)</code><a class="headerlink" href="#validateimportarray-data" title="Permanent link">#</a></h4>
2312<p>The passed array <code>$data</code> equals the data returned by <a href="#prepareimportarray-data">prepareImport()</a>.
2313This method has no return value, instead you should throw an exception if the passed data is invalid.</p>
2314<h4 id="findexistingitemarray-data"><code>findExistingItem(array $data)</code><a class="headerlink" href="#findexistingitemarray-data" title="Permanent link">#</a></h4>
2315<p>The passed array <code>$data</code> equals the data returned by <a href="#prepareimportarray-data">prepareImport()</a>.
2316This method is expected to return an array with two keys:</p>
2317<ul>
2318<li><code>sql</code> contains the SQL query with placeholders.</li>
2319<li><code>parameters</code> contains an array with values used for the SQL query.</li>
2320</ul>
2321<h4 id="253-example">2.5.3. Example<a class="headerlink" href="#253-example" title="Permanent link">#</a></h4>
704cbc4a
WG
2322<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
2323<span class="normal"> 2</span>
2324<span class="normal"> 3</span>
2325<span class="normal"> 4</span>
2326<span class="normal"> 5</span>
2327<span class="normal"> 6</span>
2328<span class="normal"> 7</span>
2329<span class="normal"> 8</span>
2330<span class="normal"> 9</span>
2331<span class="normal">10</span>
2332<span class="normal">11</span>
2333<span class="normal">12</span>
2334<span class="normal">13</span>
2335<span class="normal">14</span>
2336<span class="normal">15</span>
2337<span class="normal">16</span>
2338<span class="normal">17</span>
2339<span class="normal">18</span>
2340<span class="normal">19</span>
2341<span class="normal">20</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
45ca63d0
TD
2342<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT *</span>
2343<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_&quot;</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">tableName</span><span class="o">.</span><span class="s2">&quot;</span>
2344<span class="s2"> WHERE packageID = ?</span>
2345<span class="s2"> AND name = ?</span>
2346<span class="s2"> AND templateName = ?</span>
2347<span class="s2"> AND eventName = ?</span>
2348<span class="s2"> AND environment = ?&quot;</span><span class="p">;</span>
2349<span class="nv">$parameters</span> <span class="o">=</span> <span class="p">[</span>
2350 <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">installation</span><span class="o">-&gt;</span><span class="na">getPackageID</span><span class="p">(),</span>
2351 <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">],</span>
2352 <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;templateName&#39;</span><span class="p">],</span>
2353 <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;eventName&#39;</span><span class="p">],</span>
2354 <span class="nv">$data</span><span class="p">[</span><span class="s1">&#39;environment&#39;</span><span class="p">]</span>
2355<span class="p">];</span>
2356
2357<span class="k">return</span> <span class="p">[</span>
2358 <span class="s1">&#39;sql&#39;</span> <span class="o">=&gt;</span> <span class="nv">$sql</span><span class="p">,</span>
2359 <span class="s1">&#39;parameters&#39;</span> <span class="o">=&gt;</span> <span class="nv">$parameters</span>
2360<span class="p">];</span>
2361</code></pre></div>
704cbc4a 2362</td></tr></table>
45ca63d0
TD
2363<h4 id="handledeletearray-items"><code>handleDelete(array $items)</code><a class="headerlink" href="#handledeletearray-items" title="Permanent link">#</a></h4>
2364<p>The passed array <code>$items</code> contains the original node data, similar to <a href="#prepareimportarray-data">prepareImport()</a>.
2365You should make use of this data to remove the matching element from database.</p>
2366<p>Example:
704cbc4a
WG
2367<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
2368<span class="normal"> 2</span>
2369<span class="normal"> 3</span>
2370<span class="normal"> 4</span>
2371<span class="normal"> 5</span>
2372<span class="normal"> 6</span>
2373<span class="normal"> 7</span>
2374<span class="normal"> 8</span>
2375<span class="normal"> 9</span>
2376<span class="normal">10</span>
2377<span class="normal">11</span>
2378<span class="normal">12</span>
2379<span class="normal">13</span>
2380<span class="normal">14</span>
2381<span class="normal">15</span>
2382<span class="normal">16</span>
2383<span class="normal">17</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
45ca63d0
TD
2384<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;DELETE FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_&quot;</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">tableName</span><span class="o">.</span><span class="s2">&quot;</span>
2385<span class="s2"> WHERE packageID = ?</span>
2386<span class="s2"> AND environment = ?</span>
2387<span class="s2"> AND eventName = ?</span>
2388<span class="s2"> AND name = ?</span>
2389<span class="s2"> AND templateName = ?&quot;</span><span class="p">;</span>
2390<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2391<span class="k">foreach</span> <span class="p">(</span><span class="nv">$items</span> <span class="k">as</span> <span class="nv">$item</span><span class="p">)</span> <span class="p">{</span>
2392 <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span>
2393 <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">installation</span><span class="o">-&gt;</span><span class="na">getPackageID</span><span class="p">(),</span>
2394 <span class="nv">$item</span><span class="p">[</span><span class="s1">&#39;elements&#39;</span><span class="p">][</span><span class="s1">&#39;environment&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">],</span>
2395 <span class="nv">$item</span><span class="p">[</span><span class="s1">&#39;elements&#39;</span><span class="p">][</span><span class="s1">&#39;eventname&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">],</span>
2396 <span class="nv">$item</span><span class="p">[</span><span class="s1">&#39;attributes&#39;</span><span class="p">][</span><span class="s1">&#39;name&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">],</span>
2397 <span class="nv">$item</span><span class="p">[</span><span class="s1">&#39;elements&#39;</span><span class="p">][</span><span class="s1">&#39;templatename&#39;</span><span class="o">.</span><span class="nx">md</span><span class="p">]</span>
2398 <span class="p">]);</span>
2399<span class="p">}</span>
704cbc4a
WG
2400</code></pre></div>
2401</td></tr></table></p>
45ca63d0
TD
2402<h4 id="postimport"><code>postImport()</code><a class="headerlink" href="#postimport" title="Permanent link">#</a></h4>
2403<p>Allows you to (optionally) run additionally actions after all elements were processed.</p>
2404<h2 id="abstractoptionpackageinstallationplugin"><code>AbstractOptionPackageInstallationPlugin</code><a class="headerlink" href="#abstractoptionpackageinstallationplugin" title="Permanent link">#</a></h2>
2405<p><a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/package/plugin/AbstractOptionPackageInstallationPlugin.class.php">AbstractOptionPackageInstallationPlugin</a> is an abstract implementation for options, used for:</p>
2406<ul>
2407<li>ACL Options</li>
2408<li>Options</li>
2409<li>User Options</li>
2410<li>User Group Options</li>
2411</ul>
2412<h3 id="differences-to-abstractxmlpackageinstallationplugin">Differences to <code>AbstractXMLPackageInstallationPlugin</code><a class="headerlink" href="#differences-to-abstractxmlpackageinstallationplugin" title="Permanent link">#</a></h3>
2413<h4 id="reservedtags"><code>$reservedTags</code><a class="headerlink" href="#reservedtags" title="Permanent link">#</a></h4>
2414<p><code>$reservedTags</code> is a list of reserved tag names so that any tag encountered but not listed here will be added to the database column <code>additionalData</code>.
2415This allows options to store arbitrary data which can be accessed but were not initially part of the PIP specifications.</p>
2416
4a5c32e1
WG
2417
2418
2419
2420<hr>
2421<div class="md-source-date">
2422 <small>
2423
2424 Last update: 2021-01-08
2425
2426 </small>
2427</div>
2428
2429
45ca63d0
TD
2430
2431
2432
2433
2434
2435
2436 </article>
2437 </div>
2438 </div>
fb962f09 2439
45ca63d0
TD
2440 </main>
2441
2442
2443<footer class="md-footer">
2444
2445 <nav class="md-footer__inner md-grid" aria-label="Footer">
2446
2447 <a href="../form_builder/dependencies/" class="md-footer__link md-footer__link--prev" rel="prev">
2448 <div class="md-footer__button md-icon">
2449 <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>
2450 </div>
2451 <div class="md-footer__title">
2452 <div class="md-ellipsis">
2453 <span class="md-footer__direction">
2454 Previous
2455 </span>
2456 Dependencies
2457 </div>
2458 </div>
2459 </a>
2460
2461
2462 <a href="../user_activity_points/" class="md-footer__link md-footer__link--next" rel="next">
2463 <div class="md-footer__title">
2464 <div class="md-ellipsis">
2465 <span class="md-footer__direction">
2466 Next
2467 </span>
2468 User Activity Points
2469 </div>
2470 </div>
2471 <div class="md-footer__button md-icon">
2472 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
2473 </div>
2474 </a>
2475
2476 </nav>
2477
2478 <div class="md-footer-meta md-typeset">
2479 <div class="md-footer-meta__inner md-grid">
2480 <div class="md-footer-copyright">
2481
2482 <div class="md-footer-copyright__highlight">
2483 Copyright © 2020 WoltLab GmbH
2484 </div>
2485
2486 Made with
2487 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2488 Material for MkDocs
2489 </a>
fb88dc6e 2490
45ca63d0
TD
2491 </div>
2492 <div class="md-footer-copyright">
2493 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2494 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2495</div>
2496 </div>
2497 </div>
2498</footer>
2499
2500 </div>
2501 <div class="md-dialog" data-md-component="dialog">
2502 <div class="md-dialog__inner md-typeset"></div>
2503 </div>
fb962f09 2504 <script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.fe42c31b.min.js", "version": {"provider": "mike"}}</script>
45ca63d0
TD
2505
2506
a4835aa6 2507 <script src="../../../assets/javascripts/bundle.4ea5477f.min.js"></script>
45ca63d0
TD
2508
2509
2510 </body>
2511</html>