Fix fatal error in eval.php
[lhc/web/wiklou.git] / includes / SpecialVersion.php
index e477181..501ba9a 100644 (file)
@@ -2,10 +2,7 @@
 /**#@+
  * Give information about the version of MediaWiki, PHP, the DB and extensions
  *
 /**#@+
  * Give information about the version of MediaWiki, PHP, the DB and extensions
  *
- * @package MediaWiki
- * @subpackage SpecialPage
- *
- * @bug 2019, 4531
+ * @addtogroup SpecialPage
  *
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
  *
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
@@ -21,6 +18,8 @@ function wfSpecialVersion() {
 }
 
 class SpecialVersion {
 }
 
 class SpecialVersion {
+       private $firstExtOpened = true;
+
        /**
         * main()
         */
        /**
         * main()
         */
@@ -48,15 +47,12 @@ class SpecialVersion {
         */
        function MediaWikiCredits() {
                $version = self::getVersion();
         */
        function MediaWikiCredits() {
                $version = self::getVersion();
-               $dbr =& wfGetDB( DB_SLAVE );
-
-               global $wgLanguageNames, $wgLanguageCode;
-               $mwlang = $wgLanguageNames[$wgLanguageCode];
+               $dbr = wfGetDB( DB_SLAVE );
 
                $ret =
                "__NOTOC__
                This wiki is powered by '''[http://www.mediawiki.org/ MediaWiki]''',
 
                $ret =
                "__NOTOC__
                This wiki is powered by '''[http://www.mediawiki.org/ MediaWiki]''',
-               copyright (C) 2001-2007 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
+               copyright (C) 2001-2008 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
                Tim Starling, Erik Möller, Gabriel Wicke, Ævar Arnfjörð Bjarmason,
                Niklas Laxström, Domas Mituzas, Rob Church and others.
 
                Tim Starling, Erik Möller, Gabriel Wicke, Ævar Arnfjörð Bjarmason,
                Niklas Laxström, Domas Mituzas, Rob Church and others.
 
@@ -75,11 +71,11 @@ class SpecialVersion {
                Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
                or [http://www.gnu.org/copyleft/gpl.html read it online]
 
                Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
                or [http://www.gnu.org/copyleft/gpl.html read it online]
 
-               * [http://www.mediawiki.org/ MediaWiki]: $version ($wgLanguageCode $mwlang)
+               * [http://www.mediawiki.org/ MediaWiki]: $version
                * [http://www.php.net/ PHP]: " . phpversion() . " (" . php_sapi_name() . ")
                * " . $dbr->getSoftwareLink() . ": " . $dbr->getServerVersion();
 
                * [http://www.php.net/ PHP]: " . phpversion() . " (" . php_sapi_name() . ")
                * " . $dbr->getSoftwareLink() . ": " . $dbr->getServerVersion();
 
-               return str_replace( "\t\t", '', $ret );
+               return str_replace( "\t\t", '', $ret ) . "\n";
        }
 
        /** Return a string of the MediaWiki version with SVN revision if available */
        }
 
        /** Return a string of the MediaWiki version with SVN revision if available */
@@ -100,66 +96,71 @@ class SpecialVersion {
                        'specialpage' => 'Special pages',
                        'parserhook' => 'Parser hooks',
                        'variable' => 'Variables',
                        'specialpage' => 'Special pages',
                        'parserhook' => 'Parser hooks',
                        'variable' => 'Variables',
+                       'media' => 'Media handlers',
                        'other' => 'Other',
                );
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
                        'other' => 'Other',
                );
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
-               $out = "\n* Extensions:\n";
+               $out = "<h2>Extensions</h2>\n";
+               $out .= Xml::openElement('table', array('id' => 'sv-ext') );
+
                foreach ( $extensionTypes as $type => $text ) {
                foreach ( $extensionTypes as $type => $text ) {
-                       if ( count( @$wgExtensionCredits[$type] ) ) {
-                               $out .= "** $text:\n";
+                       if ( isset ( $wgExtensionCredits[$type] ) && count ( $wgExtensionCredits[$type] ) ) {
+                               $out .= $this->openExtType( $text );
 
                                usort( $wgExtensionCredits[$type], array( $this, 'compare' ) );
 
                                foreach ( $wgExtensionCredits[$type] as $extension ) {
 
                                usort( $wgExtensionCredits[$type], array( $this, 'compare' ) );
 
                                foreach ( $wgExtensionCredits[$type] as $extension ) {
-                                       wfSuppressWarnings();
                                        $out .= $this->formatCredits(
                                        $out .= $this->formatCredits(
-                                               $extension['name'],
-                                               $extension['version'],
-                                               $extension['author'],
-                                               $extension['url'],
-                                               $extension['description']
+                                               isset ( $extension['name'] )        ? $extension['name']        : '',
+                                               isset ( $extension['version'] )     ? $extension['version']     : null,
+                                               isset ( $extension['author'] )      ? $extension['author']      : '',
+                                               isset ( $extension['url'] )         ? $extension['url']         : null,
+                                               isset ( $extension['description'] ) ? $extension['description'] : ''
                                        );
                                        );
-                                       wfRestoreWarnings();
                                }
                        }
                }
 
                if ( count( $wgExtensionFunctions ) ) {
                                }
                        }
                }
 
                if ( count( $wgExtensionFunctions ) ) {
-                       $out .= "** Extension functions:\n";
-                       $out .= '***' . $this->listToText( $wgExtensionFunctions ) . "\n";
+                       $out .= $this->openExtType('Extension functions');
+                       $out .= '<tr><td colspan="3">' . $this->listToText( $wgExtensionFunctions ) . "</td></tr>\n";
                }
 
                if ( $cnt = count( $tags = $wgParser->getTags() ) ) {
                        for ( $i = 0; $i < $cnt; ++$i )
                                $tags[$i] = "&lt;{$tags[$i]}&gt;";
                }
 
                if ( $cnt = count( $tags = $wgParser->getTags() ) ) {
                        for ( $i = 0; $i < $cnt; ++$i )
                                $tags[$i] = "&lt;{$tags[$i]}&gt;";
-                       $out .= "** Parser extension tags:\n";
-                       $out .= '***' . $this->listToText( $tags ). "\n";
+                       $out .= $this->openExtType('Parser extension tags');
+                       $out .= '<tr><td colspan="3">' . $this->listToText( $tags ). "</td></tr>\n";
                }
 
                if( $cnt = count( $fhooks = $wgParser->getFunctionHooks() ) ) {
                }
 
                if( $cnt = count( $fhooks = $wgParser->getFunctionHooks() ) ) {
-                       $out .= "** Parser function hooks:\n";
-                       $out .= '***' . $this->listToText( $fhooks ) . "\n";
+                       $out .= $this->openExtType('Parser function hooks');
+                       $out .= '<tr><td colspan="3">' . $this->listToText( $fhooks ) . "</td></tr>\n";
                }
 
                if ( count( $wgSkinExtensionFunction ) ) {
                }
 
                if ( count( $wgSkinExtensionFunction ) ) {
-                       $out .= "** Skin extension functions:\n";
-                       $out .= '***' . $this->listToText( $wgSkinExtensionFunction ) . "\n";
+                       $out .= $this->openExtType('Skin extension functions');
+                       $out .= '<tr><td colspan="3">' . $this->listToText( $wgSkinExtensionFunction ) . "</td></tr>\n";
                }
                }
-
+               $out .= Xml::closeElement( 'table' );
                return $out;
        }
 
        /** Callback to sort extensions by type */
        function compare( $a, $b ) {
                return $out;
        }
 
        /** Callback to sort extensions by type */
        function compare( $a, $b ) {
-               if ( $a['name'] === $b['name'] )
+               global $wgLang;
+               if( $a['name'] === $b['name'] ) {
                        return 0;
                        return 0;
-               else
-                       return Language::lc( $a['name'] ) > Language::lc( $b['name'] ) ? 1 : -1;
+               } else {
+                       return $wgLang->lc( $a['name'] ) > $wgLang->lc( $b['name'] )
+                               ? 1
+                               : -1;
+               }
        }
 
        function formatCredits( $name, $version = null, $author = null, $url = null, $description = null) {
        }
 
        function formatCredits( $name, $version = null, $author = null, $url = null, $description = null) {
-               $ret = '*** ';
+               $ret = '<tr><td>';
                if ( isset( $url ) )
                        $ret .= "[$url ";
                $ret .= "''$name";
                if ( isset( $url ) )
                        $ret .= "[$url ";
                $ret .= "''$name";
@@ -168,13 +169,10 @@ class SpecialVersion {
                $ret .= "''";
                if ( isset( $url ) )
                        $ret .= ']';
                $ret .= "''";
                if ( isset( $url ) )
                        $ret .= ']';
-               if ( isset( $description ) )
-                       $ret .= ', ' . $description;
-               if ( isset( $description ) && isset( $author ) )
-                       $ret .= ', ';
-               if ( isset( $author ) )
-                       $ret .= ' by ' . $this->listToText( (array)$author );
-
+               $ret .= '</td>';
+               $ret .= "<td>$description</td>";
+               $ret .= "<td>" . $this->listToText( (array)$author ) . "</td>";
+               $ret .= '</tr>';
                return "$ret\n";
        }
 
                return "$ret\n";
        }
 
@@ -188,15 +186,35 @@ class SpecialVersion {
                        $myWgHooks = $wgHooks;
                        ksort( $myWgHooks );
 
                        $myWgHooks = $wgHooks;
                        ksort( $myWgHooks );
 
-                       $ret = "* Hooks:\n";
+                       $ret = "<h2>Hooks</h2>\n"
+                               . Xml::openElement('table', array('id' => 'sv-hooks') )
+                               . "<tr><th>Hook name</th><th>Subscribed by</th></tr>\n";
+
                        foreach ($myWgHooks as $hook => $hooks)
                        foreach ($myWgHooks as $hook => $hooks)
-                               $ret .= "** $hook: " . $this->listToText( $hooks ) . "\n";
+                               $ret .= "<tr><td>$hook</td><td>" . $this->listToText( $hooks ) . "</td></tr>\n";
 
 
+                       $ret .= '</table>';
                        return $ret;
                } else
                        return '';
        }
 
                        return $ret;
                } else
                        return '';
        }
 
+       private function openExtType($text, $name = null) {
+               $opt = array( 'colspan' => 3 );
+               $out = '';
+
+               if(!$this->firstExtOpened) {
+                       // Insert a spacing line
+                       $out .= '<tr class="sv-space">' . Xml::element( 'td', $opt ) . "</tr>\n";
+               }
+               $this->firstExtOpened = false;
+
+               if($name) { $opt['id'] = "sv-$name"; }
+
+               $out .= "<tr>" . Xml::element( 'th', $opt, $text) . "</tr>\n";
+               return $out;
+       }
+
        /**
         * @static
         *
        /**
         * @static
         *
@@ -215,10 +233,12 @@ class SpecialVersion {
        function listToText( $list ) {
                $cnt = count( $list );
 
        function listToText( $list ) {
                $cnt = count( $list );
 
-           if ( $cnt == 1 )
+           if ( $cnt == 1 ) {
                        // Enforce always returning a string
                        return (string)$this->arrayToString( $list[0] );
                        // Enforce always returning a string
                        return (string)$this->arrayToString( $list[0] );
-           else {
+           } elseif ( $cnt == 0 ) {
+                       return '';
+               } else {
                        $t = array_slice( $list, 0, $cnt - 1 );
                        $one = array_map( array( &$this, 'arrayToString' ), $t );
                        $two = $this->arrayToString( $list[$cnt - 1] );
                        $t = array_slice( $list, 0, $cnt - 1 );
                        $one = array_map( array( &$this, 'arrayToString' ), $t );
                        $two = $this->arrayToString( $list[$cnt - 1] );
@@ -235,9 +255,12 @@ class SpecialVersion {
         * @return mixed
         */
        function arrayToString( $list ) {
         * @return mixed
         */
        function arrayToString( $list ) {
-               if ( ! is_array( $list ) )
+               if( is_object( $list ) ) {
+                       $class = get_class( $list );
+                       return "($class)";
+               } elseif ( ! is_array( $list ) ) {
                        return $list;
                        return $list;
-               else {
+               else {
                        $class = get_class( $list[0] );
                        return "($class, {$list[1]})";
                }
                        $class = get_class( $list[0] );
                        return "($class, {$list[1]})";
                }
@@ -246,8 +269,6 @@ class SpecialVersion {
        /**
         * Retrieve the revision number of a Subversion working directory.
         *
        /**
         * Retrieve the revision number of a Subversion working directory.
         *
-        * @bug 7335
-        *
         * @param string $dir
         * @return mixed revision number as int, or false if not a SVN checkout
         */
         * @param string $dir
         * @return mixed revision number as int, or false if not a SVN checkout
         */
@@ -295,4 +316,4 @@ class SpecialVersion {
 }
 
 /**#@-*/
 }
 
 /**#@-*/
-?>
+