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