From f3a99984c01d709140f9d4e68f2970e4583da65a Mon Sep 17 00:00:00 2001 From: Shinjiman Date: Fri, 17 Jul 2009 14:49:15 +0000 Subject: [PATCH] * (bug 14611) Add a global variable hook to show the extended software information, also add the user rights for sysops, enable to showing them by default. patch by OverlordQ --- RELEASE-NOTES | 5 +- includes/DefaultSettings.php | 7 + includes/specials/SpecialVersion.php | 362 +++++++++++++------------ languages/messages/MessagesEn.php | 1 + languages/messages/MessagesLzh.php | 1 + languages/messages/MessagesYue.php | 1 + languages/messages/MessagesZh_hans.php | 1 + languages/messages/MessagesZh_hant.php | 1 + maintenance/language/messages.inc | 1 + 9 files changed, 201 insertions(+), 179 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index dbf327287b..d39ddb6bf4 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -73,6 +73,8 @@ this. Was used when mwEmbed was going to be an extension. * $wgRegisterInternalExternals can be used to record external links pointing to same server * $wgHtml5 outputs an HTML 5 doctype instead of XHTML 1.0 Transitional. +* $wgSpecialVersionExtended shows the extended version information besides + PHP and database version. === New features in 1.16 === @@ -124,7 +126,8 @@ this. Was used when mwEmbed was going to be an extension. * Added a PHP port of CDB (constant database), for improved local caching when the DBA extension is not available. * (bug 14611) Added support showing the version of the web server, image - thumbnailing engine, diff/diff3 engine and TeX engine. + thumbnailing engine, diff/diff3 engine and TeX engine, enabled for sysops + by default. * Introduced a new system for localisation caching. The system is based around fast fetches of individual messages, minimising memory overhead and startup time in the typical case. The database backend will be used by default, but diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 23841300f0..4420988c21 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1135,6 +1135,12 @@ $wgShowDebug = false; */ $wgSpecialVersionShowHooks = false; +/** + * By default, only show the MediaWiki, PHP, Database versions. + * Setting this to true will try and determine versions of all helper programs. + */ +$wgSpecialVersionExtended = false; + /** * Whether to show "we're sorry, but there has been a database error" pages. * Displaying errors aids in debugging, but may display information useful @@ -1341,6 +1347,7 @@ $wgGroupPermissions['sysop']['markbotedits'] = true; $wgGroupPermissions['sysop']['apihighlimits'] = true; $wgGroupPermissions['sysop']['browsearchive'] = true; $wgGroupPermissions['sysop']['noratelimit'] = true; +$wgGroupPermissions['sysop']['versiondetail'] = true; $wgGroupPermissions['sysop']['movefile'] = true; #$wgGroupPermissions['sysop']['mergehistory'] = true; diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 9f3e84e658..52b449eb2d 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -102,206 +102,212 @@ class SpecialVersion extends SpecialPage { static function softwareInformation() { global $wgUseImageMagick, $wgImageMagickConvertCommand, $wgDiff3, $wgDiff, $wgUseTeX; global $wgAllowTitlesInSVG, $wgSVGConverter, $wgSVGConverters, $wgSVGConverterPath; + global $wgUser, $wgSpecialVersionExtended; $dbr = wfGetDB( DB_SLAVE ); - // Get the web server name and its version, if applicable - // Chop off PHP text from the string if it has the text desired - $serverSoftware = $_SERVER['SERVER_SOFTWARE']; - if ( strrpos( $serverSoftware, 'PHP' ) === false ) { - } else { - $serverSoftware = trim( substr( $serverSoftware, 0, strrpos($serverSoftware,'PHP') - 1 ) ); - } - - // Get the web server name and its version. - $serverSoftwareLine = explode('/',$serverSoftware); - $serverSoftwareName = $serverSoftwareLine[0]; - - // Insert the website of the web server if applicable. - if ( stristr( $serverSoftwareName, 'Apache' ) ) - $serverSoftwareURL = 'http://httpd.apache.org/'; - else if ( stristr( $serverSoftwareName, 'IIS' ) ) - $serverSoftwareURL = 'http://www.microsoft.com/iis/'; - else if ( stristr( $serverSoftwareName, 'Cherokee' ) ) - $serverSoftwareURL = 'http://www.cherokee-project.com/'; - else if ( stristr( $serverSoftwareName, 'lighttpd' ) ) - $serverSoftwareURL = 'http://www.lighttpd.net/'; - else if ( stristr( $serverSoftwareName, 'Sun' ) ) - $serverSoftwareURL = 'http://www.sun.com/software/products/web_srvr/'; - - // Get the version of the web server. If does not have one, - // leave it as empty. - if ( $serverSoftwareLine[1] != '' ) { - $serverSoftwareVersion = $serverSoftwareLine[1]; - } else { - $serverSoftwareVersion = ''; - } - // Put the software in an array of form 'name' => 'version'. All messages should // be loaded here, so feel free to use wfMsg*() in the 'name'. Raw HTML or wikimarkup // can be used $software = array(); + $software['[http://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked(); - if ( isset( $serverSoftwareURL ) ) - $software["[$serverSoftwareURL $serverSoftwareName]"] = $serverSoftwareVersion; - else - $software[$serverSoftwareName] = $serverSoftwareVersion; $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . php_sapi_name() . ")"; $software[$dbr->getSoftwareLink()] = $dbr->getServerVersion(); - // Version information for diff3 - if ( file_exists( trim( $wgDiff3, '"' ) ) ) { - $swDiff3Info = self::execOutput( $wgDiff3 . ' -v' ); - $swDiff3Line = explode("\n",$swDiff3Info ,2); - $swDiff3Ver = $swDiff3Line[0]; - $swDiff3Ver = str_replace( 'diff3 (GNU diffutils) ', '' , $swDiff3Ver); - $software['[http://www.gnu.org/software/diffutils/diffutils.html diff3]'] = $swDiff3Ver; - } + if( $wgSpecialVersionExtended || $wgUser->isAllowed( 'versiondetail' ) ) { + // Get the web server name and its version, if applicable + // Chop off PHP text from the string if it has the text desired + $serverSoftware = $_SERVER['SERVER_SOFTWARE']; + if ( strrpos( $serverSoftware, 'PHP' ) === false ) { + } else { + $serverSoftware = trim( substr( $serverSoftware, 0, strrpos($serverSoftware,'PHP') - 1 ) ); + } - // Version information for diff - if ( file_exists( trim( $wgDiff, '"' ) ) ) { - $swDiffInfo = self::execOutput( $wgDiff . ' -v' ); - $swDiffLine = explode("\n",$swDiffInfo ,2); - $swDiffVer = $swDiffLine[0]; - $swDiffVer = str_replace( 'diff (GNU diffutils) ', '' , $swDiffVer); - $software['[http://www.gnu.org/software/diffutils/diffutils.html diff]'] = $swDiffVer; - } + // Get the web server name and its version. + $serverSoftwareLine = explode('/',$serverSoftware); + $serverSoftwareName = $serverSoftwareLine[0]; + + // Insert the website of the web server if applicable. + if ( stristr( $serverSoftwareName, 'Apache' ) ) + $serverSoftwareURL = 'http://httpd.apache.org/'; + else if ( stristr( $serverSoftwareName, 'IIS' ) ) + $serverSoftwareURL = 'http://www.microsoft.com/iis/'; + else if ( stristr( $serverSoftwareName, 'Cherokee' ) ) + $serverSoftwareURL = 'http://www.cherokee-project.com/'; + else if ( stristr( $serverSoftwareName, 'lighttpd' ) ) + $serverSoftwareURL = 'http://www.lighttpd.net/'; + else if ( stristr( $serverSoftwareName, 'Sun' ) ) + $serverSoftwareURL = 'http://www.sun.com/software/products/web_srvr/'; + else if ( stristr( $serverSoftwareName, 'nginx' ) ) + $serverSoftwareURL = 'http://nginx.net/'; + + // Get the version of the web server. If does not have one, + // leave it as empty. + if ( $serverSoftwareLine[1] != '' ) { + $serverSoftwareVersion = $serverSoftwareLine[1]; + } else { + $serverSoftwareVersion = ''; + } - // Look for ImageMagick's version, if did not found, try to find the GD library version - if ( $wgUseImageMagick ) { - if ( file_exists( trim( $wgImageMagickConvertCommand, '"' ) ) ) { - $swImageMagickInfo = self::execOutput( $wgImageMagickConvertCommand . ' -version' ); - list( $head, $tail ) = explode( 'ImageMagick', $swImageMagickInfo ); - list( $swImageMagickVer ) = explode('http://www.imagemagick.org', $tail ); - $software['[http://www.imagemagick.org/ ImageMagick]'] = $swImageMagickVer; + if ( isset( $serverSoftwareURL ) ) + $software["[$serverSoftwareURL $serverSoftwareName]"] = $serverSoftwareVersion; + else + $software[$serverSoftwareName] = $serverSoftwareVersion; + + // Version information for diff3 + if ( file_exists( trim( $wgDiff3, '"' ) ) ) { + $swDiff3Info = self::execOutput( $wgDiff3 . ' -v' ); + $swDiff3Line = explode("\n",$swDiff3Info ,2); + $swDiff3Ver = $swDiff3Line[0]; + $swDiff3Ver = str_replace( 'diff3 (GNU diffutils) ', '' , $swDiff3Ver); + $software['[http://www.gnu.org/software/diffutils/diffutils.html diff3]'] = $swDiff3Ver; } - } else { - if( function_exists( 'gd_info' ) ) { - $gdInfo = gd_info(); - if ( strstr( $gdInfo['GD Version'], 'bundled' ) != false ) { - $gd_URL = 'http://www.php.net/gd'; + + // Version information for diff + if ( file_exists( trim( $wgDiff, '"' ) ) ) { + $swDiffInfo = self::execOutput( $wgDiff . ' -v' ); + $swDiffLine = explode("\n",$swDiffInfo ,2); + $swDiffVer = $swDiffLine[0]; + $swDiffVer = str_replace( 'diff (GNU diffutils) ', '' , $swDiffVer); + $software['[http://www.gnu.org/software/diffutils/diffutils.html diff]'] = $swDiffVer; + } + + // Look for ImageMagick's version, if did not found, try to find the GD library version + if ( $wgUseImageMagick ) { + if ( file_exists( trim( $wgImageMagickConvertCommand, '"' ) ) ) { + $swImageMagickInfo = self::execOutput( $wgImageMagickConvertCommand . ' -version' ); + list( $head, $tail ) = explode( 'ImageMagick', $swImageMagickInfo ); + list( $swImageMagickVer ) = explode('http://www.imagemagick.org', $tail ); + $software['[http://www.imagemagick.org/ ImageMagick]'] = $swImageMagickVer; } - else { - $gd_URL = 'http://www.libgd.org'; + } else { + if( function_exists( 'gd_info' ) ) { + $gdInfo = gd_info(); + if ( strstr( $gdInfo['GD Version'], 'bundled' ) != false ) { + $gd_URL = 'http://www.php.net/gd'; + } else { + $gd_URL = 'http://www.libgd.org'; + } + $software['[' . $gd_URL . ' GD library]'] = $gdInfo['GD Version']; } - $software['[' . $gd_URL . ' GD library]'] = $gdInfo['GD Version']; } - } - // Look for SVG converter and print the version info - if ( $wgAllowTitlesInSVG ) { - $swSVGConvName = $wgSVGConverter; - $haveSVGConvVer = false; - $pathVar = '$path/'; - $binPath = '/usr/bin/'; - $execPath = strtok(strstr($wgSVGConverters[$wgSVGConverter],$pathVar), ' '); - $execPath = substr_replace($execPath, '', 0, strlen($pathVar)); - $execFullPath = trim($wgSVGConverterPath,'"') . $execPath; - $execBinPath = $binPath . $execPath; - if (strstr($execFullPath, ' ') != false) { - $execFullPath = '"' . $execFullPath . '"'; - } - if ( !strcmp( $wgSVGConverter, 'ImageMagick') ) { - // Get version info for ImageMagick - if ( file_exists( $execBinPath ) ) - $swSVGConvInfo = self::execOutput( $execBinPath . ' -version' ); - else if ( file_exists( trim( $execFullPath, '"' ) ) || ( file_exists( trim( $execFullPath, '"' ) . '.exe' ) ) ) - $swSVGConvInfo = self::execOutput( $execFullPath . ' -version' ); - list( $head, $tail ) = explode( 'ImageMagick', $swSVGConvInfo ); - list( $swSVGConvVer ) = explode('http://www.imagemagick.org', $tail ); - $swSVGConvURL = 'http://www.imagemagick.org/'; - $haveSVGConvVer = true; - } else if ( strstr ($execFullPath, 'rsvg') != false ) { - // Get version info for rsvg - if ( file_exists( $execBinPath ) ) - $swSVGConvInfo = self::execOutput( $execBinPath . ' -v' ); - else if ( file_exists( trim( $execFullPath, '"' ) ) || ( file_exists( trim( $execFullPath, '"' ) . '.exe' ) ) ) - $swSVGConvInfo = self::execOutput( $execFullPath . ' -v' ); - $swSVGConvLine = explode("\n",$swSVGConvInfo ,2); - $swSVGConvVer = $swSVGConvLine[0]; - $swSVGConvURL = 'http://librsvg.sourceforge.net/'; - $haveSVGConvVer = true; - } else if ( strstr ($execFullPath, 'inkscape') != false ) { - // Get version info for Inkscape - if ( file_exists( $execBinPath ) ) - $swSVGConvInfo = self::execOutput( $execBinPath . ' -z -V' ); - else if ( file_exists( trim( $execFullPath, '"' ) ) || ( file_exists( trim( $execFullPath, '"' ) . '.exe' ) ) ) - $swSVGConvInfo = self::execOutput( $execFullPath . ' -z -V' ); - $swSVGConvLine = explode("\n",$swSVGConvInfo ,2); - $swSVGConvVer = ltrim( $swSVGConvLine[0], 'Inkscape ' ); - $swSVGConvURL = 'http://www.inkscape.org/'; - $swSVGConvName = ucfirst( $wgSVGConverter ); - $haveSVGConvVer = true; + // Look for SVG converter and print the version info + if ( $wgAllowTitlesInSVG ) { + $swSVGConvName = $wgSVGConverter; + $haveSVGConvVer = false; + $pathVar = '$path/'; + $binPath = '/usr/bin/'; + $execPath = strtok(strstr($wgSVGConverters[$wgSVGConverter],$pathVar), ' '); + $execPath = substr_replace($execPath, '', 0, strlen($pathVar)); + $execFullPath = trim($wgSVGConverterPath,'"') . $execPath; + $execBinPath = $binPath . $execPath; + if (strstr($execFullPath, ' ') != false) { + $execFullPath = '"' . $execFullPath . '"'; + } + if ( !strcmp( $wgSVGConverter, 'ImageMagick') ) { + // Get version info for ImageMagick + if ( file_exists( $execBinPath ) ) + $swSVGConvInfo = self::execOutput( $execBinPath . ' -version' ); + else if ( file_exists( trim( $execFullPath, '"' ) ) || ( file_exists( trim( $execFullPath, '"' ) . '.exe' ) ) ) + $swSVGConvInfo = self::execOutput( $execFullPath . ' -version' ); + list( $head, $tail ) = explode( 'ImageMagick', $swSVGConvInfo ); + list( $swSVGConvVer ) = explode('http://www.imagemagick.org', $tail ); + $swSVGConvURL = 'http://www.imagemagick.org/'; + $haveSVGConvVer = true; + } else if ( strstr ($execFullPath, 'rsvg') != false ) { + // Get version info for rsvg + if ( file_exists( $execBinPath ) ) + $swSVGConvInfo = self::execOutput( $execBinPath . ' -v' ); + else if ( file_exists( trim( $execFullPath, '"' ) ) || ( file_exists( trim( $execFullPath, '"' ) . '.exe' ) ) ) + $swSVGConvInfo = self::execOutput( $execFullPath . ' -v' ); + $swSVGConvLine = explode("\n",$swSVGConvInfo ,2); + $swSVGConvVer = $swSVGConvLine[0]; + $swSVGConvURL = 'http://librsvg.sourceforge.net/'; + $haveSVGConvVer = true; + } else if ( strstr ($execFullPath, 'inkscape') != false ) { + // Get version info for Inkscape + if ( file_exists( $execBinPath ) ) + $swSVGConvInfo = self::execOutput( $execBinPath . ' -z -V' ); + else if ( file_exists( trim( $execFullPath, '"' ) ) || ( file_exists( trim( $execFullPath, '"' ) . '.exe' ) ) ) + $swSVGConvInfo = self::execOutput( $execFullPath . ' -z -V' ); + $swSVGConvLine = explode("\n",$swSVGConvInfo ,2); + $swSVGConvVer = ltrim( $swSVGConvLine[0], 'Inkscape ' ); + $swSVGConvURL = 'http://www.inkscape.org/'; + $swSVGConvName = ucfirst( $wgSVGConverter ); + $haveSVGConvVer = true; + } + if ( $haveSVGConvVer ) + $software["[$swSVGConvURL $swSVGConvName]"] = $swSVGConvVer; } - if ( $haveSVGConvVer ) - $software["[$swSVGConvURL $swSVGConvName]"] = $swSVGConvVer; - } - // Look for TeX support and print the software version info - if ( $wgUseTeX ) { - $binPath = '/usr/bin/'; - $swMathName = Array( - 'ocaml' => 'OCaml', - 'gs' => 'Ghostscript', - 'dvips' => 'Dvips', - 'latex' => 'LaTeX', - 'imagemagick' => 'ImageMagick', - ); - $swMathURL = Array( - 'ocaml' => 'http://caml.inria.fr/', - 'gs' => 'http://www.ghostscript.com/', - 'dvips' => 'http://www.radicaleye.com/dvips.html', - 'latex' => 'http://www.latex-project.org/', - 'imagemagick' => 'http://www.imagemagick.org/', - ); - $swMathExec = Array( - 'ocaml' => 'ocamlc', - 'gs' => 'gs', - 'dvips' => 'dvips', - 'latex' => 'latex', - 'imagemagick' => 'convert', - ); - $swMathParam = Array( - 'ocaml' => '-version', - 'gs' => '-v', - 'dvips' => '-v', - 'latex' => '-v', - 'imagemagick' => '-version', - ); - foreach ( $swMathExec as $swMath => $swMathCmd ) { - $wBinPath = ''; - if ( file_exists( $binPath . 'whereis' ) ) { - $swWhereIsInfo = self::execOutput( $binPath . 'whereis -b ' . $swMathCmd ); - $swWhereIsLine = explode( "\n", $swWhereIsInfo, 2); - $swWhereIsFirstLine = $swWhereIsLine[0]; - $swWhereIsBinPath = explode( ' ', $swWhereIsFirstLine, 3); - if ( count( $swWhereIsBinPath ) > 1 ) - $wBinPath = dirname( $swWhereIsBinPath[1] ); - } else { - $swPathLine = explode( ';', $_SERVER['PATH'] ); - $swPathFound = false; - foreach( $swPathLine as $swPathDir ) { - if ( file_exists( $swPathDir . '/' . $swMathCmd . '.exe' ) && ($swPathFound === false) ) { - $wBinPath = $swPathDir . '/'; - $swPathFound = true; + // Look for TeX support and print the software version info + if ( $wgUseTeX ) { + $binPath = '/usr/bin/'; + $swMathName = Array( + 'ocaml' => 'OCaml', + 'gs' => 'Ghostscript', + 'dvips' => 'Dvips', + 'latex' => 'LaTeX', + 'imagemagick' => 'ImageMagick', + ); + $swMathURL = Array( + 'ocaml' => 'http://caml.inria.fr/', + 'gs' => 'http://www.ghostscript.com/', + 'dvips' => 'http://www.radicaleye.com/dvips.html', + 'latex' => 'http://www.latex-project.org/', + 'imagemagick' => 'http://www.imagemagick.org/', + ); + $swMathExec = Array( + 'ocaml' => 'ocamlc', + 'gs' => 'gs', + 'dvips' => 'dvips', + 'latex' => 'latex', + 'imagemagick' => 'convert', + ); + $swMathParam = Array( + 'ocaml' => '-version', + 'gs' => '-v', + 'dvips' => '-v', + 'latex' => '-v', + 'imagemagick' => '-version', + ); + foreach ( $swMathExec as $swMath => $swMathCmd ) { + $wBinPath = ''; + if ( file_exists( $binPath . 'whereis' ) ) { + $swWhereIsInfo = self::execOutput( $binPath . 'whereis -b ' . $swMathCmd ); + $swWhereIsLine = explode( "\n", $swWhereIsInfo, 2); + $swWhereIsFirstLine = $swWhereIsLine[0]; + $swWhereIsBinPath = explode( ' ', $swWhereIsFirstLine, 3); + if ( count( $swWhereIsBinPath ) > 1 ) + $wBinPath = dirname( $swWhereIsBinPath[1] ); + } else { + $swPathLine = explode( ';', $_SERVER['PATH'] ); + $swPathFound = false; + foreach( $swPathLine as $swPathDir ) { + if ( file_exists( $swPathDir . '/' . $swMathCmd . '.exe' ) && ($swPathFound === false) ) { + $wBinPath = $swPathDir . '/'; + $swPathFound = true; + } } } + if ( file_exists( $binPath . $swMathCmd ) || file_exists( $wBinPath . $swMathCmd ) ) { + $swMathInfo = self::execOutput( $swMathCmd . ' ' . $swMathParam[$swMath] ); + $swMathLine = explode( "\n", $swMathInfo, 2); + $swMathVerInfo = $swMathLine[0]; + if ( !strcmp( $swMath, 'gs' ) ) + $swMathVerInfo = str_replace( 'GPL Ghostscript ', '', $swMathVerInfo ); + else if ( !strcmp( $swMath, 'dvips' ) ) { + $swMathVerParts = explode( ' ' , $swMathVerInfo ); + $swMathVerInfo = $swMathVerParts[3]; + } else if ( !strcmp( $swMath, 'imagemagick' ) ) { + list( $head, $tail ) = explode( 'ImageMagick', $swMathVerInfo ); + list( $swMathVerInfo ) = explode('http://www.imagemagick.org', $tail ); + } + $swMathVer[$swMath] = trim( $swMathVerInfo ); + $software["[$swMathURL[$swMath] $swMathName[$swMath]]"] = $swMathVer[$swMath]; + } } - if ( file_exists( $binPath . $swMathCmd ) || file_exists( $wBinPath . $swMathCmd ) ) { - $swMathInfo = self::execOutput( $swMathCmd . ' ' . $swMathParam[$swMath] ); - $swMathLine = explode( "\n", $swMathInfo, 2); - $swMathVerInfo = $swMathLine[0]; - if ( !strcmp( $swMath, 'gs' ) ) - $swMathVerInfo = str_replace( 'GPL Ghostscript ', '', $swMathVerInfo ); - else if ( !strcmp( $swMath, 'dvips' ) ) { - $swMathVerParts = explode( ' ' , $swMathVerInfo ); - $swMathVerInfo = $swMathVerParts[3]; - } else if ( !strcmp( $swMath, 'imagemagick' ) ) { - list( $head, $tail ) = explode( 'ImageMagick', $swMathVerInfo ); - list( $swMathVerInfo ) = explode('http://www.imagemagick.org', $tail ); - } - $swMathVer[$swMath] = trim( $swMathVerInfo ); - $software["[$swMathURL[$swMath] $swMathName[$swMath]]"] = $swMathVer[$swMath]; - } } } diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 09205760be..3519301375 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -1891,6 +1891,7 @@ You can also choose to let others contact you through your user or talk page wit 'right-siteadmin' => 'Lock and unlock the database', 'right-reset-passwords' => "Reset other users' passwords", 'right-override-export-depth' => 'Export pages including linked pages up to a depth of 5', +'right-versiondetail' => 'Show the extended software version information', # User rights log 'rightslog' => 'User rights log', diff --git a/languages/messages/MessagesLzh.php b/languages/messages/MessagesLzh.php index 58fb3635e2..fc10567440 100644 --- a/languages/messages/MessagesLzh.php +++ b/languages/messages/MessagesLzh.php @@ -1145,6 +1145,7 @@ $1", 'right-siteadmin' => '鎖與解鎖資料庫', 'right-reset-passwords' => '設他簿之符節', 'right-override-export-depth' => '出有五層深之頁', +'right-versiondetail' => '示延用之版', # User rights log 'rightslog' => '職權志', diff --git a/languages/messages/MessagesYue.php b/languages/messages/MessagesYue.php index 6fe3b597d2..42b660b327 100644 --- a/languages/messages/MessagesYue.php +++ b/languages/messages/MessagesYue.php @@ -1303,6 +1303,7 @@ $1", 'right-siteadmin' => '鎖同解鎖資料庫', 'right-reset-passwords' => '重設其他用戶嘅密碼', 'right-override-export-depth' => '倒出包含有五層深連版嘅頁面', +'right-versiondetail' => '顯示伸展軟件版本嘅資料', # User rights log 'rightslog' => '用戶權限日誌', diff --git a/languages/messages/MessagesZh_hans.php b/languages/messages/MessagesZh_hans.php index cdf224b55e..fb02edb164 100644 --- a/languages/messages/MessagesZh_hans.php +++ b/languages/messages/MessagesZh_hans.php @@ -1344,6 +1344,7 @@ $1", 'right-siteadmin' => '锁定和解除锁定数据库', 'right-reset-passwords' => '重设其他用户的密码', 'right-override-export-depth' => '导出含有五层深度链接页面之页面', +'right-versiondetail' => '显示延伸软件版本的资料', # User rights log 'rightslog' => '用户权限日志', diff --git a/languages/messages/MessagesZh_hant.php b/languages/messages/MessagesZh_hant.php index 93da87d232..07f2b99d7a 100644 --- a/languages/messages/MessagesZh_hant.php +++ b/languages/messages/MessagesZh_hant.php @@ -1321,6 +1321,7 @@ $1", 'right-siteadmin' => '鎖定和解除鎖定資料庫', 'right-reset-passwords' => '重設其他用戶的密碼', 'right-override-export-depth' => '匯出含有五層深度連結頁面之頁面', +'right-versiondetail' => '顯示延伸軟件版本的資料', # User rights log 'rightslog' => '用戶權限日誌', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 9d327e5dd6..9db72949f5 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -1083,6 +1083,7 @@ $wgMessageStructure = array( 'right-siteadmin', 'right-reset-passwords', 'right-override-export-depth', + 'right-versiondetail', ), 'rightslog' => array( 'rightslog', -- 2.20.1