MediaWiki master
SpecialPageFactory.php
Go to the documentation of this file.
1<?php
10
166use Wikimedia\DebugInfo\DebugInfoTrait;
167use Wikimedia\ObjectFactory\ObjectFactory;
169
192 use DebugInfoTrait;
193
197 private const CORE_LIST = [
198 // Maintenance Reports
199 'BrokenRedirects' => [
200 'class' => SpecialBrokenRedirects::class,
201 'services' => [
202 'ContentHandlerFactory',
203 'ConnectionProvider',
204 'LinkBatchFactory',
205 ]
206 ],
207 'Deadendpages' => [
208 'class' => SpecialDeadendPages::class,
209 'services' => [
210 'NamespaceInfo',
211 'ConnectionProvider',
212 'LinkBatchFactory',
213 'LanguageConverterFactory',
214 ]
215 ],
216 'DoubleRedirects' => [
217 'class' => SpecialDoubleRedirects::class,
218 'services' => [
219 'ContentHandlerFactory',
220 'LinkBatchFactory',
221 'ConnectionProvider',
222 ]
223 ],
224 'Longpages' => [
225 'class' => SpecialLongPages::class,
226 'services' => [
227 // Same as for Shortpages
228 'NamespaceInfo',
229 'ConnectionProvider',
230 'LinkBatchFactory',
231 ]
232 ],
233 'Ancientpages' => [
234 'class' => SpecialAncientPages::class,
235 'services' => [
236 'NamespaceInfo',
237 'ConnectionProvider',
238 'LinkBatchFactory',
239 'LanguageConverterFactory',
240 ]
241 ],
242 'Lonelypages' => [
243 'class' => SpecialLonelyPages::class,
244 'services' => [
245 'NamespaceInfo',
246 'ConnectionProvider',
247 'LinkBatchFactory',
248 'LanguageConverterFactory',
249 'LinksMigration',
250 ]
251 ],
252 'Fewestrevisions' => [
253 'class' => SpecialFewestRevisions::class,
254 'services' => [
255 // Same as for Mostrevisions
256 'NamespaceInfo',
257 'ConnectionProvider',
258 'LinkBatchFactory',
259 'LanguageConverterFactory',
260 ]
261 ],
262 'Withoutinterwiki' => [
263 'class' => SpecialWithoutInterwiki::class,
264 'services' => [
265 'NamespaceInfo',
266 'ConnectionProvider',
267 'LinkBatchFactory',
268 'LanguageConverterFactory',
269 ]
270 ],
271 'Protectedpages' => [
272 'class' => SpecialProtectedPages::class,
273 'services' => [
274 'LinkBatchFactory',
275 'ConnectionProvider',
276 'CommentStore',
277 'RowCommentFormatter',
278 'RestrictionStore',
279 ]
280 ],
281 'Protectedtitles' => [
282 'class' => SpecialProtectedTitles::class,
283 'services' => [
284 'LinkBatchFactory',
285 'ConnectionProvider',
286 ]
287 ],
288 'Shortpages' => [
289 'class' => SpecialShortPages::class,
290 'services' => [
291 // Same as for Longpages
292 'NamespaceInfo',
293 'ConnectionProvider',
294 'LinkBatchFactory',
295 ]
296 ],
297 'Uncategorizedcategories' => [
298 'class' => SpecialUncategorizedCategories::class,
299 'services' => [
300 // Same as for SpecialUncategorizedPages and SpecialUncategorizedTemplates
301 'NamespaceInfo',
302 'ConnectionProvider',
303 'LinkBatchFactory',
304 'LanguageConverterFactory',
305 ]
306 ],
307 'Uncategorizedimages' => [
308 'class' => SpecialUncategorizedImages::class,
309 'services' => [
310 'ConnectionProvider',
311 ]
312 ],
313 'Uncategorizedpages' => [
314 'class' => SpecialUncategorizedPages::class,
315 'services' => [
316 // Same as for SpecialUncategorizedCategories and SpecialUncategorizedTemplates
317 'NamespaceInfo',
318 'ConnectionProvider',
319 'LinkBatchFactory',
320 'LanguageConverterFactory',
321 ]
322 ],
323 'Uncategorizedtemplates' => [
324 'class' => SpecialUncategorizedTemplates::class,
325 'services' => [
326 // Same as for SpecialUncategorizedCategories and SpecialUncategorizedPages
327 'NamespaceInfo',
328 'ConnectionProvider',
329 'LinkBatchFactory',
330 'LanguageConverterFactory',
331 ]
332 ],
333 'Unusedcategories' => [
334 'class' => SpecialUnusedCategories::class,
335 'services' => [
336 'ConnectionProvider',
337 'LinkBatchFactory',
338 ]
339 ],
340 'Unusedimages' => [
341 'class' => SpecialUnusedImages::class,
342 'services' => [
343 'ConnectionProvider',
344 ]
345 ],
346 'Unusedtemplates' => [
347 'class' => SpecialUnusedTemplates::class,
348 'services' => [
349 'ConnectionProvider',
350 ]
351 ],
352 'Unwatchedpages' => [
353 'class' => SpecialUnwatchedPages::class,
354 'services' => [
355 'LinkBatchFactory',
356 'ConnectionProvider',
357 'LanguageConverterFactory',
358 ]
359 ],
360 'Wantedcategories' => [
361 'class' => SpecialWantedCategories::class,
362 'services' => [
363 'ConnectionProvider',
364 'LinkBatchFactory',
365 'LanguageConverterFactory',
366 ]
367 ],
368 'Wantedfiles' => [
369 'class' => SpecialWantedFiles::class,
370 'services' => [
371 'RepoGroup',
372 'ConnectionProvider',
373 'LinkBatchFactory',
374 ]
375 ],
376 'Wantedpages' => [
377 'class' => SpecialWantedPages::class,
378 'services' => [
379 'ConnectionProvider',
380 'LinkBatchFactory',
381 'LinksMigration',
382 ]
383 ],
384 'Wantedtemplates' => [
385 'class' => SpecialWantedTemplates::class,
386 'services' => [
387 'ConnectionProvider',
388 'LinkBatchFactory',
389 'LinksMigration',
390 ]
391 ],
392
393 // List of pages
394 'Allpages' => [
395 'class' => SpecialAllPages::class,
396 'services' => [
397 'ConnectionProvider',
398 'SearchEngineFactory',
399 'PageStore',
400 ]
401 ],
402 'Prefixindex' => [
403 'class' => SpecialPrefixIndex::class,
404 'services' => [
405 'ConnectionProvider',
406 'LinkCache',
407 ]
408 ],
409 'Categories' => [
410 'class' => SpecialCategories::class,
411 'services' => [
412 'LinkBatchFactory',
413 'ConnectionProvider',
414 ]
415 ],
416 'Listredirects' => [
417 'class' => SpecialListRedirects::class,
418 'services' => [
419 'LinkBatchFactory',
420 'ConnectionProvider',
421 'WikiPageFactory',
422 'RedirectLookup'
423 ]
424 ],
425 'PagesWithProp' => [
426 'class' => SpecialPagesWithProp::class,
427 'services' => [
428 'ConnectionProvider',
429 ]
430 ],
431 'TrackingCategories' => [
432 'class' => SpecialTrackingCategories::class,
433 'services' => [
434 'LinkBatchFactory',
435 'TrackingCategories',
436 ]
437 ],
438
439 // Authentication
440 'Userlogin' => [
441 'class' => SpecialUserLogin::class,
442 'services' => [
443 'AuthManager',
444 'UserIdentityUtils',
445 ]
446 ],
447 'Userlogout' => [
448 'class' => SpecialUserLogout::class,
449 'services' => [
450 'TempUserConfig',
451 ],
452 ],
453 'CreateAccount' => [
454 'class' => SpecialCreateAccount::class,
455 'services' => [
456 'AuthManager',
457 'FormatterFactory',
458 'UserIdentityUtils',
459 ]
460 ],
461 'LinkAccounts' => [
462 'class' => SpecialLinkAccounts::class,
463 'services' => [
464 'AuthManager',
465 ]
466 ],
467 'UnlinkAccounts' => [
468 'class' => SpecialUnlinkAccounts::class,
469 'services' => [
470 'AuthManager',
471 'SessionManager',
472 ]
473 ],
474 'ChangeCredentials' => [
475 'class' => SpecialChangeCredentials::class,
476 'services' => [
477 'AuthManager',
478 'SessionManager',
479 ]
480 ],
481 'RemoveCredentials' => [
482 'class' => SpecialRemoveCredentials::class,
483 'services' => [
484 'AuthManager',
485 'SessionManager',
486 ]
487 ],
488 'AuthenticationPopupSuccess' => [
489 'class' => SpecialAuthenticationPopupSuccess::class,
490 'services' => [
491 'SkinFactory',
492 ]
493 ],
494
495 // Users and rights
496 'Activeusers' => [
497 'class' => SpecialActiveUsers::class,
498 'services' => [
499 'LinkBatchFactory',
500 'ConnectionProvider',
501 'UserGroupManager',
502 'UserIdentityLookup',
503 'HideUserUtils',
504 'TempUserConfig',
505 'RecentChangeLookup',
506 ]
507 ],
508 'Block' => [
509 'class' => SpecialBlock::class,
510 'services' => [
511 'BlockTargetFactory',
512 'BlockPermissionCheckerFactory',
513 'BlockUserFactory',
514 'DatabaseBlockStore',
515 'UserNameUtils',
516 'UserNamePrefixSearch',
517 'BlockActionInfo',
518 'TitleFormatter',
519 'NamespaceInfo',
520 'WatchlistManager'
521 ]
522 ],
523 'Unblock' => [
524 'class' => SpecialUnblock::class,
525 'services' => [
526 'UnblockUserFactory',
527 'BlockTargetFactory',
528 'DatabaseBlockStore',
529 'UserNameUtils',
530 'UserNamePrefixSearch',
531 'WatchlistManager',
532 ]
533 ],
534 'BlockList' => [
535 'class' => SpecialBlockList::class,
536 'services' => [
537 'LinkBatchFactory',
538 'DatabaseBlockStore',
539 'BlockRestrictionStore',
540 'ConnectionProvider',
541 'CommentStore',
542 'BlockTargetFactory',
543 'HideUserUtils',
544 'BlockActionInfo',
545 'RowCommentFormatter',
546 'TempUserConfig',
547 ],
548 ],
549 'AutoblockList' => [
550 'class' => SpecialAutoblockList::class,
551 'services' => [
552 'LinkBatchFactory',
553 'BlockRestrictionStore',
554 'ConnectionProvider',
555 'CommentStore',
556 'BlockTargetFactory',
557 'HideUserUtils',
558 'BlockActionInfo',
559 'RowCommentFormatter',
560 ],
561 ],
562 'ChangePassword' => [
563 'class' => SpecialChangePassword::class,
564 ],
565 'BotPasswords' => [
566 'class' => SpecialBotPasswords::class,
567 'services' => [
568 'PasswordFactory',
569 'AuthManager',
570 'CentralIdLookup',
571 'GrantsInfo',
572 'GrantsLocalization',
573 ]
574 ],
575 'PasswordReset' => [
576 'class' => SpecialPasswordReset::class,
577 'services' => [
578 'PasswordReset'
579 ]
580 ],
581 'DeletedContributions' => [
582 'class' => SpecialDeletedContributions::class,
583 'services' => [
584 'PermissionManager',
585 'ConnectionProvider',
586 'RevisionStore',
587 'NamespaceInfo',
588 'UserNameUtils',
589 'UserNamePrefixSearch',
590 'UserOptionsLookup',
591 'CommentFormatter',
592 'LinkBatchFactory',
593 'UserFactory',
594 'UserIdentityLookup',
595 'DatabaseBlockStore',
596 'UserGroupAssignmentService',
597 'TempUserConfig',
598 ]
599 ],
600 'Preferences' => [
601 'class' => SpecialPreferences::class,
602 'services' => [
603 'PreferencesFactory',
604 'UserOptionsManager',
605 ]
606 ],
607 'ResetTokens' => [
608 'class' => SpecialResetTokens::class,
609 ],
610 'Contributions' => [
611 'class' => SpecialContributions::class,
612 'services' => [
613 'LinkBatchFactory',
614 'PermissionManager',
615 'ConnectionProvider',
616 'RevisionStore',
617 'NamespaceInfo',
618 'UserNameUtils',
619 'UserNamePrefixSearch',
620 'UserOptionsLookup',
621 'CommentFormatter',
622 'UserFactory',
623 'UserIdentityLookup',
624 'DatabaseBlockStore',
625 'UserGroupAssignmentService',
626 'TempUserConfig',
627 ]
628 ],
629 'Listgrouprights' => [
630 'class' => SpecialListGroupRights::class,
631 'services' => [
632 'NamespaceInfo',
633 'UserGroupManager',
634 'LanguageConverterFactory',
635 'GroupPermissionsLookup',
636 'RestrictedUserGroupConfigReader',
637 ]
638 ],
639 'Listgrants' => [
640 'class' => SpecialListGrants::class,
641 'services' => [
642 'GrantsLocalization',
643 ]
644 ],
645 'Listusers' => [
646 'class' => SpecialListUsers::class,
647 'services' => [
648 'LinkBatchFactory',
649 'ConnectionProvider',
650 'UserGroupManager',
651 'UserIdentityLookup',
652 'HideUserUtils',
653 'TempUserConfig',
654 ]
655 ],
656 'Listadmins' => [
657 'class' => SpecialListAdmins::class,
658 ],
659 'Listbots' => [
660 'class' => SpecialListBots::class,
661 ],
662 'Userrights' => [
663 'class' => SpecialUserRights::class,
664 'services' => [
665 'UserGroupManagerFactory',
666 'UserNameUtils',
667 'UserNamePrefixSearch',
668 'UserFactory',
669 'WatchlistManager',
670 'UserGroupAssignmentService',
671 'MultiFormatUserIdentityLookup',
672 'FormatterFactory',
673 ]
674 ],
675 'EditWatchlist' => [
676 'class' => SpecialEditWatchlist::class,
677 'services' => [
678 'WatchedItemStore',
679 'WatchlistLabelStore',
680 'TitleParser',
681 'GenderCache',
682 'LinkBatchFactory',
683 'NamespaceInfo',
684 'WikiPageFactory',
685 'WatchlistManager',
686 ]
687 ],
688 'PasswordPolicies' => [
689 'class' => SpecialPasswordPolicies::class,
690 'services' => [
691 'UserGroupManager',
692 ]
693 ],
694
695 // Recent changes and logs
696 'Newimages' => [
697 'class' => SpecialNewFiles::class,
698 'services' => [
699 'MimeAnalyzer',
700 'GroupPermissionsLookup',
701 'ConnectionProvider',
702 'LinkBatchFactory',
703 ]
704 ],
705 'Log' => [
706 'class' => SpecialLog::class,
707 'services' => [
708 'LinkBatchFactory',
709 'ConnectionProvider',
710 'ActorNormalization',
711 'UserIdentityLookup',
712 'UserNameUtils',
713 'LogFormatterFactory',
714 'TempUserConfig',
715 ]
716 ],
717 'Watchlist' => [
718 'class' => SpecialWatchlist::class,
719 'services' => [
720 'WatchedItemStore',
721 'WatchlistManager',
722 'UserOptionsLookup',
723 'UserIdentityUtils',
724 'TempUserConfig',
725 'RecentChangeFactory',
726 'ChangesListQueryFactory',
727 'WatchlistLabelStore',
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 ]
749 ],
750 'Recentchanges' => [
751 'class' => SpecialRecentChanges::class,
752 'services' => [
753 'WatchedItemStore',
754 'MessageParser',
755 'UserOptionsLookup',
756 'UserIdentityUtils',
757 'TempUserConfig',
758 'RecentChangeFactory',
759 'ChangesListQueryFactory',
760 ]
761 ],
762 'Recentchangeslinked' => [
763 'class' => SpecialRecentChangesLinked::class,
764 'services' => [
765 'WatchedItemStore',
766 'MessageParser',
767 'UserOptionsLookup',
768 'SearchEngineFactory',
769 'UserIdentityUtils',
770 'TempUserConfig',
771 'RecentChangeFactory',
772 'ChangesListQueryFactory',
773 ]
774 ],
775 'Tags' => [
776 'class' => SpecialTags::class,
777 'services' => [
778 'ChangeTagsStore',
779 ]
780 ],
781
782 // Media reports and uploads
783 'Listfiles' => [
784 'class' => SpecialListFiles::class,
785 'services' => [
786 'RepoGroup',
787 'ConnectionProvider',
788 'CommentStore',
789 'UserNameUtils',
790 'UserNamePrefixSearch',
791 'RowCommentFormatter',
792 'LinkBatchFactory',
793 ]
794 ],
795 'Filepath' => [
796 'class' => SpecialFilepath::class,
797 'services' => [
798 'SearchEngineFactory',
799 ]
800 ],
801 'MediaStatistics' => [
802 'class' => SpecialMediaStatistics::class,
803 'services' => [
804 'MimeAnalyzer',
805 'ConnectionProvider',
806 'LinkBatchFactory',
807 ]
808 ],
809 'MIMEsearch' => [
810 'class' => SpecialMIMESearch::class,
811 'services' => [
812 'ConnectionProvider',
813 'LinkBatchFactory',
814 'LanguageConverterFactory',
815 ]
816 ],
817 'FileDuplicateSearch' => [
818 'class' => SpecialFileDuplicateSearch::class,
819 'services' => [
820 'LinkBatchFactory',
821 'RepoGroup',
822 'SearchEngineFactory',
823 'LanguageConverterFactory',
824 ]
825 ],
826 'Upload' => [
827 'class' => SpecialUpload::class,
828 'services' => [
829 'RepoGroup',
830 'UserOptionsLookup',
831 'NamespaceInfo',
832 ]
833 ],
834 'UploadStash' => [
835 'class' => SpecialUploadStash::class,
836 'services' => [
837 'RepoGroup',
838 'HttpRequestFactory',
839 'UrlUtils',
840 'ConnectionProvider',
841 ]
842 ],
843 'ListDuplicatedFiles' => [
844 'class' => SpecialListDuplicatedFiles::class,
845 'services' => [
846 'ConnectionProvider',
847 'LinkBatchFactory',
848 ]
849 ],
850
851 // Data and tools
852 'ApiSandbox' => [
853 'class' => SpecialApiSandbox::class,
854 ],
855 'Interwiki' => [
856 'class' => SpecialInterwiki::class,
857 'services' => [
858 'ContentLanguage',
859 'InterwikiLookup',
860 'LanguageNameUtils',
861 'UrlUtils',
862 'ConnectionProvider',
863 ]
864 ],
865 'RestSandbox' => [
866 'class' => SpecialRestSandbox::class,
867 'services' => [
868 'UrlUtils',
869 'MessageFormatterFactory',
870 'LocalServerObjectCache'
871 ]
872 ],
873 'Statistics' => [
874 'class' => SpecialStatistics::class,
875 'services' => [
876 'UserGroupManager',
877 ]
878 ],
879 'Allmessages' => [
880 'class' => SpecialAllMessages::class,
881 'services' => [
882 'LanguageFactory',
883 'LanguageNameUtils',
884 'LocalisationCache',
885 'ConnectionProvider',
886 ]
887 ],
888 'Version' => [
889 'class' => SpecialVersion::class,
890 'services' => [
891 'ParserFactory',
892 'UrlUtils',
893 'ConnectionProvider',
894 ]
895 ],
896 'Lockdb' => [
897 'class' => SpecialLockdb::class,
898 ],
899 'Unlockdb' => [
900 'class' => SpecialUnlockdb::class,
901 ],
902 'NamespaceInfo' => [
903 'class' => SpecialNamespaceInfo::class,
904 'services' => [
905 'NamespaceInfo',
906 'ContentLanguage'
907 ],
908 ],
909
910 // Redirecting special pages
911 'LinkSearch' => [
912 'class' => SpecialLinkSearch::class,
913 'services' => [
914 'ConnectionProvider',
915 'LinkBatchFactory',
916 'UrlUtils',
917 ]
918 ],
919 'Randompage' => [
920 'class' => SpecialRandomPage::class,
921 'services' => [
922 'ConnectionProvider',
923 'NamespaceInfo',
924 ]
925 ],
926 'RandomInCategory' => [
927 'class' => SpecialRandomInCategory::class,
928 'services' => [
929 'ConnectionProvider',
930 ]
931 ],
932 'Randomredirect' => [
933 'class' => SpecialRandomRedirect::class,
934 'services' => [
935 'ConnectionProvider',
936 'NamespaceInfo',
937 ]
938 ],
939 'Randomrootpage' => [
940 'class' => SpecialRandomRootPage::class,
941 'services' => [
942 'ConnectionProvider',
943 'NamespaceInfo',
944 ]
945 ],
946 'GoToInterwiki' => [
947 'class' => SpecialGoToInterwiki::class,
948 ],
949
950 // High use pages
951 'Mostlinkedcategories' => [
952 'class' => SpecialMostLinkedCategories::class,
953 'services' => [
954 'ConnectionProvider',
955 'LinkBatchFactory',
956 'LanguageConverterFactory',
957 ]
958 ],
959 'Mostimages' => [
960 'class' => SpecialMostImages::class,
961 'services' => [
962 'ConnectionProvider',
963 'LanguageConverterFactory',
964 ]
965 ],
966 'Mostinterwikis' => [
967 'class' => SpecialMostInterwikis::class,
968 'services' => [
969 'NamespaceInfo',
970 'ConnectionProvider',
971 'LinkBatchFactory',
972 ]
973 ],
974 'Mostlinked' => [
975 'class' => SpecialMostLinked::class,
976 'services' => [
977 'ConnectionProvider',
978 'LinkBatchFactory',
979 'LinksMigration',
980 ]
981 ],
982 'Mostlinkedtemplates' => [
983 'class' => SpecialMostLinkedTemplates::class,
984 'services' => [
985 'ConnectionProvider',
986 'LinkBatchFactory',
987 'LinksMigration',
988 ]
989 ],
990 'Mostcategories' => [
991 'class' => SpecialMostCategories::class,
992 'services' => [
993 'NamespaceInfo',
994 'ConnectionProvider',
995 'LinkBatchFactory',
996 ]
997 ],
998 'Mostrevisions' => [
999 'class' => SpecialMostRevisions::class,
1000 'services' => [
1001 // Same as for Fewestrevisions
1002 'NamespaceInfo',
1003 'ConnectionProvider',
1004 'LinkBatchFactory',
1005 'LanguageConverterFactory',
1006 ]
1007 ],
1008
1009 // Page tools
1010 'ComparePages' => [
1011 'class' => SpecialComparePages::class,
1012 'services' => [
1013 'RevisionLookup',
1014 'ContentHandlerFactory',
1015 ]
1016 ],
1017 'Export' => [
1018 'class' => SpecialExport::class,
1019 'services' => [
1020 'ConnectionProvider',
1021 'WikiExporterFactory',
1022 'TitleFormatter',
1023 'LinksMigration',
1024 ]
1025 ],
1026 'Import' => [
1027 'class' => SpecialImport::class,
1028 'services' => [
1029 'WikiImporterFactory',
1030 ]
1031 ],
1032 'Undelete' => [
1033 'class' => SpecialUndelete::class,
1034 'services' => [
1035 'PermissionManager',
1036 'RevisionStore',
1037 'RevisionRenderer',
1038 'ContentHandlerFactory',
1039 'ChangeTagDefStore',
1040 'LinkBatchFactory',
1041 'RepoGroup',
1042 'ConnectionProvider',
1043 'UserOptionsLookup',
1044 'WikiPageFactory',
1045 'SearchEngineFactory',
1046 'UndeletePageFactory',
1047 'ArchivedRevisionLookup',
1048 'CommentFormatter',
1049 'WatchlistManager',
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 ]
1074 ],
1075 'ExpandTemplates' => [
1076 'class' => SpecialExpandTemplates::class,
1077 'services' => [
1078 'ParserFactory',
1079 'UserOptionsLookup',
1080 'Tidy',
1081 ],
1082 ],
1083 'ChangeContentModel' => [
1084 'class' => SpecialChangeContentModel::class,
1085 'services' => [
1086 'ContentHandlerFactory',
1087 'ContentModelChangeFactory',
1088 'SpamChecker',
1089 'RevisionLookup',
1090 'WikiPageFactory',
1091 'SearchEngineFactory',
1092 'CollationFactory',
1093 'PermissionManager',
1094 ],
1095 ],
1096
1097 // Other
1098 'Booksources' => [
1099 'class' => SpecialBookSources::class,
1100 'services' => [
1101 'RevisionLookup',
1102 'TitleFactory',
1103 ]
1104 ],
1105
1106 // Unlisted / redirects
1107 'ApiHelp' => [
1108 'class' => SpecialApiHelp::class,
1109 'services' => [
1110 'UrlUtils',
1111 ]
1112 ],
1113 'Blankpage' => [
1114 'class' => SpecialBlankpage::class,
1115 ],
1116 'DeletePage' => [
1117 'class' => SpecialDeletePage::class,
1118 'services' => [
1119 'SearchEngineFactory',
1120 ]
1121 ],
1122 'Diff' => [
1123 'class' => SpecialDiff::class,
1124 ],
1125 'EditPage' => [
1126 'class' => SpecialEditPage::class,
1127 'services' => [
1128 'SearchEngineFactory',
1129 ]
1130 ],
1131 'EditTags' => [
1132 'class' => SpecialEditTags::class,
1133 'services' => [
1134 'PermissionManager',
1135 'ChangeTagsStore',
1136 ],
1137 ],
1138 'Emailuser' => [
1139 'class' => SpecialEmailUser::class,
1140 'services' => [
1141 'UserNameUtils',
1142 'UserNamePrefixSearch',
1143 'UserOptionsLookup',
1144 'EmailUserFactory',
1145 'UserFactory',
1146 ]
1147 ],
1148 'Movepage' => [
1149 'class' => SpecialMovePage::class,
1150 'services' => [
1151 'MovePageFactory',
1152 'PermissionManager',
1153 'UserOptionsLookup',
1154 'ConnectionProvider',
1155 'ContentHandlerFactory',
1156 'NamespaceInfo',
1157 'LinkBatchFactory',
1158 'RepoGroup',
1159 'WikiPageFactory',
1160 'SearchEngineFactory',
1161 'WatchlistManager',
1162 'WatchedItemStore',
1163 'RestrictionStore',
1164 'TitleFactory',
1165 'DeletePageFactory',
1166 ]
1167 ],
1168 'Mycontributions' => [
1169 'class' => SpecialMycontributions::class,
1170 'services' => [
1171 'TempUserConfig',
1172 ],
1173 ],
1174 'MyLanguage' => [
1175 'class' => SpecialMyLanguage::class,
1176 'services' => [
1177 'LanguageNameUtils',
1178 'RedirectLookup'
1179 ]
1180 ],
1181 'Mylog' => [
1182 'class' => SpecialMylog::class,
1183 'services' => [
1184 'TempUserConfig',
1185 ],
1186 ],
1187 'Mypage' => [
1188 'class' => SpecialMypage::class,
1189 'services' => [
1190 'TempUserConfig',
1191 ],
1192 ],
1193 'Mytalk' => [
1194 'class' => SpecialMytalk::class,
1195 'services' => [
1196 'TempUserConfig',
1197 'TempUserCreator',
1198 'AuthManager',
1199 ],
1200 ],
1201 'PageHistory' => [
1202 'class' => SpecialPageHistory::class,
1203 'services' => [
1204 'SearchEngineFactory',
1205 ]
1206 ],
1207 'PageInfo' => [
1208 'class' => SpecialPageInfo::class,
1209 'services' => [
1210 'SearchEngineFactory',
1211 ]
1212 ],
1213 'ProtectPage' => [
1214 'class' => SpecialProtectPage::class,
1215 'services' => [
1216 'SearchEngineFactory',
1217 ]
1218 ],
1219 'Purge' => [
1220 'class' => SpecialPurge::class,
1221 'services' => [
1222 'SearchEngineFactory',
1223 ]
1224 ],
1225 'Myuploads' => [
1226 'class' => SpecialMyuploads::class,
1227 'services' => [
1228 'TempUserConfig',
1229 ],
1230 ],
1231 'AllMyUploads' => [
1232 'class' => SpecialAllMyUploads::class,
1233 'services' => [
1234 'TempUserConfig',
1235 ],
1236 ],
1237 'NewSection' => [
1238 'class' => SpecialNewSection::class,
1239 'services' => [
1240 'SearchEngineFactory',
1241 ]
1242 ],
1243 'PermanentLink' => [
1244 'class' => SpecialPermanentLink::class,
1245 ],
1246 'Redirect' => [
1247 'class' => SpecialRedirect::class,
1248 'services' => [
1249 'RepoGroup',
1250 'UserFactory',
1251 ]
1252 ],
1253 'Renameuser' => [
1254 'class' => SpecialRenameUser::class,
1255 'services' => [
1256 'ConnectionProvider',
1257 'PermissionManager',
1258 'TitleFactory',
1259 'UserFactory',
1260 'UserNamePrefixSearch',
1261 'RenameUserFactory',
1262 'FormatterFactory',
1263 ]
1264 ],
1265 'Revisiondelete' => [
1266 'class' => SpecialRevisionDelete::class,
1267 'services' => [
1268 'PermissionManager',
1269 'RepoGroup',
1270 ],
1271 ],
1272 'RunJobs' => [
1273 'class' => SpecialRunJobs::class,
1274 'services' => [
1275 'JobRunner',
1276 'ReadOnlyMode',
1277 ]
1278 ],
1279 'Specialpages' => [
1280 'class' => SpecialSpecialPages::class,
1281 ],
1282 'PageData' => [
1283 'class' => SpecialPageData::class,
1284 ],
1285 'Contribute' => [
1286 'class' => SpecialContribute::class,
1287 ],
1288 'TalkPage' => [
1289 'class' => SpecialTalkPage::class,
1290 'services' => [
1291 'TitleParser',
1292 ],
1293 ],
1294 ];
1295
1297 private $list;
1298
1300 private $aliases;
1301
1303 private readonly ObjectFactory $objectFactory;
1304
1306 private readonly HookContainer $hookContainer;
1307
1309 private readonly HookRunner $hookRunner;
1310
1314 public const CONSTRUCTOR_OPTIONS = [
1322 ];
1323
1324 public function __construct(
1325 private readonly ServiceOptions $options,
1326 private readonly Language $contLang,
1327 ObjectFactory $objectFactory,
1328 private readonly TitleFactory $titleFactory,
1329 HookContainer $hookContainer,
1330 private readonly StatsFactory $statsFactory,
1331 ) {
1332 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
1333 $this->objectFactory = $objectFactory;
1334 $this->hookContainer = $hookContainer;
1335 $this->hookRunner = new HookRunner( $hookContainer );
1336 }
1337
1344 public function getNames(): array {
1345 return array_keys( $this->getPageList() );
1346 }
1347
1351 private function getPageList(): array {
1352 if ( !is_array( $this->list ) ) {
1353 $this->list = self::CORE_LIST;
1354
1355 if ( !$this->options->get( MainConfigNames::DisableInternalSearch ) ) {
1356 $this->list['Search'] = [
1357 'class' => SpecialSearch::class,
1358 'services' => [
1359 'SearchEngineConfig',
1360 'SearchEngineFactory',
1361 'NamespaceInfo',
1362 'ContentHandlerFactory',
1363 'InterwikiLookup',
1364 'ReadOnlyMode',
1365 'UserOptionsManager',
1366 'LanguageConverterFactory',
1367 'RepoGroup',
1368 'SearchResultThumbnailProvider',
1369 'TitleMatcher',
1370 ]
1371 ];
1372 }
1373
1374 if ( $this->options->get( MainConfigNames::EmailAuthentication ) ) {
1375 $this->list['Confirmemail'] = [
1376 'class' => SpecialConfirmEmail::class,
1377 'services' => [
1378 'UserFactory',
1379 ]
1380 ];
1381 $this->list['Invalidateemail'] = [
1382 'class' => SpecialEmailInvalidate::class,
1383 'services' => [
1384 'UserFactory',
1385 ]
1386 ];
1387 }
1388
1389 if ( $this->options->get( MainConfigNames::EnableEmail ) ) {
1390 $this->list['ChangeEmail'] = [
1391 'class' => SpecialChangeEmail::class,
1392 'services' => [
1393 'AuthManager',
1394 ],
1395 ];
1396 }
1397
1398 if ( $this->options->get( MainConfigNames::EnableJavaScriptTest ) ) {
1399 $this->list['JavaScriptTest'] = [
1400 'class' => SpecialJavaScriptTest::class
1401 ];
1402 }
1403
1404 $this->list['Mute'] = [
1405 'class' => SpecialMute::class,
1406 'services' => [
1407 'CentralIdLookup',
1408 'UserOptionsManager',
1409 'UserIdentityLookup',
1410 'UserIdentityUtils',
1411 ]
1412 ];
1413
1414 if ( $this->options->get( MainConfigNames::PageLanguageUseDB ) ) {
1415 $this->list['PageLanguage'] = [
1416 'class' => SpecialPageLanguage::class,
1417 'services' => [
1418 'ContentHandlerFactory',
1419 'LanguageNameUtils',
1420 'ConnectionProvider',
1421 'SearchEngineFactory',
1422 ]
1423 ];
1424 }
1425
1426 if ( $this->options->get( MainConfigNames::EnableEditRecovery ) ) {
1427 $this->list['EditRecovery'] = [
1428 'class' => SpecialEditRecovery::class,
1429 'services' => [
1430 'UserOptionsLookup',
1431 ],
1432 ];
1433 }
1434
1435 // Add extension special pages
1436 $this->list = array_merge( $this->list,
1437 $this->options->get( MainConfigNames::SpecialPages ) );
1438
1439 // This hook can be used to disable unwanted core special pages
1440 // or conditionally register special pages.
1441 $this->hookRunner->onSpecialPage_initList( $this->list );
1442 }
1443
1444 return $this->list;
1445 }
1446
1453 public function getAliasList(): array {
1454 if ( $this->aliases === null ) {
1455 $aliases = $this->contLang->getSpecialPageAliases();
1456 $pageList = $this->getPageList();
1457
1458 $this->aliases = [];
1459 $keepAlias = [];
1460
1461 // Force every canonical name to be an alias for itself.
1462 foreach ( $pageList as $name => $_ ) {
1463 $caseFoldedAlias = $this->contLang->caseFold( $name );
1464 $this->aliases[$caseFoldedAlias] = $name;
1465 $keepAlias[$caseFoldedAlias] = 'canonical';
1466 }
1467
1468 // Check for $aliases being an array since Language::getSpecialPageAliases can return null
1469 if ( is_array( $aliases ) ) {
1470 foreach ( $aliases as $realName => $aliasList ) {
1471 $first = true;
1472 foreach ( $aliasList as $alias ) {
1473 $caseFoldedAlias = $this->contLang->caseFold( $alias );
1474
1475 if ( isset( $this->aliases[$caseFoldedAlias] ) &&
1476 $realName === $this->aliases[$caseFoldedAlias]
1477 ) {
1478 $first = false;
1479 // Ignore same-realName conflicts
1480 continue;
1481 }
1482
1483 if ( !isset( $keepAlias[$caseFoldedAlias] ) ) {
1484 $this->aliases[$caseFoldedAlias] = $realName;
1485 if ( $first ) {
1486 $keepAlias[$caseFoldedAlias] = 'first';
1487 }
1488 } elseif ( $first ) {
1489 wfWarn( "First alias '$alias' for $realName conflicts with " .
1490 "{$keepAlias[$caseFoldedAlias]} alias for " .
1491 $this->aliases[$caseFoldedAlias]
1492 );
1493 }
1494 $first = false;
1495 }
1496 }
1497 }
1498 }
1499
1500 return $this->aliases;
1501 }
1502
1511 public function resolveAlias( $alias ) {
1512 $bits = explode( '/', $alias, 2 );
1513
1514 $caseFoldedAlias = $this->contLang->caseFold( $bits[0] );
1515 $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
1516 $aliases = $this->getAliasList();
1517 if ( !isset( $aliases[$caseFoldedAlias] ) ) {
1518 return [ null, null ];
1519 }
1520 $name = $aliases[$caseFoldedAlias];
1521 $par = $bits[1] ?? null; // T4087
1522
1523 return [ $name, $par ];
1524 }
1525
1532 public function exists( $name ) {
1533 [ $title, ] = $this->resolveAlias( $name );
1534
1535 $specialPageList = $this->getPageList();
1536 return $title !== null && isset( $specialPageList[$title] );
1537 }
1538
1545 public function getPage( $name ) {
1546 [ $realName, ] = $this->resolveAlias( $name );
1547
1548 $specialPageList = $this->getPageList();
1549
1550 if ( $realName !== null && isset( $specialPageList[$realName] ) ) {
1551 $rec = $specialPageList[$realName];
1552
1553 if ( is_array( $rec ) || is_string( $rec ) || is_callable( $rec ) ) {
1554 $page = $this->objectFactory->createObject(
1555 $rec,
1556 [
1557 'allowClassName' => true,
1558 'allowCallable' => true
1559 ]
1560 );
1561 } else {
1562 $page = null;
1563 }
1564
1565 if ( $page instanceof SpecialPage ) {
1566 $page->setHookContainer( $this->hookContainer );
1567 $page->setContentLanguage( $this->contLang );
1568 $page->setSpecialPageFactory( $this );
1569 return $page;
1570 }
1571
1572 // It's not a classname, nor a callback, nor a legacy constructor array,
1573 // nor a special page object. Give up.
1574 wfLogWarning( "Cannot instantiate special page $realName: bad spec!" );
1575 }
1576
1577 return null;
1578 }
1579
1591 public function getUsablePages( User $user, ?IContextSource $context = null ): array {
1592 $pages = [];
1593 if ( !$context ) {
1595 'Calling SpecialPageFactory::getUsablePages without context was deprecated in 1.46.',
1596 '1.46'
1597 );
1598 $context = RequestContext::getMain();
1599 }
1600 foreach ( $this->getPageList() as $name => $_ ) {
1601 $page = $this->getPage( $name );
1602 if ( $page ) { // not null
1603 $page->setContext( $context );
1604 if ( $page->isListed()
1605 && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
1606 ) {
1607 $pages[$name] = $page;
1608 }
1609 }
1610 }
1611
1612 return $pages;
1613 }
1614
1621 public function getListedPages(): array {
1622 $pages = [];
1623 foreach ( $this->getPageList() as $name => $_ ) {
1624 $page = $this->getPage( $name );
1625 if ( $page && $page->isListed() ) {
1626 $pages[$name] = $page;
1627 }
1628 }
1629 return $pages;
1630 }
1631
1647 public function executePath( $path, IContextSource $context, $including = false,
1648 ?LinkRenderer $linkRenderer = null
1649 ) {
1650 if ( $path instanceof PageReference ) {
1651 $path = $path->getDBkey();
1652 }
1653
1654 $bits = explode( '/', $path, 2 );
1655 $name = $bits[0];
1656 $par = $bits[1] ?? null; // T4087
1657
1658 $page = $this->getPage( $name );
1659 if ( !$page ) {
1660 // Emulate SpecialPage::setHeaders()
1661 $context->getOutput()->setArticleRelated( false );
1662 $context->getOutput()->setRobotPolicy( 'noindex,nofollow' );
1663
1664 if ( $context->getConfig()->get( MainConfigNames::Send404Code ) ) {
1665 $context->getOutput()->setStatusCode( 404 );
1666 }
1667
1668 $context->getOutput()->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
1669
1670 return false;
1671 }
1672
1673 if ( !$including ) {
1674 ProfilingContext::singleton()->init( MW_ENTRY_POINT, $page->getName() );
1675 // Narrow DB query expectations for this HTTP request
1676 $trxLimits = $context->getConfig()->get( MainConfigNames::TrxProfilerLimits );
1677 $trxProfiler = Profiler::instance()->getTransactionProfiler();
1678 if ( $context->getRequest()->wasPosted() && !$page->doesWrites() ) {
1679 $trxProfiler->setExpectations( $trxLimits['POST-nonwrite'], __METHOD__ );
1680 }
1681 }
1682
1683 // Page exists, set the context
1684 $page->setContext( $context );
1685
1686 if ( !$including ) {
1687 // Redirect to canonical alias for GET commands
1688 // Not for POST, we'd lose the post data, so it's best to just distribute
1689 // the request. Such POST requests are possible for old extensions that
1690 // generate self-links without being aware that their default name has
1691 // changed.
1692 if ( $name != $page->getLocalName() && !$context->getRequest()->wasPosted() ) {
1693 $query = $context->getRequest()->getQueryValues();
1694 unset( $query['title'] );
1695 $title = $page->getPageTitle( $par ?? false );
1696 $url = $title->getFullURL( $query );
1697 $context->getOutput()->redirect( $url );
1698
1699 return $title;
1700 }
1701
1702 // @phan-suppress-next-line PhanUndeclaredMethod
1703 $context->setTitle( $page->getPageTitle( $par ?? false ) );
1704 } elseif ( !$page->isIncludable() ) {
1705 return false;
1706 }
1707
1708 $page->including( $including );
1709 if ( $linkRenderer ) {
1710 $page->setLinkRenderer( $linkRenderer );
1711 }
1712
1713 $timer = $including ? null : $this->statsFactory
1714 ->getTiming( 'special_executeTiming_seconds' )
1715 ->setLabel( 'special', $page->getName() )
1716 ->start();
1717
1718 // Execute special page
1719 $page->run( $par );
1720
1721 $timer?->stop();
1722
1723 return true;
1724 }
1725
1741 public function capturePath(
1742 PageReference $page, IContextSource $context, ?LinkRenderer $linkRenderer = null
1743 ) {
1744 // phpcs:ignore MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle
1746 $main = RequestContext::getMain();
1747
1748 // Save current globals and main context
1749 $glob = [
1750 'title' => $wgTitle,
1751 'output' => $wgOut,
1752 'request' => $wgRequest,
1753 'language' => $wgLang,
1754 ];
1755 $ctx = [
1756 'title' => $main->getTitle(),
1757 'output' => $main->getOutput(),
1758 'request' => $main->getRequest(),
1759 'user' => $main->getUser(),
1760 'language' => $main->getLanguage(),
1761 ];
1762 if ( $main->canUseWikiPage() ) {
1763 $ctx['wikipage'] = $main->getWikiPage();
1764 }
1765
1766 // just needed for $wgTitle and RequestContext::setTitle
1767 $title = $this->titleFactory->castFromPageReference( $page );
1768
1769 // Override
1770 $wgTitle = $title;
1771 $wgOut = $context->getOutput();
1772 $wgRequest = $context->getRequest();
1773 $wgLang = $context->getLanguage();
1774 // FIXME: Once reasonably certain that no SpecialPage subclasses
1775 // rely on direct RequestContext::getMain instead of their local
1776 // context getters, these can be removed (T323184)
1777 // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1778 @$main->setTitle( $title );
1779 $main->setOutput( $context->getOutput() );
1780 $main->setRequest( $context->getRequest() );
1781 $main->setUser( $context->getUser() );
1782 $main->setLanguage( $context->getLanguage() );
1783
1784 try {
1785 // The useful part
1786 return $this->executePath( $page, $context, true, $linkRenderer );
1787 } finally {
1788 // Restore old globals and context
1789 $wgTitle = $glob['title'];
1790 $wgOut = $glob['output'];
1791 $wgRequest = $glob['request'];
1792 $wgLang = $glob['language'];
1793 // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1794 @$main->setTitle( $ctx['title'] );
1795 $main->setOutput( $ctx['output'] );
1796 $main->setRequest( $ctx['request'] );
1797 $main->setUser( $ctx['user'] );
1798 $main->setLanguage( $ctx['language'] );
1799 if ( isset( $ctx['wikipage'] ) ) {
1800 $main->setWikiPage( $ctx['wikipage'] );
1801 }
1802 }
1803 }
1804
1812 public function getLocalNameFor( $name, $subpage = false ) {
1813 $aliases = $this->contLang->getSpecialPageAliases();
1814 $aliasList = $this->getAliasList();
1815
1816 // Find the first alias that maps back to $name
1817 if ( isset( $aliases[$name] ) ) {
1818 $found = false;
1819 foreach ( $aliases[$name] as $alias ) {
1820 $caseFoldedAlias = $this->contLang->caseFold( $alias );
1821 $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
1822 if ( isset( $aliasList[$caseFoldedAlias] ) &&
1823 $aliasList[$caseFoldedAlias] === $name
1824 ) {
1825 $name = $alias;
1826 $found = true;
1827 break;
1828 }
1829 }
1830 if ( !$found ) {
1831 wfWarn( "Did not find a usable alias for special page '$name'. " .
1832 "It seems all defined aliases conflict?" );
1833 }
1834 } else {
1835 // Check if someone misspelled the correct casing
1836 if ( is_array( $aliases ) ) {
1837 foreach ( $aliases as $n => $_ ) {
1838 if ( strcasecmp( $name, $n ) === 0 ) {
1839 wfWarn( "Found alias defined for $n when searching for " .
1840 "special page aliases for $name. Case mismatch?" );
1841 return $this->getLocalNameFor( $n, $subpage );
1842 }
1843 }
1844 }
1845
1846 wfWarn( "Did not find alias for special page '$name'. " .
1847 "Perhaps no aliases are defined for it?" );
1848 }
1849
1850 if ( $subpage !== false && $subpage !== null ) {
1851 // Make sure it's in dbkey form
1852 $subpage = str_replace( ' ', '_', $subpage );
1853 $name = "$name/$subpage";
1854 }
1855
1856 return $this->contLang->ucfirst( $name );
1857 }
1858
1865 public function getTitleForAlias( $alias ) {
1866 [ $name, $subpage ] = $this->resolveAlias( $alias );
1867 if ( $name != null ) {
1868 return SpecialPage::getTitleFor( $name, $subpage );
1869 }
1870
1871 return null;
1872 }
1873}
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
wfDeprecatedMsg( $msg, $version=false, $component=false, $callerOffset=2)
Log a deprecation warning with arbitrary message text.
wfLogWarning( $msg, $callerOffset=1, $level=E_USER_WARNING)
Send a warning as a PHP error and the debug log.
global $wgRequest
Definition Setup.php:432
$wgLang
Definition Setup.php:554
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgOut
Definition Setup.php:549
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgTitle
Definition Setup.php:549
if(!defined('MW_SETUP_CALLBACK'))
Definition WebStart.php:69
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:25
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)
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 special page names.
getUsablePages(User $user, ?IContextSource $context=null)
Get listed special pages available to the current user.
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.
A special page showing a Swagger UI for exploring REST APIs.
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:130
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'=>[], '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, 'ThumbnailStepsRatio'=> 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, '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',],], 'json'=>['class'=> 'MediaWiki\\Content\\JsonContentHandler', 'services'=>['ParsoidParserFactory', 'TitleFactory',],], 'css'=>['class'=> 'MediaWiki\\Content\\CssContentHandler', 'services'=>['MainConfig', 'ParserFactory', 'UserOptionsLookup',],], 'vue'=>['class'=> 'MediaWiki\\Content\\VueContentHandler', 'services'=>['MainConfig', 'ParserFactory',],], '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, 'PHPSessionHandling'=> 'warn', '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',],],], '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, ], '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, 'UseLegacyMediaStyles' => 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, ], ], '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, ], 'AllowSecuritySensitiveOperationIfCannotReauthenticate' => [ 'default' => true, ], '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, '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, ], '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, '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' => [ ], '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, ], ], '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', ], '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, 'AllowUserCss' => false, 'AllowUserCssPrefs' => true, 'UseSiteJs' => true, 'UseSiteCss' => true, 'BreakFrames' => false, 'EditPageFrameOptions' => 'DENY', 'ApiFrameOptions' => 'DENY', 'CSPHeader' => false, 'CSPReportOnlyHeader' => 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: ], '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, ], '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, '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\\JobQueue\\Jobs\\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', 'Access-Control-Max-Age', 'Authorization', ], 'RestAPIAdditionalRouteFiles' => [ ], 'RestSandboxSpecs' => [ ], '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, ], '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', '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', ], 'ThumbnailStepsRatio' => [ 'number', 'null', ], 'ThumbnailBuckets' => [ 'array', 'null', ], 'UploadThumbnailRenderMap' => 'object', 'GalleryOptions' => 'object', 'DjvuDump' => [ 'string', 'null', ], 'DjvuRenderer' => [ 'string', 'null', ], 'DjvuTxt' => [ 'string', 'null', ], 'DjvuPostProcessor' => [ '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', 'PHPSessionHandling' => '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', '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', 'AllowSecuritySensitiveOperationIfCannotReauthenticate' => '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', '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', 'CSPHeader' => [ 'boolean', 'object', ], 'CSPReportOnlyHeader' => [ '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', 'RecentChangesFlags' => 'object', 'WatchlistExpiry' => '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', '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', ], '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', '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', ], ], ], ], ], 'PHPSessionHandling' => [ 'deprecated' => 'since 1.45 Integration with PHP session handling will be removed in the future', ], 'RawHtmlMessages' => [ 'items' => [ 'type' => 'string', ], ], 'InterwikiLogoOverride' => [ 'items' => [ 'type' => 'string', ], ], 'LegalTitleChars' => [ 'deprecated' => 'since 1.41; use Extension:TitleBlacklist to customize', ], 'ReauthenticateTime' => [ 'additionalProperties' => [ 'type' => 'integer', ], ], 'AllowSecuritySensitiveOperationIfCannotReauthenticate' => [ 'additionalProperties' => [ 'type' => 'boolean', ], ], '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', ], ], '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', ], ], ], ], '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.