Don't look for pipes in the root node.
[lhc/web/wiklou.git] / includes / Credits.php
index ad7e029..e4c8be5 100644 (file)
@@ -1,50 +1,51 @@
 <?php
 /**
- * Credits.php -- formats credits for articles
+ * Formats credits for articles
+ *
  * Copyright 2004, Evan Prodromou <evan@wikitravel.org>.
  *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received 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
+ * You should have received 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
  *
+ * @file
  * @author <evan@wikitravel.org>
  */
 
 class Credits {
-
        /**
         * This is largely cadged from PageHistory::history
         * @param $article Article object
         */
        public static function showPage( Article $article ) {
                global $wgOut;
-       
+
                wfProfileIn( __METHOD__ );
-       
+
                $wgOut->setPageTitle( $article->mTitle->getPrefixedText() );
                $wgOut->setSubtitle( wfMsg( 'creditspage' ) );
                $wgOut->setArticleFlag( false );
                $wgOut->setArticleRelated( true );
                $wgOut->setRobotPolicy( 'noindex,nofollow' );
-       
-               if( $article->mTitle->getArticleID() == 0 ) {
+
+               if ( $article->mTitle->getArticleID() == 0 ) {
                        $s = wfMsg( 'nocredits' );
                } else {
-                       $s = self::getCredits($article, -1 );
+                       $s = self::getCredits( $article, -1 );
                }
-       
+
                $wgOut->addHTML( $s );
-       
+
                wfProfileOut( __METHOD__ );
        }
 
@@ -55,13 +56,13 @@ class Credits {
         * @param $showIfMax Bool: whether to contributors if there more than $cnt
         * @return String: html
         */
-       public static function getCredits($article, $cnt, $showIfMax=true) {
+       public static function getCredits( Article $article, $cnt, $showIfMax = true ) {
                wfProfileIn( __METHOD__ );
                $s = '';
 
-               if( isset( $cnt ) && $cnt != 0 ){
+               if ( isset( $cnt ) && $cnt != 0 ) {
                        $s = self::getAuthor( $article );
-                       if ($cnt > 1 || $cnt < 0) {
+                       if ( $cnt > 1 || $cnt < 0 ) {
                                $s .= ' ' . self::getContributors( $article, $cnt - 1, $showIfMax );
                        }
                }
@@ -74,13 +75,13 @@ class Credits {
         * Get the last author with the last modification time
         * @param $article Article object
         */
-       protected static function getAuthor( Article $article ){
+       protected static function getAuthor( Article $article ) {
                global $wgLang;
 
                $user = User::newFromId( $article->getUser() );
 
                $timestamp = $article->getTimestamp();
-               if( $timestamp ){
+               if ( $timestamp ) {
                        $d = $wgLang->date( $article->getTimestamp(), true );
                        $t = $wgLang->time( $article->getTimestamp(), true );
                } else {
@@ -99,52 +100,72 @@ class Credits {
         */
        protected static function getContributors( Article $article, $cnt, $showIfMax ) {
                global $wgLang, $wgHiddenPrefs;
-       
+
                $contributors = $article->getContributors();
-       
-               $others_link = '';
-       
+
+               $others_link = false;
+
                # Hmm... too many to fit!
-               if( $cnt > 0 && $contributors->count() > $cnt ){
+               if ( $cnt > 0 && $contributors->count() > $cnt ) {
                        $others_link = self::othersLink( $article );
-                       if( !$showIfMax )
-                               return wfMsg( 'othercontribs', $others_link );
+                       if ( !$showIfMax )
+                               return wfMsgExt( 'othercontribs', 'parsemag', $others_link, $contributors->count() );
                }
-       
+
                $real_names = array();
                $user_names = array();
-               $anon = 0;
-       
+               $anon_ips = array();
+
                # Sift for real versus user names
-               foreach( $contributors as $user ) {
+               foreach ( $contributors as $user ) {
                        $cnt--;
-                       if( $user->isLoggedIn() ){
+                       if ( $user->isLoggedIn() ) {
                                $link = self::link( $user );
-                               if( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() )
+                               if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) {
                                        $real_names[] = $link;
-                               else
+                               } else {
                                        $user_names[] = $link;
+                               }
                        } else {
-                               $anon++;
+                               $anon_ips[] = self::link( $user );
+                       }
+
+                       if ( $cnt == 0 ) {
+                               break;
                        }
-                       if( $cnt == 0 ) break;
                }
-       
-               # Two strings: real names, and user names
-               $real = $wgLang->listToText( $real_names );
-               $user = $wgLang->listToText( $user_names );
-               if( $anon )
-                       $anon = wfMsgExt( 'anonymous', array( 'parseinline' ), $anon );
-       
+
+               if ( count( $real_names ) ) {
+                       $real = $wgLang->listToText( $real_names );
+               } else {
+                       $real = false;
+               }
+
                # "ThisSite user(s) A, B and C"
-               if( !empty( $user ) ){
-                       $user = wfMsgExt( 'siteusers', array( 'parsemag' ), $user, count( $user_names ) );
+               if ( count( $user_names ) ) {
+                       $user = wfMsgExt(
+                               'siteusers',
+                               'parsemag',
+                               $wgLang->listToText( $user_names ), count( $user_names )
+                       );
+               } else {
+                       $user = false;
+               }
+
+               if ( count( $anon_ips ) ) {
+                       $anon = wfMsgExt(
+                               'anonusers',
+                               'parsemag',
+                               $wgLang->listToText( $anon_ips ), count( $anon_ips )
+                       );
+               } else {
+                       $anon = false;
                }
-       
+
                # This is the big list, all mooshed together. We sift for blank strings
                $fulllist = array();
-               foreach( array( $real, $user, $anon, $others_link ) as $s ){
-                       if( !empty( $s ) ){
+               foreach ( array( $real, $user, $anon, $others_link ) as $s ) {
+                       if ( $s ) {
                                array_push( $fulllist, $s );
                        }
                }
@@ -153,43 +174,48 @@ class Credits {
                $creds = $wgLang->listToText( $fulllist );
 
                # "Based on work by ..."
-               return empty( $creds ) ? '' : wfMsg( 'othercontribs', $creds );
+               return strlen( $creds )
+                       ? wfMsgExt( 'othercontribs', 'parsemag', $creds, count( $fulllist ) )
+                       : '';
        }
 
        /**
-        * Get a link to $user_name page
+        * Get a link to $user's user page
         * @param $user User object
         * @return String: html
         */
        protected static function link( User $user ) {
                global $wgUser, $wgHiddenPrefs;
-               if( !in_array( 'realname', $wgHiddenPrefs ) )
+               if ( !in_array( 'realname', $wgHiddenPrefs ) && !$user->isAnon() ) {
                        $real = $user->getRealName();
-               else
+               } else {
                        $real = false;
+               }
 
                $skin = $wgUser->getSkin();
-               $page = $user->getUserPage();
+               $page = $user->isAnon() ?
+                       SpecialPage::getTitleFor( 'Contributions', $user->getName() ) :
+                       $user->getUserPage();
 
                return $skin->link( $page, htmlspecialchars( $real ? $real : $user->getName() ) );
        }
 
        /**
-        * Get a link to $user_name page
-        * @param $user_name String: user name
-        * @param $linkText String: optional display
+        * Get a link to $user's user page
+        * @param $user User object
         * @return String: html
         */
        protected static function userLink( User $user ) {
-               if( $user->isAnon() ){
-                       return wfMsgExt( 'anonymous', array( 'parseinline' ), 1 );
+               $link = self::link( $user );
+               if ( $user->isAnon() ) {
+                       return wfMsgExt( 'anonuser', array( 'parseinline', 'replaceafter' ), $link );
                } else {
                        global $wgHiddenPrefs;
-                       $link = self::link( $user );
-                       if( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() )
+                       if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) {
                                return $link;
-                       else 
-                               return wfMsgExt( 'siteuser', array( 'parseinline', 'replaceafter' ), $link );
+                       } else {
+                               return wfMsgExt( 'siteuser', 'parsemag', $link, $user->getName() );
+                       }
                }
        }
 
@@ -201,6 +227,12 @@ class Credits {
        protected static function othersLink( Article $article ) {
                global $wgUser;
                $skin = $wgUser->getSkin();
-               return $skin->link( $article->getTitle(), wfMsgHtml( 'others' ), array(), array( 'action' => 'credits' ), array( 'known' ) );
+               return $skin->link(
+                       $article->getTitle(),
+                       wfMsgHtml( 'others' ),
+                       array(),
+                       array( 'action' => 'credits' ),
+                       array( 'known' )
+               );
        }
 }