Go to the documentation of this file.
51 parent::__construct(
'Version' );
61 $extensionCredits = $config->get(
'ExtensionCredits' );
66 $out->allowClickjacking();
69 $parts = explode(
'/', (
string)$par );
71 if ( isset( $parts[1] ) ) {
72 $extName = str_replace(
'_',
' ', $parts[1] );
74 foreach ( $extensionCredits as $group => $extensions ) {
75 foreach ( $extensions as
$ext ) {
76 if ( isset(
$ext[
'name'] ) && (
$ext[
'name'] === $extName ) ) {
83 $out->setStatusCode( 404 );
86 $extName =
'MediaWiki';
90 switch ( strtolower( $parts[0] ) ) {
92 $out->addModuleStyles(
'mediawiki.special.version' );
94 $wikiText =
'{{int:version-credits-not-found}}';
95 if ( $extName ===
'MediaWiki' ) {
96 $wikiText = file_get_contents(
$IP .
'/CREDITS' );
98 $wikiText = str_replace(
99 [
'<!-- BEGIN CONTRIBUTOR LIST -->',
'<!-- END CONTRIBUTOR LIST -->' ],
100 [
'<div class="mw-version-credits">',
'</div>' ],
102 } elseif ( ( $extNode !==
null ) && isset( $extNode[
'path'] ) ) {
105 $wikiText = file_get_contents(
$file );
106 if ( substr(
$file, -4 ) ===
'.txt' ) {
119 $out->setPageTitle( $this->
msg(
'version-credits-title', $extName ) );
120 $out->addWikiTextAsInterface( $wikiText );
124 $wikiText =
'{{int:version-license-not-found}}';
125 if ( $extName ===
'MediaWiki' ) {
126 $wikiText = file_get_contents(
$IP .
'/COPYING' );
127 } elseif ( ( $extNode !==
null ) && isset( $extNode[
'path'] ) ) {
130 $wikiText = file_get_contents(
$file );
142 $out->setPageTitle( $this->
msg(
'version-license-title', $extName ) );
143 $out->addWikiTextAsInterface( $wikiText );
147 $out->addModuleStyles(
'mediawiki.special.version' );
148 $out->addWikiTextAsInterface(
160 $out->addWikiTextAsInterface( $this->
getWgHooks() );
161 $out->addHTML( $this->
IPInfo() );
175 [
'id' =>
'mw-version-license' ],
180 $ret .=
'<div class="plainlinks">';
183 " .
'<div class="mw-version-license-info">' .
184 wfMessage(
'version-license-info' )->text() .
188 return str_replace(
"\t\t",
'', $ret ) .
"\n";
199 if ( defined(
'MEDIAWIKI_INSTALL' ) ) {
200 $othersLink =
'[https://www.mediawiki.org/wiki/Special:Version/Credits ' .
201 wfMessage(
'version-poweredby-others' )->text() .
']';
203 $othersLink =
'[[Special:Version/Credits|' .
204 wfMessage(
'version-poweredby-others' )->text() .
']]';
207 $translatorsLink =
'[https://translatewiki.net/wiki/Translating:MediaWiki/Credits ' .
208 wfMessage(
'version-poweredby-translators' )->text() .
']';
211 'Magnus Manske',
'Brion Vibber',
'Lee Daniel Crocker',
212 'Tim Starling',
'Erik Möller',
'Gabriel Wicke',
'Ævar Arnfjörð Bjarmason',
213 'Niklas Laxström',
'Domas Mituzas',
'Rob Church',
'Yuri Astrakhan',
214 'Aryeh Gregor',
'Aaron Schulz',
'Andrew Garrett',
'Raimond Spekking',
215 'Alexandre Emsenhuber',
'Siebrand Mazeland',
'Chad Horohoe',
216 'Roan Kattouw',
'Trevor Parscal',
'Bryan Tong Minh',
'Sam Reed',
217 'Victor Vasiliev',
'Rotem Liss',
'Platonides',
'Antoine Musso',
218 'Timo Tijhof',
'Daniel Kinzler',
'Jeroen De Dauw',
'Brad Jorsch',
219 'Bartosz Dziewoński',
'Ed Sanders',
'Moriel Schottlender',
220 'Kunal Mehta',
'James D. Forrester',
'Brian Wolff',
'Adam Shorland',
221 $othersLink, $translatorsLink
225 $wgLang->listToText( $authorList ) )->text();
244 $software[
'[https://hhvm.com/ HHVM]'] = HHVM_VERSION .
" (" . PHP_SAPI .
")";
246 $software[
'[https://php.net/ PHP]'] = PHP_VERSION .
" (" . PHP_SAPI .
")";
249 $software[
$dbr->getSoftwareLink()] =
$dbr->getServerInfo();
251 if ( defined(
'INTL_ICU_VERSION' ) ) {
252 $software[
'[http://site.icu-project.org/ ICU]'] = INTL_ICU_VERSION;
269 [
'id' =>
'mw-version-software' ],
272 Xml::openElement(
'table', [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-software' ] ) .
274 <th>" .
wfMessage(
'version-software-product' )->text() .
"</th>
275 <th>" .
wfMessage(
'version-software-version' )->text() .
"</th>
278 foreach ( self::getSoftwareInformation() as $name => $version ) {
280 <td>" . $name .
"</td>
281 <td dir=\"ltr\">" . $version .
"</td>
301 } elseif ( $flags ===
'nodb' ) {
302 $shortSha1 = substr( $gitInfo, 0, 7 );
303 $version =
"$wgVersion ($shortSha1)";
305 $shortSha1 = substr( $gitInfo, 0, 7 );
307 if (
$lang !==
null ) {
308 $msg->inLanguage(
$lang );
310 $shortSha1 = $msg->params( $shortSha1 )->escaped();
311 $version =
"$wgVersion $shortSha1";
345 preg_match(
"/^(\d+\.\d+)/",
$wgVersion, $versionParts );
346 $versionUrl =
"https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]}";
349 return "[$versionUrl $wgVersion]";
361 $headSHA1 = $gitInfo->getHeadSHA1();
366 $shortSHA1 =
'(' . substr( $headSHA1, 0, 7 ) .
')';
368 $gitHeadUrl = $gitInfo->getHeadViewUrl();
369 if ( $gitHeadUrl !==
false ) {
370 $shortSHA1 =
"[$gitHeadUrl $shortSHA1]";
373 $gitHeadCommitDate = $gitInfo->getHeadCommitDate();
374 if ( $gitHeadCommitDate ) {
392 if ( self::$extensionTypes ===
false ) {
393 self::$extensionTypes = [
394 'specialpage' =>
wfMessage(
'version-specialpages' )->text(),
395 'editor' =>
wfMessage(
'version-editors' )->text(),
396 'parserhook' =>
wfMessage(
'version-parserhooks' )->text(),
397 'variable' =>
wfMessage(
'version-variables' )->text(),
398 'media' =>
wfMessage(
'version-mediahandlers' )->text(),
399 'antispam' =>
wfMessage(
'version-antispam' )->text(),
400 'skin' =>
wfMessage(
'version-skins' )->text(),
401 'api' =>
wfMessage(
'version-api' )->text(),
402 'other' =>
wfMessage(
'version-other' )->text(),
405 Hooks::run(
'ExtensionTypes', [ &self::$extensionTypes ] );
423 return $types[
$type] ?? $types[
'other'];
433 $extensionCredits = $config->get(
'ExtensionCredits' );
436 count( $extensionCredits ) === 0 ||
438 ( count( $extensionCredits ) === 1 && isset( $extensionCredits[
'skin'] ) )
447 [
'id' =>
'mw-version-ext' ],
448 $this->
msg(
'version-extensions' )->text()
450 Xml::openElement(
'table', [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-ext' ] );
453 if ( !array_key_exists(
'other', $extensionCredits ) ) {
454 $extensionCredits[
'other'] = [];
458 foreach ( $extensionCredits as
$type => $extensions ) {
460 $extensionCredits[
'other'] = array_merge( $extensionCredits[
'other'], $extensions );
464 $this->firstExtOpened =
false;
468 if (
$type !==
'other' &&
$type !==
'skin' ) {
494 [
'id' =>
'mw-version-skin' ],
495 $this->
msg(
'version-skins' )->text()
497 Xml::openElement(
'table', [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-skin' ] );
499 $this->firstExtOpened =
false;
514 $path =
"$IP/vendor/composer/installed.json";
515 if ( !file_exists(
$path ) ) {
522 [
'id' =>
'mw-version-libraries' ],
523 $this->
msg(
'version-libraries' )->text()
527 [
'class' =>
'wikitable plainlinks',
'id' =>
'sv-libraries' ]
530 .
Html::element(
'th', [], $this->
msg(
'version-libraries-library' )->text() )
531 .
Html::element(
'th', [], $this->
msg(
'version-libraries-version' )->text() )
532 .
Html::element(
'th', [], $this->
msg(
'version-libraries-license' )->text() )
533 .
Html::element(
'th', [], $this->
msg(
'version-libraries-description' )->text() )
534 .
Html::element(
'th', [], $this->
msg(
'version-libraries-authors' )->text() )
537 foreach ( $installed->getInstalledDependencies() as $name => $info ) {
538 if ( strpos( $info[
'type'],
'mediawiki-' ) === 0 ) {
543 $authors = array_map(
function ( $arr ) {
545 if ( isset( $arr[
'homepage'] ) ) {
546 return "[{$arr['homepage']} {$arr['name']}]";
549 }, $info[
'authors'] );
550 $authors = $this->
listAuthors( $authors,
false,
"$IP/vendor/$name" );
560 "https://packagist.org/packages/$name", $name,
562 [
'class' =>
'mw-version-library-name' ]
565 .
Html::element(
'td', [
'dir' =>
'auto' ], $info[
'version'] )
567 .
Html::element(
'td', [
'lang' =>
'en',
'dir' =>
'ltr' ], $info[
'description'] )
582 $tags = MediaWikiServices::getInstance()->getParser()->getTags();
584 if ( count( $tags ) ) {
588 'class' =>
'mw-headline plainlinks',
589 'id' =>
'mw-version-parser-extensiontags',
592 'https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Tag_extensions',
593 $this->
msg(
'version-parser-extensiontags' )->parse(),
598 array_walk( $tags,
function ( &$value ) {
604 'style' =>
'white-space: nowrap;',
624 $fhooks = MediaWikiServices::getInstance()->getParser()->getFunctionHooks();
625 if ( count( $fhooks ) ) {
629 'class' =>
'mw-headline plainlinks',
630 'id' =>
'mw-version-parser-function-hooks',
633 'https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
634 $this->
msg(
'version-parser-function-hooks' )->parse(),
659 $extensionCredits = $config->get(
'ExtensionCredits' );
663 if ( array_key_exists(
$type, $extensionCredits ) && count( $extensionCredits[
$type] ) > 0 ) {
666 usort( $extensionCredits[
$type], [ $this,
'compare' ] );
668 foreach ( $extensionCredits[
$type] as $extension ) {
709 if ( isset( $extension[
'namemsg'] ) ) {
711 $extensionName = $this->
msg( $extension[
'namemsg'] )->text();
712 } elseif ( isset( $extension[
'name'] ) ) {
714 $extensionName = $extension[
'name'];
716 $extensionName = $this->
msg(
'version-no-ext-name' )->text();
719 if ( isset( $extension[
'url'] ) ) {
725 [
'class' =>
'mw-version-ext-name' ]
728 $extensionNameLink = htmlspecialchars( $extensionName );
734 $canonicalVersion =
'–';
735 $extensionPath =
null;
740 if ( isset( $extension[
'version'] ) ) {
741 $canonicalVersion = $out->parseInlineAsInterface( $extension[
'version'] );
744 if ( isset( $extension[
'path'] ) ) {
746 $extensionPath = dirname( $extension[
'path'] );
747 if ( $this->coreId ==
'' ) {
748 wfDebug(
'Looking up core head id' );
750 if ( $coreHeadSHA1 ) {
751 $this->coreId = $coreHeadSHA1;
755 $memcKey =
$cache->makeKey(
756 'specialversion-ext-version-text', $extension[
'path'], $this->coreId
758 list( $vcsVersion, $vcsLink, $vcsDate ) =
$cache->get( $memcKey );
760 if ( !$vcsVersion ) {
761 wfDebug(
"Getting VCS info for extension {$extension['name']}" );
762 $gitInfo =
new GitInfo( $extensionPath );
763 $vcsVersion = $gitInfo->getHeadSHA1();
764 if ( $vcsVersion !==
false ) {
765 $vcsVersion = substr( $vcsVersion, 0, 7 );
766 $vcsLink = $gitInfo->getHeadViewUrl();
767 $vcsDate = $gitInfo->getHeadCommitDate();
769 $cache->set( $memcKey, [ $vcsVersion, $vcsLink, $vcsDate ], 60 * 60 * 24 );
771 wfDebug(
"Pulled VCS info for extension {$extension['name']} from cache" );
777 [
'class' =>
'mw-version-ext-version' ],
785 $this->
msg(
'version-version', $vcsVersion ),
788 [
'class' =>
'mw-version-ext-vcs-version' ]
792 [
'class' =>
'mw-version-ext-vcs-version' ],
796 $versionString .=
" {$vcsVerString}";
800 [
'class' =>
'mw-version-ext-vcs-timestamp' ],
801 $this->
getLanguage()->timeanddate( $vcsDate,
true )
803 $versionString .=
" {$vcsTimeString}";
806 [
'class' =>
'mw-version-ext-meta-version' ],
814 if ( isset( $extension[
'name'] ) ) {
816 if ( isset( $extension[
'license-name'] ) ) {
817 $licenseName =
new HtmlArmor( $out->parseInlineAsInterface( $extension[
'license-name'] ) );
819 $licenseName = $this->
msg(
'version-ext-license' )->text();
821 if ( $licenseName !==
null ) {
826 'class' =>
'mw-version-ext-license',
836 if ( isset( $extension[
'descriptionmsg'] ) ) {
838 $descriptionMsg = $extension[
'descriptionmsg'];
840 if ( is_array( $descriptionMsg ) ) {
841 $descriptionMsgKey = $descriptionMsg[0];
842 array_shift( $descriptionMsg );
843 array_map(
"htmlspecialchars", $descriptionMsg );
844 $description = $this->
msg( $descriptionMsgKey, $descriptionMsg )->text();
846 $description = $this->
msg( $descriptionMsg )->text();
848 } elseif ( isset( $extension[
'description'] ) ) {
850 $description = $extension[
'description'];
854 $description = $out->parseInlineAsInterface( $description );
857 $authors = $extension[
'author'] ?? [];
858 $authors = $this->
listAuthors( $authors, $extension[
'name'], $extensionPath );
862 'class' =>
'mw-version-ext',
870 $html .=
Html::rawElement(
'td', [
'class' =>
'mw-version-ext-description' ], $description );
871 $html .=
Html::rawElement(
'td', [
'class' =>
'mw-version-ext-authors' ], $authors );
891 $ret[] =
'== {{int:version-hooks}} ==';
892 $ret[] =
Html::openElement(
'table', [
'class' =>
'wikitable',
'id' =>
'sv-hooks' ] );
894 $ret[] =
Html::element(
'th', [], $this->
msg(
'version-hook-name' )->text() );
895 $ret[] =
Html::element(
'th', [], $this->
msg(
'version-hook-subscribedby' )->text() );
898 foreach ( $myWgHooks as $hook => $hooks ) {
907 return implode(
"\n", $ret );
916 $opt = [
'colspan' => 5 ];
917 if ( $this->firstExtOpened ) {
923 $this->firstExtOpened =
true;
926 $opt[
'id'] =
"sv-$name";
929 if ( $text !==
null ) {
935 $firstHeadingMsg = ( $name ===
'credits-skin' )
936 ?
'version-skin-colheader-name'
937 :
'version-ext-colheader-name';
939 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
940 $this->
msg( $firstHeadingMsg )->text() );
941 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
942 $this->
msg(
'version-ext-colheader-version' )->text() );
943 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
944 $this->
msg(
'version-ext-colheader-license' )->text() );
945 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
946 $this->
msg(
'version-ext-colheader-description' )->text() );
947 $out .=
Html::element(
'th', [
'class' =>
'mw-version-ext-col-label' ],
948 $this->
msg(
'version-ext-colheader-credits' )->text() );
960 $ip = str_replace(
'--',
' - ', htmlspecialchars( $this->
getRequest()->getIP() ) );
962 return "<!-- visited from $ip -->\n<span style='display:none'>visited from $ip</span>";
991 $authors = (array)$authors;
996 if ( count( $authors ) === 1 && $authors[0] ===
'...' ) {
1002 $this->
msg(
'version-poweredby-various' )->text()
1005 return $this->
msg(
'version-poweredby-various' )->escaped();
1011 foreach ( $authors as $item ) {
1012 if ( $item ==
'...' ) {
1018 $this->
msg(
'version-poweredby-others' )->text()
1021 $text = $this->
msg(
'version-poweredby-others' )->escaped();
1024 } elseif ( substr( $item, -5 ) ==
' ...]' ) {
1026 $list[] = $this->
getOutput()->parseInlineAsInterface(
1027 substr( $item, 0, -4 ) . $this->
msg(
'version-poweredby-others' )->text() .
"]"
1030 $list[] = $this->
getOutput()->parseInlineAsInterface( $item );
1037 $this->
msg(
'version-poweredby-others' )->text()
1060 foreach ( scandir( $extDir ) as
$file ) {
1061 $fullPath = $extDir . DIRECTORY_SEPARATOR .
$file;
1062 if ( preg_match(
'/^((AUTHORS)|(CREDITS))(\.txt|\.wiki|\.mediawiki)?$/',
$file ) &&
1063 is_readable( $fullPath ) &&
1064 is_file( $fullPath )
1089 foreach ( scandir( $extDir ) as
$file ) {
1090 $fullPath = $extDir . DIRECTORY_SEPARATOR .
$file;
1091 if ( preg_match(
'/^((COPYING)|(LICENSE))(\.txt)?$/',
$file ) &&
1092 is_readable( $fullPath ) &&
1093 is_file( $fullPath )
1111 if ( !count( $list ) ) {
1119 ->listToText( array_map( [ __CLASS__,
'arrayToString' ], $list ) );
1131 if ( is_array( $list ) && count( $list ) == 1 ) {
1134 if ( $list instanceof Closure ) {
1137 } elseif ( is_object( $list ) ) {
1138 $class =
wfMessage(
'parentheses' )->params( get_class( $list ) )->escaped();
1141 } elseif ( !is_array( $list ) ) {
1144 if ( is_object( $list[0] ) ) {
1145 $class = get_class( $list[0] );
1150 return wfMessage(
'parentheses' )->params(
"$class, {$list[1]}" )->escaped();
1161 return $repo->getHeadSHA1();
1170 return $repo->getCurrentBranch();
1179 $scriptPath = $config->get(
'ScriptPath' ) ?:
'/';
1182 'version-entrypoints-articlepath' => $config->get(
'ArticlePath' ),
1183 'version-entrypoints-scriptpath' => $scriptPath,
1184 'version-entrypoints-index-php' =>
wfScript(
'index' ),
1185 'version-entrypoints-api-php' =>
wfScript(
'api' ),
1186 'version-entrypoints-load-php' =>
wfScript(
'load' ),
1191 'dir' => $language->getDir(),
1192 'lang' => $language->getHtmlCode()
1196 [
'id' =>
'mw-version-entrypoints' ],
1197 $this->
msg(
'version-entrypoints' )->text()
1201 'class' =>
'wikitable plainlinks',
1202 'id' =>
'mw-version-entrypoints-table',
1211 $this->
msg(
'version-entrypoints-header-entrypoint' )->text()
1216 $this->
msg(
'version-entrypoints-header-url' )->text()
1220 foreach ( $entryPoints as $message => $value ) {
getExtensionCredits()
Generate wikitext showing the name, URL, author and description of each extension.
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.
$wgExtensionCredits['specialpage'][]
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 guys" text.
$wgVersion
MediaWiki version number.
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.
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...
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).
static closeElement( $element)
Returns "</$element>".
IPInfo()
Get information about client's IP address.
getExternalLibraries()
Generate an HTML table for external libraries that are installed.
getConfig()
Shortcut to get main config object.
getSkinCredits()
Generate wikitext showing the name, URL, author and description of each skin.
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.
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.
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.
wfGetCache( $cacheType)
Get a specific cache object.
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 getwgVersionLinked()
static getVersion( $flags='', $lang=null)
Return a string of the MediaWiki version with Git revision if available.
static getGitCurrentBranch( $dir)
Parent class for all special pages.
getRequest()
Get the WebRequest being used for this instance.
Give information about the version of MediaWiki, PHP, the DB and extensions.
static getGitHeadSha1( $dir)
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
MediaWiki Linker LinkRenderer null $linkRenderer
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.
wfIsHHVM()
Check if we are running under HHVM.
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
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.
getExtensionCategory( $type, $message)
Creates and returns the HTML for a single extension category.