105 parent::__construct( $query, $moduleName,
'si' );
106 $this->userOptionsLookup = $userOptionsLookup;
107 $this->userGroupManager = $userGroupManager;
108 $this->hookContainer = $hookContainer;
109 $this->languageConverterFactory = $languageConverterFactory;
110 $this->languageFactory = $languageFactory;
111 $this->languageNameUtils = $languageNameUtils;
112 $this->contentLanguage = $contentLanguage;
113 $this->namespaceInfo = $namespaceInfo;
114 $this->interwikiLookup = $interwikiLookup;
115 $this->parserFactory = $parserFactory;
116 $this->magicWordFactory = $magicWordFactory;
117 $this->specialPageFactory = $specialPageFactory;
118 $this->skinFactory = $skinFactory;
119 $this->loadBalancer = $loadBalancer;
120 $this->readOnlyMode = $readOnlyMode;
121 $this->urlUtils = $urlUtils;
122 $this->tempUserConfig = $tempUserConfig;
128 foreach (
$params[
'prop'] as $p ) {
136 case 'namespacealiases':
139 case 'specialpagealiases':
157 case 'autocreatetempuser':
160 case 'clientlibraries':
169 case 'fileextensions':
181 case 'languagevariants':
187 case 'extensiontags':
190 case 'functionhooks':
202 case 'defaultoptions':
209 $fit = $this->appendAutoPromote( $p );
211 case 'autopromoteonce':
212 $fit = $this->appendAutoPromoteOnce( $p );
221 array_diff(
$params[
'prop'], $done ) ) );
230 $mainPage = Title::newMainPage();
234 'mainpage' => $mainPage->getPrefixedText(),
235 'base' => (string)$this->urlUtils->expand( $mainPage->getFullURL(),
PROTO_CURRENT ),
241 'logo' => (string)$this->urlUtils->expand( $logo[
'1x'],
PROTO_RELATIVE ),
245 'phpversion' => PHP_VERSION,
246 'phpsapi' => PHP_SAPI,
248 'dbversion' => $this->
getDB()->getServerVersion(),
252 $allowException =
true;
254 $data[
'imagewhitelistenabled'] =
257 $allowException = (bool)$allowFrom;
259 if ( $allowException ) {
260 $data[
'externalimages'] = (array)$allowFrom;
264 $data[
'langconversion'] = !$this->languageConverterFactory->isConversionDisabled();
265 $data[
'linkconversion'] = !$this->languageConverterFactory->isLinkConversionDisabled();
267 $data[
'titleconversion'] = $data[
'linkconversion'];
269 $contLangConverter = $this->languageConverterFactory->getLanguageConverter( $this->contentLanguage );
270 if ( $this->contentLanguage->linkPrefixExtension() ) {
274 $data[
'linkprefix'] =
"/^((?>.*[^$linkPrefixCharset]|))(.+)$/sDu";
276 $data[
'linkprefixcharset'] =
'';
277 $data[
'linkprefix'] =
'';
280 $data[
'linktrail'] = $this->contentLanguage->linkTrail() ?:
'';
282 $data[
'legaltitlechars'] = Title::legalChars();
286 $data[
'fixarabicunicode'] =
true;
287 $data[
'fixmalayalamunicode'] =
true;
291 $data[
'git-hash'] = $git;
300 $data[
'fallback'] = [];
301 foreach ( $this->contentLanguage->getFallbackLanguages() as $code ) {
302 $data[
'fallback'][] = [
'code' => $code ];
306 if ( $contLangConverter->hasVariants() ) {
307 $data[
'variants'] = [];
308 foreach ( $contLangConverter->getVariants() as $code ) {
309 $data[
'variants'][] = [
311 'name' => $this->contentLanguage->getVariantname( $code ),
317 $data[
'rtl'] = $this->contentLanguage->isRTL();
318 $data[
'fallback8bitEncoding'] = $this->contentLanguage->fallback8bitEncoding();
320 $data[
'readonly'] = $this->readOnlyMode->isReadOnly();
321 if ( $data[
'readonly'] ) {
322 $data[
'readonlyreason'] = $this->readOnlyMode->getReason();
324 $data[
'writeapi'] =
true;
337 $data[
'wikiid'] = WikiMap::getCurrentWikiId();
338 $data[
'time'] =
wfTimestamp( TS_ISO_8601, time() );
342 $data[
'uploadsenabled'] = UploadBase::isEnabled();
343 $data[
'maxuploadsize'] = UploadBase::getMaxUploadSize();
351 $data[
'imagelimits'] = [];
353 $data[
'imagelimits'][$k] = [
'width' => $limit[0],
'height' => $limit[1] ];
361 $data[
'favicon'] = (string)$this->urlUtils->expand( $favicon );
366 $data[
'allcentralidlookupproviders'] = $providerIds;
378 $this->
getHookRunner()->onAPIQuerySiteInfoGeneralInfo( $this, $data );
380 return $this->
getResult()->addValue(
'query', $property, $data );
387 foreach ( $this->contentLanguage->getFormattedNamespaces() as $ns => $title ) {
390 'case' => $this->namespaceInfo->isCapitalized( $ns ) ?
'first-letter' :
'case-sensitive',
393 $canonical = $this->namespaceInfo->getCanonicalName( $ns );
395 $data[$ns][
'subpages'] = $this->namespaceInfo->hasSubpages( $ns );
398 $data[$ns][
'canonical'] = strtr( $canonical,
'_',
' ' );
401 $data[$ns][
'content'] = $this->namespaceInfo->isContent( $ns );
402 $data[$ns][
'nonincludable'] = $this->namespaceInfo->isNonincludable( $ns );
404 $specificNs = $nsProtection[$ns] ??
'';
405 if ( is_array( $specificNs ) ) {
406 $specificNs = implode(
"|", array_filter( $specificNs ) );
408 if ( $specificNs !==
'' ) {
409 $data[$ns][
'namespaceprotection'] = $specificNs;
412 $contentmodel = $this->namespaceInfo->getNamespaceContentModel( $ns );
413 if ( $contentmodel ) {
414 $data[$ns][
'defaultcontentmodel'] = $contentmodel;
421 return $this->
getResult()->addValue(
'query', $property, $data );
425 $aliases = $this->contentLanguage->getNamespaceAliases();
426 $namespaces = $this->contentLanguage->getNamespaces();
428 foreach ( $aliases as $title => $ns ) {
429 if ( $namespaces[$ns] == $title ) {
433 $item = [
'id' => (int)$ns ];
442 return $this->
getResult()->addValue(
'query', $property, $data );
447 $aliases = $this->contentLanguage->getSpecialPageAliases();
448 foreach ( $this->specialPageFactory->getNames() as $specialpage ) {
449 if ( isset( $aliases[$specialpage] ) ) {
450 $arr = [
'realname' => $specialpage,
'aliases' => $aliases[$specialpage] ];
457 return $this->
getResult()->addValue(
'query', $property, $data );
462 foreach ( $this->contentLanguage->getMagicWords() as $name => $aliases ) {
463 $caseSensitive = (bool)array_shift( $aliases );
466 'aliases' => $aliases,
467 'case-sensitive' => $caseSensitive,
474 return $this->
getResult()->addValue(
'query', $property, $data );
478 $local = $filter ? $filter ===
'local' :
null;
481 $langCode =
$params[
'inlanguagecode'] ??
'';
484 if ( $interwikiMagic ) {
485 $langNames = $this->languageNameUtils->getLanguageNames( $langCode );
493 foreach ( $this->interwikiLookup->getAllPrefixes( $local ) as $row ) {
494 $prefix = $row[
'iw_prefix'];
496 $val[
'prefix'] = $prefix;
497 if ( $row[
'iw_local'] ??
false ) {
498 $val[
'local'] =
true;
500 if ( $row[
'iw_trans'] ??
false ) {
501 $val[
'trans'] =
true;
504 if ( $interwikiMagic && isset( $langNames[$prefix] ) ) {
505 $val[
'language'] = $langNames[$prefix];
506 $standard = LanguageCode::replaceDeprecatedCodes( $prefix );
507 if ( $standard !== $prefix ) {
508 # Note that even if this code is deprecated, it should
509 # only be remapped if extralanglink (set below) is false.
510 $val[
'deprecated'] = $standard;
512 $val[
'bcp47'] = LanguageCode::bcp47( $standard );
514 if ( in_array( $prefix, $localInterwikis ) ) {
515 $val[
'localinterwiki'] =
true;
517 if ( $interwikiMagic && in_array( $prefix, $extraLangPrefixes ) ) {
518 $val[
'extralanglink'] =
true;
519 $val[
'code'] = $extraLangCodeMap[$prefix] ?? $prefix;
520 $val[
'bcp47'] = LanguageCode::bcp47( $val[
'code'] );
522 $linktext = $this->
msg(
"interlanguage-link-$prefix" );
523 if ( !$linktext->isDisabled() ) {
524 $val[
'linktext'] = $linktext->text();
527 $sitename = $this->
msg(
"interlanguage-link-sitename-$prefix" );
528 if ( !$sitename->isDisabled() ) {
529 $val[
'sitename'] = $sitename->text();
533 $val[
'url'] = (string)$this->urlUtils->expand( $row[
'iw_url'],
PROTO_CURRENT );
534 $val[
'protorel'] = str_starts_with( $row[
'iw_url'],
'//' );
535 if ( ( $row[
'iw_wikiid'] ??
'' ) !==
'' ) {
536 $val[
'wikiid'] = $row[
'iw_wikiid'];
538 if ( ( $row[
'iw_api'] ??
'' ) !==
'' ) {
539 $val[
'api'] = $row[
'iw_api'];
547 return $this->
getResult()->addValue(
'query', $property, $data );
554 if ( !$showHostnames ) {
555 $this->
dieWithError(
'apierror-siteinfo-includealldenied',
'includeAllDenied' );
558 foreach ( $this->loadBalancer->getLagTimes() as $i => $lag ) {
560 'host' => $this->loadBalancer->getServerName( $i ),
565 [ , $lag, $index ] = $this->loadBalancer->getMaxLag();
567 'host' => $showHostnames ? $this->loadBalancer->getServerName( $index ) :
'',
574 return $this->
getResult()->addValue(
'query', $property, $data );
589 $this->
getHookRunner()->onAPIQuerySiteInfoStatisticsInfo( $data );
591 return $this->
getResult()->addValue(
'query', $property, $data );
599 $allGroups = array_values( $this->userGroupManager->listAllGroups() );
603 'rights' => array_keys( $permissions,
true ),
606 if ( $numberInGroup ) {
609 if ( $group ==
'user' ) {
612 } elseif ( $group !==
'*' && !isset( $autopromote[$group] ) ) {
624 foreach ( $groupArr as $type => $rights ) {
625 if ( isset( $rights[$group] ) ) {
626 if ( $rights[$group] ===
true ) {
627 $groups = $allGroups;
629 $groups = array_intersect( $rights[$group], $allGroups );
632 $arr[$type] = $groups;
645 return $result->addValue(
'query', $property, $data );
649 $data = [
'enabled' => $this->tempUserConfig->isEnabled() ];
650 if ( $this->tempUserConfig->isKnown() ) {
651 $data[
'matchPatterns'] = $this->tempUserConfig->getMatchPatterns();
653 return $this->
getResult()->addValue(
'query', $property, $data );
661 $data[] = [
'ext' => $ext ];
665 return $this->
getResult()->addValue(
'query', $property, $data );
670 foreach ( SpecialVersion::parseForeignResources() as $name => $info ) {
674 'name' => $info[
'name'],
675 'version' => $info[
'version'],
679 return $this->
getResult()->addValue(
'query', $property, $data );
683 $path = MW_INSTALL_PATH .
'/vendor/composer/installed.json';
684 if ( !file_exists(
$path ) ) {
690 foreach ( $installed->getInstalledDependencies() as $name => $info ) {
691 if ( str_starts_with( $info[
'type'],
'mediawiki-' ) ) {
698 'version' => $info[
'version'],
703 return $this->
getResult()->addValue(
'query', $property, $data );
708 $credits = SpecialVersion::getCredits(
709 ExtensionRegistry::getInstance(),
712 foreach ( $credits as $type => $extensions ) {
713 foreach ( $extensions as $ext ) {
714 $ret = [
'type' => $type ];
715 if ( isset( $ext[
'name'] ) ) {
716 $ret[
'name'] = $ext[
'name'];
718 if ( isset( $ext[
'namemsg'] ) ) {
719 $ret[
'namemsg'] = $ext[
'namemsg'];
721 if ( isset( $ext[
'description'] ) ) {
722 $ret[
'description'] = $ext[
'description'];
724 if ( isset( $ext[
'descriptionmsg'] ) ) {
726 if ( is_array( $ext[
'descriptionmsg'] ) ) {
727 $ret[
'descriptionmsg'] = $ext[
'descriptionmsg'][0];
728 $ret[
'descriptionmsgparams'] = array_slice( $ext[
'descriptionmsg'], 1 );
731 $ret[
'descriptionmsg'] = $ext[
'descriptionmsg'];
734 if ( isset( $ext[
'author'] ) ) {
735 $ret[
'author'] = is_array( $ext[
'author'] ) ?
736 implode(
', ', $ext[
'author'] ) : $ext[
'author'];
738 if ( isset( $ext[
'url'] ) ) {
739 $ret[
'url'] = $ext[
'url'];
741 if ( isset( $ext[
'version'] ) ) {
742 $ret[
'version'] = $ext[
'version'];
744 if ( isset( $ext[
'path'] ) ) {
745 $extensionPath = dirname( $ext[
'path'] );
746 $gitInfo =
new GitInfo( $extensionPath );
747 $vcsVersion = $gitInfo->getHeadSHA1();
748 if ( $vcsVersion !==
false ) {
749 $ret[
'vcs-system'] =
'git';
750 $ret[
'vcs-version'] = $vcsVersion;
751 $ret[
'vcs-url'] = $gitInfo->getHeadViewUrl();
752 $vcsDate = $gitInfo->getHeadCommitDate();
753 if ( $vcsDate !==
false ) {
754 $ret[
'vcs-date'] =
wfTimestamp( TS_ISO_8601, $vcsDate );
758 if ( ExtensionInfo::getLicenseFileNames( $extensionPath ) ) {
759 $ret[
'license-name'] = $ext[
'license-name'] ??
'';
762 "License/{$ext['name']}"
766 if ( ExtensionInfo::getAuthorsFileName( $extensionPath ) ) {
769 "Credits/{$ext['name']}"
779 return $this->
getResult()->addValue(
'query', $property, $data );
791 if ( $text ===
'' && $title ) {
792 $text = $title->getPrefixedText();
796 'url' => (string)
$url,
797 'text' => (
string)$text,
800 return $this->
getResult()->addValue(
'query', $property, $data );
822 return $this->
getResult()->addValue(
'query', $property, $data );
827 $langCode =
$params[
'inlanguagecode'] ??
'';
828 $langNames = $this->languageNameUtils->getLanguageNames( $langCode );
832 foreach ( $langNames as $code => $name ) {
835 'bcp47' => LanguageCode::bcp47( $code ),
842 return $this->
getResult()->addValue(
'query', $property, $data );
848 $langNames = $this->languageConverterFactory->isConversionDisabled() ? [] :
849 LanguageConverter::$languagesWithVariants;
853 foreach ( $langNames as $langCode ) {
854 $lang = $this->languageFactory->getLanguage( $langCode );
855 $langConverter = $this->languageConverterFactory->getLanguageConverter( $lang );
856 if ( !$langConverter->hasVariants() ) {
860 $data[$langCode] = [];
864 $variants = $langConverter->getVariants();
866 foreach ( $variants as $v ) {
867 $data[$langCode][$v] = [
868 'fallbacks' => (array)$langConverter->getVariantFallbacks( $v ),
871 $data[$langCode][$v][
'fallbacks'],
'variant'
878 return $this->
getResult()->addValue(
'query', $property, $data );
883 $allowed = $this->skinFactory->getAllowedSkins();
886 foreach ( $this->skinFactory->getInstalledSkins() as $name => $displayName ) {
887 $msg = $this->
msg(
"skinname-{$name}" );
889 if ( $code && $this->languageNameUtils->isValidCode( $code ) ) {
890 $msg->inLanguage( $code );
892 $msg->inContentLanguage();
894 if ( $msg->exists() ) {
895 $displayName = $msg->text();
897 $skin = [
'code' => $name ];
899 if ( !isset( $allowed[$name] ) ) {
900 $skin[
'unusable'] =
true;
902 if ( $name === $default ) {
903 $skin[
'default'] =
true;
909 return $this->
getResult()->addValue(
'query', $property, $data );
914 static function ( $item ) {
917 $this->parserFactory->getMainInstance()->getTags()
922 return $this->
getResult()->addValue(
'query', $property, $tags );
926 $hooks = $this->parserFactory->getMainInstance()->getFunctionHooks();
930 return $this->
getResult()->addValue(
'query', $property, $hooks );
934 $variables = $this->magicWordFactory->getVariableIDs();
938 return $this->
getResult()->addValue(
'query', $property, $variables );
947 return $this->
getResult()->addValue(
'query', $property, $protocols );
951 $options = $this->userOptionsLookup->getDefaultOptions(
null );
953 return $this->
getResult()->addValue(
'query', $property, $options );
958 return $this->
getResult()->addValue(
'query', $property, $config );
961 private function getAutoPromoteConds() {
962 $allowedConditions = [];
963 foreach ( get_defined_constants() as $constantName => $constantValue ) {
964 if ( strpos( $constantName,
'APCOND_' ) !==
false ) {
965 $allowedConditions[$constantName] = $constantValue;
968 return $allowedConditions;
971 private function processAutoPromote( $input, $allowedConditions ) {
973 foreach ( $input as $groupName => $conditions ) {
974 $row = $this->recAutopromote( $conditions, $allowedConditions );
975 if ( !isset( $row[0] ) || is_string( $row ) ) {
978 $data[$groupName] = $row;
983 private function appendAutoPromote( $property ) {
987 $this->processAutoPromote(
989 $this->getAutoPromoteConds()
994 private function appendAutoPromoteOnce( $property ) {
995 $allowedConditions = $this->getAutoPromoteConds();
998 $data[$key] = $this->processAutoPromote( $value, $allowedConditions );
1000 return $this->
getResult()->addValue(
'query', $property, $data );
1008 private function recAutopromote( $cond, $allowedConditions ) {
1011 if ( is_array( $cond ) ) {
1013 if ( in_array( $cond[0], UserGroupManager::VALID_OPS,
true ) ) {
1014 $config[
'operand'] = $cond[0];
1016 foreach ( array_slice( $cond, 1 ) as $value ) {
1017 $config[] = $this->recAutopromote( $value, $allowedConditions );
1019 } elseif ( is_string( $cond[0] ) ) {
1024 $params = array_slice( $cond, 1 );
1035 'condname' => array_search( $cond[0], $allowedConditions ),
1040 } elseif ( is_string( $cond ) ) {
1045 'condname' => array_search( $cond, $allowedConditions ),
1055 $hookNames = $this->hookContainer->getHookNames();
1059 foreach ( $hookNames as $name ) {
1062 'subscribers' => $this->hookContainer->getHandlerDescriptions( $name ),
1072 return $this->
getResult()->addValue(
'query', $property, $data );
1078 in_array(
'interwikimap',
$params[
'prop'] ?? [] )
1080 return 'anon-public-user-private';
1089 ParamValidator::PARAM_DEFAULT =>
'general',
1090 ParamValidator::PARAM_ISMULTI =>
true,
1091 ParamValidator::PARAM_TYPE => [
1095 'specialpagealiases',
1101 'autocreatetempuser',
1124 ParamValidator::PARAM_TYPE => [
1129 'showalldb' =>
false,
1130 'numberingroup' =>
false,
1131 'inlanguagecode' =>
null,
1137 'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
1138 =>
'apihelp-query+siteinfo-example-simple',
1139 'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
1140 =>
'apihelp-query+siteinfo-example-interwiki',
1141 'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
1142 =>
'apihelp-query+siteinfo-example-replag',
1147 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Siteinfo';
1152class_alias( ApiQuerySiteinfo::class,
'ApiQuerySiteinfo' );
const MW_VERSION
The running version of MediaWiki.
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
array $params
The job parameters.
msg( $key,... $params)
Get a Message object with context set Parameters are the same as wfMessage()
A class containing constants representing the names of configuration variables.
const ExternalLinkTarget
Name constant for the ExternalLinkTarget setting, for use with Config::get()
const NoFollowDomainExceptions
Name constant for the NoFollowDomainExceptions setting, for use with Config::get()
const AutoConfirmCount
Name constant for the AutoConfirmCount setting, for use with Config::get()
const ServerName
Name constant for the ServerName setting, for use with Config::get()
const RightsPage
Name constant for the RightsPage setting, for use with Config::get()
const VariantArticlePath
Name constant for the VariantArticlePath setting, for use with Config::get()
const NamespaceProtection
Name constant for the NamespaceProtection setting, for use with Config::get()
const DBtype
Name constant for the DBtype setting, for use with Config::get()
const CapitalLinks
Name constant for the CapitalLinks setting, for use with Config::get()
const Localtimezone
Name constant for the Localtimezone setting, for use with Config::get()
const Server
Name constant for the Server setting, for use with Config::get()
const GroupsRemoveFromSelf
Name constant for the GroupsRemoveFromSelf setting, for use with Config::get()
const CentralIdLookupProviders
Name constant for the CentralIdLookupProviders setting, for use with Config::get()
const MaxArticleSize
Name constant for the MaxArticleSize setting, for use with Config::get()
const RestrictionTypes
Name constant for the RestrictionTypes setting, for use with Config::get()
const AutopromoteOnce
Name constant for the AutopromoteOnce setting, for use with Config::get()
const RightsText
Name constant for the RightsText setting, for use with Config::get()
const Autopromote
Name constant for the Autopromote setting, for use with Config::get()
const NoFollowNsExceptions
Name constant for the NoFollowNsExceptions setting, for use with Config::get()
const CascadingRestrictionLevels
Name constant for the CascadingRestrictionLevels setting, for use with Config::get()
const AllowExternalImages
Name constant for the AllowExternalImages setting, for use with Config::get()
const Sitename
Name constant for the Sitename setting, for use with Config::get()
const UrlProtocols
Name constant for the UrlProtocols setting, for use with Config::get()
const ArticlePath
Name constant for the ArticlePath setting, for use with Config::get()
const Favicon
Name constant for the Favicon setting, for use with Config::get()
const LocalTZoffset
Name constant for the LocalTZoffset setting, for use with Config::get()
const RightsUrl
Name constant for the RightsUrl setting, for use with Config::get()
const MainPageIsDomainRoot
Name constant for the MainPageIsDomainRoot setting, for use with Config::get()
const CategoryCollation
Name constant for the CategoryCollation setting, for use with Config::get()
const ImageLimits
Name constant for the ImageLimits setting, for use with Config::get()
const CentralIdLookupProvider
Name constant for the CentralIdLookupProvider setting, for use with Config::get()
const GroupPermissions
Name constant for the GroupPermissions setting, for use with Config::get()
const AddGroups
Name constant for the AddGroups setting, for use with Config::get()
const InterlanguageLinkCodeMap
Name constant for the InterlanguageLinkCodeMap setting, for use with Config::get()
const FileExtensions
Name constant for the FileExtensions setting, for use with Config::get()
const ScriptPath
Name constant for the ScriptPath setting, for use with Config::get()
const AllUnicodeFixes
Name constant for the AllUnicodeFixes setting, for use with Config::get()
const SemiprotectedRestrictionLevels
Name constant for the SemiprotectedRestrictionLevels setting, for use with Config::get()
const AutoConfirmAge
Name constant for the AutoConfirmAge setting, for use with Config::get()
const GalleryOptions
Name constant for the GalleryOptions setting, for use with Config::get()
const EnableMagicLinks
Name constant for the EnableMagicLinks setting, for use with Config::get()
const ThumbLimits
Name constant for the ThumbLimits setting, for use with Config::get()
const LanguageCode
Name constant for the LanguageCode setting, for use with Config::get()
const RestrictionLevels
Name constant for the RestrictionLevels setting, for use with Config::get()
const EnableImageWhitelist
Name constant for the EnableImageWhitelist setting, for use with Config::get()
const MiserMode
Name constant for the MiserMode setting, for use with Config::get()
const GroupsAddToSelf
Name constant for the GroupsAddToSelf setting, for use with Config::get()
const InvalidUsernameCharacters
Name constant for the InvalidUsernameCharacters setting, for use with Config::get()
const LocalInterwikis
Name constant for the LocalInterwikis setting, for use with Config::get()
const UploadDialog
Name constant for the UploadDialog setting, for use with Config::get()
const InterwikiMagic
Name constant for the InterwikiMagic setting, for use with Config::get()
const AllowExternalImagesFrom
Name constant for the AllowExternalImagesFrom setting, for use with Config::get()
const RemoveGroups
Name constant for the RemoveGroups setting, for use with Config::get()
const NoFollowLinks
Name constant for the NoFollowLinks setting, for use with Config::get()
const Script
Name constant for the Script setting, for use with Config::get()
const ExtraInterlanguageLinkPrefixes
Name constant for the ExtraInterlanguageLinkPrefixes setting, for use with Config::get()
const ShowHostnames
Name constant for the ShowHostnames setting, for use with Config::get()
Factory for handling the special page list and generating SpecialPage objects.
Parent class for all special pages.
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
Factory class to create Skin objects.
The base class for all skins.
static normalizeKey(string $key)
Normalize a skin preference value to a form that can be loaded.
UploadBase and subclasses are the backend of MediaWiki's file uploads.