MediaWiki master
SpecialPageFactory.php
Go to the documentation of this file.
1<?php
10
165use Profiler;
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 'LinksMigration',
351 ]
352 ],
353 'Unwatchedpages' => [
354 'class' => SpecialUnwatchedPages::class,
355 'services' => [
356 'LinkBatchFactory',
357 'ConnectionProvider',
358 'LanguageConverterFactory',
359 ]
360 ],
361 'Wantedcategories' => [
362 'class' => SpecialWantedCategories::class,
363 'services' => [
364 'ConnectionProvider',
365 'LinkBatchFactory',
366 'LanguageConverterFactory',
367 'LinksMigration',
368 ]
369 ],
370 'Wantedfiles' => [
371 'class' => SpecialWantedFiles::class,
372 'services' => [
373 'RepoGroup',
374 'ConnectionProvider',
375 'LinkBatchFactory',
376 ]
377 ],
378 'Wantedpages' => [
379 'class' => SpecialWantedPages::class,
380 'services' => [
381 'ConnectionProvider',
382 'LinkBatchFactory',
383 'LinksMigration',
384 ]
385 ],
386 'Wantedtemplates' => [
387 'class' => SpecialWantedTemplates::class,
388 'services' => [
389 'ConnectionProvider',
390 'LinkBatchFactory',
391 'LinksMigration',
392 ]
393 ],
394
395 // List of pages
396 'Allpages' => [
397 'class' => SpecialAllPages::class,
398 'services' => [
399 'ConnectionProvider',
400 'SearchEngineFactory',
401 'PageStore',
402 ]
403 ],
404 'Prefixindex' => [
405 'class' => SpecialPrefixIndex::class,
406 'services' => [
407 'ConnectionProvider',
408 'LinkCache',
409 ]
410 ],
411 'Categories' => [
412 'class' => SpecialCategories::class,
413 'services' => [
414 'LinkBatchFactory',
415 'ConnectionProvider',
416 ]
417 ],
418 'Listredirects' => [
419 'class' => SpecialListRedirects::class,
420 'services' => [
421 'LinkBatchFactory',
422 'ConnectionProvider',
423 'WikiPageFactory',
424 'RedirectLookup'
425 ]
426 ],
427 'PagesWithProp' => [
428 'class' => SpecialPagesWithProp::class,
429 'services' => [
430 'ConnectionProvider',
431 ]
432 ],
433 'TrackingCategories' => [
434 'class' => SpecialTrackingCategories::class,
435 'services' => [
436 'LinkBatchFactory',
437 'TrackingCategories',
438 ]
439 ],
440
441 // Authentication
442 'Userlogin' => [
443 'class' => SpecialUserLogin::class,
444 'services' => [
445 'AuthManager',
446 'UserIdentityUtils',
447 ]
448 ],
449 'Userlogout' => [
450 'class' => SpecialUserLogout::class,
451 'services' => [
452 'TempUserConfig',
453 ],
454 ],
455 'CreateAccount' => [
456 'class' => SpecialCreateAccount::class,
457 'services' => [
458 'AuthManager',
459 'FormatterFactory',
460 'UserIdentityUtils',
461 ]
462 ],
463 'LinkAccounts' => [
464 'class' => SpecialLinkAccounts::class,
465 'services' => [
466 'AuthManager',
467 ]
468 ],
469 'UnlinkAccounts' => [
470 'class' => SpecialUnlinkAccounts::class,
471 'services' => [
472 'AuthManager',
473 'SessionManager',
474 ]
475 ],
476 'ChangeCredentials' => [
477 'class' => SpecialChangeCredentials::class,
478 'services' => [
479 'AuthManager',
480 'SessionManager',
481 ]
482 ],
483 'RemoveCredentials' => [
484 'class' => SpecialRemoveCredentials::class,
485 'services' => [
486 'AuthManager',
487 'SessionManager',
488 ]
489 ],
490 'AuthenticationPopupSuccess' => [
491 'class' => SpecialAuthenticationPopupSuccess::class,
492 'services' => [
493 'SkinFactory',
494 ]
495 ],
496
497 // Users and rights
498 'Activeusers' => [
499 'class' => SpecialActiveUsers::class,
500 'services' => [
501 'LinkBatchFactory',
502 'ConnectionProvider',
503 'UserGroupManager',
504 'UserIdentityLookup',
505 'HideUserUtils',
506 'TempUserConfig',
507 'RecentChangeLookup',
508 ]
509 ],
510 'Block' => [
511 'class' => SpecialBlock::class,
512 'services' => [
513 'BlockTargetFactory',
514 'BlockPermissionCheckerFactory',
515 'BlockUserFactory',
516 'DatabaseBlockStore',
517 'UserNameUtils',
518 'UserNamePrefixSearch',
519 'BlockActionInfo',
520 'TitleFormatter',
521 'NamespaceInfo',
522 'UserOptionsLookup',
523 'WatchlistManager'
524 ]
525 ],
526 'Unblock' => [
527 'class' => SpecialUnblock::class,
528 'services' => [
529 'UnblockUserFactory',
530 'BlockTargetFactory',
531 'DatabaseBlockStore',
532 'UserNameUtils',
533 'UserNamePrefixSearch',
534 'WatchlistManager',
535 ]
536 ],
537 'BlockList' => [
538 'class' => SpecialBlockList::class,
539 'services' => [
540 'LinkBatchFactory',
541 'DatabaseBlockStore',
542 'BlockRestrictionStore',
543 'ConnectionProvider',
544 'CommentStore',
545 'BlockTargetFactory',
546 'HideUserUtils',
547 'BlockActionInfo',
548 'RowCommentFormatter',
549 'TempUserConfig',
550 ],
551 ],
552 'AutoblockList' => [
553 'class' => SpecialAutoblockList::class,
554 'services' => [
555 'LinkBatchFactory',
556 'BlockRestrictionStore',
557 'ConnectionProvider',
558 'CommentStore',
559 'BlockTargetFactory',
560 'HideUserUtils',
561 'BlockActionInfo',
562 'RowCommentFormatter',
563 ],
564 ],
565 'ChangePassword' => [
566 'class' => SpecialChangePassword::class,
567 ],
568 'BotPasswords' => [
569 'class' => SpecialBotPasswords::class,
570 'services' => [
571 'PasswordFactory',
572 'AuthManager',
573 'CentralIdLookup',
574 'GrantsInfo',
575 'GrantsLocalization',
576 ]
577 ],
578 'PasswordReset' => [
579 'class' => SpecialPasswordReset::class,
580 'services' => [
581 'PasswordReset'
582 ]
583 ],
584 'DeletedContributions' => [
585 'class' => SpecialDeletedContributions::class,
586 'services' => [
587 'PermissionManager',
588 'ConnectionProvider',
589 'RevisionStore',
590 'NamespaceInfo',
591 'UserNameUtils',
592 'UserNamePrefixSearch',
593 'UserOptionsLookup',
594 'CommentFormatter',
595 'LinkBatchFactory',
596 'UserFactory',
597 'UserIdentityLookup',
598 'DatabaseBlockStore',
599 'UserGroupAssignmentService',
600 'TempUserConfig',
601 ]
602 ],
603 'Preferences' => [
604 'class' => SpecialPreferences::class,
605 'services' => [
606 'PreferencesFactory',
607 'UserOptionsManager',
608 ]
609 ],
610 'ResetTokens' => [
611 'class' => SpecialResetTokens::class,
612 ],
613 'Contributions' => [
614 'class' => SpecialContributions::class,
615 'services' => [
616 'LinkBatchFactory',
617 'PermissionManager',
618 'ConnectionProvider',
619 'RevisionStore',
620 'NamespaceInfo',
621 'UserNameUtils',
622 'UserNamePrefixSearch',
623 'UserOptionsLookup',
624 'CommentFormatter',
625 'UserFactory',
626 'UserIdentityLookup',
627 'DatabaseBlockStore',
628 'UserGroupAssignmentService',
629 'TempUserConfig',
630 ]
631 ],
632 'Listgrouprights' => [
633 'class' => SpecialListGroupRights::class,
634 'services' => [
635 'NamespaceInfo',
636 'UserGroupManager',
637 'LanguageConverterFactory',
638 'GroupPermissionsLookup',
639 ]
640 ],
641 'Listgrants' => [
642 'class' => SpecialListGrants::class,
643 'services' => [
644 'GrantsLocalization',
645 ]
646 ],
647 'Listusers' => [
648 'class' => SpecialListUsers::class,
649 'services' => [
650 'LinkBatchFactory',
651 'ConnectionProvider',
652 'UserGroupManager',
653 'UserIdentityLookup',
654 'HideUserUtils',
655 'TempUserConfig',
656 ]
657 ],
658 'Listadmins' => [
659 'class' => SpecialListAdmins::class,
660 ],
661 'Listbots' => [
662 'class' => SpecialListBots::class,
663 ],
664 'Userrights' => [
665 'class' => SpecialUserRights::class,
666 'services' => [
667 'UserGroupManagerFactory',
668 'UserNameUtils',
669 'UserNamePrefixSearch',
670 'UserFactory',
671 'WatchlistManager',
672 'UserGroupAssignmentService',
673 'MultiFormatUserIdentityLookup',
674 'FormatterFactory',
675 ]
676 ],
677 'EditWatchlist' => [
678 'class' => SpecialEditWatchlist::class,
679 'services' => [
680 'WatchedItemStore',
681 'TitleParser',
682 'GenderCache',
683 'LinkBatchFactory',
684 'NamespaceInfo',
685 'WikiPageFactory',
686 'WatchlistManager',
687 ]
688 ],
689 'PasswordPolicies' => [
690 'class' => SpecialPasswordPolicies::class,
691 'services' => [
692 'UserGroupManager',
693 ]
694 ],
695
696 // Recent changes and logs
697 'Newimages' => [
698 'class' => SpecialNewFiles::class,
699 'services' => [
700 'MimeAnalyzer',
701 'GroupPermissionsLookup',
702 'ConnectionProvider',
703 'LinkBatchFactory',
704 ]
705 ],
706 'Log' => [
707 'class' => SpecialLog::class,
708 'services' => [
709 'LinkBatchFactory',
710 'ConnectionProvider',
711 'ActorNormalization',
712 'UserIdentityLookup',
713 'UserNameUtils',
714 'LogFormatterFactory',
715 'TempUserConfig',
716 ]
717 ],
718 'Watchlist' => [
719 'class' => SpecialWatchlist::class,
720 'services' => [
721 'WatchedItemStore',
722 'WatchlistManager',
723 'UserOptionsLookup',
724 'UserIdentityUtils',
725 'TempUserConfig',
726 'RecentChangeFactory',
727 'ChangesListQueryFactory',
728 'WatchlistLabelStore',
729 ]
730 ],
731 'WatchlistLabels' => [
732 'class' => SpecialWatchlistLabels::class,
733 'services' => [
734 'WatchlistLabelStore',
735 ]
736 ],
737 'Newpages' => [
738 'class' => SpecialNewPages::class,
739 'services' => [
740 'LinkBatchFactory',
741 'ContentHandlerFactory',
742 'GroupPermissionsLookup',
743 'RevisionLookup',
744 'NamespaceInfo',
745 'UserOptionsLookup',
746 'RowCommentFormatter',
747 'ChangeTagsStore',
748 'TempUserConfig',
749 ]
750 ],
751 'Recentchanges' => [
752 'class' => SpecialRecentChanges::class,
753 'services' => [
754 'WatchedItemStore',
755 'MessageParser',
756 'UserOptionsLookup',
757 'UserIdentityUtils',
758 'TempUserConfig',
759 'RecentChangeFactory',
760 'ChangesListQueryFactory',
761 ]
762 ],
763 'Recentchangeslinked' => [
764 'class' => SpecialRecentChangesLinked::class,
765 'services' => [
766 'WatchedItemStore',
767 'MessageParser',
768 'UserOptionsLookup',
769 'SearchEngineFactory',
770 'UserIdentityUtils',
771 'TempUserConfig',
772 'RecentChangeFactory',
773 'ChangesListQueryFactory',
774 ]
775 ],
776 'Tags' => [
777 'class' => SpecialTags::class,
778 'services' => [
779 'ChangeTagsStore',
780 ]
781 ],
782
783 // Media reports and uploads
784 'Listfiles' => [
785 'class' => SpecialListFiles::class,
786 'services' => [
787 'RepoGroup',
788 'ConnectionProvider',
789 'CommentStore',
790 'UserNameUtils',
791 'UserNamePrefixSearch',
792 'RowCommentFormatter',
793 'LinkBatchFactory',
794 ]
795 ],
796 'Filepath' => [
797 'class' => SpecialFilepath::class,
798 'services' => [
799 'SearchEngineFactory',
800 ]
801 ],
802 'MediaStatistics' => [
803 'class' => SpecialMediaStatistics::class,
804 'services' => [
805 'MimeAnalyzer',
806 'ConnectionProvider',
807 'LinkBatchFactory',
808 ]
809 ],
810 'MIMEsearch' => [
811 'class' => SpecialMIMESearch::class,
812 'services' => [
813 'ConnectionProvider',
814 'LinkBatchFactory',
815 'LanguageConverterFactory',
816 ]
817 ],
818 'FileDuplicateSearch' => [
819 'class' => SpecialFileDuplicateSearch::class,
820 'services' => [
821 'LinkBatchFactory',
822 'RepoGroup',
823 'SearchEngineFactory',
824 'LanguageConverterFactory',
825 ]
826 ],
827 'Upload' => [
828 'class' => SpecialUpload::class,
829 'services' => [
830 'RepoGroup',
831 'UserOptionsLookup',
832 'NamespaceInfo',
833 ]
834 ],
835 'UploadStash' => [
836 'class' => SpecialUploadStash::class,
837 'services' => [
838 'RepoGroup',
839 'HttpRequestFactory',
840 'UrlUtils',
841 'ConnectionProvider',
842 ]
843 ],
844 'ListDuplicatedFiles' => [
845 'class' => SpecialListDuplicatedFiles::class,
846 'services' => [
847 'ConnectionProvider',
848 'LinkBatchFactory',
849 ]
850 ],
851
852 // Data and tools
853 'ApiSandbox' => [
854 'class' => SpecialApiSandbox::class,
855 ],
856 'Interwiki' => [
857 'class' => SpecialInterwiki::class,
858 'services' => [
859 'ContentLanguage',
860 'InterwikiLookup',
861 'LanguageNameUtils',
862 'UrlUtils',
863 'ConnectionProvider',
864 ]
865 ],
866 'RestSandbox' => [
867 'class' => SpecialRestSandbox::class,
868 'services' => [
869 'UrlUtils',
870 ]
871 ],
872 'Statistics' => [
873 'class' => SpecialStatistics::class,
874 'services' => [
875 'UserGroupManager',
876 ]
877 ],
878 'Allmessages' => [
879 'class' => SpecialAllMessages::class,
880 'services' => [
881 'LanguageFactory',
882 'LanguageNameUtils',
883 'LocalisationCache',
884 'ConnectionProvider',
885 ]
886 ],
887 'Version' => [
888 'class' => SpecialVersion::class,
889 'services' => [
890 'ParserFactory',
891 'UrlUtils',
892 'ConnectionProvider',
893 ]
894 ],
895 'Lockdb' => [
896 'class' => SpecialLockdb::class,
897 ],
898 'Unlockdb' => [
899 'class' => SpecialUnlockdb::class,
900 ],
901 'NamespaceInfo' => [
902 'class' => SpecialNamespaceInfo::class,
903 'services' => [
904 'NamespaceInfo',
905 ],
906 ],
907
908 // Redirecting special pages
909 'LinkSearch' => [
910 'class' => SpecialLinkSearch::class,
911 'services' => [
912 'ConnectionProvider',
913 'LinkBatchFactory',
914 'UrlUtils',
915 ]
916 ],
917 'Randompage' => [
918 'class' => SpecialRandomPage::class,
919 'services' => [
920 'ConnectionProvider',
921 'NamespaceInfo',
922 ]
923 ],
924 'RandomInCategory' => [
925 'class' => SpecialRandomInCategory::class,
926 'services' => [
927 'ConnectionProvider',
928 ]
929 ],
930 'Randomredirect' => [
931 'class' => SpecialRandomRedirect::class,
932 'services' => [
933 'ConnectionProvider',
934 'NamespaceInfo',
935 ]
936 ],
937 'Randomrootpage' => [
938 'class' => SpecialRandomRootPage::class,
939 'services' => [
940 'ConnectionProvider',
941 'NamespaceInfo',
942 ]
943 ],
944 'GoToInterwiki' => [
945 'class' => SpecialGoToInterwiki::class,
946 ],
947
948 // High use pages
949 'Mostlinkedcategories' => [
950 'class' => SpecialMostLinkedCategories::class,
951 'services' => [
952 'ConnectionProvider',
953 'LinkBatchFactory',
954 'LanguageConverterFactory',
955 ]
956 ],
957 'Mostimages' => [
958 'class' => SpecialMostImages::class,
959 'services' => [
960 'ConnectionProvider',
961 'LanguageConverterFactory',
962 ]
963 ],
964 'Mostinterwikis' => [
965 'class' => SpecialMostInterwikis::class,
966 'services' => [
967 'NamespaceInfo',
968 'ConnectionProvider',
969 'LinkBatchFactory',
970 ]
971 ],
972 'Mostlinked' => [
973 'class' => SpecialMostLinked::class,
974 'services' => [
975 'ConnectionProvider',
976 'LinkBatchFactory',
977 'LinksMigration',
978 ]
979 ],
980 'Mostlinkedtemplates' => [
981 'class' => SpecialMostLinkedTemplates::class,
982 'services' => [
983 'ConnectionProvider',
984 'LinkBatchFactory',
985 'LinksMigration',
986 ]
987 ],
988 'Mostcategories' => [
989 'class' => SpecialMostCategories::class,
990 'services' => [
991 'NamespaceInfo',
992 'ConnectionProvider',
993 'LinkBatchFactory',
994 ]
995 ],
996 'Mostrevisions' => [
997 'class' => SpecialMostRevisions::class,
998 'services' => [
999 // Same as for Fewestrevisions
1000 'NamespaceInfo',
1001 'ConnectionProvider',
1002 'LinkBatchFactory',
1003 'LanguageConverterFactory',
1004 ]
1005 ],
1006
1007 // Page tools
1008 'ComparePages' => [
1009 'class' => SpecialComparePages::class,
1010 'services' => [
1011 'RevisionLookup',
1012 'ContentHandlerFactory',
1013 ]
1014 ],
1015 'Export' => [
1016 'class' => SpecialExport::class,
1017 'services' => [
1018 'ConnectionProvider',
1019 'WikiExporterFactory',
1020 'TitleFormatter',
1021 'LinksMigration',
1022 ]
1023 ],
1024 'Import' => [
1025 'class' => SpecialImport::class,
1026 'services' => [
1027 'WikiImporterFactory',
1028 ]
1029 ],
1030 'Undelete' => [
1031 'class' => SpecialUndelete::class,
1032 'services' => [
1033 'PermissionManager',
1034 'RevisionStore',
1035 'RevisionRenderer',
1036 'ContentHandlerFactory',
1037 'ChangeTagDefStore',
1038 'LinkBatchFactory',
1039 'RepoGroup',
1040 'ConnectionProvider',
1041 'UserOptionsLookup',
1042 'WikiPageFactory',
1043 'SearchEngineFactory',
1044 'UndeletePageFactory',
1045 'ArchivedRevisionLookup',
1046 'CommentFormatter',
1047 'WatchlistManager',
1048 ],
1049 ],
1050 'Whatlinkshere' => [
1051 'class' => SpecialWhatLinksHere::class,
1052 'services' => [
1053 'ConnectionProvider',
1054 'LinkBatchFactory',
1055 'ContentHandlerFactory',
1056 'SearchEngineFactory',
1057 'NamespaceInfo',
1058 'TitleFactory',
1059 'LinksMigration',
1060 ]
1061 ],
1062 'MergeHistory' => [
1063 'class' => SpecialMergeHistory::class,
1064 'services' => [
1065 'MergeHistoryFactory',
1066 'LinkBatchFactory',
1067 'ConnectionProvider',
1068 'RevisionStore',
1069 'CommentFormatter',
1070 'ChangeTagsStore',
1071 ]
1072 ],
1073 'ExpandTemplates' => [
1074 'class' => SpecialExpandTemplates::class,
1075 'services' => [
1076 'ParserFactory',
1077 'UserOptionsLookup',
1078 'Tidy',
1079 ],
1080 ],
1081 'ChangeContentModel' => [
1082 'class' => SpecialChangeContentModel::class,
1083 'services' => [
1084 'ContentHandlerFactory',
1085 'ContentModelChangeFactory',
1086 'SpamChecker',
1087 'RevisionLookup',
1088 'WikiPageFactory',
1089 'SearchEngineFactory',
1090 'CollationFactory',
1091 ],
1092 ],
1093
1094 // Other
1095 'Booksources' => [
1096 'class' => SpecialBookSources::class,
1097 'services' => [
1098 'RevisionLookup',
1099 'TitleFactory',
1100 ]
1101 ],
1102
1103 // Unlisted / redirects
1104 'ApiHelp' => [
1105 'class' => SpecialApiHelp::class,
1106 'services' => [
1107 'UrlUtils',
1108 ]
1109 ],
1110 'Blankpage' => [
1111 'class' => SpecialBlankpage::class,
1112 ],
1113 'DeletePage' => [
1114 'class' => SpecialDeletePage::class,
1115 'services' => [
1116 'SearchEngineFactory',
1117 ]
1118 ],
1119 'Diff' => [
1120 'class' => SpecialDiff::class,
1121 ],
1122 'EditPage' => [
1123 'class' => SpecialEditPage::class,
1124 'services' => [
1125 'SearchEngineFactory',
1126 ]
1127 ],
1128 'EditTags' => [
1129 'class' => SpecialEditTags::class,
1130 'services' => [
1131 'PermissionManager',
1132 'ChangeTagsStore',
1133 ],
1134 ],
1135 'Emailuser' => [
1136 'class' => SpecialEmailUser::class,
1137 'services' => [
1138 'UserNameUtils',
1139 'UserNamePrefixSearch',
1140 'UserOptionsLookup',
1141 'EmailUserFactory',
1142 'UserFactory',
1143 ]
1144 ],
1145 'Movepage' => [
1146 'class' => SpecialMovePage::class,
1147 'services' => [
1148 'MovePageFactory',
1149 'PermissionManager',
1150 'UserOptionsLookup',
1151 'ConnectionProvider',
1152 'ContentHandlerFactory',
1153 'NamespaceInfo',
1154 'LinkBatchFactory',
1155 'RepoGroup',
1156 'WikiPageFactory',
1157 'SearchEngineFactory',
1158 'WatchlistManager',
1159 'WatchedItemStore',
1160 'RestrictionStore',
1161 'TitleFactory',
1162 'DeletePageFactory',
1163 ]
1164 ],
1165 'Mycontributions' => [
1166 'class' => SpecialMycontributions::class,
1167 'services' => [
1168 'TempUserConfig',
1169 ],
1170 ],
1171 'MyLanguage' => [
1172 'class' => SpecialMyLanguage::class,
1173 'services' => [
1174 'LanguageNameUtils',
1175 'RedirectLookup'
1176 ]
1177 ],
1178 'Mylog' => [
1179 'class' => SpecialMylog::class,
1180 'services' => [
1181 'TempUserConfig',
1182 ],
1183 ],
1184 'Mypage' => [
1185 'class' => SpecialMypage::class,
1186 'services' => [
1187 'TempUserConfig',
1188 ],
1189 ],
1190 'Mytalk' => [
1191 'class' => SpecialMytalk::class,
1192 'services' => [
1193 'TempUserConfig',
1194 'TempUserCreator',
1195 'AuthManager',
1196 ],
1197 ],
1198 'PageHistory' => [
1199 'class' => SpecialPageHistory::class,
1200 'services' => [
1201 'SearchEngineFactory',
1202 ]
1203 ],
1204 'PageInfo' => [
1205 'class' => SpecialPageInfo::class,
1206 'services' => [
1207 'SearchEngineFactory',
1208 ]
1209 ],
1210 'ProtectPage' => [
1211 'class' => SpecialProtectPage::class,
1212 'services' => [
1213 'SearchEngineFactory',
1214 ]
1215 ],
1216 'Purge' => [
1217 'class' => SpecialPurge::class,
1218 'services' => [
1219 'SearchEngineFactory',
1220 ]
1221 ],
1222 'Myuploads' => [
1223 'class' => SpecialMyuploads::class,
1224 'services' => [
1225 'TempUserConfig',
1226 ],
1227 ],
1228 'AllMyUploads' => [
1229 'class' => SpecialAllMyUploads::class,
1230 'services' => [
1231 'TempUserConfig',
1232 ],
1233 ],
1234 'NewSection' => [
1235 'class' => SpecialNewSection::class,
1236 'services' => [
1237 'SearchEngineFactory',
1238 ]
1239 ],
1240 'PermanentLink' => [
1241 'class' => SpecialPermanentLink::class,
1242 ],
1243 'Redirect' => [
1244 'class' => SpecialRedirect::class,
1245 'services' => [
1246 'RepoGroup',
1247 'UserFactory',
1248 ]
1249 ],
1250 'Renameuser' => [
1251 'class' => SpecialRenameUser::class,
1252 'services' => [
1253 'ConnectionProvider',
1254 'PermissionManager',
1255 'TitleFactory',
1256 'UserFactory',
1257 'UserNamePrefixSearch',
1258 'RenameUserFactory',
1259 ]
1260 ],
1261 'Revisiondelete' => [
1262 'class' => SpecialRevisionDelete::class,
1263 'services' => [
1264 'PermissionManager',
1265 'RepoGroup',
1266 ],
1267 ],
1268 'RunJobs' => [
1269 'class' => SpecialRunJobs::class,
1270 'services' => [
1271 'JobRunner',
1272 'ReadOnlyMode',
1273 ]
1274 ],
1275 'Specialpages' => [
1276 'class' => SpecialSpecialPages::class,
1277 ],
1278 'PageData' => [
1279 'class' => SpecialPageData::class,
1280 ],
1281 'Contribute' => [
1282 'class' => SpecialContribute::class,
1283 ],
1284 'TalkPage' => [
1285 'class' => SpecialTalkPage::class,
1286 'services' => [
1287 'TitleParser',
1288 ],
1289 ],
1290 ];
1291
1293 private $list;
1294
1296 private $aliases;
1297
1299 private $options;
1300
1302 private $contLang;
1303
1308 private $objectFactory;
1309
1314 private $hookContainer;
1315
1320 private $hookRunner;
1321
1325 private $titleFactory;
1326
1327 private StatsFactory $statsFactory;
1328
1332 public const CONSTRUCTOR_OPTIONS = [
1341 ];
1342
1351 public function __construct(
1352 ServiceOptions $options,
1353 Language $contLang,
1354 ObjectFactory $objectFactory,
1355 TitleFactory $titleFactory,
1356 HookContainer $hookContainer,
1357 StatsFactory $statsFactory,
1358 ) {
1359 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
1360 $this->options = $options;
1361 $this->contLang = $contLang;
1362 $this->objectFactory = $objectFactory;
1363 $this->titleFactory = $titleFactory;
1364 $this->hookContainer = $hookContainer;
1365 $this->hookRunner = new HookRunner( $hookContainer );
1366 $this->statsFactory = $statsFactory;
1367 }
1368
1375 public function getNames(): array {
1376 return array_keys( $this->getPageList() );
1377 }
1378
1382 private function getPageList(): array {
1383 if ( !is_array( $this->list ) ) {
1384 $this->list = self::CORE_LIST;
1385
1386 if ( !$this->options->get( MainConfigNames::DisableInternalSearch ) ) {
1387 $this->list['Search'] = [
1388 'class' => SpecialSearch::class,
1389 'services' => [
1390 'SearchEngineConfig',
1391 'SearchEngineFactory',
1392 'NamespaceInfo',
1393 'ContentHandlerFactory',
1394 'InterwikiLookup',
1395 'ReadOnlyMode',
1396 'UserOptionsManager',
1397 'LanguageConverterFactory',
1398 'RepoGroup',
1399 'SearchResultThumbnailProvider',
1400 'TitleMatcher',
1401 ]
1402 ];
1403 }
1404
1405 if ( $this->options->get( MainConfigNames::EmailAuthentication ) ) {
1406 $this->list['Confirmemail'] = [
1407 'class' => SpecialConfirmEmail::class,
1408 'services' => [
1409 'UserFactory',
1410 ]
1411 ];
1412 $this->list['Invalidateemail'] = [
1413 'class' => SpecialEmailInvalidate::class,
1414 'services' => [
1415 'UserFactory',
1416 ]
1417 ];
1418 }
1419
1420 if ( $this->options->get( MainConfigNames::EnableEmail ) ) {
1421 $this->list['ChangeEmail'] = [
1422 'class' => SpecialChangeEmail::class,
1423 'services' => [
1424 'AuthManager',
1425 ],
1426 ];
1427 }
1428
1429 if ( $this->options->get( MainConfigNames::EnableJavaScriptTest ) ) {
1430 $this->list['JavaScriptTest'] = [
1431 'class' => SpecialJavaScriptTest::class
1432 ];
1433 }
1434
1435 if ( $this->options->get( MainConfigNames::EnableSpecialMute ) ) {
1436 $this->list['Mute'] = [
1437 'class' => SpecialMute::class,
1438 'services' => [
1439 'CentralIdLookup',
1440 'UserOptionsManager',
1441 'UserIdentityLookup',
1442 'UserIdentityUtils',
1443 ]
1444 ];
1445 }
1446
1447 if ( $this->options->get( MainConfigNames::PageLanguageUseDB ) ) {
1448 $this->list['PageLanguage'] = [
1449 'class' => SpecialPageLanguage::class,
1450 'services' => [
1451 'ContentHandlerFactory',
1452 'LanguageNameUtils',
1453 'ConnectionProvider',
1454 'SearchEngineFactory',
1455 ]
1456 ];
1457 }
1458
1459 if ( $this->options->get( MainConfigNames::EnableEditRecovery ) ) {
1460 $this->list['EditRecovery'] = [
1461 'class' => SpecialEditRecovery::class,
1462 'services' => [
1463 'UserOptionsLookup',
1464 ],
1465 ];
1466 }
1467
1468 // Add extension special pages
1469 $this->list = array_merge( $this->list,
1470 $this->options->get( MainConfigNames::SpecialPages ) );
1471
1472 // This hook can be used to disable unwanted core special pages
1473 // or conditionally register special pages.
1474 $this->hookRunner->onSpecialPage_initList( $this->list );
1475 }
1476
1477 return $this->list;
1478 }
1479
1485 public function getAliasList(): array {
1486 if ( $this->aliases === null ) {
1487 $aliases = $this->contLang->getSpecialPageAliases();
1488 $pageList = $this->getPageList();
1489
1490 $this->aliases = [];
1491 $keepAlias = [];
1492
1493 // Force every canonical name to be an alias for itself.
1494 foreach ( $pageList as $name => $stuff ) {
1495 $caseFoldedAlias = $this->contLang->caseFold( $name );
1496 $this->aliases[$caseFoldedAlias] = $name;
1497 $keepAlias[$caseFoldedAlias] = 'canonical';
1498 }
1499
1500 // Check for $aliases being an array since Language::getSpecialPageAliases can return null
1501 if ( is_array( $aliases ) ) {
1502 foreach ( $aliases as $realName => $aliasList ) {
1503 $first = true;
1504 foreach ( $aliasList as $alias ) {
1505 $caseFoldedAlias = $this->contLang->caseFold( $alias );
1506
1507 if ( isset( $this->aliases[$caseFoldedAlias] ) &&
1508 $realName === $this->aliases[$caseFoldedAlias]
1509 ) {
1510 $first = false;
1511 // Ignore same-realName conflicts
1512 continue;
1513 }
1514
1515 if ( !isset( $keepAlias[$caseFoldedAlias] ) ) {
1516 $this->aliases[$caseFoldedAlias] = $realName;
1517 if ( $first ) {
1518 $keepAlias[$caseFoldedAlias] = 'first';
1519 }
1520 } elseif ( $first ) {
1521 wfWarn( "First alias '$alias' for $realName conflicts with " .
1522 "{$keepAlias[$caseFoldedAlias]} alias for " .
1523 $this->aliases[$caseFoldedAlias]
1524 );
1525 }
1526 $first = false;
1527 }
1528 }
1529 }
1530 }
1531
1532 return $this->aliases;
1533 }
1534
1543 public function resolveAlias( $alias ) {
1544 $bits = explode( '/', $alias, 2 );
1545
1546 $caseFoldedAlias = $this->contLang->caseFold( $bits[0] );
1547 $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
1548 $aliases = $this->getAliasList();
1549 if ( !isset( $aliases[$caseFoldedAlias] ) ) {
1550 return [ null, null ];
1551 }
1552 $name = $aliases[$caseFoldedAlias];
1553 $par = $bits[1] ?? null; // T4087
1554
1555 return [ $name, $par ];
1556 }
1557
1564 public function exists( $name ) {
1565 [ $title, ] = $this->resolveAlias( $name );
1566
1567 $specialPageList = $this->getPageList();
1568 return $title !== null && isset( $specialPageList[$title] );
1569 }
1570
1577 public function getPage( $name ) {
1578 [ $realName, ] = $this->resolveAlias( $name );
1579
1580 $specialPageList = $this->getPageList();
1581
1582 if ( $realName !== null && isset( $specialPageList[$realName] ) ) {
1583 $rec = $specialPageList[$realName];
1584
1585 if ( is_array( $rec ) || is_string( $rec ) || is_callable( $rec ) ) {
1586 $page = $this->objectFactory->createObject(
1587 $rec,
1588 [
1589 'allowClassName' => true,
1590 'allowCallable' => true
1591 ]
1592 );
1593 } else {
1594 $page = null;
1595 }
1596
1597 if ( $page instanceof SpecialPage ) {
1598 $page->setHookContainer( $this->hookContainer );
1599 $page->setContentLanguage( $this->contLang );
1600 $page->setSpecialPageFactory( $this );
1601 return $page;
1602 }
1603
1604 // It's not a classname, nor a callback, nor a legacy constructor array,
1605 // nor a special page object. Give up.
1606 wfLogWarning( "Cannot instantiate special page $realName: bad spec!" );
1607 }
1608
1609 return null;
1610 }
1611
1622 public function getUsablePages( User $user, ?IContextSource $context = null ): array {
1623 $pages = [];
1624 $context ??= RequestContext::getMain();
1625 foreach ( $this->getPageList() as $name => $rec ) {
1626 $page = $this->getPage( $name );
1627 if ( $page ) { // not null
1628 $page->setContext( $context );
1629 if ( $page->isListed()
1630 && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
1631 ) {
1632 $pages[$name] = $page;
1633 }
1634 }
1635 }
1636
1637 return $pages;
1638 }
1639
1646 public function getListedPages(): array {
1647 $pages = [];
1648 foreach ( $this->getPageList() as $name => $rec ) {
1649 $page = $this->getPage( $name );
1650 if ( $page && $page->isListed() ) {
1651 $pages[$name] = $page;
1652 }
1653 }
1654 return $pages;
1655 }
1656
1672 public function executePath( $path, IContextSource $context, $including = false,
1673 ?LinkRenderer $linkRenderer = null
1674 ) {
1675 if ( $path instanceof PageReference ) {
1676 $path = $path->getDBkey();
1677 }
1678
1679 $bits = explode( '/', $path, 2 );
1680 $name = $bits[0];
1681 $par = $bits[1] ?? null; // T4087
1682
1683 $page = $this->getPage( $name );
1684 if ( !$page ) {
1685 // Emulate SpecialPage::setHeaders()
1686 $context->getOutput()->setArticleRelated( false );
1687 $context->getOutput()->setRobotPolicy( 'noindex,nofollow' );
1688
1689 if ( $context->getConfig()->get( MainConfigNames::Send404Code ) ) {
1690 $context->getOutput()->setStatusCode( 404 );
1691 }
1692
1693 $context->getOutput()->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
1694
1695 return false;
1696 }
1697
1698 if ( !$including ) {
1699 ProfilingContext::singleton()->init( MW_ENTRY_POINT, $page->getName() );
1700 // Narrow DB query expectations for this HTTP request
1701 $trxLimits = $context->getConfig()->get( MainConfigNames::TrxProfilerLimits );
1702 $trxProfiler = Profiler::instance()->getTransactionProfiler();
1703 if ( $context->getRequest()->wasPosted() && !$page->doesWrites() ) {
1704 $trxProfiler->setExpectations( $trxLimits['POST-nonwrite'], __METHOD__ );
1705 }
1706 }
1707
1708 // Page exists, set the context
1709 $page->setContext( $context );
1710
1711 if ( !$including ) {
1712 // Redirect to canonical alias for GET commands
1713 // Not for POST, we'd lose the post data, so it's best to just distribute
1714 // the request. Such POST requests are possible for old extensions that
1715 // generate self-links without being aware that their default name has
1716 // changed.
1717 if ( $name != $page->getLocalName() && !$context->getRequest()->wasPosted() ) {
1718 $query = $context->getRequest()->getQueryValues();
1719 unset( $query['title'] );
1720 $title = $page->getPageTitle( $par ?? false );
1721 $url = $title->getFullURL( $query );
1722 $context->getOutput()->redirect( $url );
1723
1724 return $title;
1725 }
1726
1727 // @phan-suppress-next-line PhanUndeclaredMethod
1728 $context->setTitle( $page->getPageTitle( $par ?? false ) );
1729 } elseif ( !$page->isIncludable() ) {
1730 return false;
1731 }
1732
1733 $page->including( $including );
1734 if ( $linkRenderer ) {
1735 $page->setLinkRenderer( $linkRenderer );
1736 }
1737
1738 $timer = $including ? null : $this->statsFactory
1739 ->getTiming( 'special_executeTiming_seconds' )
1740 ->setLabel( 'special', $page->getName() )
1741 ->start();
1742
1743 // Execute special page
1744 $page->run( $par );
1745
1746 $timer?->stop();
1747
1748 return true;
1749 }
1750
1766 public function capturePath(
1767 PageReference $page, IContextSource $context, ?LinkRenderer $linkRenderer = null
1768 ) {
1769 // phpcs:ignore MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgUser,MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle
1771 $main = RequestContext::getMain();
1772
1773 // Save current globals and main context
1774 $glob = [
1775 'title' => $wgTitle,
1776 'output' => $wgOut,
1777 'request' => $wgRequest,
1778 'user' => $wgUser,
1779 'language' => $wgLang,
1780 ];
1781 $ctx = [
1782 'title' => $main->getTitle(),
1783 'output' => $main->getOutput(),
1784 'request' => $main->getRequest(),
1785 'user' => $main->getUser(),
1786 'language' => $main->getLanguage(),
1787 ];
1788 if ( $main->canUseWikiPage() ) {
1789 $ctx['wikipage'] = $main->getWikiPage();
1790 }
1791
1792 // just needed for $wgTitle and RequestContext::setTitle
1793 $title = $this->titleFactory->castFromPageReference( $page );
1794
1795 // Override
1796 $wgTitle = $title;
1797 $wgOut = $context->getOutput();
1798 $wgRequest = $context->getRequest();
1799 $wgUser = $context->getUser();
1800 $wgLang = $context->getLanguage();
1801 // FIXME: Once reasonably certain that no SpecialPage subclasses
1802 // rely on direct RequestContext::getMain instead of their local
1803 // context getters, these can be removed (T323184)
1804 // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1805 @$main->setTitle( $title );
1806 $main->setOutput( $context->getOutput() );
1807 $main->setRequest( $context->getRequest() );
1808 $main->setUser( $context->getUser() );
1809 $main->setLanguage( $context->getLanguage() );
1810
1811 try {
1812 // The useful part
1813 return $this->executePath( $page, $context, true, $linkRenderer );
1814 } finally {
1815 // Restore old globals and context
1816 $wgTitle = $glob['title'];
1817 $wgOut = $glob['output'];
1818 $wgRequest = $glob['request'];
1819 $wgUser = $glob['user'];
1820 $wgLang = $glob['language'];
1821 // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1822 @$main->setTitle( $ctx['title'] );
1823 $main->setOutput( $ctx['output'] );
1824 $main->setRequest( $ctx['request'] );
1825 $main->setUser( $ctx['user'] );
1826 $main->setLanguage( $ctx['language'] );
1827 if ( isset( $ctx['wikipage'] ) ) {
1828 $main->setWikiPage( $ctx['wikipage'] );
1829 }
1830 }
1831 }
1832
1840 public function getLocalNameFor( $name, $subpage = false ) {
1841 $aliases = $this->contLang->getSpecialPageAliases();
1842 $aliasList = $this->getAliasList();
1843
1844 // Find the first alias that maps back to $name
1845 if ( isset( $aliases[$name] ) ) {
1846 $found = false;
1847 foreach ( $aliases[$name] as $alias ) {
1848 $caseFoldedAlias = $this->contLang->caseFold( $alias );
1849 $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
1850 if ( isset( $aliasList[$caseFoldedAlias] ) &&
1851 $aliasList[$caseFoldedAlias] === $name
1852 ) {
1853 $name = $alias;
1854 $found = true;
1855 break;
1856 }
1857 }
1858 if ( !$found ) {
1859 wfWarn( "Did not find a usable alias for special page '$name'. " .
1860 "It seems all defined aliases conflict?" );
1861 }
1862 } else {
1863 // Check if someone misspelled the correct casing
1864 if ( is_array( $aliases ) ) {
1865 foreach ( $aliases as $n => $values ) {
1866 if ( strcasecmp( $name, $n ) === 0 ) {
1867 wfWarn( "Found alias defined for $n when searching for " .
1868 "special page aliases for $name. Case mismatch?" );
1869 return $this->getLocalNameFor( $n, $subpage );
1870 }
1871 }
1872 }
1873
1874 wfWarn( "Did not find alias for special page '$name'. " .
1875 "Perhaps no aliases are defined for it?" );
1876 }
1877
1878 if ( $subpage !== false && $subpage !== null ) {
1879 // Make sure it's in dbkey form
1880 $subpage = str_replace( ' ', '_', $subpage );
1881 $name = "$name/$subpage";
1882 }
1883
1884 return $this->contLang->ucfirst( $name );
1885 }
1886
1893 public function getTitleForAlias( $alias ) {
1894 [ $name, $subpage ] = $this->resolveAlias( $alias );
1895 if ( $name != null ) {
1896 return SpecialPage::getTitleFor( $name, $subpage );
1897 }
1898
1899 return null;
1900 }
1901}
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
wfLogWarning( $msg, $callerOffset=1, $level=E_USER_WARNING)
Send a warning as a PHP error and the debug log.
global $wgRequest
Definition Setup.php:434
$wgUser
Definition Setup.php:558
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgLang
Definition Setup.php:551
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgOut
Definition Setup.php:551
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgTitle
Definition Setup.php:551
if(!defined('MW_SETUP_CALLBACK'))
Definition WebStart.php:68
const MW_ENTRY_POINT
Definition api.php:21
A class for passing options to services.
assertRequiredOptions(array $expectedKeys)
Assert that the list of options provided in this instance exactly match $expectedKeys,...
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:70
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 EnableSpecialMute
Name constant for the EnableSpecialMute 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()
Class for tracking request-level classification information for profiling/stats/logging.
Factory for handling the special page list and generating SpecialPage objects.
getTitleForAlias( $alias)
Get a title for a given alias.
getListedPages()
Get listed special pages, including those that may require user rights.
__construct(ServiceOptions $options, Language $contLang, ObjectFactory $objectFactory, TitleFactory $titleFactory, HookContainer $hookContainer, StatsFactory $statsFactory,)
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:70
User class for the MediaWiki software.
Definition User.php:110
Profiler base class that defines the interface and some shared functionality.
Definition Profiler.php:22
static instance()
Definition Profiler.php:90
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', 'sodipodi'=> ' $path/sodipodi -z -w $width -f $input -e $output', 'inkscape'=> ' $path/inkscape -z -w $width -f $input -e $output', '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', 'imgserv'=> ' $path/imgserv-wrapper -i svg -o png -w$width $input $output', 'ImagickExt'=>['SvgHandler::rasterizeImagickExt',],], 'SVGConverter'=> 'ImageMagick', 'SVGConverterPath'=> '', 'SVGMaxSize'=> 5120, 'SVGMetadataCutoff'=> 5242880, 'SVGNativeRendering'=> false, '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, 250, 300,], '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, 'DjvuUseBoxedCommand'=> false, 'DjvuDump'=> null, 'DjvuRenderer'=> null, 'DjvuTxt'=> null, 'DjvuPostProcessor'=> 'pnmtojpeg', 'DjvuOutputExtension'=> 'jpg', 'EmergencyContact'=> false, 'PasswordSender'=> false, 'NoReplyAddress'=> false, 'EnableEmail'=> true, 'EnableUserEmail'=> true, 'EnableSpecialMute'=> false, 'EnableUserEmailMuteList'=> false, 'UserEmailUseReplyTo'=> true, 'PasswordReminderResendTime'=> 24, 'NewPasswordExpiry'=> 604800, 'UserEmailConfirmationTokenExpiry'=> 604800, 'UserEmailConfirmationUseHTML'=> false, 'PasswordExpirationDays'=> false, 'PasswordExpireGrace'=> 604800, 'SMTP'=> false, 'AdditionalMailParams'=> null, 'AllowHTMLEmail'=> false, 'EnotifFromEditor'=> false, 'EmailAuthentication'=> true, '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'=> '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,],], 'parsoid-pcache'=>['default'=>['minCpuTime'=> 0,],], 'postproc-pcache'=>['default'=>['minCpuTime'=> 9223372036854775807,],], 'postproc-parsoid-pcache'=>['default'=>['minCpuTime'=> 9223372036854775807,],],], 'ChronologyProtectorSecret'=> '', 'ParserCacheExpireTime'=> 86400, 'ParserCacheAsyncExpireTime'=> 60, 'ParserCacheAsyncRefreshJobs'=> true, 'OldRevisionParserCacheExpireTime'=> 3600, 'ObjectCacheSessionExpiry'=> 3600, 'PHPSessionHandling'=> 'warn', 'SuspiciousIpExpiry'=> false, 'SessionPbkdf2Iterations'=> 10001, 'UseSessionCookieJwt'=> false, 'MemCachedServers'=>['127.0.0.1:11211',], 'MemCachedPersistent'=> false, 'MemCachedTimeout'=> 500000, 'UseLocalMessageCache'=> false, 'AdaptiveMessageCache'=> false, 'LocalisationCacheConf'=>['class'=> '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, 'BlockTargetMigrationStage' => 768, '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, ], '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' => [ ], '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, 'pagelang' => true, ], 'editprotected' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'editprotected' => true, ], 'editmycssjs' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'editmyusercss' => true, 'editmyuserjson' => true, 'editmyuserjs' => true, ], 'editmyoptions' => [ 'editmyoptions' => true, 'editmyuserjson' => true, ], 'editinterface' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => true, 'editinterface' => true, 'edituserjson' => true, 'editsitejson' => true, ], 'editsiteconfig' => [ 'edit' => true, 'minoredit' => true, 'applychangetags' => true, 'changetags' => true, 'editcontentmodel' => 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, '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, '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, '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, '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, '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' => [ ], 'RCEngines' => [ 'redis' => 'MediaWiki\\RCFeed\\RedisPubSubFeedEngine', 'udp' => 'MediaWiki\\RCFeed\\UDPRCFeedEngine', ], '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, '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, 'UsePostprocCache' => false, ], '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', ], 'UserEmailConfirmationUseHTML' => 'boolean', 'SMTP' => [ 'boolean', 'object', ], 'EnotifFromEditor' => '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', 'BlockTargetMigrationStage' => 'integer', 'GroupPermissions' => 'object', 'PrivilegedGroups' => 'array', 'RevokePermissions' => 'object', 'GroupInheritsPermissions' => 'object', 'ImplicitGroups' => 'array', 'GroupsAddToSelf' => 'object', 'GroupsRemoveFromSelf' => 'object', 'RestrictedGroups' => 'object', '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', ], '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', 'RCEngines' => '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', ], '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', 'UsePostprocCache' => 'boolean', ], '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', ], 'msg' => [ 'type' => 'string', 'description' => 'a message key', ], ], 'required' => [ 'url', ], ], ], '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.