MediaWiki master
SpecialPageFactory.php
Go to the documentation of this file.
1<?php
10
165use Wikimedia\DebugInfo\DebugInfoTrait;
166use Wikimedia\ObjectFactory\ObjectFactory;
168
191 use DebugInfoTrait;
192
196 private const CORE_LIST = [
197 // Maintenance Reports
198 'BrokenRedirects' => [
199 'class' => SpecialBrokenRedirects::class,
200 'services' => [
201 'ContentHandlerFactory',
202 'ConnectionProvider',
203 'LinkBatchFactory',
204 ]
205 ],
206 'Deadendpages' => [
207 'class' => SpecialDeadendPages::class,
208 'services' => [
209 'NamespaceInfo',
210 'ConnectionProvider',
211 'LinkBatchFactory',
212 'LanguageConverterFactory',
213 ]
214 ],
215 'DoubleRedirects' => [
216 'class' => SpecialDoubleRedirects::class,
217 'services' => [
218 'ContentHandlerFactory',
219 'LinkBatchFactory',
220 'ConnectionProvider',
221 ]
222 ],
223 'Longpages' => [
224 'class' => SpecialLongPages::class,
225 'services' => [
226 // Same as for Shortpages
227 'NamespaceInfo',
228 'ConnectionProvider',
229 'LinkBatchFactory',
230 ]
231 ],
232 'Ancientpages' => [
233 'class' => SpecialAncientPages::class,
234 'services' => [
235 'NamespaceInfo',
236 'ConnectionProvider',
237 'LinkBatchFactory',
238 'LanguageConverterFactory',
239 ]
240 ],
241 'Lonelypages' => [
242 'class' => SpecialLonelyPages::class,
243 'services' => [
244 'NamespaceInfo',
245 'ConnectionProvider',
246 'LinkBatchFactory',
247 'LanguageConverterFactory',
248 'LinksMigration',
249 ]
250 ],
251 'Fewestrevisions' => [
252 'class' => SpecialFewestRevisions::class,
253 'services' => [
254 // Same as for Mostrevisions
255 'NamespaceInfo',
256 'ConnectionProvider',
257 'LinkBatchFactory',
258 'LanguageConverterFactory',
259 ]
260 ],
261 'Withoutinterwiki' => [
262 'class' => SpecialWithoutInterwiki::class,
263 'services' => [
264 'NamespaceInfo',
265 'ConnectionProvider',
266 'LinkBatchFactory',
267 'LanguageConverterFactory',
268 ]
269 ],
270 'Protectedpages' => [
271 'class' => SpecialProtectedPages::class,
272 'services' => [
273 'LinkBatchFactory',
274 'ConnectionProvider',
275 'CommentStore',
276 'RowCommentFormatter',
277 'RestrictionStore',
278 ]
279 ],
280 'Protectedtitles' => [
281 'class' => SpecialProtectedTitles::class,
282 'services' => [
283 'LinkBatchFactory',
284 'ConnectionProvider',
285 ]
286 ],
287 'Shortpages' => [
288 'class' => SpecialShortPages::class,
289 'services' => [
290 // Same as for Longpages
291 'NamespaceInfo',
292 'ConnectionProvider',
293 'LinkBatchFactory',
294 ]
295 ],
296 'Uncategorizedcategories' => [
297 'class' => SpecialUncategorizedCategories::class,
298 'services' => [
299 // Same as for SpecialUncategorizedPages and SpecialUncategorizedTemplates
300 'NamespaceInfo',
301 'ConnectionProvider',
302 'LinkBatchFactory',
303 'LanguageConverterFactory',
304 ]
305 ],
306 'Uncategorizedimages' => [
307 'class' => SpecialUncategorizedImages::class,
308 'services' => [
309 'ConnectionProvider',
310 ]
311 ],
312 'Uncategorizedpages' => [
313 'class' => SpecialUncategorizedPages::class,
314 'services' => [
315 // Same as for SpecialUncategorizedCategories and SpecialUncategorizedTemplates
316 'NamespaceInfo',
317 'ConnectionProvider',
318 'LinkBatchFactory',
319 'LanguageConverterFactory',
320 ]
321 ],
322 'Uncategorizedtemplates' => [
323 'class' => SpecialUncategorizedTemplates::class,
324 'services' => [
325 // Same as for SpecialUncategorizedCategories and SpecialUncategorizedPages
326 'NamespaceInfo',
327 'ConnectionProvider',
328 'LinkBatchFactory',
329 'LanguageConverterFactory',
330 ]
331 ],
332 'Unusedcategories' => [
333 'class' => SpecialUnusedCategories::class,
334 'services' => [
335 'ConnectionProvider',
336 'LinkBatchFactory',
337 ]
338 ],
339 'Unusedimages' => [
340 'class' => SpecialUnusedImages::class,
341 'services' => [
342 'ConnectionProvider',
343 ]
344 ],
345 'Unusedtemplates' => [
346 'class' => SpecialUnusedTemplates::class,
347 'services' => [
348 'ConnectionProvider',
349 ]
350 ],
351 'Unwatchedpages' => [
352 'class' => SpecialUnwatchedPages::class,
353 'services' => [
354 'LinkBatchFactory',
355 'ConnectionProvider',
356 'LanguageConverterFactory',
357 ]
358 ],
359 'Wantedcategories' => [
360 'class' => SpecialWantedCategories::class,
361 'services' => [
362 'ConnectionProvider',
363 'LinkBatchFactory',
364 'LanguageConverterFactory',
365 ]
366 ],
367 'Wantedfiles' => [
368 'class' => SpecialWantedFiles::class,
369 'services' => [
370 'RepoGroup',
371 'ConnectionProvider',
372 'LinkBatchFactory',
373 ]
374 ],
375 'Wantedpages' => [
376 'class' => SpecialWantedPages::class,
377 'services' => [
378 'ConnectionProvider',
379 'LinkBatchFactory',
380 'LinksMigration',
381 ]
382 ],
383 'Wantedtemplates' => [
384 'class' => SpecialWantedTemplates::class,
385 'services' => [
386 'ConnectionProvider',
387 'LinkBatchFactory',
388 'LinksMigration',
389 ]
390 ],
391
392 // List of pages
393 'Allpages' => [
394 'class' => SpecialAllPages::class,
395 'services' => [
396 'ConnectionProvider',
397 'SearchEngineFactory',
398 'PageStore',
399 ]
400 ],
401 'Prefixindex' => [
402 'class' => SpecialPrefixIndex::class,
403 'services' => [
404 'ConnectionProvider',
405 'LinkCache',
406 ]
407 ],
408 'Categories' => [
409 'class' => SpecialCategories::class,
410 'services' => [
411 'LinkBatchFactory',
412 'ConnectionProvider',
413 ]
414 ],
415 'Listredirects' => [
416 'class' => SpecialListRedirects::class,
417 'services' => [
418 'LinkBatchFactory',
419 'ConnectionProvider',
420 'WikiPageFactory',
421 'RedirectLookup'
422 ]
423 ],
424 'PagesWithProp' => [
425 'class' => SpecialPagesWithProp::class,
426 'services' => [
427 'ConnectionProvider',
428 ]
429 ],
430 'TrackingCategories' => [
431 'class' => SpecialTrackingCategories::class,
432 'services' => [
433 'LinkBatchFactory',
434 'TrackingCategories',
435 ]
436 ],
437
438 // Authentication
439 'Userlogin' => [
440 'class' => SpecialUserLogin::class,
441 'services' => [
442 'AuthManager',
443 'UserIdentityUtils',
444 ]
445 ],
446 'Userlogout' => [
447 'class' => SpecialUserLogout::class,
448 'services' => [
449 'TempUserConfig',
450 ],
451 ],
452 'CreateAccount' => [
453 'class' => SpecialCreateAccount::class,
454 'services' => [
455 'AuthManager',
456 'FormatterFactory',
457 'UserIdentityUtils',
458 ]
459 ],
460 'LinkAccounts' => [
461 'class' => SpecialLinkAccounts::class,
462 'services' => [
463 'AuthManager',
464 ]
465 ],
466 'UnlinkAccounts' => [
467 'class' => SpecialUnlinkAccounts::class,
468 'services' => [
469 'AuthManager',
470 'SessionManager',
471 ]
472 ],
473 'ChangeCredentials' => [
474 'class' => SpecialChangeCredentials::class,
475 'services' => [
476 'AuthManager',
477 'SessionManager',
478 ]
479 ],
480 'RemoveCredentials' => [
481 'class' => SpecialRemoveCredentials::class,
482 'services' => [
483 'AuthManager',
484 'SessionManager',
485 ]
486 ],
487 'AuthenticationPopupSuccess' => [
488 'class' => SpecialAuthenticationPopupSuccess::class,
489 'services' => [
490 'SkinFactory',
491 ]
492 ],
493
494 // Users and rights
495 'Activeusers' => [
496 'class' => SpecialActiveUsers::class,
497 'services' => [
498 'LinkBatchFactory',
499 'ConnectionProvider',
500 'UserGroupManager',
501 'UserIdentityLookup',
502 'HideUserUtils',
503 'TempUserConfig',
504 'RecentChangeLookup',
505 ]
506 ],
507 'Block' => [
508 'class' => SpecialBlock::class,
509 'services' => [
510 'BlockTargetFactory',
511 'BlockPermissionCheckerFactory',
512 'BlockUserFactory',
513 'DatabaseBlockStore',
514 'UserNameUtils',
515 'UserNamePrefixSearch',
516 'BlockActionInfo',
517 'TitleFormatter',
518 'NamespaceInfo',
519 'WatchlistManager'
520 ]
521 ],
522 'Unblock' => [
523 'class' => SpecialUnblock::class,
524 'services' => [
525 'UnblockUserFactory',
526 'BlockTargetFactory',
527 'DatabaseBlockStore',
528 'UserNameUtils',
529 'UserNamePrefixSearch',
530 'WatchlistManager',
531 ]
532 ],
533 'BlockList' => [
534 'class' => SpecialBlockList::class,
535 'services' => [
536 'LinkBatchFactory',
537 'DatabaseBlockStore',
538 'BlockRestrictionStore',
539 'ConnectionProvider',
540 'CommentStore',
541 'BlockTargetFactory',
542 'HideUserUtils',
543 'BlockActionInfo',
544 'RowCommentFormatter',
545 'TempUserConfig',
546 ],
547 ],
548 'AutoblockList' => [
549 'class' => SpecialAutoblockList::class,
550 'services' => [
551 'LinkBatchFactory',
552 'BlockRestrictionStore',
553 'ConnectionProvider',
554 'CommentStore',
555 'BlockTargetFactory',
556 'HideUserUtils',
557 'BlockActionInfo',
558 'RowCommentFormatter',
559 ],
560 ],
561 'ChangePassword' => [
562 'class' => SpecialChangePassword::class,
563 ],
564 'BotPasswords' => [
565 'class' => SpecialBotPasswords::class,
566 'services' => [
567 'PasswordFactory',
568 'AuthManager',
569 'CentralIdLookup',
570 'GrantsInfo',
571 'GrantsLocalization',
572 ]
573 ],
574 'PasswordReset' => [
575 'class' => SpecialPasswordReset::class,
576 'services' => [
577 'PasswordReset'
578 ]
579 ],
580 'DeletedContributions' => [
581 'class' => SpecialDeletedContributions::class,
582 'services' => [
583 'PermissionManager',
584 'ConnectionProvider',
585 'RevisionStore',
586 'NamespaceInfo',
587 'UserNameUtils',
588 'UserNamePrefixSearch',
589 'UserOptionsLookup',
590 'CommentFormatter',
591 'LinkBatchFactory',
592 'UserFactory',
593 'UserIdentityLookup',
594 'DatabaseBlockStore',
595 'UserGroupAssignmentService',
596 'TempUserConfig',
597 ]
598 ],
599 'Preferences' => [
600 'class' => SpecialPreferences::class,
601 'services' => [
602 'PreferencesFactory',
603 'UserOptionsManager',
604 ]
605 ],
606 'ResetTokens' => [
607 'class' => SpecialResetTokens::class,
608 ],
609 'Contributions' => [
610 'class' => SpecialContributions::class,
611 'services' => [
612 'LinkBatchFactory',
613 'PermissionManager',
614 'ConnectionProvider',
615 'RevisionStore',
616 'NamespaceInfo',
617 'UserNameUtils',
618 'UserNamePrefixSearch',
619 'UserOptionsLookup',
620 'CommentFormatter',
621 'UserFactory',
622 'UserIdentityLookup',
623 'DatabaseBlockStore',
624 'UserGroupAssignmentService',
625 'TempUserConfig',
626 ]
627 ],
628 'Listgrouprights' => [
629 'class' => SpecialListGroupRights::class,
630 'services' => [
631 'NamespaceInfo',
632 'UserGroupManager',
633 'LanguageConverterFactory',
634 'GroupPermissionsLookup',
635 'RestrictedUserGroupConfigReader',
636 ]
637 ],
638 'Listgrants' => [
639 'class' => SpecialListGrants::class,
640 'services' => [
641 'GrantsLocalization',
642 ]
643 ],
644 'Listusers' => [
645 'class' => SpecialListUsers::class,
646 'services' => [
647 'LinkBatchFactory',
648 'ConnectionProvider',
649 'UserGroupManager',
650 'UserIdentityLookup',
651 'HideUserUtils',
652 'TempUserConfig',
653 ]
654 ],
655 'Listadmins' => [
656 'class' => SpecialListAdmins::class,
657 ],
658 'Listbots' => [
659 'class' => SpecialListBots::class,
660 ],
661 'Userrights' => [
662 'class' => SpecialUserRights::class,
663 'services' => [
664 'UserGroupManagerFactory',
665 'UserNameUtils',
666 'UserNamePrefixSearch',
667 'UserFactory',
668 'WatchlistManager',
669 'UserGroupAssignmentService',
670 'MultiFormatUserIdentityLookup',
671 'FormatterFactory',
672 ]
673 ],
674 'EditWatchlist' => [
675 'class' => SpecialEditWatchlist::class,
676 'services' => [
677 'WatchedItemStore',
678 'WatchlistLabelStore',
679 'TitleParser',
680 'GenderCache',
681 'LinkBatchFactory',
682 'NamespaceInfo',
683 'WikiPageFactory',
684 'WatchlistManager',
685 ]
686 ],
687 'PasswordPolicies' => [
688 'class' => SpecialPasswordPolicies::class,
689 'services' => [
690 'UserGroupManager',
691 ]
692 ],
693
694 // Recent changes and logs
695 'Newimages' => [
696 'class' => SpecialNewFiles::class,
697 'services' => [
698 'MimeAnalyzer',
699 'GroupPermissionsLookup',
700 'ConnectionProvider',
701 'LinkBatchFactory',
702 ]
703 ],
704 'Log' => [
705 'class' => SpecialLog::class,
706 'services' => [
707 'LinkBatchFactory',
708 'ConnectionProvider',
709 'ActorNormalization',
710 'UserIdentityLookup',
711 'UserNameUtils',
712 'LogFormatterFactory',
713 'TempUserConfig',
714 ]
715 ],
716 'Watchlist' => [
717 'class' => SpecialWatchlist::class,
718 'services' => [
719 'WatchedItemStore',
720 'WatchlistManager',
721 'UserOptionsLookup',
722 'UserIdentityUtils',
723 'TempUserConfig',
724 'RecentChangeFactory',
725 'ChangesListQueryFactory',
726 'WatchlistLabelStore',
727 'PermissionManager'
728 ]
729 ],
730 'WatchlistLabels' => [
731 'class' => SpecialWatchlistLabels::class,
732 'services' => [
733 'WatchlistLabelStore',
734 ]
735 ],
736 'Newpages' => [
737 'class' => SpecialNewPages::class,
738 'services' => [
739 'LinkBatchFactory',
740 'ContentHandlerFactory',
741 'GroupPermissionsLookup',
742 'RevisionLookup',
743 'NamespaceInfo',
744 'UserOptionsLookup',
745 'RowCommentFormatter',
746 'ChangeTagsStore',
747 'TempUserConfig',
748 'RecentChangeFactory',
749 'ChangeTagsFormatter',
750 ]
751 ],
752 'Recentchanges' => [
753 'class' => SpecialRecentChanges::class,
754 'services' => [
755 'WatchedItemStore',
756 'MessageParser',
757 'UserOptionsLookup',
758 'UserIdentityUtils',
759 'TempUserConfig',
760 'RecentChangeFactory',
761 'ChangesListQueryFactory',
762 'ChangeTagsFormatter',
763 ]
764 ],
765 'Recentchangeslinked' => [
766 'class' => SpecialRecentChangesLinked::class,
767 'services' => [
768 'WatchedItemStore',
769 'MessageParser',
770 'UserOptionsLookup',
771 'SearchEngineFactory',
772 'UserIdentityUtils',
773 'TempUserConfig',
774 'RecentChangeFactory',
775 'ChangesListQueryFactory',
776 'ChangeTagsFormatter',
777 ]
778 ],
779 'Tags' => [
780 'class' => SpecialTags::class,
781 'services' => [
782 'ChangeTagsStore',
783 'ChangeTagsFormatter',
784 ]
785 ],
786
787 // Media reports and uploads
788 'Listfiles' => [
789 'class' => SpecialListFiles::class,
790 'services' => [
791 'RepoGroup',
792 'ConnectionProvider',
793 'CommentStore',
794 'UserNameUtils',
795 'UserNamePrefixSearch',
796 'RowCommentFormatter',
797 'LinkBatchFactory',
798 ]
799 ],
800 'Filepath' => [
801 'class' => SpecialFilepath::class,
802 'services' => [
803 'SearchEngineFactory',
804 ]
805 ],
806 'MediaStatistics' => [
807 'class' => SpecialMediaStatistics::class,
808 'services' => [
809 'MimeAnalyzer',
810 'ConnectionProvider',
811 'LinkBatchFactory',
812 ]
813 ],
814 'MIMEsearch' => [
815 'class' => SpecialMIMESearch::class,
816 'services' => [
817 'ConnectionProvider',
818 'LinkBatchFactory',
819 'LanguageConverterFactory',
820 ]
821 ],
822 'FileDuplicateSearch' => [
823 'class' => SpecialFileDuplicateSearch::class,
824 'services' => [
825 'LinkBatchFactory',
826 'RepoGroup',
827 'SearchEngineFactory',
828 'LanguageConverterFactory',
829 ]
830 ],
831 'Upload' => [
832 'class' => SpecialUpload::class,
833 'services' => [
834 'RepoGroup',
835 'UserOptionsLookup',
836 'NamespaceInfo',
837 'WatchlistManager',
838 'WikiPageFactory',
839 ]
840 ],
841 'UploadStash' => [
842 'class' => SpecialUploadStash::class,
843 'services' => [
844 'RepoGroup',
845 'HttpRequestFactory',
846 'UrlUtils',
847 'ConnectionProvider',
848 ]
849 ],
850 'ListDuplicatedFiles' => [
851 'class' => SpecialListDuplicatedFiles::class,
852 'services' => [
853 'ConnectionProvider',
854 'LinkBatchFactory',
855 ]
856 ],
857
858 // Data and tools
859 'ApiSandbox' => [
860 'class' => SpecialApiSandbox::class,
861 ],
862 'Interwiki' => [
863 'class' => SpecialInterwiki::class,
864 'services' => [
865 'ContentLanguage',
866 'InterwikiLookup',
867 'LanguageNameUtils',
868 'UrlUtils',
869 'ConnectionProvider',
870 ]
871 ],
872 'Statistics' => [
873 'class' => SpecialStatistics::class,
874 'services' => [
875 'UserGroupManager',
876 ]
877 ],
878 'Allmessages' => [
879 'class' => SpecialAllMessages::class,
880 'services' => [
881 'LanguageFactory',
882 'LanguageNameUtils',
883 'LocalisationCache',
884 'ConnectionProvider',
885 ]
886 ],
887 'Version' => [
888 'class' => SpecialVersion::class,
889 'services' => [
890 'ParserFactory',
891 'UrlUtils',
892 'ConnectionProvider',
893 ]
894 ],
895 'Lockdb' => [
896 'class' => SpecialLockdb::class,
897 ],
898 'Unlockdb' => [
899 'class' => SpecialUnlockdb::class,
900 ],
901 'NamespaceInfo' => [
902 'class' => SpecialNamespaceInfo::class,
903 'services' => [
904 'NamespaceInfo',
905 'ContentLanguage'
906 ],
907 ],
908
909 // Redirecting special pages
910 'LinkSearch' => [
911 'class' => SpecialLinkSearch::class,
912 'services' => [
913 'ConnectionProvider',
914 'LinkBatchFactory',
915 'UrlUtils',
916 ]
917 ],
918 'Randompage' => [
919 'class' => SpecialRandomPage::class,
920 'services' => [
921 'ConnectionProvider',
922 'NamespaceInfo',
923 ]
924 ],
925 'RandomInCategory' => [
926 'class' => SpecialRandomInCategory::class,
927 'services' => [
928 'ConnectionProvider',
929 ]
930 ],
931 'Randomredirect' => [
932 'class' => SpecialRandomRedirect::class,
933 'services' => [
934 'ConnectionProvider',
935 'NamespaceInfo',
936 ]
937 ],
938 'Randomrootpage' => [
939 'class' => SpecialRandomRootPage::class,
940 'services' => [
941 'ConnectionProvider',
942 'NamespaceInfo',
943 ]
944 ],
945 'GoToInterwiki' => [
946 'class' => SpecialGoToInterwiki::class,
947 ],
948
949 // High use pages
950 'Mostlinkedcategories' => [
951 'class' => SpecialMostLinkedCategories::class,
952 'services' => [
953 'ConnectionProvider',
954 'LinkBatchFactory',
955 'LanguageConverterFactory',
956 ]
957 ],
958 'Mostimages' => [
959 'class' => SpecialMostImages::class,
960 'services' => [
961 'ConnectionProvider',
962 'LanguageConverterFactory',
963 ]
964 ],
965 'Mostinterwikis' => [
966 'class' => SpecialMostInterwikis::class,
967 'services' => [
968 'NamespaceInfo',
969 'ConnectionProvider',
970 'LinkBatchFactory',
971 ]
972 ],
973 'Mostlinked' => [
974 'class' => SpecialMostLinked::class,
975 'services' => [
976 'ConnectionProvider',
977 'LinkBatchFactory',
978 'LinksMigration',
979 ]
980 ],
981 'Mostlinkedtemplates' => [
982 'class' => SpecialMostLinkedTemplates::class,
983 'services' => [
984 'ConnectionProvider',
985 'LinkBatchFactory',
986 'LinksMigration',
987 ]
988 ],
989 'Mostcategories' => [
990 'class' => SpecialMostCategories::class,
991 'services' => [
992 'NamespaceInfo',
993 'ConnectionProvider',
994 'LinkBatchFactory',
995 ]
996 ],
997 'Mostrevisions' => [
998 'class' => SpecialMostRevisions::class,
999 'services' => [
1000 // Same as for Fewestrevisions
1001 'NamespaceInfo',
1002 'ConnectionProvider',
1003 'LinkBatchFactory',
1004 'LanguageConverterFactory',
1005 ]
1006 ],
1007
1008 // Page tools
1009 'ComparePages' => [
1010 'class' => SpecialComparePages::class,
1011 'services' => [
1012 'RevisionLookup',
1013 'ContentHandlerFactory',
1014 ]
1015 ],
1016 'Export' => [
1017 'class' => SpecialExport::class,
1018 'services' => [
1019 'ConnectionProvider',
1020 'WikiExporterFactory',
1021 'TitleFormatter',
1022 'LinksMigration',
1023 ]
1024 ],
1025 'Import' => [
1026 'class' => SpecialImport::class,
1027 'services' => [
1028 'WikiImporterFactory',
1029 ]
1030 ],
1031 'Undelete' => [
1032 'class' => SpecialUndelete::class,
1033 'services' => [
1034 'PermissionManager',
1035 'RevisionStore',
1036 'RevisionRenderer',
1037 'ContentHandlerFactory',
1038 'ChangeTagDefStore',
1039 'LinkBatchFactory',
1040 'RepoGroup',
1041 'ConnectionProvider',
1042 'UserOptionsLookup',
1043 'WikiPageFactory',
1044 'SearchEngineFactory',
1045 'UndeletePageFactory',
1046 'ArchivedRevisionLookup',
1047 'CommentFormatter',
1048 'WatchlistManager',
1049 'ChangeTagsFormatter',
1050 ],
1051 ],
1052 'Whatlinkshere' => [
1053 'class' => SpecialWhatLinksHere::class,
1054 'services' => [
1055 'ConnectionProvider',
1056 'LinkBatchFactory',
1057 'ContentHandlerFactory',
1058 'SearchEngineFactory',
1059 'NamespaceInfo',
1060 'TitleFactory',
1061 'LinksMigration',
1062 ]
1063 ],
1064 'MergeHistory' => [
1065 'class' => SpecialMergeHistory::class,
1066 'services' => [
1067 'MergeHistoryFactory',
1068 'LinkBatchFactory',
1069 'ConnectionProvider',
1070 'RevisionStore',
1071 'CommentFormatter',
1072 'ChangeTagsStore',
1073 'ChangeTagsFormatter',
1074 ]
1075 ],
1076 'ExpandTemplates' => [
1077 'class' => SpecialExpandTemplates::class,
1078 'services' => [
1079 'ParserFactory',
1080 'UserOptionsLookup',
1081 'Tidy',
1082 ],
1083 ],
1084 'ChangeContentModel' => [
1085 'class' => SpecialChangeContentModel::class,
1086 'services' => [
1087 'ContentHandlerFactory',
1088 'ContentModelChangeFactory',
1089 'SpamChecker',
1090 'RevisionLookup',
1091 'WikiPageFactory',
1092 'SearchEngineFactory',
1093 'CollationFactory',
1094 'PermissionManager',
1095 ],
1096 ],
1097
1098 // Other
1099 'Booksources' => [
1100 'class' => SpecialBookSources::class,
1101 'services' => [
1102 'RevisionLookup',
1103 'TitleFactory',
1104 ]
1105 ],
1106
1107 // Unlisted / redirects
1108 'ApiHelp' => [
1109 'class' => SpecialApiHelp::class,
1110 'services' => [
1111 'UrlUtils',
1112 ]
1113 ],
1114 'Blankpage' => [
1115 'class' => SpecialBlankpage::class,
1116 ],
1117 'DeletePage' => [
1118 'class' => SpecialDeletePage::class,
1119 'services' => [
1120 'SearchEngineFactory',
1121 ]
1122 ],
1123 'Diff' => [
1124 'class' => SpecialDiff::class,
1125 ],
1126 'EditPage' => [
1127 'class' => SpecialEditPage::class,
1128 'services' => [
1129 'SearchEngineFactory',
1130 ]
1131 ],
1132 'EditTags' => [
1133 'class' => SpecialEditTags::class,
1134 'services' => [
1135 'PermissionManager',
1136 'ChangeTagsStore',
1137 ],
1138 ],
1139 'Emailuser' => [
1140 'class' => SpecialEmailUser::class,
1141 'services' => [
1142 'UserNameUtils',
1143 'UserNamePrefixSearch',
1144 'UserOptionsLookup',
1145 'EmailUserFactory',
1146 'UserFactory',
1147 ]
1148 ],
1149 'Movepage' => [
1150 'class' => SpecialMovePage::class,
1151 'services' => [
1152 'MovePageFactory',
1153 'PermissionManager',
1154 'UserOptionsLookup',
1155 'ConnectionProvider',
1156 'ContentHandlerFactory',
1157 'NamespaceInfo',
1158 'LinkBatchFactory',
1159 'RepoGroup',
1160 'WikiPageFactory',
1161 'SearchEngineFactory',
1162 'WatchlistManager',
1163 'WatchedItemStore',
1164 'RestrictionStore',
1165 'TitleFactory',
1166 'DeletePageFactory',
1167 'RedirectLookup',
1168 'TitleFormatter'
1169 ]
1170 ],
1171 'Mycontributions' => [
1172 'class' => SpecialMycontributions::class,
1173 'services' => [
1174 'TempUserConfig',
1175 ],
1176 ],
1177 'MyLanguage' => [
1178 'class' => SpecialMyLanguage::class,
1179 'services' => [
1180 'LanguageNameUtils',
1181 'RedirectLookup'
1182 ]
1183 ],
1184 'Mylog' => [
1185 'class' => SpecialMylog::class,
1186 'services' => [
1187 'TempUserConfig',
1188 ],
1189 ],
1190 'Mypage' => [
1191 'class' => SpecialMypage::class,
1192 'services' => [
1193 'TempUserConfig',
1194 ],
1195 ],
1196 'Mytalk' => [
1197 'class' => SpecialMytalk::class,
1198 'services' => [
1199 'TempUserConfig',
1200 'TempUserCreator',
1201 'AuthManager',
1202 ],
1203 ],
1204 'PageHistory' => [
1205 'class' => SpecialPageHistory::class,
1206 'services' => [
1207 'SearchEngineFactory',
1208 ]
1209 ],
1210 'PageInfo' => [
1211 'class' => SpecialPageInfo::class,
1212 'services' => [
1213 'SearchEngineFactory',
1214 ]
1215 ],
1216 'ProtectPage' => [
1217 'class' => SpecialProtectPage::class,
1218 'services' => [
1219 'SearchEngineFactory',
1220 ]
1221 ],
1222 'Purge' => [
1223 'class' => SpecialPurge::class,
1224 'services' => [
1225 'SearchEngineFactory',
1226 ]
1227 ],
1228 'Myuploads' => [
1229 'class' => SpecialMyuploads::class,
1230 'services' => [
1231 'TempUserConfig',
1232 ],
1233 ],
1234 'AllMyUploads' => [
1235 'class' => SpecialAllMyUploads::class,
1236 'services' => [
1237 'TempUserConfig',
1238 ],
1239 ],
1240 'NewSection' => [
1241 'class' => SpecialNewSection::class,
1242 'services' => [
1243 'SearchEngineFactory',
1244 ]
1245 ],
1246 'PermanentLink' => [
1247 'class' => SpecialPermanentLink::class,
1248 ],
1249 'Redirect' => [
1250 'class' => SpecialRedirect::class,
1251 'services' => [
1252 'RepoGroup',
1253 'UserFactory',
1254 ]
1255 ],
1256 'Renameuser' => [
1257 'class' => SpecialRenameUser::class,
1258 'services' => [
1259 'ConnectionProvider',
1260 'PermissionManager',
1261 'TitleFactory',
1262 'UserFactory',
1263 'UserNamePrefixSearch',
1264 'RenameUserFactory',
1265 'FormatterFactory',
1266 ]
1267 ],
1268 'Revisiondelete' => [
1269 'class' => SpecialRevisionDelete::class,
1270 'services' => [
1271 'PermissionManager',
1272 'RepoGroup',
1273 ],
1274 ],
1275 'RunJobs' => [
1276 'class' => SpecialRunJobs::class,
1277 'services' => [
1278 'JobRunner',
1279 'ReadOnlyMode',
1280 ]
1281 ],
1282 'Specialpages' => [
1283 'class' => SpecialSpecialPages::class,
1284 ],
1285 'PageData' => [
1286 'class' => SpecialPageData::class,
1287 ],
1288 'Contribute' => [
1289 'class' => SpecialContribute::class,
1290 ],
1291 'TalkPage' => [
1292 'class' => SpecialTalkPage::class,
1293 'services' => [
1294 'TitleParser',
1295 ],
1296 ],
1297 ];
1298
1300 private $list;
1301
1303 private $aliases;
1304
1306 private readonly ObjectFactory $objectFactory;
1307
1309 private readonly HookContainer $hookContainer;
1310
1312 private readonly HookRunner $hookRunner;
1313
1317 public const CONSTRUCTOR_OPTIONS = [
1325 ];
1326
1327 public function __construct(
1328 private readonly ServiceOptions $options,
1329 private readonly Language $contLang,
1330 ObjectFactory $objectFactory,
1331 private readonly TitleFactory $titleFactory,
1332 HookContainer $hookContainer,
1333 private readonly StatsFactory $statsFactory,
1334 ) {
1335 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
1336 $this->objectFactory = $objectFactory;
1337 $this->hookContainer = $hookContainer;
1338 $this->hookRunner = new HookRunner( $hookContainer );
1339 }
1340
1348 public function getNames(): array {
1349 return array_keys( $this->getPageList() );
1350 }
1351
1357 private function getPageList(): array {
1358 if ( !is_array( $this->list ) ) {
1359 $this->list = self::CORE_LIST;
1360
1361 if ( !$this->options->get( MainConfigNames::DisableInternalSearch ) ) {
1362 $this->list['Search'] = [
1363 'class' => SpecialSearch::class,
1364 'services' => [
1365 'SearchEngineConfig',
1366 'SearchEngineFactory',
1367 'NamespaceInfo',
1368 'ContentHandlerFactory',
1369 'InterwikiLookup',
1370 'ReadOnlyMode',
1371 'UserOptionsManager',
1372 'LanguageConverterFactory',
1373 'RepoGroup',
1374 'SearchResultThumbnailProvider',
1375 'TitleMatcher',
1376 ]
1377 ];
1378 }
1379
1380 if ( $this->options->get( MainConfigNames::EmailAuthentication ) ) {
1381 $this->list['Confirmemail'] = [
1382 'class' => SpecialConfirmEmail::class,
1383 'services' => [
1384 'UserFactory',
1385 ]
1386 ];
1387 $this->list['Invalidateemail'] = [
1388 'class' => SpecialEmailInvalidate::class,
1389 'services' => [
1390 'UserFactory',
1391 ]
1392 ];
1393 }
1394
1395 if ( $this->options->get( MainConfigNames::EnableEmail ) ) {
1396 $this->list['ChangeEmail'] = [
1397 'class' => SpecialChangeEmail::class,
1398 'services' => [
1399 'AuthManager',
1400 ],
1401 ];
1402 }
1403
1404 if ( $this->options->get( MainConfigNames::EnableJavaScriptTest ) ) {
1405 $this->list['JavaScriptTest'] = [
1406 'class' => SpecialJavaScriptTest::class
1407 ];
1408 }
1409
1410 $this->list['Mute'] = [
1411 'class' => SpecialMute::class,
1412 'services' => [
1413 'CentralIdLookup',
1414 'UserOptionsManager',
1415 'UserIdentityLookup',
1416 'UserIdentityUtils',
1417 ]
1418 ];
1419
1420 if ( $this->options->get( MainConfigNames::PageLanguageUseDB ) ) {
1421 $this->list['PageLanguage'] = [
1422 'class' => SpecialPageLanguage::class,
1423 'services' => [
1424 'ContentHandlerFactory',
1425 'LanguageNameUtils',
1426 'ConnectionProvider',
1427 'SearchEngineFactory',
1428 ]
1429 ];
1430 }
1431
1432 if ( $this->options->get( MainConfigNames::EnableEditRecovery ) ) {
1433 $this->list['EditRecovery'] = [
1434 'class' => SpecialEditRecovery::class,
1435 'services' => [
1436 'UserOptionsLookup',
1437 ],
1438 ];
1439 }
1440
1441 // Add extension special pages
1442 $this->list = array_merge( $this->list,
1443 $this->options->get( MainConfigNames::SpecialPages ) );
1444
1445 // This hook can be used to disable unwanted core special pages
1446 // or conditionally register special pages.
1447 $this->hookRunner->onSpecialPage_initList( $this->list );
1448 }
1449
1450 return $this->list;
1451 }
1452
1459 public function getAliasList(): array {
1460 if ( $this->aliases === null ) {
1461 $aliases = $this->contLang->getSpecialPageAliases();
1462 $pageList = $this->getPageList();
1463
1464 $this->aliases = [];
1465 $keepAlias = [];
1466
1467 // Force every canonical name to be an alias for itself.
1468 foreach ( $pageList as $name => $_ ) {
1469 $caseFoldedAlias = $this->contLang->caseFold( $name );
1470 $this->aliases[$caseFoldedAlias] = $name;
1471 $keepAlias[$caseFoldedAlias] = 'canonical';
1472 }
1473
1474 // Check for $aliases being an array since Language::getSpecialPageAliases can return null
1475 if ( is_array( $aliases ) ) {
1476 foreach ( $aliases as $realName => $aliasList ) {
1477 $first = true;
1478 foreach ( $aliasList as $alias ) {
1479 $caseFoldedAlias = $this->contLang->caseFold( $alias );
1480
1481 if ( isset( $this->aliases[$caseFoldedAlias] ) &&
1482 $realName === $this->aliases[$caseFoldedAlias]
1483 ) {
1484 $first = false;
1485 // Ignore same-realName conflicts
1486 continue;
1487 }
1488
1489 if ( !isset( $keepAlias[$caseFoldedAlias] ) ) {
1490 $this->aliases[$caseFoldedAlias] = $realName;
1491 if ( $first ) {
1492 $keepAlias[$caseFoldedAlias] = 'first';
1493 }
1494 } elseif ( $first ) {
1495 wfWarn( "First alias '$alias' for $realName conflicts with " .
1496 "{$keepAlias[$caseFoldedAlias]} alias for " .
1497 $this->aliases[$caseFoldedAlias]
1498 );
1499 }
1500 $first = false;
1501 }
1502 }
1503 }
1504 }
1505
1506 return $this->aliases;
1507 }
1508
1517 public function resolveAlias( $alias ) {
1518 $bits = explode( '/', $alias, 2 );
1519
1520 $caseFoldedAlias = $this->contLang->caseFold( $bits[0] );
1521 $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
1522 $aliases = $this->getAliasList();
1523 if ( !isset( $aliases[$caseFoldedAlias] ) ) {
1524 // T288402: Turkish/Azerbaijani ucfirst maps 'i' to 'İ' (U+0130),
1525 // but canonical special page names use ASCII 'I' (U+0049).
1526 // When caseFold produces e.g. 'İMPORT' instead of 'IMPORT',
1527 // normalize U+0130 to ASCII 'I' and retry the lookup.
1528 $fallback = str_replace( "\u{0130}", 'I', $caseFoldedAlias );
1529 if ( $fallback !== $caseFoldedAlias && isset( $aliases[$fallback] ) ) {
1530 $caseFoldedAlias = $fallback;
1531 } else {
1532 return [ null, null ];
1533 }
1534 }
1535 $name = $aliases[$caseFoldedAlias];
1536 $par = $bits[1] ?? null; // T4087
1537
1538 return [ $name, $par ];
1539 }
1540
1547 public function exists( $name ) {
1548 [ $title, ] = $this->resolveAlias( $name );
1549
1550 $specialPageList = $this->getPageList();
1551 return $title !== null && isset( $specialPageList[$title] );
1552 }
1553
1560 public function getPage( $name ) {
1561 [ $realName, ] = $this->resolveAlias( $name );
1562
1563 $specialPageList = $this->getPageList();
1564
1565 if ( $realName !== null && isset( $specialPageList[$realName] ) ) {
1566 $rec = $specialPageList[$realName];
1567
1568 if ( is_array( $rec ) || is_string( $rec ) || is_callable( $rec ) ) {
1569 $page = $this->objectFactory->createObject(
1570 $rec,
1571 [
1572 'allowClassName' => true,
1573 'allowCallable' => true
1574 ]
1575 );
1576 } else {
1577 $page = null;
1578 }
1579
1580 if ( $page instanceof SpecialPage ) {
1581 $page->setHookContainer( $this->hookContainer );
1582 $page->setContentLanguage( $this->contLang );
1583 $page->setSpecialPageFactory( $this );
1584 return $page;
1585 }
1586
1587 // It's not a classname, nor a callback, nor a legacy constructor array,
1588 // nor a special page object. Give up.
1589 wfLogWarning( "Cannot instantiate special page $realName: bad spec!" );
1590 }
1591
1592 return null;
1593 }
1594
1606 public function getUsablePages( User $user, IContextSource $context ): array {
1607 $pages = [];
1608 foreach ( $this->getPageList() as $name => $_ ) {
1609 $page = $this->getPage( $name );
1610 if ( $page ) { // not null
1611 $page->setContext( $context );
1612 if ( $page->isListed()
1613 && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
1614 ) {
1615 $pages[$name] = $page;
1616 }
1617 }
1618 }
1619
1620 return $pages;
1621 }
1622
1629 public function getListedPages(): array {
1630 $pages = [];
1631 foreach ( $this->getPageList() as $name => $_ ) {
1632 $page = $this->getPage( $name );
1633 if ( $page && $page->isListed() ) {
1634 $pages[$name] = $page;
1635 }
1636 }
1637 return $pages;
1638 }
1639
1655 public function executePath( $path, IContextSource $context, $including = false,
1656 ?LinkRenderer $linkRenderer = null
1657 ) {
1658 if ( $path instanceof PageReference ) {
1659 $path = $path->getDBkey();
1660 }
1661
1662 $bits = explode( '/', $path, 2 );
1663 $name = $bits[0];
1664 $par = $bits[1] ?? null; // T4087
1665
1666 $page = $this->getPage( $name );
1667 if ( !$page ) {
1668 // Emulate SpecialPage::setHeaders()
1669 $context->getOutput()->setArticleRelated( false );
1670 $context->getOutput()->setRobotPolicy( 'noindex,nofollow' );
1671
1672 if ( $context->getConfig()->get( MainConfigNames::Send404Code ) ) {
1673 $context->getOutput()->setStatusCode( 404 );
1674 }
1675
1676 $context->getOutput()->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
1677
1678 return false;
1679 }
1680
1681 if ( !$including ) {
1682 ProfilingContext::singleton()->init( MW_ENTRY_POINT, $page->getName() );
1683 // Narrow DB query expectations for this HTTP request
1684 $trxLimits = $context->getConfig()->get( MainConfigNames::TrxProfilerLimits );
1685 $trxProfiler = Profiler::instance()->getTransactionProfiler();
1686 if ( $context->getRequest()->wasPosted() && !$page->doesWrites() ) {
1687 $trxProfiler->setExpectations( $trxLimits['POST-nonwrite'], __METHOD__ );
1688 }
1689 }
1690
1691 // Page exists, set the context
1692 $page->setContext( $context );
1693
1694 if ( !$including ) {
1695 // Redirect to canonical alias for GET commands
1696 // Not for POST, we'd lose the post data, so it's best to just distribute
1697 // the request. Such POST requests are possible for old extensions that
1698 // generate self-links without being aware that their default name has
1699 // changed.
1700 if ( $name != $page->getLocalName() && !$context->getRequest()->wasPosted() ) {
1701 $query = $context->getRequest()->getQueryValues();
1702 unset( $query['title'] );
1703 $title = $page->getPageTitle( $par ?? false );
1704 $url = $title->getFullURL( $query );
1705 $context->getOutput()->redirect( $url );
1706
1707 return $title;
1708 }
1709
1710 // @phan-suppress-next-line PhanUndeclaredMethod
1711 $context->setTitle( $page->getPageTitle( $par ?? false ) );
1712 } elseif ( !$page->isIncludable() ) {
1713 return false;
1714 }
1715
1716 $page->including( $including );
1717 if ( $linkRenderer ) {
1718 $page->setLinkRenderer( $linkRenderer );
1719 }
1720
1721 $timer = $including ? null : $this->statsFactory
1722 ->getTiming( 'special_executeTiming_seconds' )
1723 ->setLabel( 'special', $page->getName() )
1724 ->start();
1725
1726 // Execute special page
1727 $page->run( $par );
1728
1729 $timer?->stop();
1730
1731 return true;
1732 }
1733
1749 public function capturePath(
1750 PageReference $page, IContextSource $context, ?LinkRenderer $linkRenderer = null
1751 ) {
1752 // phpcs:ignore MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle, MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgLang
1754 $main = RequestContext::getMain();
1755
1756 // Save current globals and main context
1757 $glob = [
1758 'title' => $wgTitle,
1759 'output' => $wgOut,
1760 'request' => $wgRequest,
1761 'language' => $wgLang,
1762 ];
1763 $ctx = [
1764 'title' => $main->getTitle(),
1765 'output' => $main->getOutput(),
1766 'request' => $main->getRequest(),
1767 'user' => $main->getUser(),
1768 'language' => $main->getLanguage(),
1769 ];
1770 if ( $main->canUseWikiPage() ) {
1771 $ctx['wikipage'] = $main->getWikiPage();
1772 }
1773
1774 // just needed for $wgTitle and RequestContext::setTitle
1775 $title = $this->titleFactory->castFromPageReference( $page );
1776
1777 // Override
1778 $wgTitle = $title;
1779 $wgOut = $context->getOutput();
1780 $wgRequest = $context->getRequest();
1781 $wgLang = $context->getLanguage();
1782 // FIXME: Once reasonably certain that no SpecialPage subclasses
1783 // rely on direct RequestContext::getMain instead of their local
1784 // context getters, these can be removed (T323184)
1785 // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1786 @$main->setTitle( $title );
1787 $main->setOutput( $context->getOutput() );
1788 $main->setRequest( $context->getRequest() );
1789 $main->setUser( $context->getUser() );
1790 $main->setLanguage( $context->getLanguage() );
1791
1792 try {
1793 // The useful part
1794 return $this->executePath( $page, $context, true, $linkRenderer );
1795 } finally {
1796 // Restore old globals and context
1797 $wgTitle = $glob['title'];
1798 $wgOut = $glob['output'];
1799 $wgRequest = $glob['request'];
1800 $wgLang = $glob['language'];
1801 // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1802 @$main->setTitle( $ctx['title'] );
1803 $main->setOutput( $ctx['output'] );
1804 $main->setRequest( $ctx['request'] );
1805 $main->setUser( $ctx['user'] );
1806 $main->setLanguage( $ctx['language'] );
1807 if ( isset( $ctx['wikipage'] ) ) {
1808 $main->setWikiPage( $ctx['wikipage'] );
1809 }
1810 }
1811 }
1812
1820 public function getLocalNameFor( $name, $subpage = false ) {
1821 $aliases = $this->contLang->getSpecialPageAliases();
1822 $aliasList = $this->getAliasList();
1823
1824 // Find the first alias that maps back to $name
1825 if ( isset( $aliases[$name] ) ) {
1826 $found = false;
1827 foreach ( $aliases[$name] as $alias ) {
1828 $caseFoldedAlias = $this->contLang->caseFold( $alias );
1829 $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
1830 if ( isset( $aliasList[$caseFoldedAlias] ) &&
1831 $aliasList[$caseFoldedAlias] === $name
1832 ) {
1833 $name = $alias;
1834 $found = true;
1835 break;
1836 }
1837 }
1838 if ( !$found ) {
1839 wfWarn( "Did not find a usable alias for special page '$name'. " .
1840 "It seems all defined aliases conflict?" );
1841 }
1842 } else {
1843 // Check if someone misspelled the correct casing
1844 if ( is_array( $aliases ) ) {
1845 foreach ( $aliases as $n => $_ ) {
1846 if ( strcasecmp( $name, $n ) === 0 ) {
1847 wfWarn( "Found alias defined for $n when searching for " .
1848 "special page aliases for $name. Case mismatch?" );
1849 return $this->getLocalNameFor( $n, $subpage );
1850 }
1851 }
1852 }
1853
1854 wfWarn( "Did not find alias for special page '$name'. " .
1855 "Perhaps no aliases are defined for it?" );
1856 }
1857
1858 if ( $subpage !== false && $subpage !== null ) {
1859 // Make sure it's in dbkey form
1860 $subpage = str_replace( ' ', '_', $subpage );
1861 $name = "$name/$subpage";
1862 }
1863
1864 return $this->contLang->ucfirst( $name );
1865 }
1866
1873 public function getTitleForAlias( $alias ) {
1874 [ $name, $subpage ] = $this->resolveAlias( $alias );
1875 if ( $name != null ) {
1876 return SpecialPage::getTitleFor( $name, $subpage );
1877 }
1878
1879 return null;
1880 }
1881}
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
wfLogWarning( $msg, $callerOffset=1, $level=E_USER_WARNING)
Send a warning as a PHP error and the debug log.
$fallback
global $wgRequest
Definition Setup.php:439
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli') global $wgLang
Definition Setup.php:498
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli') global $wgOut
Definition Setup.php:527
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli') global $wgTitle
Definition Setup.php:527
if(!defined('MW_SETUP_CALLBACK'))
Definition WebStart.php:71
const MW_ENTRY_POINT
Definition api.php:21
A class for passing options to services.
Group all the pieces relevant to the context of a request into one instance.
This class provides an implementation of the core hook interfaces, forwarding hook calls to HookConta...
Base class for language-specific code.
Definition Language.php:65
Class that generates HTML for internal links.
A class containing constants representing the names of configuration variables.
const EnableJavaScriptTest
Name constant for the EnableJavaScriptTest setting, for use with Config::get()
const DisableInternalSearch
Name constant for the DisableInternalSearch setting, for use with Config::get()
const SpecialPages
Name constant for the SpecialPages setting, for use with Config::get()
const EnableEditRecovery
Name constant for the EnableEditRecovery setting, for use with Config::get()
const EnableEmail
Name constant for the EnableEmail setting, for use with Config::get()
const EmailAuthentication
Name constant for the EmailAuthentication setting, for use with Config::get()
const PageLanguageUseDB
Name constant for the PageLanguageUseDB setting, for use with Config::get()
Profiler base class that defines the interface and some shared functionality.
Definition Profiler.php:26
Class for tracking request-level classification information for profiling/stats/logging.
Factory for handling the special page list and generating SpecialPage objects.
__construct(private readonly ServiceOptions $options, private readonly Language $contLang, ObjectFactory $objectFactory, private readonly TitleFactory $titleFactory, HookContainer $hookContainer, private readonly StatsFactory $statsFactory,)
getTitleForAlias( $alias)
Get a title for a given alias.
getListedPages()
Get listed special pages, including those that may require user rights.
capturePath(PageReference $page, IContextSource $context, ?LinkRenderer $linkRenderer=null)
Just like executePath() but will override global variables and execute the page in "inclusion" mode.
exists( $name)
Check if a given name exist as a special page or as a special page alias.
getPage( $name)
Find the object with a given name and return it (or NULL)
getUsablePages(User $user, IContextSource $context)
Get listed special pages available to the current user.
resolveAlias( $alias)
Given a special page name with a possible subpage, return an array where the first element is the spe...
executePath( $path, IContextSource $context, $including=false, ?LinkRenderer $linkRenderer=null)
Execute a special page path.
getNames()
Returns a list of canonical identifiers for all registered special pages.
getLocalNameFor( $name, $subpage=false)
Get the local name for a specified canonical name.
getAliasList()
Initialise and return the list of special page aliases.
Parent class for all special pages.
Redirect to current user's uploaded files, including old versions.
Redirect to Special:ListUsers/sysop.
Redirect to Special:ListUsers/bot.
Redirect to Special:Contributions for the current user's name or IP.
Redirect to Special:Log for the current user's name or IP.
Redirect to the current user's user page.
Special page pointing to current user's talk page.
Redirect to Special:Listfiles for the current user's name or IP.
Redirect to the talk page of a given page.
Implements Special:Activeusers.
List of the MediaWiki interface messages.
Implements Special:Allpages.
Implements Special:Ancientpages.
Redirect to help pages served by api.php.
Implements Special:ApiSandbox.
A page for the 'mediawiki.authenticationPopup' module.
Blank page designed for basic benchmarking of MediaWiki.
Allow users with 'block' user right to block IPs and user accounts from editing pages and other actio...
Information on citing a book with a particular ISBN.
List of redirects to non-existent pages.
Implements Special:Categories.
Change user credentials, such as the password.
Let users change their email address.
Compatibility and shortcut redirect to Special:ChangeCredentials, and to hide internal AuthManager cl...
Implements Special:ComparePages.
Email confirmation for registered users.
Promote ways for editors to contribute.
Special:Contributions, show user contributions in a paged list.
Implements Special:CreateAccount.
List of pages that contain no links to other pages.
Redirect from Special:DeletePage/$1 to index.php?title=$1&action=delete.
Implements Special:DeletedContributions to display archived revisions.
Redirect from Special:Diff/### to index.php?diff=### and from Special:Diff/###/### to index....
List of redirects to another redirecting page.
Redirect from Special:Edit/$1 to index.php?title=$1&action=edit.
Add or remove change tags to individual revisions.
Users can edit their watchlist via this page.
Cancel an email confirmation using the e-mail confirmation code.
Send an e-mail from one user to another.
A special page to enter wikitext and expands its templates, parser functions, and variables,...
A special page that allows users to export pages in a XML file.
List articles with the fewest revisions.
Search the database for files of the requested hash, comparing this with the 'img_sha1' field in the ...
Redirects to the URL of a thumbnail for the given file.
Landing page for non-local interwiki links.
MediaWiki page data importer.
Implements Special:Interwiki.
Link/unlink external accounts to the current user.
Special:LinkSearch to search the external-links table.
List all files where the current version is a duplicate of the current version of another file.
Implements Special:Listfiles.
List all defined rights grants and the associated rights.
List all defined user groups and the associated rights.
Lists all the redirecting pages on the wiki.
Implements Special:Listusers.
A form to make the database read-only (eg for maintenance purposes).
A special page that lists log entries.
List of articles with no article linking to them, thus being lonely.
Implements Special:Longpages.
Search the database for files of the requested MIME type, comparing this with the 'img_major_mime' an...
Combine the revision history of two articles into one.
List of pages that have the highest category count.
List of the most used images.
List of pages that have the highest interwiki count.
List of categories with the most pages in them.
List of templates with a large number of transclusion links, i.e.
List of pages ordered by the number of pages linking to them.
Implements Special:Mostrevisions.
Implement Special:Movepage for changing page titles.
Modify your own notification preferences.
Redirect to the appropriate translated version of a page if it exists.
Show information about the different namespaces.
Implements Special:Newimages.
List of newly created pages.
Redirect from Special:NewSection/$1 to index.php?title=$1&action=edit&section=new.
Special page to act as an endpoint for accessing raw page data.
Redirect from Special:History/$1 to index.php?title=$1&action=history.
Redirect from Special:Info/$1 to index.php?title=$1&action=info.
Special page for changing the content language of a page.
Special:PagesWithProp to search the page_props table.
This special page lists the defined password policies for user groups.
Special page for requesting a password reset email.
A special page that allows users to change their preferences.
Implements Special:Prefixindex.
Redirect from Special:ProtectPage/$1 to index.php?title=$1&action=protect.
A special page that lists protected pages.
A special page that list protected titles from creation.
Redirect from Special:Purge/$1 to index.php?title=$1&action=purge.
Redirect to a random page in a category.
Redirect to a random redirect page (minus the second redirect)
Redirect to a random page that isn't a subpage.
This is to display changes made to all articles linked in an article.
List of the last changes made to the wiki.
Redirect dispatcher for user IDs, thumbnails, and various permalinks.
Special change to remove credentials (such as a two-factor token).
Let users reset tokens like the watchlist token.
Special page allowing users with the appropriate permissions to view and hide revisions.
Special page designed for running background tasks (internal use only)
Run text & title search and display the output.
List of the shortest pages in the database.
A special page that lists special pages.
Special page lists various statistics, including the contents of site_stats, plus page view details i...
A special page that lists tags for edits.
A special page that displays list of tracking categories.
A special page for unblocking users.
List of file pages which haven't been categorised.
List of all uncategorised pages in the Template namespace.
Special page allowing users with the appropriate permissions to view and restore deleted content.
Implements Special:Unlockdb.
List of pages that are not on anyone's watchlist.
Web access for files temporarily stored by UploadStash.
Form for uploading media files.
Implements Special:UserLogin.
Implements Special:Userlogout.
Special page to allow managing user group membership.
Version information about MediaWiki (core, extensions, libs), PHP, and the database.
List of the most linked non-existent files.
List of the most-linked pages that do not exist.
A special page for viewing a user's watchlist labels and performing CRUD operations on them.
A special page that lists last changes made to the wiki, limited to user-defined list of titles.
Implements Special:Whatlinkshere.
List of pages without any language links.
Creates Title objects.
Represents a title within MediaWiki.
Definition Title.php:69
User class for the MediaWiki software.
Definition User.php:129
This is the primary interface for validating metrics definitions, caching defined metrics,...
return[ 'config-schema-inverse'=>['default'=>['ConfigRegistry'=>['main'=> 'MediaWiki\\Config\\GlobalVarConfig::newInstance',], 'Sitename'=> 'MediaWiki', 'Server'=> false, 'CanonicalServer'=> false, 'ServerName'=> false, 'AssumeProxiesUseDefaultProtocolPorts'=> true, 'HttpsPort'=> 443, 'ForceHTTPS'=> false, 'ScriptPath'=> '/wiki', 'UsePathInfo'=> null, 'Script'=> false, 'LoadScript'=> false, 'RestPath'=> false, 'StylePath'=> false, 'LocalStylePath'=> false, 'ExtensionAssetsPath'=> false, 'ExtensionDirectory'=> null, 'StyleDirectory'=> null, 'ArticlePath'=> false, 'UploadPath'=> false, 'ImgAuthPath'=> false, 'ThumbPath'=> false, 'UploadDirectory'=> false, 'FileCacheDirectory'=> false, 'Logo'=> false, 'Logos'=> false, 'Favicon'=> '/favicon.ico', 'AppleTouchIcon'=> false, 'ReferrerPolicy'=> false, 'TmpDirectory'=> false, 'UploadBaseUrl'=> '', 'UploadStashScalerBaseUrl'=> false, 'ActionPaths'=>[], 'MainPageIsDomainRoot'=> false, 'EnableUploads'=> false, 'UploadStashMaxAge'=> 21600, 'EnableAsyncUploads'=> false, 'EnableAsyncUploadsByURL'=> false, 'UploadMaintenance'=> false, 'IllegalFileChars'=> ':\\/\\\\', 'DeletedDirectory'=> false, 'ImgAuthDetails'=> false, 'ImgAuthUrlPathMap'=>[], 'LocalFileRepo'=>['class'=> 'MediaWiki\\FileRepo\\LocalRepo', 'name'=> 'local', 'directory'=> null, 'scriptDirUrl'=> null, 'favicon'=> null, 'url'=> null, 'hashLevels'=> null, 'thumbScriptUrl'=> null, 'transformVia404'=> null, 'deletedDir'=> null, 'deletedHashLevels'=> null, 'updateCompatibleMetadata'=> null, 'reserializeMetadata'=> null,], 'ForeignFileRepos'=>[], 'UseInstantCommons'=> false, 'UseSharedUploads'=> false, 'SharedUploadDirectory'=> null, 'SharedUploadPath'=> null, 'HashedSharedUploadDirectory'=> true, 'RepositoryBaseUrl'=> 'https:'FetchCommonsDescriptions'=> false, 'SharedUploadDBname'=> false, 'SharedUploadDBprefix'=> '', 'CacheSharedUploads'=> true, 'ForeignUploadTargets'=>['local',], 'UploadDialog'=>['fields'=>['description'=> true, 'date'=> false, 'categories'=> false,], 'licensemessages'=>['local'=> 'generic-local', 'foreign'=> 'generic-foreign',], 'comment'=>['local'=> '', 'foreign'=> '',], 'format'=>['filepage'=> ' $DESCRIPTION', 'description'=> ' $TEXT', 'ownwork'=> '', 'license'=> '', 'uncategorized'=> '',],], 'FileBackends'=>[], 'LockManagers'=>[], 'DefaultLockManager'=> null, 'ShowEXIF'=> null, 'UpdateCompatibleMetadata'=> false, 'AllowCopyUploads'=> false, 'CopyUploadsDomains'=>[], 'CopyUploadsFromSpecialUpload'=> false, 'CopyUploadProxy'=> false, 'CopyUploadTimeout'=> false, 'CopyUploadAllowOnWikiDomainConfig'=> false, 'MaxUploadSize'=> 104857600, 'MinUploadChunkSize'=> 1024, 'UploadNavigationUrl'=> false, 'UploadMissingFileUrl'=> false, 'ThumbnailScriptPath'=> false, 'SharedThumbnailScriptPath'=> false, 'HashedUploadDirectory'=> true, 'CSPUploadEntryPoint'=> true, 'FileExtensions'=>['png', 'gif', 'jpg', 'jpeg', 'webp',], 'ProhibitedFileExtensions'=>['html', 'htm', 'js', 'jsb', 'mhtml', 'mht', 'xhtml', 'xht', 'php', 'phtml', 'php3', 'php4', 'php5', 'phps', 'phar', 'shtml', 'jhtml', 'pl', 'py', 'cgi', 'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl', 'xml',], 'MimeTypeExclusions'=>['text/html', 'application/javascript', 'text/javascript', 'text/x-javascript', 'application/x-shellscript', 'application/x-php', 'text/x-php', 'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh', 'text/scriptlet', 'application/x-msdownload', 'application/x-msmetafile', 'application/java', 'application/xml', 'text/xml',], 'CheckFileExtensions'=> true, 'StrictFileExtensions'=> true, 'DisableUploadScriptChecks'=> false, 'UploadSizeWarning'=> false, 'TrustedMediaFormats'=>['BITMAP', 'AUDIO', 'VIDEO', 'image/svg+xml', 'application/pdf',], 'MediaHandlers'=>[], 'NativeImageLazyLoading'=> false, 'ParserTestMediaHandlers'=>['image/jpeg'=> 'MockBitmapHandler', 'image/png'=> 'MockBitmapHandler', 'image/gif'=> 'MockBitmapHandler', 'image/tiff'=> 'MockBitmapHandler', 'image/webp'=> 'MockBitmapHandler', 'image/x-ms-bmp'=> 'MockBitmapHandler', 'image/x-bmp'=> 'MockBitmapHandler', 'image/x-xcf'=> 'MockBitmapHandler', 'image/svg+xml'=> 'MockSvgHandler', 'image/vnd.djvu'=> 'MockDjVuHandler',], 'UseImageResize'=> true, 'UseImageMagick'=> false, 'ImageMagickConvertCommand'=> '/usr/bin/convert', 'MaxInterlacingAreas'=>[], 'SharpenParameter'=> '0x0.4', 'SharpenReductionThreshold'=> 0.85, 'ImageMagickTempDir'=> false, 'CustomConvertCommand'=> false, 'JpegTran'=> '/usr/bin/jpegtran', 'JpegPixelFormat'=> 'yuv420', 'JpegQuality'=> 80, 'Exiv2Command'=> '/usr/bin/exiv2', 'Exiftool'=> '/usr/bin/exiftool', 'SVGConverters'=>['ImageMagick'=> ' $path/convert -background "#ffffff00" -thumbnail $widthx$height\\! $input PNG:$output', 'inkscape'=> ' $path/inkscape -w $width -o $output $input', 'batik'=> 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input', 'rsvg'=> ' $path/rsvg-convert -w $width -h $height -o $output $input', 'ImagickExt'=>['SvgHandler::rasterizeImagickExt',],], 'SVGConverter'=> 'ImageMagick', 'SVGConverterPath'=> '', 'SVGMaxSize'=> 5120, 'SVGMetadataCutoff'=> 5242880, 'SVGNativeRendering'=> true, 'SVGNativeRenderingSizeLimit'=> 51200, 'MediaInTargetLanguage'=> true, 'MaxImageArea'=> 12500000, 'MaxAnimatedGifArea'=> 12500000, 'TiffThumbnailType'=>[], 'ThumbnailEpoch'=> '20030516000000', 'AttemptFailureEpoch'=> 1, 'IgnoreImageErrors'=> false, 'GenerateThumbnailOnParse'=> true, 'ShowArchiveThumbnails'=> true, 'EnableAutoRotation'=> null, 'Antivirus'=> null, 'AntivirusSetup'=>['clamav'=>['command'=> 'clamscan --no-summary ', 'codemap'=>[0=> 0, 1=> 1, 52=> -1, ' *'=> false,], 'messagepattern'=> '/.*?:(.*)/sim',],], 'AntivirusRequired'=> true, 'VerifyMimeType'=> true, 'MimeTypeFile'=> 'internal', 'MimeInfoFile'=> 'internal', 'MimeDetectorCommand'=> null, 'TrivialMimeDetection'=> false, 'XMLMimeTypes'=>['http:'svg'=> 'image/svg+xml', 'http:'http:'html'=> 'text/html',], 'ImageLimits'=>[[320, 240,], [640, 480,], [800, 600,], [1024, 768,], [1280, 1024,], [2560, 2048,],], 'ThumbLimits'=>[120, 150, 180, 200, 220, 250, 300, 400,], 'ThumbnailNamespaces'=>[6,], 'ThumbnailSteps'=> null, 'ThumbnailBuckets'=> null, 'ThumbnailMinimumBucketDistance'=> 50, 'UploadThumbnailRenderMap'=>[], 'UploadThumbnailRenderMethod'=> 'jobqueue', 'UploadThumbnailRenderHttpCustomHost'=> false, 'UploadThumbnailRenderHttpCustomDomain'=> false, 'UseTinyRGBForJPGThumbnails'=> false, 'GalleryOptions'=>[], 'ThumbUpright'=> 0.75, 'DirectoryMode'=> 511, 'ResponsiveImages'=> true, 'ImagePreconnect'=> false, 'TrackMediaRequestProvenance'=> false, 'DjvuUseBoxedCommand'=> false, 'DjvuDump'=> null, 'DjvuRenderer'=> null, 'DjvuTxt'=> null, 'DjvuPostProcessor'=> 'pnmtojpeg', 'DjvuOutputExtension'=> 'jpg', 'EmergencyContact'=> false, 'RestTermsOfServiceUrl'=> null, 'PasswordSender'=> false, 'NoReplyAddress'=> false, 'EnableEmail'=> true, 'EnableUserEmail'=> true, 'UserEmailUseReplyTo'=> true, 'PasswordReminderResendTime'=> 24, 'NewPasswordExpiry'=> 604800, 'UserEmailConfirmationTokenExpiry'=> 604800, 'PasswordExpirationDays'=> false, 'PasswordExpireGrace'=> 604800, 'SMTP'=> false, 'AdditionalMailParams'=> null, 'AllowHTMLEmail'=> false, 'EnotifFromEditor'=> false, 'EmailAuthentication'=> true, 'EmailConfirmationBanner'=> false, 'EnotifWatchlist'=> false, 'EnotifUserTalk'=> false, 'EnotifRevealEditorAddress'=> false, 'EnotifMinorEdits'=> true, 'EnotifUseRealName'=> false, 'UsersNotifiedOnAllChanges'=>[], 'DBname'=> 'my_wiki', 'DBmwschema'=> null, 'DBprefix'=> '', 'DBserver'=> 'localhost', 'DBport'=> 5432, 'DBuser'=> 'wikiuser', 'DBpassword'=> '', 'DBtype'=> 'mysql', 'DBssl'=> false, 'DBcompress'=> false, 'DBStrictWarnings'=> false, 'DBadminuser'=> null, 'DBadminpassword'=> null, 'SearchType'=> null, 'SearchTypeAlternatives'=> null, 'DBTableOptions'=> 'ENGINE=InnoDB, DEFAULT CHARSET=binary', 'SQLMode'=> '', 'SQLiteDataDir'=> '', 'SharedDB'=> null, 'SharedPrefix'=> false, 'SharedTables'=>['user', 'user_properties', 'user_autocreate_serial',], 'SharedSchema'=> false, 'DBservers'=> false, 'LBFactoryConf'=>['class'=> 'Wikimedia\\Rdbms\\LBFactorySimple',], 'DataCenterUpdateStickTTL'=> 10, 'DBerrorLog'=> false, 'DBerrorLogTZ'=> false, 'LocalDatabases'=>[], 'DatabaseReplicaLagWarning'=> 10, 'DatabaseReplicaLagCritical'=> 30, 'MaxExecutionTimeForExpensiveQueries'=> 0, 'VirtualDomainsMapping'=>[], 'FileSchemaMigrationStage'=> 3, 'ExternalLinksDomainGaps'=>[], 'ContentHandlers'=>['wikitext'=>['class'=> 'MediaWiki\\Content\\WikitextContentHandler', 'services'=>['TitleFactory', 'ParserFactory', 'GlobalIdGenerator', 'LanguageNameUtils', 'LinkRenderer', 'MagicWordFactory', 'ParsoidParserFactory',],], 'javascript'=>['class'=> 'MediaWiki\\Content\\JavaScriptContentHandler', 'services'=>['MainConfig', 'ParserFactory', 'UserOptionsLookup', 'CodeHighlighter',],], 'json'=>['class'=> 'MediaWiki\\Content\\JsonContentHandler', 'services'=>['ParsoidParserFactory', 'TitleFactory',],], 'css'=>['class'=> 'MediaWiki\\Content\\CssContentHandler', 'services'=>['MainConfig', 'ParserFactory', 'UserOptionsLookup', 'CodeHighlighter',],], 'vue'=>['class'=> 'MediaWiki\\Content\\VueContentHandler', 'services'=>['MainConfig', 'ParserFactory', 'CodeHighlighter',],], 'text'=> 'MediaWiki\\Content\\TextContentHandler', 'unknown'=> 'MediaWiki\\Content\\FallbackContentHandler',], 'NamespaceContentModels'=>[], 'TextModelsToParse'=>['wikitext', 'javascript', 'css',], 'CompressRevisions'=> false, 'ExternalStores'=>[], 'ExternalServers'=>[], 'DefaultExternalStore'=> false, 'RevisionCacheExpiry'=> 604800, 'PageLanguageUseDB'=> false, 'DiffEngine'=> null, 'ExternalDiffEngine'=> false, 'Wikidiff2Options'=>[], 'RequestTimeLimit'=> null, 'TransactionalTimeLimit'=> 120, 'CriticalSectionTimeLimit'=> 180.0, 'MiserMode'=> false, 'DisableQueryPages'=> false, 'QueryCacheLimit'=> 1000, 'WantedPagesThreshold'=> 1, 'AllowSlowParserFunctions'=> false, 'AllowSchemaUpdates'=> true, 'MaxArticleSize'=> 2048, 'MemoryLimit'=> '50M', 'PoolCounterConf'=> null, 'PoolCountClientConf'=>['servers'=>['127.0.0.1',], 'timeout'=> 0.1,], 'MaxUserDBWriteDuration'=> false, 'MaxJobDBWriteDuration'=> false, 'LinkHolderBatchSize'=> 1000, 'MaximumMovedPages'=> 100, 'ForceDeferredUpdatesPreSend'=> false, 'MultiShardSiteStats'=> false, 'CacheDirectory'=> false, 'MainCacheType'=> 0, 'MessageCacheType'=> -1, 'ParserCacheType'=> -1, 'SessionCacheType'=> -1, 'AnonSessionCacheType'=> false, 'LanguageConverterCacheType'=> -1, 'ObjectCaches'=>[0=>['class'=> 'Wikimedia\\ObjectCache\\EmptyBagOStuff', 'reportDupes'=> false,], 1=>['class'=> 'MediaWiki\\ObjectCache\\SqlBagOStuff', 'loggroup'=> 'SQLBagOStuff',], 'memcached-php'=>['class'=> 'Wikimedia\\ObjectCache\\MemcachedPhpBagOStuff', 'loggroup'=> 'memcached',], 'memcached-pecl'=>['class'=> 'Wikimedia\\ObjectCache\\MemcachedPeclBagOStuff', 'loggroup'=> 'memcached',], 'hash'=>['class'=> 'Wikimedia\\ObjectCache\\HashBagOStuff', 'reportDupes'=> false,], 'apc'=>['class'=> 'Wikimedia\\ObjectCache\\APCUBagOStuff', 'reportDupes'=> false,], 'apcu'=>['class'=> 'Wikimedia\\ObjectCache\\APCUBagOStuff', 'reportDupes'=> false,],], 'WANObjectCache'=>[], 'MicroStashType'=> -1, 'MainStash'=> 1, 'ParsoidCacheConfig'=>['StashType'=> null, 'StashDuration'=> 86400, 'WarmParsoidParserCache'=> false,], 'ParsoidSelectiveUpdateSampleRate'=> 0, 'ParserCacheFilterConfig'=>['pcache'=>['default'=>['minCpuTime'=> 0,],], 'postproc-pcache'=>['default'=>['minCpuTime'=> 9223372036854775807,],], 'parsoid-pcache'=>['default'=>['minCpuTime'=> 0,],], 'postproc-parsoid-pcache'=>['default'=>['minCpuTime'=> 0,],],], 'ChronologyProtectorSecret'=> '', 'ParserCacheExpireTime'=> 86400, 'ParserCacheAsyncExpireTime'=> 60, 'ParserCacheAsyncRefreshJobs'=> true, 'OldRevisionParserCacheExpireTime'=> 3600, 'ObjectCacheSessionExpiry'=> 3600, 'SuspiciousIpExpiry'=> false, 'SessionPbkdf2Iterations'=> 10001, 'UseSessionCookieJwt'=> false, 'JwtSessionCookieIssuer'=> null, 'MemCachedServers'=>['127.0.0.1:11211',], 'MemCachedPersistent'=> false, 'MemCachedTimeout'=> 500000, 'UseLocalMessageCache'=> false, 'AdaptiveMessageCache'=> false, 'LocalisationCacheConf'=>['class'=> 'MediaWiki\\Language\\LocalisationCache', 'store'=> 'detect', 'storeClass'=> false, 'storeDirectory'=> false, 'storeServer'=>[], 'forceRecache'=> false, 'manualRecache'=> false,], 'CachePages'=> true, 'CacheEpoch'=> '20030516000000', 'GitInfoCacheDirectory'=> false, 'UseFileCache'=> false, 'FileCacheDepth'=> 2, 'RenderHashAppend'=> '', 'EnableSidebarCache'=> false, 'SidebarCacheExpiry'=> 86400, 'UseGzip'=> false, 'InvalidateCacheOnLocalSettingsChange'=> true, 'ExtensionInfoMTime'=> false, 'EnableRemoteBagOStuffTests'=> false, 'UseCdn'=> false, 'VaryOnXFP'=> false, 'InternalServer'=> false, 'CdnMaxAge'=> 18000, 'CdnMaxageLagged'=> 30, 'CdnMaxageStale'=> 10, 'CdnReboundPurgeDelay'=> 0, 'CdnMaxageSubstitute'=> 60, 'ForcedRawSMaxage'=> 300, 'CdnServers'=>[], 'CdnServersNoPurge'=>[], 'HTCPRouting'=>[], 'HTCPMulticastTTL'=> 1, 'UsePrivateIPs'=> false, 'CdnMatchParameterOrder'=> true, 'LanguageCode'=> 'en', 'GrammarForms'=>[], 'InterwikiMagic'=> true, 'HideInterlanguageLinks'=> false, 'ExtraInterlanguageLinkPrefixes'=>[], 'InterlanguageLinkCodeMap'=>[], 'ExtraLanguageNames'=>[], 'ExtraLanguageCodes'=>['bh'=> 'bho', 'no'=> 'nb', 'simple'=> 'en',], 'DummyLanguageCodes'=>[], 'AllUnicodeFixes'=> false, 'LegacyEncoding'=> false, 'AmericanDates'=> false, 'TranslateNumerals'=> true, 'UseDatabaseMessages'=> true, 'MaxMsgCacheEntrySize'=> 10000, 'DisableLangConversion'=> false, 'DisableTitleConversion'=> false, 'DefaultLanguageVariant'=> false, 'UsePigLatinVariant'=> false, 'DisabledVariants'=>[], 'VariantArticlePath'=> false, 'UseXssLanguage'=> false, 'LoginLanguageSelector'=> false, 'ForceUIMsgAsContentMsg'=>[], 'RawHtmlMessages'=>[], 'Localtimezone'=> null, 'LocalTZoffset'=> null, 'OverrideUcfirstCharacters'=>[], 'MimeType'=> 'text/html', 'Html5Version'=> null, 'EditSubmitButtonLabelPublish'=> false, 'XhtmlNamespaces'=>[], 'SiteNotice'=> '', 'BrowserFormatDetection'=> 'telephone=no', 'SkinMetaTags'=>[], 'DefaultSkin'=> 'vector-2022', 'FallbackSkin'=> 'fallback', 'SkipSkins'=>[], 'DisableOutputCompression'=> false, 'FragmentMode'=>['html5', 'legacy',], 'ExternalInterwikiFragmentMode'=> 'legacy', 'FooterIcons'=>['copyright'=>['copyright'=>[],], 'poweredby'=>['mediawiki'=>['src'=> null, 'url'=> 'https:'alt'=> 'Powered by MediaWiki', 'lang'=> 'en',],],], 'EnableSectionShare'=> false, 'UseCombinedLoginLink'=> false, 'Edititis'=> false, 'Send404Code'=> true, 'ShowRollbackEditCount'=> 10, 'EnableCanonicalServerLink'=> false, 'InterwikiLogoOverride'=>[], 'ResourceModules'=>[], 'ResourceModuleSkinStyles'=>[], 'ResourceLoaderSources'=>[], 'ResourceBasePath'=> null, 'ResourceLoaderMaxage'=>[], 'ResourceLoaderDebug'=> false, 'ResourceLoaderMaxQueryLength'=> false, 'ResourceLoaderValidateJS'=> true, 'ResourceLoaderEnableJSProfiler'=> false, 'ResourceLoaderStorageEnabled'=> true, 'ResourceLoaderStorageVersion'=> 1, 'ResourceLoaderEnableSourceMapLinks'=> true, 'AllowSiteCSSOnRestrictedPages'=> false, 'VueDevelopmentMode'=> false, 'CodexDevelopmentDir'=> null, 'MetaNamespace'=> false, 'MetaNamespaceTalk'=> false, 'CanonicalNamespaceNames'=>[-2=> 'Media', -1=> 'Special', 0=> '', 1=> 'Talk', 2=> 'User', 3=> 'User_talk', 4=> 'Project', 5=> 'Project_talk', 6=> 'File', 7=> 'File_talk', 8=> 'MediaWiki', 9=> 'MediaWiki_talk', 10=> 'Template', 11=> 'Template_talk', 12=> 'Help', 13=> 'Help_talk', 14=> 'Category', 15=> 'Category_talk',], 'ExtraNamespaces'=>[], 'ExtraGenderNamespaces'=>[], 'NamespaceAliases'=>[], 'LegalTitleChars'=> ' %!"$&\'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+', 'CapitalLinks' => true, 'CapitalLinkOverrides' => [ ], 'NamespacesWithSubpages' => [ 1 => true, 2 => true, 3 => true, 4 => true, 5 => true, 7 => true, 8 => true, 9 => true, 10 => true, 11 => true, 12 => true, 13 => true, 15 => true, ], 'NamespacesWithoutAutoSummaries' => [ ], 'ContentNamespaces' => [ 0, ], 'ShortPagesNamespaceExclusions' => [ ], 'ExtraSignatureNamespaces' => [ ], 'InvalidRedirectTargets' => [ 'Filepath', 'Mypage', 'Mytalk', 'Redirect', 'Mylog', ], 'DisableHardRedirects' => false, 'FixDoubleRedirects' => false, 'LocalInterwikis' => [ ], 'InterwikiExpiry' => 10800, 'InterwikiCache' => false, 'InterwikiScopes' => 3, 'InterwikiFallbackSite' => 'wiki', 'RedirectSources' => false, 'SiteTypes' => [ 'mediawiki' => 'MediaWiki\\Site\\MediaWikiSite', ], 'MaxTocLevel' => 999, 'MaxPPNodeCount' => 1000000, 'MaxTemplateDepth' => 100, 'MaxPPExpandDepth' => 100, 'UrlProtocols' => [ 'bitcoin:', 'ftp: 'ftps: 'geo:', 'git: 'gopher: 'http: 'https: 'irc: 'ircs: 'magnet:', 'mailto:', 'matrix:', 'mms: 'news:', 'nntp: 'redis: 'sftp: 'sip:', 'sips:', 'sms:', 'ssh: 'svn: 'tel:', 'telnet: 'urn:', 'wikipedia: 'worldwind: 'xmpp:', ' ], 'CleanSignatures' => true, 'AllowExternalImages' => false, 'AllowExternalImagesFrom' => '', 'EnableImageWhitelist' => false, 'TidyConfig' => [ ], 'ParsoidSettings' => [ 'useSelser' => true, ], 'ParsoidExperimentalParserFunctionOutput' => false, 'RawHtml' => false, 'ExternalLinkTarget' => false, 'NoFollowLinks' => true, 'NoFollowNsExceptions' => [ ], 'NoFollowDomainExceptions' => [ 'mediawiki.org', ], 'RegisterInternalExternals' => false, 'ExternalLinksIgnoreDomains' => [ ], 'AllowDisplayTitle' => true, 'RestrictDisplayTitle' => true, 'ExpensiveParserFunctionLimit' => 100, 'PreprocessorCacheThreshold' => 1000, 'EnableScaryTranscluding' => false, 'TranscludeCacheExpiry' => 3600, 'EnableMagicLinks' => [ 'ISBN' => false, 'PMID' => false, 'RFC' => false, ], 'ParserEnableUserLanguage' => false, 'ArticleCountMethod' => 'link', 'ActiveUserDays' => 30, 'LearnerEdits' => 10, 'LearnerMemberSince' => 4, 'ExperiencedUserEdits' => 500, 'ExperiencedUserMemberSince' => 30, 'ManualRevertSearchRadius' => 15, 'RevertedTagMaxDepth' => 15, 'CentralIdLookupProviders' => [ 'local' => [ 'class' => 'MediaWiki\\User\\CentralId\\LocalIdLookup', 'services' => [ 'MainConfig', 'DBLoadBalancerFactory', 'HideUserUtils', ], ], ], 'CentralIdLookupProvider' => 'local', 'UserRegistrationProviders' => [ 'local' => [ 'class' => 'MediaWiki\\User\\Registration\\LocalUserRegistrationProvider', 'services' => [ 'ConnectionProvider', ], ], ], 'PasswordPolicy' => [ 'policies' => [ 'bureaucrat' => [ 'MinimalPasswordLength' => 10, 'MinimumPasswordLengthToLogin' => 1, ], 'sysop' => [ 'MinimalPasswordLength' => 10, 'MinimumPasswordLengthToLogin' => 1, ], 'interface-admin' => [ 'MinimalPasswordLength' => 10, 'MinimumPasswordLengthToLogin' => 1, ], 'bot' => [ 'MinimalPasswordLength' => 10, 'MinimumPasswordLengthToLogin' => 1, ], 'default' => [ 'MinimalPasswordLength' => [ 'value' => 8, 'suggestChangeOnLogin' => true, ], 'PasswordCannotBeSubstringInUsername' => [ 'value' => true, 'suggestChangeOnLogin' => true, ], 'PasswordCannotMatchDefaults' => [ 'value' => true, 'suggestChangeOnLogin' => true, ], 'MaximalPasswordLength' => [ 'value' => 4096, 'suggestChangeOnLogin' => true, ], 'PasswordNotInCommonList' => [ 'value' => true, 'suggestChangeOnLogin' => true, ], ], ], 'checks' => [ 'MinimalPasswordLength' => [ 'MediaWiki\\Password\\PasswordPolicyChecks', 'checkMinimalPasswordLength', ], 'MinimumPasswordLengthToLogin' => [ 'MediaWiki\\Password\\PasswordPolicyChecks', 'checkMinimumPasswordLengthToLogin', ], 'PasswordCannotBeSubstringInUsername' => [ 'MediaWiki\\Password\\PasswordPolicyChecks', 'checkPasswordCannotBeSubstringInUsername', ], 'PasswordCannotMatchDefaults' => [ 'MediaWiki\\Password\\PasswordPolicyChecks', 'checkPasswordCannotMatchDefaults', ], 'MaximalPasswordLength' => [ 'MediaWiki\\Password\\PasswordPolicyChecks', 'checkMaximalPasswordLength', ], 'PasswordNotInCommonList' => [ 'MediaWiki\\Password\\PasswordPolicyChecks', 'checkPasswordNotInCommonList', ], ], ], 'AuthManagerConfig' => null, 'AuthManagerAutoConfig' => [ 'preauth' => [ 'MediaWiki\\Auth\\ThrottlePreAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\ThrottlePreAuthenticationProvider', 'sort' => 0, ], 'MediaWiki\\Auth\\PreviouslyRenamedAccountPreAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\PreviouslyRenamedAccountPreAuthenticationProvider', 'services' => [ 'ConnectionProvider', 'UserFactory', ], 'sort' => 0, ], ], 'primaryauth' => [ 'MediaWiki\\Auth\\TemporaryPasswordPrimaryAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\TemporaryPasswordPrimaryAuthenticationProvider', 'services' => [ 'DBLoadBalancerFactory', 'UserOptionsLookup', ], 'args' => [ [ 'authoritative' => false, ], ], 'sort' => 0, ], 'MediaWiki\\Auth\\LocalPasswordPrimaryAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\LocalPasswordPrimaryAuthenticationProvider', 'services' => [ 'DBLoadBalancerFactory', ], 'args' => [ [ 'authoritative' => true, ], ], 'sort' => 100, ], ], 'secondaryauth' => [ 'MediaWiki\\Auth\\CheckBlocksSecondaryAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\CheckBlocksSecondaryAuthenticationProvider', 'sort' => 0, ], 'MediaWiki\\Auth\\ResetPasswordSecondaryAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\ResetPasswordSecondaryAuthenticationProvider', 'sort' => 100, ], 'MediaWiki\\Auth\\EmailNotificationSecondaryAuthenticationProvider' => [ 'class' => 'MediaWiki\\Auth\\EmailNotificationSecondaryAuthenticationProvider', 'services' => [ 'DBLoadBalancerFactory', ], 'sort' => 200, ], ], ], 'RememberMe' => 'choose', 'ReauthenticateTime' => [ 'default' => 3600, ], 'ChangeCredentialsBlacklist' => [ 'MediaWiki\\Auth\\TemporaryPasswordAuthenticationRequest', ], 'RemoveCredentialsBlacklist' => [ 'MediaWiki\\Auth\\PasswordAuthenticationRequest', ], 'InvalidPasswordReset' => true, 'PasswordDefault' => 'pbkdf2', 'PasswordConfig' => [ 'A' => [ 'class' => 'MediaWiki\\Password\\MWOldPassword', ], 'B' => [ 'class' => 'MediaWiki\\Password\\MWSaltedPassword', ], 'pbkdf2-legacyA' => [ 'class' => 'MediaWiki\\Password\\LayeredParameterizedPassword', 'types' => [ 'A', 'pbkdf2', ], ], 'pbkdf2-legacyB' => [ 'class' => 'MediaWiki\\Password\\LayeredParameterizedPassword', 'types' => [ 'B', 'pbkdf2', ], ], 'bcrypt' => [ 'class' => 'MediaWiki\\Password\\BcryptPassword', 'cost' => 9, ], 'pbkdf2' => [ 'class' => 'MediaWiki\\Password\\Pbkdf2PasswordUsingOpenSSL', 'algo' => 'sha512', 'cost' => '30000', 'length' => '64', ], 'argon2' => [ 'class' => 'MediaWiki\\Password\\Argon2Password', 'algo' => 'auto', ], ], 'PasswordResetRoutes' => [ 'username' => true, 'email' => true, ], 'MaxSigChars' => 255, 'SignatureValidation' => 'warning', 'SignatureAllowedLintErrors' => [ 'obsolete-tag', ], 'MaxNameChars' => 255, 'ReservedUsernames' => [ 'MediaWiki default', 'Conversion script', 'Maintenance script', 'Template namespace initialisation script', 'ScriptImporter', 'Delete page script', 'Move page script', 'Command line script', 'Unknown user', 'msg:double-redirect-fixer', 'msg:usermessage-editor', 'msg:proxyblocker', 'msg:sorbs', 'msg:spambot_username', 'msg:autochange-username', ], 'DefaultUserOptions' => [ 'ccmeonemails' => 0, 'date' => 'default', 'diffonly' => 0, 'diff-type' => 'table', 'disablemail' => 0, 'editfont' => 'monospace', 'editondblclick' => 0, 'editrecovery' => 0, 'editsectiononrightclick' => 0, 'email-allow-new-users' => 1, 'enotifminoredits' => 0, 'enotifrevealaddr' => 0, 'enotifusertalkpages' => 1, 'enotifwatchlistpages' => 1, 'extendwatchlist' => 1, 'fancysig' => 0, 'forceeditsummary' => 0, 'forcesafemode' => 0, 'gender' => 'unknown', 'hidecategorization' => 1, 'hideminor' => 0, 'hidepatrolled' => 0, 'imagesize' => 2, 'minordefault' => 0, 'newpageshidepatrolled' => 0, 'nickname' => '', 'norollbackdiff' => 0, 'prefershttps' => 1, 'previewonfirst' => 0, 'previewontop' => 1, 'pst-cssjs' => 1, 'rcdays' => 7, 'rcenhancedfilters-disable' => 0, 'rclimit' => 50, 'requireemail' => 0, 'search-match-redirect' => true, 'search-special-page' => 'Search', 'search-thumbnail-extra-namespaces' => true, 'searchlimit' => 20, 'showhiddencats' => 0, 'shownumberswatching' => 1, 'showrollbackconfirmation' => 0, 'skin' => false, 'skin-responsive' => 1, 'thumbsize' => 5, 'underline' => 2, 'useeditwarning' => 1, 'uselivepreview' => 0, 'usenewrc' => 1, 'watchcreations' => 1, 'watchcreations-expiry' => 'infinite', 'watchdefault' => 1, 'watchdefault-expiry' => 'infinite', 'watchdeletion' => 0, 'watchlistdays' => 7, 'watchlisthideanons' => 0, 'watchlisthidebots' => 0, 'watchlisthidecategorization' => 1, 'watchlisthideliu' => 0, 'watchlisthideminor' => 0, 'watchlisthideown' => 0, 'watchlisthidepatrolled' => 0, 'watchlistreloadautomatically' => 0, 'watchlistunwatchlinks' => 0, 'watchmoves' => 0, 'watchrollback' => 0, 'watchuploads' => 1, 'watchrollback-expiry' => 'infinite', 'watchstar-expiry' => 'infinite', 'wlenhancedfilters-disable' => 0, 'wllimit' => 250, ], 'ConditionalUserOptions' => [ ], 'HiddenPrefs' => [ ], 'UserJsPrefLimit' => 100, 'InvalidUsernameCharacters' => '@:>=', 'UserrightsInterwikiDelimiter' => '@', 'SecureLogin' => false, 'AuthenticationTokenVersion' => null, 'SessionProviders' => [ 'MediaWiki\\Session\\CookieSessionProvider' => [ 'class' => 'MediaWiki\\Session\\CookieSessionProvider', 'args' => [ [ 'priority' => 30, ], ], 'services' => [ 'JwtCodec', 'UrlUtils', ], ], 'MediaWiki\\Session\\BotPasswordSessionProvider' => [ 'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider', 'args' => [ [ 'priority' => 75, ], ], 'services' => [ 'GrantsInfo', ], ], ], 'AutoCreateTempUser' => [ 'known' => false, 'enabled' => false, 'actions' => [ 'edit', ], 'genPattern' => '~$1', 'matchPattern' => null, 'reservedPattern' => '~$1', 'serialProvider' => [ 'type' => 'local', 'useYear' => true, ], 'serialMapping' => [ 'type' => 'readable-numeric', ], 'expireAfterDays' => 90, 'notifyBeforeExpirationDays' => 10, ], 'AutoblockExemptions' => [ ], 'AutoblockExpiry' => 86400, 'BlockAllowsUTEdit' => true, 'BlockCIDRLimit' => [ 'IPv4' => 16, 'IPv6' => 19, ], 'BlockDisablesLogin' => false, 'EnableMultiBlocks' => false, 'WhitelistRead' => false, 'WhitelistReadRegexp' => false, 'EmailConfirmToEdit' => false, 'HideIdentifiableRedirects' => true, 'GroupPermissions' => [ '*' => [ 'createaccount' => true, 'autocreateaccount' => true, 'read' => true, 'edit' => true, 'createpage' => true, 'createtalk' => true, 'viewmyprivateinfo' => true, 'editmyprivateinfo' => true, 'editmyoptions' => true, ], 'user' => [ 'move' => true, 'move-subpages' => true, 'move-rootuserpages' => true, 'move-categorypages' => true, 'movefile' => true, 'read' => true, 'edit' => true, 'createpage' => true, 'createtalk' => true, 'upload' => true, 'reupload' => true, 'reupload-shared' => true, 'minoredit' => true, 'editmyusercss' => true, 'editmyuserjson' => true, 'editmyuserjs' => true, 'editmyuserjsredirect' => true, 'sendemail' => true, 'applychangetags' => true, 'changetags' => true, 'viewmywatchlist' => true, 'editmywatchlist' => true, 'createwithcontentmodel' => true, 'logout' => true, ], 'autoconfirmed' => [ 'autoconfirmed' => true, 'editsemiprotected' => true, ], 'bot' => [ 'bot' => true, 'autoconfirmed' => true, 'editsemiprotected' => true, 'nominornewtalk' => true, 'autopatrol' => true, 'suppressredirect' => true, 'apihighlimits' => true, ], 'sysop' => [ 'block' => true, 'createaccount' => true, 'createpreviouslyrenamedaccount' => true, 'delete' => true, 'bigdelete' => true, 'deletedhistory' => true, 'deletedtext' => true, 'undelete' => true, 'editcontentmodel' => true, 'editinterface' => true, 'editsitejson' => true, 'edituserjson' => true, 'import' => true, 'importupload' => true, 'move' => true, 'move-subpages' => true, 'move-rootuserpages' => true, 'move-categorypages' => true, 'patrol' => true, 'autopatrol' => true, 'protect' => true, 'editprotected' => true, 'rollback' => true, 'upload' => true, 'reupload' => true, 'reupload-shared' => true, 'unwatchedpages' => true, 'autoconfirmed' => true, 'editsemiprotected' => true, 'ipblock-exempt' => true, 'blockemail' => true, 'markbotedits' => true, 'apihighlimits' => true, 'browsearchive' => true, 'noratelimit' => true, 'movefile' => true, 'unblockself' => true, 'suppressredirect' => true, 'mergehistory' => true, 'managechangetags' => true, 'deletechangetags' => true, ], 'interface-admin' => [ 'editinterface' => true, 'editsitecss' => true, 'editsitejson' => true, 'editsitejs' => true, 'editusercss' => true, 'edituserjson' => true, 'edituserjs' => true, ], 'bureaucrat' => [ 'userrights' => true, 'noratelimit' => true, 'renameuser' => true, ], 'suppress' => [ 'hideuser' => true, 'suppressrevision' => true, 'viewsuppressed' => true, 'suppressionlog' => true, 'deleterevision' => true, 'deletelogentry' => true, ], ], 'PrivilegedGroups' => [ 'bureaucrat', 'interface-admin', 'suppress', 'sysop', ], 'RevokePermissions' => [ ], 'GroupInheritsPermissions' => [ ], 'ImplicitGroups' => [ '*', 'user', 'autoconfirmed', ], 'GroupsAddToSelf' => [ ], 'GroupsRemoveFromSelf' => [ ], 'RestrictedGroups' => [ ], 'UserRequirementsPrivateConditions' => [ ], 'RestrictionTypes' => [ 'create', 'edit', 'move', 'upload', ], 'RestrictionLevels' => [ '', 'autoconfirmed', 'sysop', ], 'CascadingRestrictionLevels' => [ 'sysop', ], 'SemiprotectedRestrictionLevels' => [ 'autoconfirmed', ], 'NamespaceProtection' => [ ], 'RestrictUserPageEditing' => false, 'NonincludableNamespaces' => [ ], 'AutoConfirmAge' => 0, 'AutoConfirmCount' => 0, 'Autopromote' => [ 'autoconfirmed' => [ '&', [ 1, null, ], [ 2, null, ], ], ], 'AutopromoteOnce' => [ 'onEdit' => [ ], ], 'AutopromoteOnceLogInRC' => true, 'AutopromoteOnceRCExcludedGroups' => [ ], 'AddGroups' => [ ], 'RemoveGroups' => [ ], 'AvailableRights' => [ ], 'ImplicitRights' => [ ], 'DeleteRevisionsLimit' => 0, 'DeleteRevisionsBatchSize' => 1000, 'HideUserContribLimit' => 1000, 'AccountCreationThrottle' => [ [ 'count' => 0, 'seconds' => 86400, ], ], 'TempAccountCreationThrottle' => [ [ 'count' => 1, 'seconds' => 600, ], [ 'count' => 6, 'seconds' => 86400, ], ], 'TempAccountNameAcquisitionThrottle' => [ [ 'count' => 60, 'seconds' => 86400, ], ], 'SpamRegex' => [ ], 'SummarySpamRegex' => [ ], 'EnableDnsBlacklist' => false, 'DnsBlacklistUrls' => [ ], 'ProxyList' => [ ], 'ProxyWhitelist' => [ ], 'SoftBlockRanges' => [ ], 'ApplyIpBlocksToXff' => false, 'RateLimits' => [ 'edit' => [ 'ip' => [ 8, 60, ], 'newbie' => [ 8, 60, ], 'user' => [ 90, 60, ], ], 'move' => [ 'newbie' => [ 2, 120, ], 'user' => [ 8, 60, ], ], 'upload' => [ 'ip' => [ 8, 60, ], 'newbie' => [ 8, 60, ], ], 'rollback' => [ 'user' => [ 10, 60, ], 'newbie' => [ 5, 120, ], ], 'mailpassword' => [ 'ip' => [ 5, 3600, ], ], 'sendemail' => [ 'ip' => [ 5, 86400, ], 'newbie' => [ 5, 86400, ], 'user' => [ 20, 86400, ], ], 'changeemail' => [ 'ip-all' => [ 10, 3600, ], 'user' => [ 4, 86400, ], ], 'confirmemail' => [ 'ip-all' => [ 10, 3600, ], 'user' => [ 4, 86400, ], ], 'purge' => [ 'ip' => [ 30, 60, ], 'user' => [ 30, 60, ], ], 'linkpurge' => [ 'ip' => [ 30, 60, ], 'user' => [ 30, 60, ], ], 'renderfile' => [ 'ip' => [ 700, 30, ], 'user' => [ 700, 30, ], ], 'renderfile-nonstandard' => [ 'ip' => [ 70, 30, ], 'user' => [ 70, 30, ], ], 'stashedit' => [ 'ip' => [ 30, 60, ], 'newbie' => [ 30, 60, ], ], 'stashbasehtml' => [ 'ip' => [ 5, 60, ], 'newbie' => [ 5, 60, ], ], 'changetags' => [ 'ip' => [ 8, 60, ], 'newbie' => [ 8, 60, ], ], 'editcontentmodel' => [ 'newbie' => [ 2, 120, ], 'user' => [ 8, 60, ], ], ], 'RateLimitsExcludedIPs' => [ ], 'PutIPinRC' => true, 'QueryPageDefaultLimit' => 50, 'ExternalQuerySources' => [ ], 'PasswordAttemptThrottle' => [ [ 'count' => 5, 'seconds' => 300, ], [ 'count' => 150, 'seconds' => 172800, ], ], 'GrantPermissions' => [ 'basic' => [ 'autocreateaccount' => true, 'autoconfirmed' => true, 'autopatrol' => true, 'editsemiprotected' => true, 'ipblock-exempt' => true, 'nominornewtalk' => true, 'patrolmarks' => true, 'read' => true, 'unwatchedpages' => true, ], 'highvolume' => [ 'bot' => true, 'apihighlimits' => true, 'noratelimit' => true, 'markbotedits' => true, ], 'import' => [ 'import' => true, 'importupload' => true, ], 'editpage' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'pagelang' => true, ], 'editprotected' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'editprotected' => true, ], 'editmycssjs' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'editmyusercss' => true, 'editmyuserjson' => true, 'editmyuserjs' => true, ], 'editmyoptions' => [ 'editmyoptions' => true, 'editmyuserjson' => true, ], 'editinterface' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'editinterface' => true, 'edituserjson' => true, 'editsitejson' => true, ], 'editsiteconfig' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'editinterface' => true, 'edituserjson' => true, 'editsitejson' => true, 'editusercss' => true, 'edituserjs' => true, 'editsitecss' => true, 'editsitejs' => true, ], 'createeditmovepage' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'createpage' => true, 'createtalk' => true, 'delete-redirect' => true, 'move' => true, 'move-rootuserpages' => true, 'move-subpages' => true, 'move-categorypages' => true, 'suppressredirect' => true, ], 'uploadfile' => [ 'upload' => true, 'reupload-own' => true, ], 'uploadeditmovefile' => [ 'upload' => true, 'reupload-own' => true, 'reupload' => true, 'reupload-shared' => true, 'upload_by_url' => true, 'movefile' => true, 'suppressredirect' => true, ], 'patrol' => [ 'patrol' => true, ], 'rollback' => [ 'rollback' => true, ], 'blockusers' => [ 'block' => true, 'blockemail' => true, ], 'viewdeleted' => [ 'browsearchive' => true, 'deletedhistory' => true, 'deletedtext' => true, ], 'viewrestrictedlogs' => [ 'suppressionlog' => true, ], 'delete' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'browsearchive' => true, 'deletedhistory' => true, 'deletedtext' => true, 'delete' => true, 'bigdelete' => true, 'deletelogentry' => true, 'deleterevision' => true, 'undelete' => true, ], 'oversight' => [ 'suppressrevision' => true, 'viewsuppressed' => true, ], 'protect' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'createwithcontentmodel' => true, 'editprotected' => true, 'protect' => true, ], 'viewmywatchlist' => [ 'viewmywatchlist' => true, ], 'editmywatchlist' => [ 'editmywatchlist' => true, ], 'sendemail' => [ 'sendemail' => true, ], 'createaccount' => [ 'createaccount' => true, ], 'privateinfo' => [ 'viewmyprivateinfo' => true, ], 'mergehistory' => [ 'mergehistory' => true, ], 'managesessions' => [ 'logout' => true, ], ], 'GrantPermissionGroups' => [ 'basic' => 'hidden', 'editpage' => 'page-interaction', 'createeditmovepage' => 'page-interaction', 'editprotected' => 'page-interaction', 'patrol' => 'page-interaction', 'uploadfile' => 'file-interaction', 'uploadeditmovefile' => 'file-interaction', 'sendemail' => 'email', 'viewmywatchlist' => 'watchlist-interaction', 'editviewmywatchlist' => 'watchlist-interaction', 'editmycssjs' => 'customization', 'editmyoptions' => 'customization', 'editinterface' => 'administration', 'editsiteconfig' => 'administration', 'rollback' => 'administration', 'blockusers' => 'administration', 'delete' => 'administration', 'viewdeleted' => 'administration', 'viewrestrictedlogs' => 'administration', 'protect' => 'administration', 'oversight' => 'administration', 'createaccount' => 'administration', 'mergehistory' => 'administration', 'import' => 'administration', 'highvolume' => 'high-volume', 'privateinfo' => 'private-information', 'managesessions' => 'private-information', ], 'GrantRiskGroups' => [ 'basic' => 'low', 'editpage' => 'low', 'createeditmovepage' => 'low', 'editprotected' => 'vandalism', 'patrol' => 'low', 'uploadfile' => 'low', 'uploadeditmovefile' => 'low', 'sendemail' => 'security', 'viewmywatchlist' => 'low', 'editviewmywatchlist' => 'low', 'editmycssjs' => 'security', 'editmyoptions' => 'security', 'editinterface' => 'vandalism', 'editsiteconfig' => 'security', 'rollback' => 'low', 'blockusers' => 'vandalism', 'delete' => 'vandalism', 'viewdeleted' => 'vandalism', 'viewrestrictedlogs' => 'security', 'protect' => 'vandalism', 'oversight' => 'security', 'createaccount' => 'low', 'mergehistory' => 'vandalism', 'import' => 'security', 'highvolume' => 'low', 'privateinfo' => 'low', ], 'EnableBotPasswords' => true, 'BotPasswordsCluster' => false, 'BotPasswordsDatabase' => false, 'BotPasswordsLimit' => 100, 'SecretKey' => false, 'JwtPrivateKey' => false, 'JwtPublicKey' => false, 'AllowUserJs' => false, 'ReauthenticateForActions' => [ 'edituserjs' => 'edituserjscss', 'editusercss' => 'edituserjscss', 'editsitejs' => 'editsitejscss', 'editsitecss' => 'editsitejscss', ], 'AllowUserCss' => false, 'AllowUserCssPrefs' => true, 'UseSiteJs' => true, 'UseSiteCss' => true, 'BreakFrames' => false, 'EditPageFrameOptions' => 'DENY', 'ApiFrameOptions' => 'DENY', 'CSPHeader' => false, 'CSPReportOnlyHeader' => false, 'CSPUseReportURIDirective' => false, 'CSPFalsePositiveUrls' => [ 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'https: 'chrome-extension' => true, ], 'AllowCrossOrigin' => false, 'RestAllowCrossOriginCookieAuth' => false, 'SessionSecret' => false, 'CookieExpiration' => 2592000, 'ExtendedLoginCookieExpiration' => 15552000, 'SessionCookieJwtExpiration' => 14400, 'CookieDomain' => '', 'CookiePath' => '/', 'CookieSecure' => 'detect', 'CookiePrefix' => false, 'CookieHttpOnly' => true, 'CookieSameSite' => null, 'CacheVaryCookies' => [ ], 'SessionName' => false, 'CookieSetOnAutoblock' => true, 'CookieSetOnIpBlock' => true, 'DebugLogFile' => '', 'DebugLogPrefix' => '', 'DebugRedirects' => false, 'DebugRawPage' => false, 'DebugComments' => false, 'DebugDumpSql' => false, 'TrxProfilerLimits' => [ 'GET' => [ 'masterConns' => 0, 'writes' => 0, 'readQueryTime' => 5, 'readQueryRows' => 10000, ], 'POST' => [ 'readQueryTime' => 5, 'writeQueryTime' => 1, 'readQueryRows' => 100000, 'maxAffected' => 1000, ], 'POST-nonwrite' => [ 'writes' => 0, 'readQueryTime' => 5, 'readQueryRows' => 10000, ], 'PostSend-GET' => [ 'readQueryTime' => 5, 'writeQueryTime' => 1, 'readQueryRows' => 10000, 'maxAffected' => 1000, 'masterConns' => 0, 'writes' => 0, ], 'PostSend-POST' => [ 'readQueryTime' => 5, 'writeQueryTime' => 1, 'readQueryRows' => 100000, 'maxAffected' => 1000, ], 'JobRunner' => [ 'readQueryTime' => 30, 'writeQueryTime' => 5, 'readQueryRows' => 100000, 'maxAffected' => 500, ], 'Maintenance' => [ 'writeQueryTime' => 5, 'maxAffected' => 1000, ], ], 'DebugLogGroups' => [ ], 'MWLoggerDefaultSpi' => [ 'class' => 'MediaWiki\\Logger\\LegacySpi', ], 'ShowDebug' => false, 'SpecialVersionShowHooks' => false, 'ShowExceptionDetails' => false, 'LogExceptionBacktrace' => true, 'PropagateErrors' => true, 'ShowHostnames' => false, 'OverrideHostname' => false, 'DevelopmentWarnings' => false, 'DeprecationReleaseLimit' => false, 'Profiler' => [ ], 'StatsdServer' => false, 'StatsdMetricPrefix' => 'MediaWiki', 'StatsTarget' => null, 'StatsFormat' => null, 'StatsPrefix' => 'mediawiki', 'OpenTelemetryConfig' => null, 'PageInfoTransclusionLimit' => 50, 'EnableJavaScriptTest' => false, 'CachePrefix' => false, 'DebugToolbar' => false, 'ApiClientErrorSampleRate' => 1.0, 'DisableTextSearch' => false, 'AdvancedSearchHighlighting' => false, 'SearchHighlightBoundaries' => '[\\p{Z}\\p{P}\\p{C}]', 'OpenSearchTemplates' => [ 'application/x-suggestions+json' => false, 'application/x-suggestions+xml' => false, ], 'OpenSearchDefaultLimit' => 10, 'OpenSearchDescriptionLength' => 100, 'SearchSuggestCacheExpiry' => 1200, 'DisableSearchUpdate' => false, 'NamespacesToBeSearchedDefault' => [ true, ], 'DisableInternalSearch' => false, 'SearchForwardUrl' => null, 'SitemapNamespaces' => false, 'SitemapNamespacesPriorities' => false, 'SitemapApiConfig' => [ ], 'SpecialSearchFormOptions' => [ ], 'SearchMatchRedirectPreference' => false, 'SearchRunSuggestedQuery' => true, 'Diff3' => '/usr/bin/diff3', 'Diff' => '/usr/bin/diff', 'PreviewOnOpenNamespaces' => [ 14 => true, ], 'UniversalEditButton' => true, 'UseAutomaticEditSummaries' => true, 'CommandLineDarkBg' => false, 'ReadOnly' => null, 'ReadOnlyWatchedItemStore' => false, 'ReadOnlyFile' => false, 'UpgradeKey' => false, 'GitBin' => '/usr/bin/git', 'GitRepositoryViewers' => [ 'https: 'ssh: 'https: 'git@github\\.com:(.*?)(\\.git)?' => 'https: ], 'InstallerInitialPages' => [ [ 'titlemsg' => 'mainpage', 'text' => '{{subst:int:mainpagetext}}{{subst:int:mainpagedocfooter}}', ], ], 'RCMaxAge' => 7776000, 'WatchersMaxAge' => 15552000, 'UnwatchedPageSecret' => 1, 'RCFilterByAge' => false, 'RCLinkLimits' => [ 50, 100, 250, 500, ], 'RCLinkDays' => [ 1, 3, 7, 14, 30, ], 'RCFeeds' => [ ], 'RCWatchCategoryMembership' => false, 'UseRCPatrol' => true, 'StructuredChangeFiltersLiveUpdatePollingRate' => 3, 'UseNPPatrol' => true, 'UseFilePatrol' => true, 'Feed' => true, 'FeedLimit' => 50, 'FeedCacheTimeout' => 60, 'FeedDiffCutoff' => 32768, 'OverrideSiteFeed' => [ ], 'FeedClasses' => [ 'rss' => 'MediaWiki\\Feed\\RSSFeed', 'atom' => 'MediaWiki\\Feed\\AtomFeed', ], 'AdvertisedFeedTypes' => [ 'atom', ], 'RCShowWatchingUsers' => false, 'RCShowChangedSize' => true, 'RCChangedSizeThreshold' => 500, 'ShowUpdatedMarker' => true, 'DisableAnonTalk' => false, 'UseTagFilter' => true, 'SoftwareTags' => [ 'mw-contentmodelchange' => true, 'mw-new-redirect' => true, 'mw-removed-redirect' => true, 'mw-changed-redirect-target' => true, 'mw-blank' => true, 'mw-replace' => true, 'mw-recreated' => true, 'mw-rollback' => true, 'mw-undo' => true, 'mw-manual-revert' => true, 'mw-reverted' => true, 'mw-server-side-upload' => true, 'mw-ipblock-appeal' => true, 'mw-edited-other-users-js' => true, 'mw-edited-other-users-css' => true, ], 'RestrictedTagViewRights' => [ ], 'UnwatchedPageThreshold' => false, 'RecentChangesFlags' => [ 'newpage' => [ 'letter' => 'newpageletter', 'title' => 'recentchanges-label-newpage', 'legend' => 'recentchanges-legend-newpage', 'grouping' => 'any', ], 'minor' => [ 'letter' => 'minoreditletter', 'title' => 'recentchanges-label-minor', 'legend' => 'recentchanges-legend-minor', 'class' => 'minoredit', 'grouping' => 'all', ], 'bot' => [ 'letter' => 'boteditletter', 'title' => 'recentchanges-label-bot', 'legend' => 'recentchanges-legend-bot', 'class' => 'botedit', 'grouping' => 'all', ], 'unpatrolled' => [ 'letter' => 'unpatrolledletter', 'title' => 'recentchanges-label-unpatrolled', 'legend' => 'recentchanges-legend-unpatrolled', 'grouping' => 'any', ], ], 'WatchlistExpiry' => false, 'EnableWatchstarPopover' => false, 'EnableWatchlistLabels' => false, 'WatchlistLabelsMaxPerUser' => 100, 'WatchlistPurgeRate' => 0.1, 'WatchlistExpiryMaxDuration' => '1 year', 'EnableChangesListQueryPartitioning' => false, 'RightsPage' => null, 'RightsUrl' => null, 'RightsText' => null, 'RightsIcon' => null, 'UseCopyrightUpload' => false, 'MaxCredits' => 0, 'ShowCreditsIfMax' => true, 'ImportSources' => [ ], 'ImportTargetNamespace' => null, 'ExportAllowHistory' => true, 'ExportMaxHistory' => 0, 'ExportAllowListContributors' => false, 'ExportMaxLinkDepth' => 0, 'ExportFromNamespaces' => false, 'ExportAllowAll' => false, 'ExportPagelistLimit' => 5000, 'XmlDumpSchemaVersion' => '0.11', 'WikiFarmSettingsDirectory' => null, 'WikiFarmSettingsExtension' => 'yaml', 'ExtensionFunctions' => [ ], 'ExtensionMessagesFiles' => [ ], 'MessagesDirs' => [ ], 'TranslationAliasesDirs' => [ ], 'ExtensionEntryPointListFiles' => [ ], 'EnableParserLimitReporting' => true, 'ValidSkinNames' => [ ], 'SpecialPages' => [ ], 'ExtensionCredits' => [ ], 'Hooks' => [ ], 'ServiceWiringFiles' => [ ], 'JobClasses' => [ 'deletePage' => 'MediaWiki\\Page\\DeletePageJob', 'refreshLinks' => 'MediaWiki\\JobQueue\\Jobs\\RefreshLinksJob', 'deleteLinks' => 'MediaWiki\\Page\\DeleteLinksJob', 'htmlCacheUpdate' => 'MediaWiki\\JobQueue\\Jobs\\HTMLCacheUpdateJob', 'sendMail' => [ 'class' => 'MediaWiki\\Mail\\EmaillingJob', 'services' => [ 'Emailer', ], ], 'enotifNotify' => [ 'class' => 'MediaWiki\\RecentChanges\\RecentChangeNotifyJob', 'services' => [ 'RecentChangeLookup', ], ], 'fixDoubleRedirect' => [ 'class' => 'MediaWiki\\JobQueue\\Jobs\\DoubleRedirectJob', 'services' => [ 'RevisionLookup', 'MagicWordFactory', 'WikiPageFactory', ], 'needsPage' => true, ], 'AssembleUploadChunks' => 'MediaWiki\\JobQueue\\Jobs\\AssembleUploadChunksJob', 'PublishStashedFile' => 'MediaWiki\\JobQueue\\Jobs\\PublishStashedFileJob', 'ThumbnailRender' => 'MediaWiki\\JobQueue\\Jobs\\ThumbnailRenderJob', 'UploadFromUrl' => 'MediaWiki\\JobQueue\\Jobs\\UploadFromUrlJob', 'recentChangesUpdate' => 'MediaWiki\\RecentChanges\\RecentChangesUpdateJob', 'refreshLinksPrioritized' => 'MediaWiki\\JobQueue\\Jobs\\RefreshLinksJob', 'refreshLinksDynamic' => 'MediaWiki\\JobQueue\\Jobs\\RefreshLinksJob', 'activityUpdateJob' => 'MediaWiki\\Watchlist\\ActivityUpdateJob', 'categoryMembershipChange' => [ 'class' => 'MediaWiki\\RecentChanges\\CategoryMembershipChangeJob', 'services' => [ 'RecentChangeFactory', ], ], 'CategoryCountUpdateJob' => [ 'class' => 'MediaWiki\\JobQueue\\Jobs\\CategoryCountUpdateJob', 'services' => [ 'ConnectionProvider', 'NamespaceInfo', ], ], 'clearUserWatchlist' => 'MediaWiki\\Watchlist\\ClearUserWatchlistJob', 'watchlistExpiry' => 'MediaWiki\\Watchlist\\WatchlistExpiryJob', 'cdnPurge' => 'MediaWiki\\JobQueue\\Jobs\\CdnPurgeJob', 'userGroupExpiry' => 'MediaWiki\\User\\UserGroupExpiryJob', 'clearWatchlistNotifications' => 'MediaWiki\\Watchlist\\ClearWatchlistNotificationsJob', 'userOptionsUpdate' => 'MediaWiki\\User\\Options\\UserOptionsUpdateJob', 'revertedTagUpdate' => 'MediaWiki\\JobQueue\\Jobs\\RevertedTagUpdateJob', 'null' => 'MediaWiki\\JobQueue\\Jobs\\NullJob', 'userEditCountInit' => 'MediaWiki\\User\\UserEditCountInitJob', 'parsoidCachePrewarm' => [ 'class' => 'MediaWiki\\JobQueue\\Jobs\\ParsoidCachePrewarmJob', 'services' => [ 'ParserOutputAccess', 'PageStore', 'RevisionLookup', 'ParsoidSiteConfig', ], 'needsPage' => false, ], 'renameUserTable' => [ 'class' => 'MediaWiki\\RenameUser\\Job\\RenameUserTableJob', 'services' => [ 'MainConfig', 'DBLoadBalancerFactory', ], ], 'renameUserDerived' => [ 'class' => 'MediaWiki\\RenameUser\\Job\\RenameUserDerivedJob', 'services' => [ 'RenameUserFactory', 'UserFactory', ], ], 'renameUser' => [ 'class' => 'MediaWiki\\RenameUser\\Job\\RenameUserTableJob', 'services' => [ 'MainConfig', 'DBLoadBalancerFactory', ], ], ], 'JobTypesExcludedFromDefaultQueue' => [ 'AssembleUploadChunks', 'PublishStashedFile', 'UploadFromUrl', ], 'JobBackoffThrottling' => [ ], 'JobTypeConf' => [ 'default' => [ 'class' => 'MediaWiki\\JobQueue\\JobQueueDB', 'order' => 'random', 'claimTTL' => 3600, ], ], 'JobQueueIncludeInMaxLagFactor' => false, 'SpecialPageCacheUpdates' => [ 'Statistics' => [ 'MediaWiki\\Deferred\\SiteStatsUpdate', 'cacheUpdate', ], ], 'PagePropLinkInvalidations' => [ 'hiddencat' => 'categorylinks', ], 'CategoryMagicGallery' => true, 'CategoryPagingLimit' => 200, 'CategoryCollation' => 'uppercase', 'TempCategoryCollations' => [ ], 'SortedCategories' => false, 'TrackingCategories' => [ ], 'LogTypes' => [ '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'import', 'interwiki', 'patrol', 'merge', 'suppress', 'tag', 'managetags', 'contentmodel', 'renameuser', ], 'LogRestrictions' => [ 'suppress' => 'suppressionlog', ], 'FilterLogTypes' => [ 'patrol' => true, 'tag' => true, 'newusers' => false, ], 'LogNames' => [ '' => 'all-logs-page', 'block' => 'blocklogpage', 'protect' => 'protectlogpage', 'rights' => 'rightslog', 'delete' => 'dellogpage', 'upload' => 'uploadlogpage', 'move' => 'movelogpage', 'import' => 'importlogpage', 'patrol' => 'patrol-log-page', 'merge' => 'mergelog', 'suppress' => 'suppressionlog', ], 'LogHeaders' => [ '' => 'alllogstext', 'block' => 'blocklogtext', 'delete' => 'dellogpagetext', 'import' => 'importlogpagetext', 'merge' => 'mergelogpagetext', 'move' => 'movelogpagetext', 'patrol' => 'patrol-log-header', 'protect' => 'protectlogtext', 'rights' => 'rightslogtext', 'suppress' => 'suppressionlogtext', 'upload' => 'uploadlogpagetext', ], 'LogActions' => [ ], 'LogActionsHandlers' => [ 'block/block' => [ 'class' => 'MediaWiki\\Logging\\BlockLogFormatter', 'services' => [ 'TitleParser', 'NamespaceInfo', ], ], 'block/reblock' => [ 'class' => 'MediaWiki\\Logging\\BlockLogFormatter', 'services' => [ 'TitleParser', 'NamespaceInfo', ], ], 'block/unblock' => [ 'class' => 'MediaWiki\\Logging\\BlockLogFormatter', 'services' => [ 'TitleParser', 'NamespaceInfo', ], ], 'contentmodel/change' => 'MediaWiki\\Logging\\ContentModelLogFormatter', 'contentmodel/new' => 'MediaWiki\\Logging\\ContentModelLogFormatter', 'delete/delete' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'delete/delete_redir' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'delete/delete_redir2' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'delete/event' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'delete/restore' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'delete/revision' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'import/interwiki' => 'MediaWiki\\Logging\\ImportLogFormatter', 'import/upload' => 'MediaWiki\\Logging\\ImportLogFormatter', 'interwiki/iw_add' => 'MediaWiki\\Logging\\InterwikiLogFormatter', 'interwiki/iw_delete' => 'MediaWiki\\Logging\\InterwikiLogFormatter', 'interwiki/iw_edit' => 'MediaWiki\\Logging\\InterwikiLogFormatter', 'managetags/activate' => 'MediaWiki\\Logging\\LogFormatter', 'managetags/create' => 'MediaWiki\\Logging\\LogFormatter', 'managetags/deactivate' => 'MediaWiki\\Logging\\LogFormatter', 'managetags/delete' => 'MediaWiki\\Logging\\LogFormatter', 'merge/merge' => [ 'class' => 'MediaWiki\\Logging\\MergeLogFormatter', 'services' => [ 'TitleParser', ], ], 'merge/merge-into' => [ 'class' => 'MediaWiki\\Logging\\MergeLogFormatter', 'services' => [ 'TitleParser', ], ], 'move/move' => [ 'class' => 'MediaWiki\\Logging\\MoveLogFormatter', 'services' => [ 'TitleParser', ], ], 'move/move_redir' => [ 'class' => 'MediaWiki\\Logging\\MoveLogFormatter', 'services' => [ 'TitleParser', ], ], 'patrol/patrol' => 'MediaWiki\\Logging\\PatrolLogFormatter', 'patrol/autopatrol' => 'MediaWiki\\Logging\\PatrolLogFormatter', 'protect/modify' => [ 'class' => 'MediaWiki\\Logging\\ProtectLogFormatter', 'services' => [ 'TitleParser', ], ], 'protect/move_prot' => [ 'class' => 'MediaWiki\\Logging\\ProtectLogFormatter', 'services' => [ 'TitleParser', ], ], 'protect/protect' => [ 'class' => 'MediaWiki\\Logging\\ProtectLogFormatter', 'services' => [ 'TitleParser', ], ], 'protect/unprotect' => [ 'class' => 'MediaWiki\\Logging\\ProtectLogFormatter', 'services' => [ 'TitleParser', ], ], 'renameuser/renameuser' => [ 'class' => 'MediaWiki\\Logging\\RenameuserLogFormatter', 'services' => [ 'TitleParser', ], ], 'rights/autopromote' => 'MediaWiki\\Logging\\RightsLogFormatter', 'rights/rights' => 'MediaWiki\\Logging\\RightsLogFormatter', 'suppress/block' => [ 'class' => 'MediaWiki\\Logging\\BlockLogFormatter', 'services' => [ 'TitleParser', 'NamespaceInfo', ], ], 'suppress/delete' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'suppress/event' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'suppress/reblock' => [ 'class' => 'MediaWiki\\Logging\\BlockLogFormatter', 'services' => [ 'TitleParser', 'NamespaceInfo', ], ], 'suppress/revision' => 'MediaWiki\\Logging\\DeleteLogFormatter', 'tag/update' => 'MediaWiki\\Logging\\TagLogFormatter', 'upload/overwrite' => 'MediaWiki\\Logging\\UploadLogFormatter', 'upload/revert' => 'MediaWiki\\Logging\\UploadLogFormatter', 'upload/upload' => 'MediaWiki\\Logging\\UploadLogFormatter', ], 'ActionFilteredLogs' => [ 'block' => [ 'block' => [ 'block', ], 'reblock' => [ 'reblock', ], 'unblock' => [ 'unblock', ], ], 'contentmodel' => [ 'change' => [ 'change', ], 'new' => [ 'new', ], ], 'delete' => [ 'delete' => [ 'delete', ], 'delete_redir' => [ 'delete_redir', 'delete_redir2', ], 'restore' => [ 'restore', ], 'event' => [ 'event', ], 'revision' => [ 'revision', ], ], 'import' => [ 'interwiki' => [ 'interwiki', ], 'upload' => [ 'upload', ], ], 'managetags' => [ 'create' => [ 'create', ], 'delete' => [ 'delete', ], 'activate' => [ 'activate', ], 'deactivate' => [ 'deactivate', ], ], 'move' => [ 'move' => [ 'move', ], 'move_redir' => [ 'move_redir', ], ], 'newusers' => [ 'create' => [ 'create', 'newusers', ], 'create2' => [ 'create2', ], 'autocreate' => [ 'autocreate', ], 'byemail' => [ 'byemail', ], ], 'protect' => [ 'protect' => [ 'protect', ], 'modify' => [ 'modify', ], 'unprotect' => [ 'unprotect', ], 'move_prot' => [ 'move_prot', ], ], 'rights' => [ 'rights' => [ 'rights', ], 'autopromote' => [ 'autopromote', ], ], 'suppress' => [ 'event' => [ 'event', ], 'revision' => [ 'revision', ], 'delete' => [ 'delete', ], 'block' => [ 'block', ], 'reblock' => [ 'reblock', ], ], 'upload' => [ 'upload' => [ 'upload', ], 'overwrite' => [ 'overwrite', ], 'revert' => [ 'revert', ], ], ], 'NewUserLog' => true, 'PageCreationLog' => true, 'AllowSpecialInclusion' => true, 'DisableQueryPageUpdate' => false, 'CountCategorizedImagesAsUsed' => false, 'MaxRedirectLinksRetrieved' => 500, 'RangeContributionsCIDRLimit' => [ 'IPv4' => 16, 'IPv6' => 32, ], 'Actions' => [ ], 'DefaultRobotPolicy' => 'index,follow', 'NamespaceRobotPolicies' => [ ], 'ArticleRobotPolicies' => [ ], 'ExemptFromUserRobotsControl' => null, 'DebugAPI' => false, 'APIModules' => [ ], 'APIFormatModules' => [ ], 'APIMetaModules' => [ ], 'APIPropModules' => [ ], 'APIListModules' => [ ], 'APIMaxDBRows' => 5000, 'APIMaxResultSize' => 8388608, 'APIMaxUncachedDiffs' => 1, 'APIMaxLagThreshold' => 7, 'APICacheHelpTimeout' => 3600, 'APIUselessQueryPages' => [ 'MIMEsearch', 'LinkSearch', ], 'AjaxLicensePreview' => true, 'CrossSiteAJAXdomains' => [ ], 'CrossSiteAJAXdomainExceptions' => [ ], 'AllowedCorsHeaders' => [ 'Accept', 'Accept-Language', 'Content-Language', 'Content-Type', 'Accept-Encoding', 'DNT', 'Origin', 'User-Agent', 'Api-User-Agent', 'Promise-Non-Write-API-Action', 'Access-Control-Max-Age', 'Authorization', ], 'RestAPIAdditionalRouteFiles' => [ ], 'RestSandboxSpecs' => [ ], 'RestLocalModuleTestBaseUrl' => null, 'RestModuleOverrides' => [ ], 'RestExternalModules' => [ ], 'MaxShellMemory' => 307200, 'MaxShellFileSize' => 102400, 'MaxShellTime' => 180, 'MaxShellWallClockTime' => 180, 'ShellCgroup' => false, 'PhpCli' => '/usr/bin/php', 'ShellRestrictionMethod' => 'autodetect', 'ShellboxUrls' => [ 'default' => null, ], 'ShellboxSecretKey' => null, 'ShellboxShell' => '/bin/sh', 'HTTPTimeout' => 25, 'HTTPConnectTimeout' => 5.0, 'HTTPMaxTimeout' => 0, 'HTTPMaxConnectTimeout' => 0, 'HTTPImportTimeout' => 25, 'AsyncHTTPTimeout' => 25, 'HTTPProxy' => '', 'LocalVirtualHosts' => [ ], 'LocalHTTPProxy' => false, 'AllowExternalReqID' => false, 'GenerateReqIDFormat' => 'rand24', 'JobRunRate' => 1, 'RunJobsAsync' => false, 'UpdateRowsPerJob' => 300, 'UpdateRowsPerQuery' => 100, 'RedirectOnLogin' => null, 'VirtualRestConfig' => [ 'paths' => [ ], 'modules' => [ ], 'global' => [ 'timeout' => 360, 'forwardCookies' => false, 'HTTPProxy' => null, ], ], 'EventRelayerConfig' => [ 'default' => [ 'class' => 'Wikimedia\\EventRelayer\\EventRelayerNull', ], ], 'Pingback' => false, 'OriginTrials' => [ ], 'ReportToExpiry' => 86400, 'ReportToEndpoints' => [ ], 'FeaturePolicyReportOnly' => [ ], 'SkinsPreferred' => [ 'vector-2022', 'vector', ], 'SpecialContributeSkinsEnabled' => [ ], 'SpecialContributeNewPageTarget' => null, 'EnableEditRecovery' => false, 'EditRecoveryExpiry' => 2592000, 'UseCodexSpecialBlock' => false, 'ShowLogoutConfirmation' => false, 'EnableProtectionIndicators' => true, 'OutputPipelineStages' => [ ], 'FeatureShutdown' => [ ], 'CloneArticleParserOutput' => true, 'UseLeximorph' => false, 'UsePostprocCacheLegacy' => false, 'UsePostprocCacheParsoid' => true, 'ParserOptionsLogUnsafeSampleRate' => 0, 'ReturnExperimentalPFragmentTypes' => [ ], ], 'type' => [ 'ConfigRegistry' => 'object', 'AssumeProxiesUseDefaultProtocolPorts' => 'boolean', 'ForceHTTPS' => 'boolean', 'ExtensionDirectory' => [ 'string', 'null', ], 'StyleDirectory' => [ 'string', 'null', ], 'UploadDirectory' => [ 'string', 'boolean', 'null', ], 'Logos' => [ 'object', 'boolean', ], 'ReferrerPolicy' => [ 'array', 'string', 'boolean', ], 'ActionPaths' => 'object', 'MainPageIsDomainRoot' => 'boolean', 'ImgAuthUrlPathMap' => 'object', 'LocalFileRepo' => 'object', 'ForeignFileRepos' => 'array', 'UseSharedUploads' => 'boolean', 'SharedUploadDirectory' => [ 'string', 'null', ], 'SharedUploadPath' => [ 'string', 'null', ], 'HashedSharedUploadDirectory' => 'boolean', 'FetchCommonsDescriptions' => 'boolean', 'SharedUploadDBname' => [ 'boolean', 'string', ], 'SharedUploadDBprefix' => 'string', 'CacheSharedUploads' => 'boolean', 'ForeignUploadTargets' => 'array', 'UploadDialog' => 'object', 'FileBackends' => 'object', 'LockManagers' => 'array', 'DefaultLockManager' => [ 'string', 'null', ], 'CopyUploadsDomains' => 'array', 'CopyUploadTimeout' => [ 'boolean', 'integer', ], 'SharedThumbnailScriptPath' => [ 'string', 'boolean', ], 'HashedUploadDirectory' => 'boolean', 'CSPUploadEntryPoint' => 'boolean', 'FileExtensions' => 'array', 'ProhibitedFileExtensions' => 'array', 'MimeTypeExclusions' => 'array', 'TrustedMediaFormats' => 'array', 'MediaHandlers' => 'object', 'NativeImageLazyLoading' => 'boolean', 'ParserTestMediaHandlers' => 'object', 'MaxInterlacingAreas' => 'object', 'SVGConverters' => 'object', 'SVGNativeRendering' => [ 'string', 'boolean', ], 'MaxImageArea' => [ 'string', 'integer', 'boolean', ], 'TiffThumbnailType' => 'array', 'GenerateThumbnailOnParse' => 'boolean', 'EnableAutoRotation' => [ 'boolean', 'null', ], 'Antivirus' => [ 'string', 'null', ], 'AntivirusSetup' => 'object', 'MimeDetectorCommand' => [ 'string', 'null', ], 'XMLMimeTypes' => 'object', 'ImageLimits' => 'array', 'ThumbLimits' => 'array', 'ThumbnailNamespaces' => 'array', 'ThumbnailSteps' => [ 'array', 'null', ], 'ThumbnailBuckets' => [ 'array', 'null', ], 'UploadThumbnailRenderMap' => 'object', 'GalleryOptions' => 'object', 'DjvuDump' => [ 'string', 'null', ], 'DjvuRenderer' => [ 'string', 'null', ], 'DjvuTxt' => [ 'string', 'null', ], 'DjvuPostProcessor' => [ 'string', 'null', ], 'RestTermsOfServiceUrl' => [ 'string', 'null', ], 'SMTP' => [ 'boolean', 'object', ], 'EnotifFromEditor' => 'boolean', 'EmailConfirmationBanner' => 'boolean', 'EnotifRevealEditorAddress' => 'boolean', 'UsersNotifiedOnAllChanges' => 'object', 'DBmwschema' => [ 'string', 'null', ], 'SharedTables' => 'array', 'DBservers' => [ 'boolean', 'array', ], 'LBFactoryConf' => 'object', 'LocalDatabases' => 'array', 'VirtualDomainsMapping' => 'object', 'FileSchemaMigrationStage' => 'integer', 'ExternalLinksDomainGaps' => 'object', 'ContentHandlers' => 'object', 'NamespaceContentModels' => 'object', 'TextModelsToParse' => 'array', 'ExternalStores' => 'array', 'ExternalServers' => 'object', 'DefaultExternalStore' => [ 'array', 'boolean', ], 'RevisionCacheExpiry' => 'integer', 'PageLanguageUseDB' => 'boolean', 'DiffEngine' => [ 'string', 'null', ], 'ExternalDiffEngine' => [ 'string', 'boolean', ], 'Wikidiff2Options' => 'object', 'RequestTimeLimit' => [ 'integer', 'null', ], 'CriticalSectionTimeLimit' => 'number', 'PoolCounterConf' => [ 'object', 'null', ], 'PoolCountClientConf' => 'object', 'MaxUserDBWriteDuration' => [ 'integer', 'boolean', ], 'MaxJobDBWriteDuration' => [ 'integer', 'boolean', ], 'MultiShardSiteStats' => 'boolean', 'ObjectCaches' => 'object', 'WANObjectCache' => 'object', 'MicroStashType' => [ 'string', 'integer', ], 'ParsoidCacheConfig' => 'object', 'ParsoidSelectiveUpdateSampleRate' => 'integer', 'ParserCacheFilterConfig' => 'object', 'ChronologyProtectorSecret' => 'string', 'SuspiciousIpExpiry' => [ 'integer', 'boolean', ], 'MemCachedServers' => 'array', 'LocalisationCacheConf' => 'object', 'ExtensionInfoMTime' => [ 'integer', 'boolean', ], 'CdnServers' => 'object', 'CdnServersNoPurge' => 'object', 'HTCPRouting' => 'object', 'GrammarForms' => 'object', 'ExtraInterlanguageLinkPrefixes' => 'array', 'InterlanguageLinkCodeMap' => 'object', 'ExtraLanguageNames' => 'object', 'ExtraLanguageCodes' => 'object', 'DummyLanguageCodes' => 'object', 'DisabledVariants' => 'object', 'ForceUIMsgAsContentMsg' => 'object', 'RawHtmlMessages' => 'array', 'OverrideUcfirstCharacters' => 'object', 'XhtmlNamespaces' => 'object', 'BrowserFormatDetection' => 'string', 'SkinMetaTags' => 'object', 'SkipSkins' => 'object', 'FragmentMode' => 'array', 'FooterIcons' => 'object', 'InterwikiLogoOverride' => 'array', 'ResourceModules' => 'object', 'ResourceModuleSkinStyles' => 'object', 'ResourceLoaderSources' => 'object', 'ResourceLoaderMaxage' => 'object', 'ResourceLoaderMaxQueryLength' => [ 'integer', 'boolean', ], 'CanonicalNamespaceNames' => 'object', 'ExtraNamespaces' => 'object', 'ExtraGenderNamespaces' => 'object', 'NamespaceAliases' => 'object', 'CapitalLinkOverrides' => 'object', 'NamespacesWithSubpages' => 'object', 'NamespacesWithoutAutoSummaries' => 'array', 'ContentNamespaces' => 'array', 'ShortPagesNamespaceExclusions' => 'array', 'ExtraSignatureNamespaces' => 'array', 'InvalidRedirectTargets' => 'array', 'LocalInterwikis' => 'array', 'InterwikiCache' => [ 'boolean', 'object', ], 'SiteTypes' => 'object', 'UrlProtocols' => 'array', 'TidyConfig' => 'object', 'ParsoidSettings' => 'object', 'ParsoidExperimentalParserFunctionOutput' => 'boolean', 'NoFollowNsExceptions' => 'array', 'NoFollowDomainExceptions' => 'array', 'ExternalLinksIgnoreDomains' => 'array', 'EnableMagicLinks' => 'object', 'ManualRevertSearchRadius' => 'integer', 'RevertedTagMaxDepth' => 'integer', 'CentralIdLookupProviders' => 'object', 'CentralIdLookupProvider' => 'string', 'UserRegistrationProviders' => 'object', 'PasswordPolicy' => 'object', 'AuthManagerConfig' => [ 'object', 'null', ], 'AuthManagerAutoConfig' => 'object', 'RememberMe' => 'string', 'ReauthenticateTime' => 'object', 'ChangeCredentialsBlacklist' => 'array', 'RemoveCredentialsBlacklist' => 'array', 'PasswordConfig' => 'object', 'PasswordResetRoutes' => 'object', 'SignatureAllowedLintErrors' => 'array', 'ReservedUsernames' => 'array', 'DefaultUserOptions' => 'object', 'ConditionalUserOptions' => 'object', 'HiddenPrefs' => 'array', 'UserJsPrefLimit' => 'integer', 'AuthenticationTokenVersion' => [ 'string', 'null', ], 'SessionProviders' => 'object', 'AutoCreateTempUser' => 'object', 'AutoblockExemptions' => 'array', 'BlockCIDRLimit' => 'object', 'EnableMultiBlocks' => 'boolean', 'GroupPermissions' => 'object', 'PrivilegedGroups' => 'array', 'RevokePermissions' => 'object', 'GroupInheritsPermissions' => 'object', 'ImplicitGroups' => 'array', 'GroupsAddToSelf' => 'object', 'GroupsRemoveFromSelf' => 'object', 'RestrictedGroups' => 'object', 'UserRequirementsPrivateConditions' => 'array', 'RestrictionTypes' => 'array', 'RestrictionLevels' => 'array', 'CascadingRestrictionLevels' => 'array', 'SemiprotectedRestrictionLevels' => 'array', 'NamespaceProtection' => 'object', 'RestrictUserPageEditing' => 'boolean', 'NonincludableNamespaces' => 'object', 'Autopromote' => 'object', 'AutopromoteOnce' => 'object', 'AutopromoteOnceRCExcludedGroups' => 'array', 'AddGroups' => 'object', 'RemoveGroups' => 'object', 'AvailableRights' => 'array', 'ImplicitRights' => 'array', 'AccountCreationThrottle' => [ 'integer', 'array', ], 'TempAccountCreationThrottle' => 'array', 'TempAccountNameAcquisitionThrottle' => 'array', 'SpamRegex' => 'array', 'SummarySpamRegex' => 'array', 'DnsBlacklistUrls' => 'array', 'ProxyList' => [ 'string', 'array', ], 'ProxyWhitelist' => 'array', 'SoftBlockRanges' => 'array', 'RateLimits' => 'object', 'RateLimitsExcludedIPs' => 'array', 'ExternalQuerySources' => 'object', 'PasswordAttemptThrottle' => 'array', 'GrantPermissions' => 'object', 'GrantPermissionGroups' => 'object', 'GrantRiskGroups' => 'object', 'EnableBotPasswords' => 'boolean', 'BotPasswordsCluster' => [ 'string', 'boolean', ], 'BotPasswordsDatabase' => [ 'string', 'boolean', ], 'BotPasswordsLimit' => 'integer', 'ReauthenticateForActions' => 'object', 'CSPHeader' => [ 'boolean', 'object', ], 'CSPReportOnlyHeader' => [ 'boolean', 'object', ], 'CSPUseReportURIDirective' => [ 'boolean', 'object', ], 'CSPFalsePositiveUrls' => 'object', 'AllowCrossOrigin' => 'boolean', 'RestAllowCrossOriginCookieAuth' => 'boolean', 'CookieSameSite' => [ 'string', 'null', ], 'CacheVaryCookies' => 'array', 'TrxProfilerLimits' => 'object', 'DebugLogGroups' => 'object', 'MWLoggerDefaultSpi' => 'object', 'Profiler' => 'object', 'StatsTarget' => [ 'string', 'null', ], 'StatsFormat' => [ 'string', 'null', ], 'StatsPrefix' => 'string', 'OpenTelemetryConfig' => [ 'object', 'null', ], 'OpenSearchTemplates' => 'object', 'NamespacesToBeSearchedDefault' => 'object', 'SitemapNamespaces' => [ 'boolean', 'array', ], 'SitemapNamespacesPriorities' => [ 'boolean', 'object', ], 'SitemapApiConfig' => 'object', 'SpecialSearchFormOptions' => 'object', 'SearchMatchRedirectPreference' => 'boolean', 'SearchRunSuggestedQuery' => 'boolean', 'PreviewOnOpenNamespaces' => 'object', 'ReadOnlyWatchedItemStore' => 'boolean', 'GitRepositoryViewers' => 'object', 'InstallerInitialPages' => 'array', 'RCLinkLimits' => 'array', 'RCLinkDays' => 'array', 'RCFeeds' => 'object', 'OverrideSiteFeed' => 'object', 'FeedClasses' => 'object', 'AdvertisedFeedTypes' => 'array', 'SoftwareTags' => 'object', 'RestrictedTagViewRights' => 'object', 'RecentChangesFlags' => 'object', 'WatchlistExpiry' => 'boolean', 'EnableWatchstarPopover' => 'boolean', 'EnableWatchlistLabels' => 'boolean', 'WatchlistLabelsMaxPerUser' => 'integer', 'WatchlistPurgeRate' => 'number', 'WatchlistExpiryMaxDuration' => [ 'string', 'null', ], 'EnableChangesListQueryPartitioning' => 'boolean', 'ImportSources' => 'object', 'ExtensionFunctions' => 'array', 'ExtensionMessagesFiles' => 'object', 'MessagesDirs' => 'object', 'TranslationAliasesDirs' => 'object', 'ExtensionEntryPointListFiles' => 'object', 'ValidSkinNames' => 'object', 'SpecialPages' => 'object', 'ExtensionCredits' => 'object', 'Hooks' => 'object', 'ServiceWiringFiles' => 'array', 'JobClasses' => 'object', 'JobTypesExcludedFromDefaultQueue' => 'array', 'JobBackoffThrottling' => 'object', 'JobTypeConf' => 'object', 'SpecialPageCacheUpdates' => 'object', 'PagePropLinkInvalidations' => 'object', 'TempCategoryCollations' => 'array', 'SortedCategories' => 'boolean', 'TrackingCategories' => 'array', 'LogTypes' => 'array', 'LogRestrictions' => 'object', 'FilterLogTypes' => 'object', 'LogNames' => 'object', 'LogHeaders' => 'object', 'LogActions' => 'object', 'LogActionsHandlers' => 'object', 'ActionFilteredLogs' => 'object', 'RangeContributionsCIDRLimit' => 'object', 'Actions' => 'object', 'NamespaceRobotPolicies' => 'object', 'ArticleRobotPolicies' => 'object', 'ExemptFromUserRobotsControl' => [ 'array', 'null', ], 'APIModules' => 'object', 'APIFormatModules' => 'object', 'APIMetaModules' => 'object', 'APIPropModules' => 'object', 'APIListModules' => 'object', 'APIUselessQueryPages' => 'array', 'CrossSiteAJAXdomains' => 'object', 'CrossSiteAJAXdomainExceptions' => 'object', 'AllowedCorsHeaders' => 'array', 'RestAPIAdditionalRouteFiles' => 'array', 'RestSandboxSpecs' => 'object', 'RestLocalModuleTestBaseUrl' => [ 'string', 'null', ], 'RestModuleOverrides' => 'object', 'RestExternalModules' => 'object', 'ShellRestrictionMethod' => [ 'string', 'boolean', ], 'ShellboxUrls' => 'object', 'ShellboxSecretKey' => [ 'string', 'null', ], 'ShellboxShell' => [ 'string', 'null', ], 'HTTPTimeout' => 'number', 'HTTPConnectTimeout' => 'number', 'HTTPMaxTimeout' => 'number', 'HTTPMaxConnectTimeout' => 'number', 'LocalVirtualHosts' => 'object', 'LocalHTTPProxy' => [ 'string', 'boolean', ], 'GenerateReqIDFormat' => 'string', 'VirtualRestConfig' => 'object', 'EventRelayerConfig' => 'object', 'Pingback' => 'boolean', 'OriginTrials' => 'array', 'ReportToExpiry' => 'integer', 'ReportToEndpoints' => 'array', 'FeaturePolicyReportOnly' => 'array', 'SkinsPreferred' => 'array', 'SpecialContributeSkinsEnabled' => 'array', 'SpecialContributeNewPageTarget' => [ 'string', 'null', ], 'EnableEditRecovery' => 'boolean', 'EditRecoveryExpiry' => 'integer', 'UseCodexSpecialBlock' => 'boolean', 'ShowLogoutConfirmation' => 'boolean', 'EnableProtectionIndicators' => 'boolean', 'OutputPipelineStages' => 'object', 'FeatureShutdown' => 'array', 'CloneArticleParserOutput' => 'boolean', 'UseLeximorph' => 'boolean', 'UsePostprocCacheLegacy' => 'boolean', 'UsePostprocCacheParsoid' => 'boolean', 'ParserOptionsLogUnsafeSampleRate' => 'integer', 'ReturnExperimentalPFragmentTypes' => 'array', ], 'mergeStrategy' => [ 'TiffThumbnailType' => 'replace', 'LBFactoryConf' => 'replace', 'InterwikiCache' => 'replace', 'PasswordPolicy' => 'array_replace_recursive', 'AuthManagerAutoConfig' => 'array_plus_2d', 'GroupPermissions' => 'array_plus_2d', 'RevokePermissions' => 'array_plus_2d', 'AddGroups' => 'array_merge_recursive', 'RemoveGroups' => 'array_merge_recursive', 'RateLimits' => 'array_plus_2d', 'GrantPermissions' => 'array_plus_2d', 'MWLoggerDefaultSpi' => 'replace', 'Profiler' => 'replace', 'Hooks' => 'array_merge_recursive', 'RestModuleOverrides' => 'array_replace_recursive', 'RestExternalModules' => 'array_replace_recursive', 'VirtualRestConfig' => 'array_plus_2d', ], 'dynamicDefault' => [ 'UsePathInfo' => [ 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultUsePathInfo', ], ], 'Script' => [ 'use' => [ 'ScriptPath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultScript', ], ], 'LoadScript' => [ 'use' => [ 'ScriptPath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultLoadScript', ], ], 'RestPath' => [ 'use' => [ 'ScriptPath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultRestPath', ], ], 'StylePath' => [ 'use' => [ 'ResourceBasePath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultStylePath', ], ], 'LocalStylePath' => [ 'use' => [ 'ScriptPath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultLocalStylePath', ], ], 'ExtensionAssetsPath' => [ 'use' => [ 'ResourceBasePath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultExtensionAssetsPath', ], ], 'ArticlePath' => [ 'use' => [ 'Script', 'UsePathInfo', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultArticlePath', ], ], 'UploadPath' => [ 'use' => [ 'ScriptPath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultUploadPath', ], ], 'FileCacheDirectory' => [ 'use' => [ 'UploadDirectory', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultFileCacheDirectory', ], ], 'Logo' => [ 'use' => [ 'ResourceBasePath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultLogo', ], ], 'DeletedDirectory' => [ 'use' => [ 'UploadDirectory', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultDeletedDirectory', ], ], 'ShowEXIF' => [ 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultShowEXIF', ], ], 'SharedPrefix' => [ 'use' => [ 'DBprefix', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultSharedPrefix', ], ], 'SharedSchema' => [ 'use' => [ 'DBmwschema', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultSharedSchema', ], ], 'DBerrorLogTZ' => [ 'use' => [ 'Localtimezone', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultDBerrorLogTZ', ], ], 'Localtimezone' => [ 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultLocaltimezone', ], ], 'LocalTZoffset' => [ 'use' => [ 'Localtimezone', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultLocalTZoffset', ], ], 'ResourceBasePath' => [ 'use' => [ 'ScriptPath', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultResourceBasePath', ], ], 'MetaNamespace' => [ 'use' => [ 'Sitename', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultMetaNamespace', ], ], 'CookieSecure' => [ 'use' => [ 'ForceHTTPS', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultCookieSecure', ], ], 'CookiePrefix' => [ 'use' => [ 'SharedDB', 'SharedPrefix', 'SharedTables', 'DBname', 'DBprefix', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultCookiePrefix', ], ], 'ReadOnlyFile' => [ 'use' => [ 'UploadDirectory', ], 'callback' => [ 'MediaWiki\\MainConfigSchema', 'getDefaultReadOnlyFile', ], ], ], ], 'config-schema' => [ 'UploadStashScalerBaseUrl' => [ 'deprecated' => 'since 1.36 Use thumbProxyUrl in $wgLocalFileRepo', ], 'IllegalFileChars' => [ 'deprecated' => 'since 1.41; no longer customizable', ], 'ThumbnailNamespaces' => [ 'items' => [ 'type' => 'integer', ], ], 'LocalDatabases' => [ 'items' => [ 'type' => 'string', ], ], 'ParserCacheFilterConfig' => [ 'additionalProperties' => [ 'type' => 'object', 'description' => 'A map of namespace IDs to filter definitions.', 'additionalProperties' => [ 'type' => 'object', 'description' => 'A map of filter names to values.', 'properties' => [ 'minCpuTime' => [ 'type' => 'number', ], ], ], ], ], 'RawHtmlMessages' => [ 'items' => [ 'type' => 'string', ], ], 'InterwikiLogoOverride' => [ 'items' => [ 'type' => 'string', ], ], 'LegalTitleChars' => [ 'deprecated' => 'since 1.41; use Extension:TitleBlacklist to customize', ], 'ReauthenticateTime' => [ 'additionalProperties' => [ 'type' => 'integer', ], ], 'ChangeCredentialsBlacklist' => [ 'items' => [ 'type' => 'string', ], ], 'RemoveCredentialsBlacklist' => [ 'items' => [ 'type' => 'string', ], ], 'GroupPermissions' => [ 'additionalProperties' => [ 'type' => 'object', 'additionalProperties' => [ 'type' => 'boolean', ], ], ], 'GroupInheritsPermissions' => [ 'additionalProperties' => [ 'type' => 'string', ], ], 'AvailableRights' => [ 'items' => [ 'type' => 'string', ], ], 'ImplicitRights' => [ 'items' => [ 'type' => 'string', ], ], 'SoftBlockRanges' => [ 'items' => [ 'type' => 'string', ], ], 'ExternalQuerySources' => [ 'additionalProperties' => [ 'type' => 'object', 'properties' => [ 'enabled' => [ 'type' => 'boolean', 'default' => false, ], 'url' => [ 'type' => 'string', 'format' => 'uri', ], 'timeout' => [ 'type' => 'integer', 'default' => 10, ], ], 'required' => [ 'enabled', 'url', ], 'additionalProperties' => false, ], ], 'GrantPermissions' => [ 'additionalProperties' => [ 'type' => 'object', 'additionalProperties' => [ 'type' => 'boolean', ], ], ], 'GrantPermissionGroups' => [ 'additionalProperties' => [ 'type' => 'string', ], ], 'SitemapNamespacesPriorities' => [ 'deprecated' => 'since 1.45 and ignored', ], 'SitemapApiConfig' => [ 'additionalProperties' => [ 'enabled' => [ 'type' => 'bool', ], 'sitemapsPerIndex' => [ 'type' => 'int', ], 'pagesPerSitemap' => [ 'type' => 'int', ], 'expiry' => [ 'type' => 'int', ], ], ], 'SoftwareTags' => [ 'additionalProperties' => [ 'type' => 'boolean', ], ], 'UseCopyrightUpload' => [ 'deprecated' => 'since 1.47 This feature is being removed.', ], 'JobBackoffThrottling' => [ 'additionalProperties' => [ 'type' => 'number', ], ], 'JobTypeConf' => [ 'additionalProperties' => [ 'type' => 'object', 'properties' => [ 'class' => [ 'type' => 'string', ], 'order' => [ 'type' => 'string', ], 'claimTTL' => [ 'type' => 'integer', ], ], ], ], 'TrackingCategories' => [ 'deprecated' => 'since 1.25 Extensions should now register tracking categories using the new extension registration system.', ], 'RangeContributionsCIDRLimit' => [ 'additionalProperties' => [ 'type' => 'integer', ], ], 'RestSandboxSpecs' => [ 'additionalProperties' => [ 'type' => 'object', 'properties' => [ 'url' => [ 'type' => 'string', 'format' => 'url', ], 'name' => [ 'type' => 'string', ], 'file' => [ 'type' => 'string', ], 'msg' => [ 'type' => 'string', 'description' => 'a message key', ], ], ], ], 'RestModuleOverrides' => [ 'additionalProperties' => [ 'type' => 'object', 'properties' => [ 'mode' => [ 'type' => 'string', ], ], 'required' => [ 'mode', ], ], ], 'RestExternalModules' => [ 'additionalProperties' => [ 'type' => 'object', 'properties' => [ 'info' => [ 'type' => 'object', 'properties' => [ 'version' => [ 'type' => 'string', ], 'title' => [ 'type' => 'string', ], 'x-i18n-title' => [ 'type' => 'string', ], 'description' => [ 'type' => 'string', ], 'x-i18n-description' => [ 'type' => 'string', ], ], 'required' => [ 'version', ], ], 'base' => [ 'type' => 'string', 'format' => 'uri', ], 'spec' => [ 'type' => 'string', 'format' => 'uri', ], ], 'required' => [ 'info', 'base', 'spec', ], ], ], 'ShellboxUrls' => [ 'additionalProperties' => [ 'type' => [ 'string', 'boolean', 'null', ], ], ], ], 'obsolete-config' => [ 'MangleFlashPolicy' => 'Since 1.39; no longer has any effect.', 'EnableOpenSearchSuggest' => 'Since 1.35, no longer used', 'AutoloadAttemptLowercase' => 'Since 1.40; no longer has any effect.', ],]
Interface for objects which can provide a MediaWiki context on request.
getConfig()
Get the site configuration.
Interface for objects (potentially) representing a page that can be viewable and linked to on a wiki.