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