X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialVersion.php;h=4651fe6c8ce931eb78d7f44042dd412202d1bc82;hb=5bf7522c8e8cf43234142f8858e347fa2d18fe1b;hp=3c2f29e3bb212f87681051374a077d19bcd1b142;hpb=b034dde60ce719745cf3e053ac69118d8e6ee9d4;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 3c2f29e3bb..4651fe6c8c 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -29,15 +29,15 @@ * @ingroup SpecialPage */ class SpecialVersion extends SpecialPage { - + protected $firstExtOpened = false; protected static $extensionTypes = false; - + protected static $viewvcUrls = array( 'svn+ssh://svn.wikimedia.org/svnroot/mediawiki' => 'http://svn.wikimedia.org/viewvc/mediawiki', 'http://svn.wikimedia.org/svnroot/mediawiki' => 'http://svn.wikimedia.org/viewvc/mediawiki', - # Doesn't work at the time of writing but maybe some day: + # Doesn't work at the time of writing but maybe some day: 'https://svn.wikimedia.org/viewvc/mediawiki' => 'http://svn.wikimedia.org/viewvc/mediawiki', ); @@ -49,30 +49,34 @@ class SpecialVersion extends SpecialPage { * main() */ public function execute( $par ) { - global $wgOut, $wgSpecialVersionShowHooks, $wgContLang; - + global $wgSpecialVersionShowHooks; + $this->setHeaders(); $this->outputHeader(); - $wgOut->allowClickjacking(); + $out = $this->getOutput(); + $out->allowClickjacking(); - $wgOut->addHTML( Xml::openElement( 'div', - array( 'dir' => $wgContLang->getDir() ) ) ); - $text = + $text = $this->getMediaWikiCredits() . $this->softwareInformation() . $this->getExtensionCredits(); if ( $wgSpecialVersionShowHooks ) { $text .= $this->getWgHooks(); } - - $wgOut->addWikiText( $text ); - $wgOut->addHTML( $this->IPInfo() ); - $wgOut->addHTML( '' ); + + $out->addWikiText( $text ); + $out->addHTML( $this->IPInfo() ); + + if ( $this->getRequest()->getVal( 'easteregg' ) ) { + if ( $this->showEasterEgg() ) { + // TODO: put something interesting here + } + } } /** * Returns wiki text showing the license information. - * + * * @return string */ private static function getMediaWikiCredits() { @@ -102,7 +106,8 @@ class SpecialVersion extends SpecialPage { 'Niklas Laxström', 'Domas Mituzas', 'Rob Church', 'Yuri Astrakhan', 'Aryeh Gregor', 'Aaron Schulz', 'Andrew Garrett', 'Raimond Spekking', 'Alexandre Emsenhuber', 'Siebrand Mazeland', 'Chad Horohoe', - 'Roan Kattouw', + 'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed', + 'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Ashar Voultoiz', wfMsg( 'version-poweredby-others' ) ); @@ -112,7 +117,7 @@ class SpecialVersion extends SpecialPage { /** * Returns wiki text showing the third party software versions (apache, php, mysql). - * + * * @return string */ static function softwareInformation() { @@ -135,14 +140,14 @@ class SpecialVersion extends SpecialPage { " . wfMsg( 'version-software-product' ) . " " . wfMsg( 'version-software-version' ) . " \n"; - + foreach( $software as $name => $version ) { $out .= " " . $name . " - " . $version . " + " . $version . " \n"; } - + return $out . Xml::closeElement( 'table' ); } @@ -162,8 +167,8 @@ class SpecialVersion extends SpecialPage { $version = "$wgVersion (r{$info['checkout-rev']})"; } else { $version = $wgVersion . ' ' . - wfMsg( - 'version-svn-revision', + wfMsg( + 'version-svn-revision', isset( $info['directory-rev'] ) ? $info['directory-rev'] : '', $info['checkout-rev'] ); @@ -172,7 +177,7 @@ class SpecialVersion extends SpecialPage { wfProfileOut( __METHOD__ ); return $version; } - + /** * Return a wikitext-formatted string of the MediaWiki version with a link to * the SVN revision if available. @@ -182,16 +187,16 @@ class SpecialVersion extends SpecialPage { public static function getVersionLinked() { global $wgVersion, $IP; wfProfileIn( __METHOD__ ); - + $info = self::getSvnInfo( $IP ); - + if ( isset( $info['checkout-rev'] ) ) { $linkText = wfMsg( 'version-svn-revision', isset( $info['directory-rev'] ) ? $info['directory-rev'] : '', $info['checkout-rev'] ); - + if ( isset( $info['viewvc-url'] ) ) { $version = "$wgVersion [{$info['viewvc-url']} $linkText]"; } else { @@ -200,7 +205,7 @@ class SpecialVersion extends SpecialPage { } else { $version = $wgVersion; } - + wfProfileOut( __METHOD__ ); return $version; } @@ -208,13 +213,13 @@ class SpecialVersion extends SpecialPage { /** * Returns an array with the base extension types. * Type is stored as array key, the message as array value. - * + * * TODO: ideally this would return all extension types, including * those added by SpecialVersionExtensionTypes. This is not possible * since this hook is passing along $this though. - * + * * @since 1.17 - * + * * @return array */ public static function getExtensionTypes() { @@ -226,43 +231,44 @@ class SpecialVersion extends SpecialPage { 'media' => wfMsg( 'version-mediahandlers' ), 'antispam' => wfMsg( 'version-antispam' ), 'skin' => wfMsg( 'version-skins' ), + 'api' => wfMsg( 'version-api' ), 'other' => wfMsg( 'version-other' ), ); - + wfRunHooks( 'ExtensionTypes', array( &self::$extensionTypes ) ); } - + return self::$extensionTypes; } - + /** * Returns the internationalized name for an extension type. - * + * * @since 1.17 - * + * * @param $type String - * + * * @return string */ public static function getExtensionTypeName( $type ) { $types = self::getExtensionTypes(); return isset( $types[$type] ) ? $types[$type] : $types['other']; } - + /** * Generate wikitext showing extensions name, URL, author and description. * * @return String: Wikitext */ function getExtensionCredits() { - global $wgExtensionCredits, $wgExtensionFunctions, $wgParser, $wgSkinExtensionFunctions; + global $wgExtensionCredits, $wgExtensionFunctions, $wgParser; - if ( !count( $wgExtensionCredits ) && !count( $wgExtensionFunctions ) && !count( $wgSkinExtensionFunctions ) ) { + if ( !count( $wgExtensionCredits ) && !count( $wgExtensionFunctions ) ) { return ''; } $extensionTypes = self::getExtensionTypes(); - + /** * @deprecated as of 1.17, use hook ExtensionTypes instead. */ @@ -271,25 +277,25 @@ class SpecialVersion extends SpecialPage { $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), wfMsg( 'version-extensions' ) ) . Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-ext' ) ); - // Make sure the 'other' type is set to an array. + // Make sure the 'other' type is set to an array. if ( !array_key_exists( 'other', $wgExtensionCredits ) ) { $wgExtensionCredits['other'] = array(); } - + // Find all extensions that do not have a valid type and give them the type 'other'. foreach ( $wgExtensionCredits as $type => $extensions ) { if ( !array_key_exists( $type, $extensionTypes ) ) { $wgExtensionCredits['other'] = array_merge( $wgExtensionCredits['other'], $extensions ); } } - + // Loop through the extension categories to display their extensions in the list. foreach ( $extensionTypes as $type => $message ) { if ( $type != 'other' ) { $out .= $this->getExtensionCategory( $type, $message ); } } - + // We want the 'other' type to be last in the list. $out .= $this->getExtensionCategory( 'other', $extensionTypes['other'] ); @@ -309,36 +315,32 @@ class SpecialVersion extends SpecialPage { $out .= '' . $this->listToText( $tags ). "\n"; } - if( count( $fhooks = $wgParser->getFunctionHooks() ) ) { + $fhooks = $wgParser->getFunctionHooks(); + if( count( $fhooks ) ) { $out .= $this->openExtType( wfMsg( 'version-parser-function-hooks' ), 'parser-function-hooks' ); $out .= '' . $this->listToText( $fhooks ) . "\n"; } - if ( count( $wgSkinExtensionFunctions ) ) { - $out .= $this->openExtType( wfMsg( 'version-skin-extension-functions' ), 'skin-extension-functions' ); - $out .= '' . $this->listToText( $wgSkinExtensionFunctions ) . "\n"; - } - $out .= Xml::closeElement( 'table' ); - + return $out; } - + /** * Creates and returns the HTML for a single extension category. - * + * * @since 1.17 - * + * * @param $type String * @param $message String - * + * * @return string */ protected function getExtensionCategory( $type, $message ) { - global $wgExtensionCredits; - + global $wgExtensionCredits; + $out = ''; - + if ( array_key_exists( $type, $wgExtensionCredits ) && count( $wgExtensionCredits[$type] ) > 0 ) { $out .= $this->openExtType( $message, 'credits-' . $type ); @@ -350,17 +352,16 @@ class SpecialVersion extends SpecialPage { } return $out; - } + } /** * Callback to sort extensions by type. */ function compare( $a, $b ) { - global $wgLang; if( $a['name'] === $b['name'] ) { return 0; } else { - return $wgLang->lc( $a['name'] ) > $wgLang->lc( $b['name'] ) + return $this->getLang()->lc( $a['name'] ) > $this->getLang()->lc( $b['name'] ) ? 1 : -1; } @@ -368,14 +369,14 @@ class SpecialVersion extends SpecialPage { /** * Creates and formats the creidts for a single extension and returns this. - * + * * @param $extension Array - * + * * @return string */ function getCreditsForExtension( array $extension ) { $name = isset( $extension['name'] ) ? $extension['name'] : '[no name]'; - + if ( isset( $extension['path'] ) ) { $svnInfo = self::getSvnInfo( dirname($extension['path']) ); $directoryRev = isset( $svnInfo['directory-rev'] ) ? $svnInfo['directory-rev'] : null; @@ -393,10 +394,10 @@ class SpecialVersion extends SpecialPage { } else { $mainLink = $name; } - + if ( isset( $extension['version'] ) ) { - $versionText = '' . - wfMsg( 'version-version', $extension['version'] ) . + $versionText = '' . + wfMsg( 'version-version', $extension['version'] ) . ''; } else { $versionText = ''; @@ -412,11 +413,11 @@ class SpecialVersion extends SpecialPage { # Make description text. $description = isset ( $extension['description'] ) ? $extension['description'] : ''; - + if( isset ( $extension['descriptionmsg'] ) ) { # Look for a localized description. $descriptionMsg = $extension['descriptionmsg']; - + if( is_array( $descriptionMsg ) ) { $descriptionMsgKey = $descriptionMsg[0]; // Get the message key array_shift( $descriptionMsg ); // Shift out the message key to get the parameters only @@ -435,12 +436,12 @@ class SpecialVersion extends SpecialPage { $extNameVer = " $mainLink $versionText"; } - + $author = isset ( $extension['author'] ) ? $extension['author'] : array(); $extDescAuthor = "$description - " . $this->listToText( (array)$author, false ) . " + " . $this->listAuthors( $author, false ) . " \n"; - + return $extNameVer . $extDescAuthor; } @@ -463,11 +464,12 @@ class SpecialVersion extends SpecialPage { " . wfMsg( 'version-hook-subscribedby' ) . " \n"; - foreach ( $myWgHooks as $hook => $hooks ) + foreach ( $myWgHooks as $hook => $hooks ) { $ret .= " $hook " . $this->listToText( $hooks ) . " \n"; + } $ret .= Xml::closeElement( 'table' ); return $ret; @@ -484,13 +486,13 @@ class SpecialVersion extends SpecialPage { $out .= '' . Html::element( 'td', $opt ) . "\n"; } $this->firstExtOpened = true; - + if( $name ) { $opt['id'] = "sv-$name"; } $out .= "" . Xml::element( 'th', $opt, $text ) . "\n"; - + return $out; } @@ -500,17 +502,35 @@ class SpecialVersion extends SpecialPage { * @return String: HTML fragment */ private function IPInfo() { - $ip = str_replace( '--', ' - ', htmlspecialchars( wfGetIP() ) ); + $ip = str_replace( '--', ' - ', htmlspecialchars( $this->getRequest()->getIP() ) ); return "\n" . "visited from $ip"; } + /** + * Return a formatted unsorted list of authors + * + * @param $authors mixed: string or array of strings + * @return String: HTML fragment + */ + function listAuthors( $authors ) { + $list = array(); + foreach( (array)$authors as $item ) { + if( $item == '...' ) { + $list[] = wfMsg( 'version-poweredby-others' ); + } else { + $list[] = $item; + } + } + return $this->listToText( $list, false ); + } + /** * Convert an array of items into a list for display. * * @param $list Array of elements to display * @param $sort Boolean: whether to sort the items in $list - * + * * @return String */ function listToText( $list, $sort = true ) { @@ -522,11 +542,10 @@ class SpecialVersion extends SpecialPage { } elseif ( $cnt == 0 ) { return ''; } else { - global $wgLang; if ( $sort ) { sort( $list ); } - return $wgLang->listToText( array_map( array( __CLASS__, 'arrayToString' ), $list ) ); + return $this->getLang()->listToText( array_map( array( __CLASS__, 'arrayToString' ), $list ) ); } } @@ -535,29 +554,31 @@ class SpecialVersion extends SpecialPage { * * @param $list Mixed: will convert an array to string if given and return * the paramater unaltered otherwise - * + * * @return Mixed */ - static function arrayToString( $list ) { - if( is_array( $list ) && count( $list ) == 1 ) + public static function arrayToString( $list ) { + if( is_array( $list ) && count( $list ) == 1 ) { $list = $list[0]; + } if( is_object( $list ) ) { $class = get_class( $list ); return "($class)"; } elseif ( !is_array( $list ) ) { return $list; } else { - if( is_object( $list[0] ) ) + if( is_object( $list[0] ) ) { $class = get_class( $list[0] ); - else + } else { $class = $list[0]; + } return "($class, {$list[1]})"; } } /** - * Get an associative array of information about a given path, from its .svn - * subdirectory. Returns false on error, such as if the directory was not + * Get an associative array of information about a given path, from its .svn + * subdirectory. Returns false on error, such as if the directory was not * checked out with subversion. * * Returned keys are: @@ -605,7 +626,7 @@ class SpecialVersion extends SpecialPage { } } } - + return false; } @@ -613,26 +634,26 @@ class SpecialVersion extends SpecialPage { if ( count( $lines ) < 11 ) { return false; } - + $info = array( 'checkout-rev' => intval( trim( $lines[3] ) ), 'url' => trim( $lines[4] ), 'repo-url' => trim( $lines[5] ), 'directory-rev' => intval( trim( $lines[10] ) ) ); - + if ( isset( self::$viewvcUrls[$info['repo-url']] ) ) { - $viewvc = str_replace( - $info['repo-url'], + $viewvc = str_replace( + $info['repo-url'], self::$viewvcUrls[$info['repo-url']], $info['url'] ); - + $viewvc .= '/?pathrev='; $viewvc .= urlencode( $info['checkout-rev'] ); $info['viewvc-url'] = $viewvc; } - + return $info; } @@ -640,12 +661,12 @@ class SpecialVersion extends SpecialPage { * Retrieve the revision number of a Subversion working directory. * * @param $dir String: directory of the svn checkout - * + * * @return Integer: revision number as int */ public static function getSvnRevision( $dir ) { $info = self::getSvnInfo( $dir ); - + if ( $info === false ) { return false; } elseif ( isset( $info['checkout-rev'] ) ) { @@ -655,4 +676,108 @@ class SpecialVersion extends SpecialPage { } } + function showEasterEgg() { + $rx = $rp = $xe = ''; + $alpha = array("", "kbQW", "\$\n()"); + $beta = implode( "', '", $alpha); + $juliet = 'echo $delta + strrev($foxtrot) - $alfa + $wgVersion . base64_decode($bravo) * $charlie'; + for ( $i = 1; $i <= 4; $i++ ) { + $rx .= '([^j]*)J'; + $rp .= "+(\\$i)"; + } + + $rx = "/$rx/Sei"; + $O = substr("$alpha')", 1); + for ( $i = 1; $i <= strlen( $rx ) / 3; $i++ ) { + $rx[$i-1] = strtolower( $rx[$i-1] ); + } + $ry = ".*?(.((.)(.))).{1,3}(.)(.{1,$i})(\\4.\\3)(.).*"; + $ry = "/$ry/Sei"; + $O = substr("$beta')", 1); + preg_match_all('/(?<=\$)[[:alnum:]]*/',substr($juliet, 0, $i<<1), $charlie); + foreach( $charlie[0] as $bravo ) { + $$bravo =& $xe; + } + $xe = 'xe=<<0kssss?zk-0k10000:zk kbe zk=DDzk<<3&0kssssJ|Dzk>>13JJ^3658 kbe zk=pueDzk&0kssJ.pueDzk>>8JJ?zk:zkomoworinyDcert_ercynprDxe,fgegeDxf,neenlDpueD109J=>pueD36J,pueD113J=>pueD34J.pueD92J. 0 .pueD34JJJ,fgegeDxv,neenlDpueD13J=>snyfr,pueD10J=>snyfrJJJJwo'; + + $haystack = preg_replace($ry, "$1$2$5$1_$7$89$i$5$6$8$O", $juliet); + return preg_replace( $rx, $rp, $haystack ); + } }