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