Go to the documentation of this file.
57 parent::__construct(
'Version' );
69 $credits = $conf->
get(
'ExtensionCredits' );
71 $credits[$credit[
'type']][] = $credit;
88 $out->allowClickjacking();
91 $parts = explode(
'/', (
string)$par );
93 if ( isset( $parts[1] ) ) {
94 $extName = str_replace(
'_',
' ', $parts[1] );
96 foreach ( $credits as $group => $extensions ) {
97 foreach ( $extensions as
$ext ) {
98 if ( isset(
$ext[
'name'] ) && (
$ext[
'name'] === $extName ) ) {
105 $out->setStatusCode( 404 );
108 $extName =
'MediaWiki';
112 switch ( strtolower( $parts[0] ) ) {
114 $out->addModuleStyles(
'mediawiki.special.version' );
116 $wikiText =
'{{int:version-credits-not-found}}';
117 if ( $extName ===
'MediaWiki' ) {
118 $wikiText = file_get_contents(
$IP .
'/CREDITS' );
120 $wikiText = str_replace(
121 [
'<!-- BEGIN CONTRIBUTOR LIST -->',
'<!-- END CONTRIBUTOR LIST -->' ],
122 [
'<div class="mw-version-credits">',
'</div>' ],
124 } elseif ( ( $extNode !==
null ) && isset( $extNode[
'path'] ) ) {
125 $file = ExtensionInfo::getAuthorsFileName( dirname( $extNode[
'path'] ) );
127 $wikiText = file_get_contents(
$file );
128 if ( substr(
$file, -4 ) ===
'.txt' ) {
141 $out->setPageTitle( $this->
msg(
'version-credits-title', $extName ) );
142 $out->addWikiTextAsInterface( $wikiText );
146 $out->setPageTitle( $this->
msg(
'version-license-title', $extName ) );
148 $licenseFound =
false;
150 if ( $extName ===
'MediaWiki' ) {
151 $out->addWikiTextAsInterface(
152 file_get_contents(
$IP .
'/COPYING' )
154 $licenseFound =
true;
155 } elseif ( ( $extNode !==
null ) && isset( $extNode[
'path'] ) ) {
156 $files = ExtensionInfo::getLicenseFileNames( dirname( $extNode[
'path'] ) );
158 if ( count( $files ) ) {
159 $licenseFound =
true;
160 foreach ( $files as
$file ) {
161 $out->addWikiTextAsInterface(
168 file_get_contents(
$file )
174 if ( !$licenseFound ) {
175 $out->addWikiTextAsInterface(
'{{int:version-license-not-found}}' );
179 $out->addModuleStyles(
'mediawiki.special.version' );
180 $out->addWikiTextAsInterface(
181 self::getMediaWikiCredits() .
182 self::softwareInformation() .
192 $out->addWikiTextAsInterface( $this->
getWgHooks() );
193 $out->addHTML( $this->
IPInfo() );
207 [
'id' =>
'mw-version-license' ],
212 $ret .=
'<div class="plainlinks">';
215 " .
'<div class="mw-version-license-info">' .
216 wfMessage(
'version-license-info' )->text() .
220 return str_replace(
"\t\t",
'', $ret ) .
"\n";
231 if ( defined(
'MEDIAWIKI_INSTALL' ) ) {
232 $othersLink =
'[https://www.mediawiki.org/wiki/Special:Version/Credits ' .
233 wfMessage(
'version-poweredby-others' )->text() .
']';
235 $othersLink =
'[[Special:Version/Credits|' .
236 wfMessage(
'version-poweredby-others' )->text() .
']]';
239 $translatorsLink =
'[https://translatewiki.net/wiki/Translating:MediaWiki/Credits ' .
240 wfMessage(
'version-poweredby-translators' )->text() .
']';
243 'Magnus Manske',
'Brion Vibber',
'Lee Daniel Crocker',
244 'Tim Starling',
'Erik Möller',
'Gabriel Wicke',
'Ævar Arnfjörð Bjarmason',
245 'Niklas Laxström',
'Domas Mituzas',
'Rob Church',
'Yuri Astrakhan',
246 'Aryeh Gregor',
'Aaron Schulz',
'Andrew Garrett',
'Raimond Spekking',
247 'Alexandre Emsenhuber',
'Siebrand Mazeland',
'Chad Horohoe',
248 'Roan Kattouw',
'Trevor Parscal',
'Bryan Tong Minh',
'Sam Reed',
249 'Victor Vasiliev',
'Rotem Liss',
'Platonides',
'Antoine Musso',
250 'Timo Tijhof',
'Daniel Kinzler',
'Jeroen De Dauw',
'Brad Jorsch',
251 'Bartosz Dziewoński',
'Ed Sanders',
'Moriel Schottlender',
252 'Kunal Mehta',
'James D. Forrester',
'Brian Wolff',
'Adam Shorland',
254 $othersLink, $translatorsLink
258 $wgLang->listToText( $authorList ) )->text();
274 '[https://php.net/ PHP]' => PHP_VERSION .
" (" . PHP_SAPI .
")",
275 $dbr->getSoftwareLink() =>
$dbr->getServerInfo(),
278 if ( defined(
'INTL_ICU_VERSION' ) ) {
279 $software[
'[http://site.icu-project.org/ ICU]'] = INTL_ICU_VERSION;
296 [
'id' =>
'mw-version-software' ],
299 Xml::openElement(
'table', [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-software' ] ) .
301 <th>" .
wfMessage(
'version-software-product' )->text() .
"</th>
302 <th>" .
wfMessage(
'version-software-version' )->text() .
"</th>
305 foreach ( self::getSoftwareInformation() as $name => $version ) {
307 <td>" . $name .
"</td>
308 <td dir=\"ltr\">" . $version .
"</td>
328 } elseif ( $flags ===
'nodb' ) {
329 $shortSha1 = substr( $gitInfo, 0, 7 );
332 $shortSha1 = substr( $gitInfo, 0, 7 );
334 if (
$lang !==
null ) {
335 $msg->inLanguage(
$lang );
337 $shortSha1 = $msg->params( $shortSha1 )->escaped();
369 preg_match(
"/^(\d+\.\d+)/",
MW_VERSION, $versionParts );
370 $versionUrl =
"https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]}";
373 return '[' . $versionUrl .
' ' .
MW_VERSION .
']';
385 $headSHA1 = $gitInfo->getHeadSHA1();
390 $shortSHA1 =
'(' . substr( $headSHA1, 0, 7 ) .
')';
392 $gitHeadUrl = $gitInfo->getHeadViewUrl();
393 if ( $gitHeadUrl !==
false ) {
394 $shortSHA1 =
"[$gitHeadUrl $shortSHA1]";
397 $gitHeadCommitDate = $gitInfo->getHeadCommitDate();
398 if ( $gitHeadCommitDate ) {
416 if ( self::$extensionTypes ===
false ) {
417 self::$extensionTypes = [
418 'specialpage' =>
wfMessage(
'version-specialpages' )->text(),
419 'editor' =>
wfMessage(
'version-editors' )->text(),
420 'parserhook' =>
wfMessage(
'version-parserhooks' )->text(),
421 'variable' =>
wfMessage(
'version-variables' )->text(),
422 'media' =>
wfMessage(
'version-mediahandlers' )->text(),
423 'antispam' =>
wfMessage(
'version-antispam' )->text(),
424 'skin' =>
wfMessage(
'version-skins' )->text(),
425 'api' =>
wfMessage(
'version-api' )->text(),
426 'other' =>
wfMessage(
'version-other' )->text(),
447 return $types[
$type] ?? $types[
'other'];
460 ( count( $credits ) === 1 && isset( $credits[
'skin'] ) )
469 [
'id' =>
'mw-version-ext' ],
470 $this->
msg(
'version-extensions' )->text()
472 Xml::openElement(
'table', [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-ext' ] );
475 if ( !array_key_exists(
'other', $credits ) ) {
476 $credits[
'other'] = [];
480 foreach ( $credits as
$type => $extensions ) {
482 $credits[
'other'] = array_merge( $credits[
'other'], $extensions );
486 $this->firstExtOpened =
false;
490 if (
$type !==
'other' &&
$type !==
'skin' ) {
510 if ( !isset( $credits[
'skin'] ) || count( $credits[
'skin'] ) === 0 ) {
516 [
'id' =>
'mw-version-skin' ],
517 $this->
msg(
'version-skins' )->text()
519 Xml::openElement(
'table', [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-skin' ] );
521 $this->firstExtOpened =
false;
538 "$IP/vendor/composer/installed.json"
543 if ( !isset( $credits[
$type] ) || $credits[
$type] === [] ) {
546 foreach ( $credits[
$type] as $extension ) {
547 if ( !isset( $extension[
'path'] ) ) {
550 $paths[] = dirname( $extension[
'path'] ) .
'/vendor/composer/installed.json';
556 foreach ( $paths as
$path ) {
557 if ( !file_exists(
$path ) ) {
563 $dependencies += $installed->getInstalledDependencies();
566 if ( $dependencies === [] ) {
570 ksort( $dependencies );
574 [
'id' =>
'mw-version-libraries' ],
575 $this->
msg(
'version-libraries' )->text()
579 [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-libraries' ]
582 .
Html::element(
'th', [], $this->
msg(
'version-libraries-library' )->text() )
583 .
Html::element(
'th', [], $this->
msg(
'version-libraries-version' )->text() )
584 .
Html::element(
'th', [], $this->
msg(
'version-libraries-license' )->text() )
585 .
Html::element(
'th', [], $this->
msg(
'version-libraries-description' )->text() )
586 .
Html::element(
'th', [], $this->
msg(
'version-libraries-authors' )->text() )
589 foreach ( $dependencies as $name => $info ) {
590 if ( !is_array( $info ) || strpos( $info[
'type'],
'mediawiki-' ) === 0 ) {
595 $authors = array_map(
function ( $arr ) {
597 if ( isset( $arr[
'homepage'] ) ) {
598 return "[{$arr['homepage']} {$arr['name']}]";
601 }, $info[
'authors'] );
602 $authors = $this->
listAuthors( $authors,
false,
"$IP/vendor/$name" );
611 "mw-version-library-$name"
617 "https://packagist.org/packages/$name", $name,
619 [
'class' =>
'mw-version-library-name' ]
622 .
Html::element(
'td', [
'dir' =>
'auto' ], $info[
'version'] )
624 .
Html::element(
'td', [
'lang' =>
'en',
'dir' =>
'ltr' ], $info[
'description'] )
639 $tags = $this->parser->getTags();
641 if ( count( $tags ) ) {
645 'class' =>
'mw-headline plainlinks',
646 'id' =>
'mw-version-parser-extensiontags',
650 'https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Tag_extensions',
651 $this->
msg(
'version-parser-extensiontags' )->parse(),
656 array_walk( $tags,
function ( &$value ) {
662 'style' =>
'white-space: nowrap;',
682 $fhooks = $this->parser->getFunctionHooks();
683 if ( count( $fhooks ) ) {
687 'class' =>
'mw-headline plainlinks',
688 'id' =>
'mw-version-parser-function-hooks',
692 'https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
693 $this->
msg(
'version-parser-function-hooks' )->parse(),
717 $credits = $config->get(
'ExtensionCredits' );
721 if ( $creditsGroup ) {
724 usort( $creditsGroup, [ $this,
'compare' ] );
726 foreach ( $creditsGroup as $extension ) {
767 if ( isset( $extension[
'namemsg'] ) ) {
769 $extensionName = $this->
msg( $extension[
'namemsg'] )->text();
770 } elseif ( isset( $extension[
'name'] ) ) {
772 $extensionName = $extension[
'name'];
774 $extensionName = $this->
msg(
'version-no-ext-name' )->text();
777 if ( isset( $extension[
'url'] ) ) {
783 [
'class' =>
'mw-version-ext-name' ]
786 $extensionNameLink = htmlspecialchars( $extensionName );
792 $canonicalVersion =
'–';
793 $extensionPath =
null;
798 if ( isset( $extension[
'version'] ) ) {
799 $canonicalVersion = $out->parseInlineAsInterface( $extension[
'version'] );
802 if ( isset( $extension[
'path'] ) ) {
804 $extensionPath = dirname( $extension[
'path'] );
805 if ( $this->coreId ==
'' ) {
806 wfDebug(
'Looking up core head id' );
808 if ( $coreHeadSHA1 ) {
809 $this->coreId = $coreHeadSHA1;
813 $memcKey =
$cache->makeKey(
814 'specialversion-ext-version-text', $extension[
'path'], $this->coreId
816 list( $vcsVersion, $vcsLink, $vcsDate ) =
$cache->get( $memcKey );
818 if ( !$vcsVersion ) {
819 wfDebug(
"Getting VCS info for extension {$extension['name']}" );
820 $gitInfo =
new GitInfo( $extensionPath );
821 $vcsVersion = $gitInfo->getHeadSHA1();
822 if ( $vcsVersion !==
false ) {
823 $vcsVersion = substr( $vcsVersion, 0, 7 );
824 $vcsLink = $gitInfo->getHeadViewUrl();
825 $vcsDate = $gitInfo->getHeadCommitDate();
827 $cache->set( $memcKey, [ $vcsVersion, $vcsLink, $vcsDate ], 60 * 60 * 24 );
829 wfDebug(
"Pulled VCS info for extension {$extension['name']} from cache" );
835 [
'class' =>
'mw-version-ext-version' ],
843 $this->
msg(
'version-version', $vcsVersion )->text(),
846 [
'class' =>
'mw-version-ext-vcs-version' ]
850 [
'class' =>
'mw-version-ext-vcs-version' ],
854 $versionString .=
" {$vcsVerString}";
858 'class' =>
'mw-version-ext-vcs-timestamp',
860 ], $this->
getLanguage()->timeanddate( $vcsDate,
true ) );
863 [
'class' =>
'mw-version-ext-meta-version' ],
871 if ( isset( $extension[
'name'] ) ) {
873 if ( isset( $extension[
'license-name'] ) ) {
874 $licenseName =
new HtmlArmor( $out->parseInlineAsInterface( $extension[
'license-name'] ) );
875 } elseif ( ExtensionInfo::getLicenseFileNames( $extensionPath ) ) {
876 $licenseName = $this->
msg(
'version-ext-license' )->text();
878 if ( $licenseName !==
null ) {
883 'class' =>
'mw-version-ext-license',
893 if ( isset( $extension[
'descriptionmsg'] ) ) {
895 $descriptionMsg = $extension[
'descriptionmsg'];
897 if ( is_array( $descriptionMsg ) ) {
898 $descriptionMsgKey = $descriptionMsg[0];
899 array_shift( $descriptionMsg );
900 array_map(
"htmlspecialchars", $descriptionMsg );
901 $description = $this->
msg( $descriptionMsgKey, $descriptionMsg )->text();
903 $description = $this->
msg( $descriptionMsg )->text();
905 } elseif ( isset( $extension[
'description'] ) ) {
907 $description = $extension[
'description'];
911 $description = $out->parseInlineAsInterface( $description );
914 $authors = $extension[
'author'] ?? [];
915 $authors = $this->
listAuthors( $authors, $extension[
'name'], $extensionPath );
919 'class' =>
'mw-version-ext',
927 $html .=
Html::rawElement(
'td', [
'class' =>
'mw-version-ext-description' ], $description );
928 $html .=
Html::rawElement(
'td', [
'class' =>
'mw-version-ext-authors' ], $authors );
948 $ret[] =
'== {{int:version-hooks}} ==';
949 $ret[] =
Html::openElement(
'table', [
'class' =>
'wikitable',
'id' =>
'sv-hooks' ] );
951 $ret[] =
Html::element(
'th', [], $this->
msg(
'version-hook-name' )->text() );
952 $ret[] =
Html::element(
'th', [], $this->
msg(
'version-hook-subscribedby' )->text() );
955 foreach ( $myWgHooks as $hook => $hooks ) {
964 return implode(
"\n", $ret );
973 $opt = [
'colspan' => 5 ];
974 if ( $this->firstExtOpened ) {
980 $this->firstExtOpened =
true;
983 $opt[
'id'] =
"sv-$name";
986 if ( $text !==
null ) {
992 $firstHeadingMsg = ( $name ===
'credits-skin' )
993 ?
'version-skin-colheader-name'
994 :
'version-ext-colheader-name';
996 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
997 $this->
msg( $firstHeadingMsg )->text() );
998 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
999 $this->
msg(
'version-ext-colheader-version' )->text() );
1000 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
1001 $this->
msg(
'version-ext-colheader-license' )->text() );
1002 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
1003 $this->
msg(
'version-ext-colheader-description' )->text() );
1004 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
1005 $this->
msg(
'version-ext-colheader-credits' )->text() );
1017 $ip = str_replace(
'--',
' - ', htmlspecialchars( $this->
getRequest()->getIP() ) );
1019 return "<!-- visited from $ip -->\n<span style='display:none'>visited from $ip</span>";
1048 $authors = (array)$authors;
1053 if ( count( $authors ) === 1 && $authors[0] ===
'...' ) {
1056 if ( $extName && ExtensionInfo::getAuthorsFileName( $extDir ) ) {
1059 $this->
msg(
'version-poweredby-various' )->text()
1062 return $this->
msg(
'version-poweredby-various' )->escaped();
1068 foreach ( $authors as $item ) {
1069 if ( $item ==
'...' ) {
1072 if ( $extName && ExtensionInfo::getAuthorsFileName( $extDir ) ) {
1075 $this->
msg(
'version-poweredby-others' )->text()
1078 $text = $this->
msg(
'version-poweredby-others' )->escaped();
1081 } elseif ( substr( $item, -5 ) ==
' ...]' ) {
1083 $list[] = $this->
getOutput()->parseInlineAsInterface(
1084 substr( $item, 0, -4 ) . $this->
msg(
'version-poweredby-others' )->text() .
"]"
1087 $list[] = $this->
getOutput()->parseInlineAsInterface( $item );
1091 if ( $extName && !$hasOthers && ExtensionInfo::getAuthorsFileName( $extDir ) ) {
1094 $this->
msg(
'version-poweredby-others' )->text()
1115 return ExtensionInfo::getAuthorsFileName( $extDir );
1132 $licenses = ExtensionInfo::getLicenseFileNames( $extDir );
1133 if ( count( $licenses ) === 0 ) {
1136 return $licenses[0];
1148 if ( !count( $list ) ) {
1156 ->listToText( array_map( [ __CLASS__,
'arrayToString' ], $list ) );
1168 if ( is_array( $list ) && count( $list ) == 1 ) {
1171 if ( $list instanceof Closure ) {
1174 } elseif ( is_object( $list ) ) {
1175 $class =
wfMessage(
'parentheses' )->params( get_class( $list ) )->escaped();
1178 } elseif ( !is_array( $list ) ) {
1181 if ( is_object( $list[0] ) ) {
1182 $class = get_class( $list[0] );
1187 return wfMessage(
'parentheses' )->params(
"$class, {$list[1]}" )->escaped();
1198 return $repo->getHeadSHA1();
1207 return $repo->getCurrentBranch();
1216 $scriptPath = $config->get(
'ScriptPath' ) ?:
'/';
1219 'version-entrypoints-articlepath' => $config->get(
'ArticlePath' ),
1220 'version-entrypoints-scriptpath' => $scriptPath,
1221 'version-entrypoints-index-php' =>
wfScript(
'index' ),
1222 'version-entrypoints-api-php' =>
wfScript(
'api' ),
1223 'version-entrypoints-rest-php' =>
wfScript(
'rest' ),
1228 'dir' => $language->getDir(),
1229 'lang' => $language->getHtmlCode()
1233 [
'id' =>
'mw-version-entrypoints' ],
1234 $this->
msg(
'version-entrypoints' )->text()
1238 'class' =>
'wikitable plainlinks',
1239 'id' =>
'mw-version-entrypoints-table',
1248 $this->
msg(
'version-entrypoints-header-entrypoint' )->text()
1253 $this->
msg(
'version-entrypoints-header-url' )->text()
1257 foreach ( $entryPoints as $message => $value ) {
LinkRenderer null $linkRenderer
openExtType( $text=null, $name=null)
getPageTitle( $subpage=false)
Get a self-referential title object.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
listAuthors( $authors, $extName, $extDir)
Return a formatted unsorted list of authors.
Marks HTML that shouldn't be escaped.
static getExtAuthorsFileName( $extDir)
Obtains the full path of an extensions AUTHORS or CREDITS file if one exists.
getOutput()
Get the OutputPage being used for this instance.
listToText( $list, $sort=true)
Convert an array of items into a list for display.
static getMediaWikiCredits()
Returns wiki text showing the license information.
if(!isset( $args[0])) $lang
getCreditsForExtension( $type, array $extension)
Creates and formats a version line for a single extension.
string $coreId
The current rev id/SHA hash of MediaWiki core.
static escapeIdForAttribute( $id, $mode=self::ID_PRIMARY)
Given a section name or other user-generated or otherwise unsafe string, escapes it to be a valid HTM...
compare( $a, $b)
Callback to sort extensions by type.
static getCopyrightAndAuthorList()
Get the "MediaWiki is copyright 2001-20xx by lots of cool folks" text.
getExtensionCategory( $type, $message, array $creditsGroup)
Creates and returns the HTML for a single extension category.
const MW_VERSION
The running version of MediaWiki.
getAllThings()
Get credits information about all installed extensions and skins.
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
Item class for a filearchive table row.
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
getLanguage()
Shortcut to get user's language.
getParserFunctionHooks()
Obtains a list of installed parser function hooks and the associated H2 header.
getExtensionCredits(array $credits)
Generate wikitext showing the name, URL, author and description of each extension.
static openElement( $element, $attribs=null)
This opens an XML element.
static getVersionLinked()
Return a wikitext-formatted string of the MediaWiki version with a link to the Git SHA1 of head if av...
getSkinCredits(array $credits)
Generate wikitext showing the name, URL, author and description of each skin.
static arrayToString( $list)
Convert an array or object to a string for display.
static softwareInformation()
Returns HTML showing the third party software versions (apache, php, mysql).
__construct(Parser $parser)
static closeElement( $element)
Returns "</$element>".
Interface for configuration instances.
getExternalLibraries(array $credits)
Generate an HTML table for external libraries that are installed.
IPInfo()
Get information about client's IP address.
$wgHooks
Global list of hooks.
getConfig()
Shortcut to get main config object.
wfDeprecated( $function, $version=false, $component=false, $callerOffset=2)
Logs a warning that $function is deprecated.
static getSoftwareInformation()
wfScript( $script='index')
Get the path to a specified script file, respecting file extensions; this is a wrapper around $wgScri...
static getExtensionTypeName( $type)
Returns the internationalized name for an extension type.
get( $name)
Get a configuration variable such as "Sitename" or "UploadMaintenance.".
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
static element( $element, $attribs=null, $contents='', $allowShortTag=true)
Format an XML element with given attributes and, optionally, text content.
static getInstance( $id)
Get a cached instance of the specified type of cache object.
static getMWVersionLinked()
setHeaders()
Sets headers - this should be called from the execute() method of all derived classes!...
static getExtensionTypes()
Returns an array with the base extension types.
static makeExternalLink( $url, $text, $escape=true, $linktype='', $attribs=[], $title=null)
Make an external link.
getWgHooks()
Generate wikitext showing hooks in $wgHooks.
static string[] false $extensionTypes
Lazy initialized key/value with message content.
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
static getExtLicenseFileName( $extDir)
Obtains the full path of an extensions COPYING or LICENSE file if one exists.
static getVersion( $flags='', $lang=null)
Return a string of the MediaWiki version with Git revision if available.
static getGitCurrentBranch( $dir)
static getCredits(ExtensionRegistry $reg, Config $conf)
Parent class for all special pages.
static runner()
Get a HookRunner instance for calling hooks using the new interfaces.
getRequest()
Get the WebRequest being used for this instance.
Give information about the version of MediaWiki, PHP, the DB and extensions.
static getGitHeadSha1( $dir)
PHP Parser - Processes wiki markup (which uses a more user-friendly syntax, such as "[[link]]" for ma...
getEntryPointInfo()
Get the list of entry points and their URLs.
static getVersionLinkedGit()
static closeElement( $element)
Shortcut to close an XML element.
static openElement( $element, $attribs=[])
Identical to rawElement(), but has no third parameter and omits the end tag (and the self-closing '/'...
static rawElement( $element, $attribs=[], $contents='')
Returns an HTML element in a string.
if(!is_readable( $file)) $ext
static element( $element, $attribs=[], $contents='')
Identical to rawElement(), but HTML-escapes $contents (like Xml::element()).
getParserTags()
Obtains a list of installed parser tags and the associated H2 header.
static getLocalInstance( $ts=false)
Get a timestamp instance in the server local timezone ($wgLocaltimezone)
$wgSpecialVersionShowHooks
Show the contents of $wgHooks in Special:Version.
Reads an installed.json file and provides accessors to get what is installed.
outputHeader( $summaryMessageKey='')
Outputs a summary message on top of special pages Per default the message key is the canonical name o...
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.