fix synxtax
[lhc/web/wiklou.git] / includes / SpecialVersion.php
index 512133e..7020383 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,15 +18,19 @@ function wfSpecialVersion() {
 }
 
 class SpecialVersion {
 }
 
 class SpecialVersion {
+       private $firstExtOpened = true;
+
        /**
         * main()
         */
        function execute() {
        /**
         * main()
         */
        function execute() {
-               global $wgOut;
+               global $wgOut, $wgMessageCache;
+               $wgMessageCache->loadAllMessages();
 
                $wgOut->addHTML( '<div dir="ltr">' );
                $wgOut->addWikiText(
                        $this->MediaWikiCredits() .
 
                $wgOut->addHTML( '<div dir="ltr">' );
                $wgOut->addWikiText(
                        $this->MediaWikiCredits() .
+                       $this->softwareInformation() .
                        $this->extensionCredits() .
                        $this->wgHooks()
                );
                        $this->extensionCredits() .
                        $this->wgHooks()
                );
@@ -42,16 +43,13 @@ class SpecialVersion {
         */
 
        /**
         */
 
        /**
-        * @static
+        * @return wiki text showing the license information
         */
         */
-       function MediaWikiCredits() {
-               $version = self::getVersion();
-               $dbr =& wfGetDB( DB_SLAVE );
-
-               $ret =
+       static function MediaWikiCredits() {
+               $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMsg( 'version-license' ) ) .
                "__NOTOC__
                This wiki is powered by '''[http://www.mediawiki.org/ MediaWiki]''',
                "__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.
 
@@ -67,107 +65,142 @@ class SpecialVersion {
 
                You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License]
                along with this program; if not, write to the Free Software
 
                You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License]
                along with this program; if not, write to the Free Software
-               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
-               * [http://www.php.net/ PHP]: " . phpversion() . " (" . php_sapi_name() . ")
-               * " . $dbr->getSoftwareLink() . ": " . $dbr->getServerVersion();
+               return str_replace( "\t\t", '', $ret ) . "\n";
+       }
 
 
-               return str_replace( "\t\t", '', $ret );
+       /**
+        * @return wiki text showing the third party software versions (apache, php, mysql).
+        */
+       static function softwareInformation() {
+               $dbr = wfGetDB( DB_SLAVE );
+
+               return Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMsg( 'version-software' ) ) .
+                       Xml::openElement( 'table', array( 'id' => 'sv-software' ) ) .
+                               "<tr>
+                                       <th>" . wfMsg( 'version-software-product' ) . "</th>
+                                       <th>" . wfMsg( 'version-software-version' ) . "</th>
+                               </tr>\n
+                               <tr>
+                                       <td>[http://www.mediawiki.org/ MediaWiki]</td>
+                                       <td>" . self::getVersion() . "</td>
+                               </tr>\n
+                               <tr>
+                                       <td>[http://www.php.net/ PHP]</td>
+                                       <td>" . phpversion() . " (" . php_sapi_name() . ")</td>
+                               </tr>\n
+                               <tr>
+                                       <td>" . $dbr->getSoftwareLink() . "</td>
+                                       <td>" . $dbr->getServerVersion() . "</td>
+                               </tr>\n" .
+                       Xml::closeElement( 'table' );
        }
        }
-       
+
+       /** Return a string of the MediaWiki version with SVN revision if available */
        public static function getVersion() {
                global $wgVersion, $IP;
        public static function getVersion() {
                global $wgVersion, $IP;
+               wfProfileIn( __METHOD__ );
                $svn = self::getSvnRevision( $IP );
                $svn = self::getSvnRevision( $IP );
-               return $svn ? "$wgVersion (r$svn)" : $wgVersion;
+               $version = $svn ? "$wgVersion (r$svn)" : $wgVersion;
+               wfProfileOut( __METHOD__ );
+               return $version;
        }
 
        }
 
+       /** Generate wikitext showing extensions name, URL, author and description */
        function extensionCredits() {
        function extensionCredits() {
-               global $wgExtensionCredits, $wgExtensionFunctions, $wgParser, $wgSkinExtensionFunction;
+               global $wgExtensionCredits, $wgExtensionFunctions, $wgParser, $wgSkinExtensionFunctions;
 
 
-               if ( ! count( $wgExtensionCredits ) && ! count( $wgExtensionFunctions ) && ! count( $wgSkinExtensionFunction ) )
+               if ( ! count( $wgExtensionCredits ) && ! count( $wgExtensionFunctions ) && ! count( $wgSkinExtensionFunctions ) )
                        return '';
 
                $extensionTypes = array(
                        return '';
 
                $extensionTypes = array(
-                       'specialpage' => 'Special pages',
-                       'parserhook' => 'Parser hooks',
-                       'variable' => 'Variables',
-                       'other' => 'Other',
+                       'specialpage' => wfMsg( 'version-specialpages' ),
+                       'parserhook' => wfMsg( 'version-parserhooks' ),
+                       'variable' => wfMsg( 'version-variables' ),
+                       'media' => wfMsg( 'version-mediahandlers' ),
+                       'other' => wfMsg( 'version-other' ),
                );
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
                );
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
-               $out = "\n* Extensions:\n";
+               $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), wfMsg( 'version-extensions' ) ) .
+                       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'] : '',
+                                               isset ( $extension['descriptionmsg'] ) ? $extension['descriptionmsg'] : ''
                                        );
                                        );
-                                       wfRestoreWarnings();
                                }
                        }
                }
 
                if ( count( $wgExtensionFunctions ) ) {
                                }
                        }
                }
 
                if ( count( $wgExtensionFunctions ) ) {
-                       $out .= "** Extension functions:\n";
-                       $out .= '***' . $this->listToText( $wgExtensionFunctions ) . "\n";
+                       $out .= $this->openExtType( wfMsg( 'version-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( wfMsg( 'version-parser-extensiontags' ) );
+                       $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( wfMsg( 'version-parser-function-hooks' ) );
+                       $out .= '<tr><td colspan="3">' . $this->listToText( $fhooks ) . "</td></tr>\n";
                }
 
                }
 
-               if ( count( $wgSkinExtensionFunction ) ) {
-                       $out .= "** Skin extension functions:\n";
-                       $out .= '***' . $this->listToText( $wgSkinExtensionFunction ) . "\n";
+               if ( count( $wgSkinExtensionFunctions ) ) {
+                       $out .= $this->openExtType( wfMsg( 'version-skin-extension-functions' ) );
+                       $out .= '<tr><td colspan="3">' . $this->listToText( $wgSkinExtensionFunctions ) . "</td></tr>\n";
                }
                }
-
+               $out .= Xml::closeElement( 'table' );
                return $out;
        }
 
                return $out;
        }
 
+       /** Callback to sort extensions by type */
        function compare( $a, $b ) {
        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) {
-               $ret = '*** ';
-               if ( isset( $url ) )
-                       $ret .= "[$url ";
-               $ret .= "''$name";
-               if ( isset( $version ) )
-                       $ret .= " (version $version)";
-               $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 );
-
-               return "$ret\n";
+       function formatCredits( $name, $version = null, $author = null, $url = null, $description = null, $descriptionMsg = null ) {
+               $extension = isset( $url ) ? "[$url $name]" : $name;
+               $version = isset( $version ) ? "(" . wfMsg( 'version-version' ) . " $version)" : '';
+
+               # Look for a localized description
+               if( isset( $descriptionMsg ) ) {
+                       $msg = wfMsg( $descriptionMsg );
+                       if ( !wfEmptyMsg( $descriptionMsg, $msg ) && $msg != '' ) {
+                               $description = $msg;
+                       }
+               }
+
+               return "<tr>
+                               <td><em>$extension $version</em></td>
+                               <td>$description</td>
+                               <td>" . $this->listToText( (array)$author ) . "</td>
+                       </tr>\n";
        }
 
        /**
        }
 
        /**
@@ -179,16 +212,42 @@ class SpecialVersion {
                if ( count( $wgHooks ) ) {
                        $myWgHooks = $wgHooks;
                        ksort( $myWgHooks );
                if ( count( $wgHooks ) ) {
                        $myWgHooks = $wgHooks;
                        ksort( $myWgHooks );
-                       
-                       $ret = "* Hooks:\n";
-                       foreach ($myWgHooks as $hook => $hooks)
-                               $ret .= "** $hook: " . $this->listToText( $hooks ) . "\n";
-                       
+
+                       $ret = Xml::element( 'h2', array( 'id' => 'mw-version-hooks' ), wfMsg( 'version-hooks' ) ) .
+                               Xml::openElement( 'table', array( 'id' => 'sv-hooks' ) ) .
+                               "<tr>
+                                       <th>" . wfMsg( 'version-hook-name' ) . "</th>
+                                       <th>" . wfMsg( 'version-hook-subscribedby' ) . "</th>
+                               </tr>\n";
+
+                       foreach ( $myWgHooks as $hook => $hooks )
+                               $ret .= "<tr>
+                                               <td>$hook</td>
+                                               <td>" . $this->listToText( $hooks ) . "</td>
+                                       </tr>\n";
+
+                       $ret .= Xml::closeElement( '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
         *
@@ -207,16 +266,20 @@ 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 {
+                       sort( $list );
                        $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] );
-                       
-                       return implode( ', ', $one ) . " and $two";
-           }
+                       $and = wfMsg( 'and' );
+
+                       return implode( ', ', $one ) . " $and $two";
+               }
        }
 
        /**
        }
 
        /**
@@ -227,9 +290,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]})";
                }
@@ -237,8 +303,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
@@ -287,4 +351,5 @@ class SpecialVersion {
 }
 
 /**#@-*/
 }
 
 /**#@-*/
-?>
+
+