103 parent::__construct( $query, $moduleName,
'si' );
104 $this->userOptionsLookup = $userOptionsLookup;
105 $this->userGroupManager = $userGroupManager;
106 $this->languageConverterFactory = $languageConverterFactory;
107 $this->languageFactory = $languageFactory;
108 $this->languageNameUtils = $languageNameUtils;
109 $this->contentLanguage = $contentLanguage;
110 $this->namespaceInfo = $namespaceInfo;
111 $this->interwikiLookup = $interwikiLookup;
112 $this->parserFactory = $parserFactory;
113 $this->magicWordFactory = $magicWordFactory;
114 $this->specialPageFactory = $specialPageFactory;
115 $this->skinFactory = $skinFactory;
116 $this->loadBalancer = $loadBalancer;
117 $this->readOnlyMode = $readOnlyMode;
118 $this->urlUtils = $urlUtils;
119 $this->tempUserConfig = $tempUserConfig;
125 foreach (
$params[
'prop'] as $p ) {
133 case 'namespacealiases':
136 case 'specialpagealiases':
154 case 'autocreatetempuser':
157 case 'clientlibraries':
166 case 'fileextensions':
178 case 'languagevariants':
184 case 'extensiontags':
187 case 'functionhooks':
199 case 'defaultoptions':
206 $fit = $this->appendAutoPromote( $p );
208 case 'autopromoteonce':
209 $fit = $this->appendAutoPromoteOnce( $p );
218 array_diff(
$params[
'prop'], $done ) ) );
227 $mainPage = Title::newMainPage();
231 'mainpage' => $mainPage->getPrefixedText(),
232 'base' => (string)$this->urlUtils->expand( $mainPage->getFullURL(),
PROTO_CURRENT ),
238 'logo' => (string)$this->urlUtils->expand( $logo[
'1x'],
PROTO_RELATIVE ),
242 'phpversion' => PHP_VERSION,
243 'phpsapi' => PHP_SAPI,
245 'dbversion' => $this->
getDB()->getServerVersion(),
249 $allowException =
true;
251 $data[
'imagewhitelistenabled'] =
254 $allowException = (bool)$allowFrom;
256 if ( $allowException ) {
257 $data[
'externalimages'] = (array)$allowFrom;
261 $data[
'langconversion'] = !$this->languageConverterFactory->isConversionDisabled();
262 $data[
'linkconversion'] = !$this->languageConverterFactory->isLinkConversionDisabled();
264 $data[
'titleconversion'] = $data[
'linkconversion'];
266 $contLangConverter = $this->languageConverterFactory->getLanguageConverter( $this->contentLanguage );
267 if ( $this->contentLanguage->linkPrefixExtension() ) {
271 $data[
'linkprefix'] =
"/^((?>.*[^$linkPrefixCharset]|))(.+)$/sDu";
273 $data[
'linkprefixcharset'] =
'';
274 $data[
'linkprefix'] =
'';
277 $data[
'linktrail'] = $this->contentLanguage->linkTrail() ?:
'';
279 $data[
'legaltitlechars'] = Title::legalChars();
283 $data[
'fixarabicunicode'] =
true;
284 $data[
'fixmalayalamunicode'] =
true;
288 $data[
'git-hash'] = $git;
297 $data[
'fallback'] = [];
298 foreach ( $this->contentLanguage->getFallbackLanguages() as $code ) {
299 $data[
'fallback'][] = [
'code' => $code ];
303 if ( $contLangConverter->hasVariants() ) {
304 $data[
'variants'] = [];
305 foreach ( $contLangConverter->getVariants() as $code ) {
306 $data[
'variants'][] = [
308 'name' => $this->contentLanguage->getVariantname( $code ),
314 $data[
'rtl'] = $this->contentLanguage->isRTL();
315 $data[
'fallback8bitEncoding'] = $this->contentLanguage->fallback8bitEncoding();
317 $data[
'readonly'] = $this->readOnlyMode->isReadOnly();
318 if ( $data[
'readonly'] ) {
319 $data[
'readonlyreason'] = $this->readOnlyMode->getReason();
321 $data[
'writeapi'] =
true;
334 $data[
'wikiid'] = WikiMap::getCurrentWikiId();
335 $data[
'time'] =
wfTimestamp( TS_ISO_8601, time() );
339 $data[
'uploadsenabled'] = UploadBase::isEnabled();
340 $data[
'maxuploadsize'] = UploadBase::getMaxUploadSize();
348 $data[
'imagelimits'] = [];
350 $data[
'imagelimits'][$k] = [
'width' => $limit[0],
'height' => $limit[1] ];
358 $data[
'favicon'] = (string)$this->urlUtils->expand( $favicon );
363 $data[
'allcentralidlookupproviders'] = $providerIds;
375 $this->
getHookRunner()->onAPIQuerySiteInfoGeneralInfo( $this, $data );
377 return $this->
getResult()->addValue(
'query', $property, $data );
384 foreach ( $this->contentLanguage->getFormattedNamespaces() as $ns => $title ) {
387 'case' => $this->namespaceInfo->isCapitalized( $ns ) ?
'first-letter' :
'case-sensitive',
390 $canonical = $this->namespaceInfo->getCanonicalName( $ns );
392 $data[$ns][
'subpages'] = $this->namespaceInfo->hasSubpages( $ns );
395 $data[$ns][
'canonical'] = strtr( $canonical,
'_',
' ' );
398 $data[$ns][
'content'] = $this->namespaceInfo->isContent( $ns );
399 $data[$ns][
'nonincludable'] = $this->namespaceInfo->isNonincludable( $ns );
401 $specificNs = $nsProtection[$ns] ??
'';
402 if ( is_array( $specificNs ) ) {
403 $specificNs = implode(
"|", array_filter( $specificNs ) );
405 if ( $specificNs !==
'' ) {
406 $data[$ns][
'namespaceprotection'] = $specificNs;
409 $contentmodel = $this->namespaceInfo->getNamespaceContentModel( $ns );
410 if ( $contentmodel ) {
411 $data[$ns][
'defaultcontentmodel'] = $contentmodel;
418 return $this->
getResult()->addValue(
'query', $property, $data );
422 $aliases = $this->contentLanguage->getNamespaceAliases();
423 $namespaces = $this->contentLanguage->getNamespaces();
425 foreach ( $aliases as $title => $ns ) {
426 if ( $namespaces[$ns] == $title ) {
430 $item = [
'id' => (int)$ns ];
439 return $this->
getResult()->addValue(
'query', $property, $data );
444 $aliases = $this->contentLanguage->getSpecialPageAliases();
445 foreach ( $this->specialPageFactory->getNames() as $specialpage ) {
446 if ( isset( $aliases[$specialpage] ) ) {
447 $arr = [
'realname' => $specialpage,
'aliases' => $aliases[$specialpage] ];
454 return $this->
getResult()->addValue(
'query', $property, $data );
459 foreach ( $this->contentLanguage->getMagicWords() as $name => $aliases ) {
460 $caseSensitive = (bool)array_shift( $aliases );
463 'aliases' => $aliases,
464 'case-sensitive' => $caseSensitive,
471 return $this->
getResult()->addValue(
'query', $property, $data );
475 $local = $filter ? $filter ===
'local' :
null;
478 $langCode =
$params[
'inlanguagecode'] ??
'';
481 if ( $interwikiMagic ) {
482 $langNames = $this->languageNameUtils->getLanguageNames( $langCode );
490 foreach ( $this->interwikiLookup->getAllPrefixes( $local ) as $row ) {
491 $prefix = $row[
'iw_prefix'];
493 $val[
'prefix'] = $prefix;
494 if ( $row[
'iw_local'] ??
false ) {
495 $val[
'local'] =
true;
497 if ( $row[
'iw_trans'] ??
false ) {
498 $val[
'trans'] =
true;
501 if ( $interwikiMagic && isset( $langNames[$prefix] ) ) {
502 $val[
'language'] = $langNames[$prefix];
503 $standard = LanguageCode::replaceDeprecatedCodes( $prefix );
504 if ( $standard !== $prefix ) {
505 # Note that even if this code is deprecated, it should
506 # only be remapped if extralanglink (set below) is false.
507 $val[
'deprecated'] = $standard;
509 $val[
'bcp47'] = LanguageCode::bcp47( $standard );
511 if ( in_array( $prefix, $localInterwikis ) ) {
512 $val[
'localinterwiki'] =
true;
514 if ( $interwikiMagic && in_array( $prefix, $extraLangPrefixes ) ) {
515 $val[
'extralanglink'] =
true;
516 $val[
'code'] = $extraLangCodeMap[$prefix] ?? $prefix;
517 $val[
'bcp47'] = LanguageCode::bcp47( $val[
'code'] );
519 $linktext = $this->
msg(
"interlanguage-link-$prefix" );
520 if ( !$linktext->isDisabled() ) {
521 $val[
'linktext'] = $linktext->text();
524 $sitename = $this->
msg(
"interlanguage-link-sitename-$prefix" );
525 if ( !$sitename->isDisabled() ) {
526 $val[
'sitename'] = $sitename->text();
530 $val[
'url'] = (string)$this->urlUtils->expand( $row[
'iw_url'],
PROTO_CURRENT );
531 $val[
'protorel'] = str_starts_with( $row[
'iw_url'],
'//' );
532 if ( ( $row[
'iw_wikiid'] ??
'' ) !==
'' ) {
533 $val[
'wikiid'] = $row[
'iw_wikiid'];
535 if ( ( $row[
'iw_api'] ??
'' ) !==
'' ) {
536 $val[
'api'] = $row[
'iw_api'];
544 return $this->
getResult()->addValue(
'query', $property, $data );
551 if ( !$showHostnames ) {
552 $this->
dieWithError(
'apierror-siteinfo-includealldenied',
'includeAllDenied' );
555 foreach ( $this->loadBalancer->getLagTimes() as $i => $lag ) {
557 'host' => $this->loadBalancer->getServerName( $i ),
562 [ , $lag, $index ] = $this->loadBalancer->getMaxLag();
564 'host' => $showHostnames ? $this->loadBalancer->getServerName( $index ) :
'',
571 return $this->
getResult()->addValue(
'query', $property, $data );
586 $this->
getHookRunner()->onAPIQuerySiteInfoStatisticsInfo( $data );
588 return $this->
getResult()->addValue(
'query', $property, $data );
596 $allGroups = array_values( $this->userGroupManager->listAllGroups() );
600 'rights' => array_keys( $permissions,
true ),
603 if ( $numberInGroup ) {
606 if ( $group ==
'user' ) {
609 } elseif ( $group !==
'*' && !isset( $autopromote[$group] ) ) {
621 foreach ( $groupArr as $type => $rights ) {
622 if ( isset( $rights[$group] ) ) {
623 if ( $rights[$group] ===
true ) {
624 $groups = $allGroups;
626 $groups = array_intersect( $rights[$group], $allGroups );
629 $arr[$type] = $groups;
642 return $result->addValue(
'query', $property, $data );
646 $data = [
'enabled' => $this->tempUserConfig->isEnabled() ];
647 if ( $this->tempUserConfig->isKnown() ) {
648 $data[
'matchPatterns'] = $this->tempUserConfig->getMatchPatterns();
650 return $this->
getResult()->addValue(
'query', $property, $data );
658 $data[] = [
'ext' => $ext ];
662 return $this->
getResult()->addValue(
'query', $property, $data );
667 foreach ( SpecialVersion::parseForeignResources() as $name => $info ) {
671 'name' => $info[
'name'],
672 'version' => $info[
'version'],
676 return $this->
getResult()->addValue(
'query', $property, $data );
680 $path = MW_INSTALL_PATH .
'/vendor/composer/installed.json';
681 if ( !file_exists(
$path ) ) {
687 foreach ( $installed->getInstalledDependencies() as $name => $info ) {
688 if ( str_starts_with( $info[
'type'],
'mediawiki-' ) ) {
695 'version' => $info[
'version'],
700 return $this->
getResult()->addValue(
'query', $property, $data );
705 $credits = SpecialVersion::getCredits(
706 ExtensionRegistry::getInstance(),
709 foreach ( $credits as $type => $extensions ) {
710 foreach ( $extensions as $ext ) {
711 $ret = [
'type' => $type ];
712 if ( isset( $ext[
'name'] ) ) {
713 $ret[
'name'] = $ext[
'name'];
715 if ( isset( $ext[
'namemsg'] ) ) {
716 $ret[
'namemsg'] = $ext[
'namemsg'];
718 if ( isset( $ext[
'description'] ) ) {
719 $ret[
'description'] = $ext[
'description'];
721 if ( isset( $ext[
'descriptionmsg'] ) ) {
723 if ( is_array( $ext[
'descriptionmsg'] ) ) {
724 $ret[
'descriptionmsg'] = $ext[
'descriptionmsg'][0];
725 $ret[
'descriptionmsgparams'] = array_slice( $ext[
'descriptionmsg'], 1 );
728 $ret[
'descriptionmsg'] = $ext[
'descriptionmsg'];
731 if ( isset( $ext[
'author'] ) ) {
732 $ret[
'author'] = is_array( $ext[
'author'] ) ?
733 implode(
', ', $ext[
'author'] ) : $ext[
'author'];
735 if ( isset( $ext[
'url'] ) ) {
736 $ret[
'url'] = $ext[
'url'];
738 if ( isset( $ext[
'version'] ) ) {
739 $ret[
'version'] = $ext[
'version'];
741 if ( isset( $ext[
'path'] ) ) {
742 $extensionPath = dirname( $ext[
'path'] );
743 $gitInfo =
new GitInfo( $extensionPath );
744 $vcsVersion = $gitInfo->getHeadSHA1();
745 if ( $vcsVersion !==
false ) {
746 $ret[
'vcs-system'] =
'git';
747 $ret[
'vcs-version'] = $vcsVersion;
748 $ret[
'vcs-url'] = $gitInfo->getHeadViewUrl();
749 $vcsDate = $gitInfo->getHeadCommitDate();
750 if ( $vcsDate !==
false ) {
751 $ret[
'vcs-date'] =
wfTimestamp( TS_ISO_8601, $vcsDate );
755 if ( ExtensionInfo::getLicenseFileNames( $extensionPath ) ) {
756 $ret[
'license-name'] = $ext[
'license-name'] ??
'';
759 "License/{$ext['name']}"
763 if ( ExtensionInfo::getAuthorsFileName( $extensionPath ) ) {
766 "Credits/{$ext['name']}"
776 return $this->
getResult()->addValue(
'query', $property, $data );
788 if ( $text ===
'' && $title ) {
789 $text = $title->getPrefixedText();
793 'url' => (string)
$url,
794 'text' => (
string)$text,
797 return $this->
getResult()->addValue(
'query', $property, $data );
819 return $this->
getResult()->addValue(
'query', $property, $data );
824 $langCode =
$params[
'inlanguagecode'] ??
'';
825 $langNames = $this->languageNameUtils->getLanguageNames( $langCode );
829 foreach ( $langNames as $code => $name ) {
832 'bcp47' => LanguageCode::bcp47( $code ),
839 return $this->
getResult()->addValue(
'query', $property, $data );
845 $langNames = $this->languageConverterFactory->isConversionDisabled() ? [] :
846 LanguageConverter::$languagesWithVariants;
850 foreach ( $langNames as $langCode ) {
851 $lang = $this->languageFactory->getLanguage( $langCode );
852 $langConverter = $this->languageConverterFactory->getLanguageConverter( $lang );
853 if ( !$langConverter->hasVariants() ) {
857 $data[$langCode] = [];
861 $variants = $langConverter->getVariants();
863 foreach ( $variants as $v ) {
864 $data[$langCode][$v] = [
865 'fallbacks' => (array)$langConverter->getVariantFallbacks( $v ),
868 $data[$langCode][$v][
'fallbacks'],
'variant'
875 return $this->
getResult()->addValue(
'query', $property, $data );
880 $allowed = $this->skinFactory->getAllowedSkins();
883 foreach ( $this->skinFactory->getInstalledSkins() as $name => $displayName ) {
884 $msg = $this->
msg(
"skinname-{$name}" );
886 if ( $code && $this->languageNameUtils->isValidCode( $code ) ) {
887 $msg->inLanguage( $code );
889 $msg->inContentLanguage();
891 if ( $msg->exists() ) {
892 $displayName = $msg->text();
894 $skin = [
'code' => $name ];
896 if ( !isset( $allowed[$name] ) ) {
897 $skin[
'unusable'] =
true;
899 if ( $name === $default ) {
900 $skin[
'default'] =
true;
906 return $this->
getResult()->addValue(
'query', $property, $data );
911 static function ( $item ) {
914 $this->parserFactory->getMainInstance()->getTags()
919 return $this->
getResult()->addValue(
'query', $property, $tags );
923 $hooks = $this->parserFactory->getMainInstance()->getFunctionHooks();
927 return $this->
getResult()->addValue(
'query', $property, $hooks );
931 $variables = $this->magicWordFactory->getVariableIDs();
935 return $this->
getResult()->addValue(
'query', $property, $variables );
944 return $this->
getResult()->addValue(
'query', $property, $protocols );
948 $options = $this->userOptionsLookup->getDefaultOptions(
null );
950 return $this->
getResult()->addValue(
'query', $property, $options );
955 return $this->
getResult()->addValue(
'query', $property, $config );
958 private function getAutoPromoteConds() {
959 $allowedConditions = [];
960 foreach ( get_defined_constants() as $constantName => $constantValue ) {
961 if ( strpos( $constantName,
'APCOND_' ) !==
false ) {
962 $allowedConditions[$constantName] = $constantValue;
965 return $allowedConditions;
968 private function processAutoPromote( $input, $allowedConditions ) {
970 foreach ( $input as $groupName => $conditions ) {
971 $row = $this->recAutopromote( $conditions, $allowedConditions );
972 if ( !isset( $row[0] ) || is_string( $row ) ) {
975 $data[$groupName] = $row;
980 private function appendAutoPromote( $property ) {
984 $this->processAutoPromote(
986 $this->getAutoPromoteConds()
991 private function appendAutoPromoteOnce( $property ) {
992 $allowedConditions = $this->getAutoPromoteConds();
995 $data[$key] = $this->processAutoPromote( $value, $allowedConditions );
997 return $this->
getResult()->addValue(
'query', $property, $data );
1005 private function recAutopromote( $cond, $allowedConditions ) {
1008 if ( is_array( $cond ) ) {
1010 if ( in_array( $cond[0], UserGroupManager::VALID_OPS,
true ) ) {
1011 $config[
'operand'] = $cond[0];
1013 foreach ( array_slice( $cond, 1 ) as $value ) {
1014 $config[] = $this->recAutopromote( $value, $allowedConditions );
1016 } elseif ( is_string( $cond[0] ) ) {
1021 $params = array_slice( $cond, 1 );
1032 'condname' => array_search( $cond[0], $allowedConditions ),
1037 } elseif ( is_string( $cond ) ) {
1042 'condname' => array_search( $cond, $allowedConditions ),
1053 $hookNames = $hookContainer->getHookNames();
1057 foreach ( $hookNames as $name ) {
1060 'subscribers' => $hookContainer->getHandlerDescriptions( $name ),
1070 return $this->
getResult()->addValue(
'query', $property, $data );
1076 in_array(
'interwikimap',
$params[
'prop'] ?? [] )
1078 return 'anon-public-user-private';
1087 ParamValidator::PARAM_DEFAULT =>
'general',
1088 ParamValidator::PARAM_ISMULTI =>
true,
1089 ParamValidator::PARAM_TYPE => [
1093 'specialpagealiases',
1099 'autocreatetempuser',
1122 ParamValidator::PARAM_TYPE => [
1127 'showalldb' =>
false,
1128 'numberingroup' =>
false,
1129 'inlanguagecode' =>
null,
1135 'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
1136 =>
'apihelp-query+siteinfo-example-simple',
1137 'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
1138 =>
'apihelp-query+siteinfo-example-interwiki',
1139 'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
1140 =>
'apihelp-query+siteinfo-example-replag',
1145 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Siteinfo';
1150class_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.