From ca32f08966f1b51fcb19460f0996bb0c4048e6fe Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 3 Dec 2011 13:29:22 +0100 Subject: Update to MediaWiki 1.18.0 * also update ArchLinux skin to chagnes in MonoBook * Use only css to hide our menu bar when printing --- includes/specials/SpecialVersion.php | 303 ++++++++++++++++++++++++----------- 1 file changed, 213 insertions(+), 90 deletions(-) (limited to 'includes/specials/SpecialVersion.php') diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 101823db..0331f056 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,33 @@ class SpecialVersion extends SpecialPage { * main() */ public function execute( $par ) { - global $wgOut, $wgSpecialVersionShowHooks, $wgContLang; - + global $wgOut, $wgSpecialVersionShowHooks, $wgRequest; + $this->setHeaders(); $this->outputHeader(); $wgOut->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( '' ); + + if ( $wgRequest->getVal( 'easteregg' ) ) { + if ( $this->showEasterEgg() ) { + // TODO: put something interesting here + } + } } /** * Returns wiki text showing the license information. - * + * * @return string */ private static function getMediaWikiCredits() { @@ -113,7 +116,7 @@ class SpecialVersion extends SpecialPage { /** * Returns wiki text showing the third party software versions (apache, php, mysql). - * + * * @return string */ static function softwareInformation() { @@ -136,14 +139,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' ); } @@ -163,8 +166,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'] ); @@ -173,7 +176,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. @@ -183,16 +186,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 { @@ -201,7 +204,7 @@ class SpecialVersion extends SpecialPage { } else { $version = $wgVersion; } - + wfProfileOut( __METHOD__ ); return $version; } @@ -209,13 +212,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() { @@ -225,44 +228,46 @@ class SpecialVersion extends SpecialPage { 'parserhook' => wfMsg( 'version-parserhooks' ), 'variable' => wfMsg( 'version-variables' ), '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 +276,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 +314,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,7 +351,7 @@ class SpecialVersion extends SpecialPage { } return $out; - } + } /** * Callback to sort extensions by type. @@ -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,22 +413,19 @@ 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 array_map( "htmlspecialchars", $descriptionMsg ); // For sanity - $msg = wfMsg( $descriptionMsgKey, $descriptionMsg ); + $description = wfMsg( $descriptionMsgKey, $descriptionMsg ); } else { - $msg = wfMsg( $descriptionMsg ); + $description = wfMsg( $descriptionMsg ); } - if ( !wfEmptyMsg( $descriptionMsg, $msg ) && $msg != '' ) { - $description = $msg; - } } if ( $svnText !== false ) { @@ -438,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; } @@ -466,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; @@ -487,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; } @@ -508,12 +507,30 @@ class SpecialVersion extends SpecialPage { "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 ) { @@ -538,29 +555,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: @@ -608,7 +627,7 @@ class SpecialVersion extends SpecialPage { } } } - + return false; } @@ -616,26 +635,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; } @@ -643,12 +662,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'] ) ) { @@ -658,4 +677,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 ); + } } -- cgit v1.2.3-54-g00ecf