From: Alex Monk Date: Sat, 6 Oct 2012 15:53:56 +0000 (+0100) Subject: (bug 40820) Revert my changes to includes/actions/CreditsAction.php X-Git-Tag: 1.31.0-rc.0~22116^2 X-Git-Url: http://git.cyclocoop.org/%7D%7Cconcat%7B?a=commitdiff_plain;h=8945408808c042807098561e1dfdff0d37236571;p=lhc%2Fweb%2Fwiklou.git (bug 40820) Revert my changes to includes/actions/CreditsAction.php Also don't show contributors on action=info Change-Id: I48b70b3d6b94e295aca23d506c7cce9185df4bcc --- diff --git a/includes/actions/CreditsAction.php b/includes/actions/CreditsAction.php index defd93e480..f715229724 100644 --- a/includes/actions/CreditsAction.php +++ b/includes/actions/CreditsAction.php @@ -29,12 +29,204 @@ class CreditsAction extends FormlessAction { return 'credits'; } + protected function getDescription() { + return $this->msg( 'creditspage' )->escaped(); + } + /** * This is largely cadged from PageHistory::history * * @return String HTML */ public function onView() { - $this->getOutput()->redirect( $this->getTitle()->getLocalURL( "action=info" ) ); + wfProfileIn( __METHOD__ ); + + if ( $this->page->getID() == 0 ) { + $s = $this->msg( 'nocredits' )->parse(); + } else { + $s = $this->getCredits( -1 ); + } + + wfProfileOut( __METHOD__ ); + + return Html::rawElement( 'div', array( 'id' => 'mw-credits' ), $s ); + } + + /** + * Get a list of contributors + * + * @param $cnt Int: maximum list of contributors to show + * @param $showIfMax Bool: whether to contributors if there more than $cnt + * @return String: html + */ + public function getCredits( $cnt, $showIfMax = true ) { + wfProfileIn( __METHOD__ ); + $s = ''; + + if ( $cnt != 0 ) { + $s = $this->getAuthor( $this->page ); + if ( $cnt > 1 || $cnt < 0 ) { + $s .= ' ' . $this->getContributors( $cnt - 1, $showIfMax ); + } + } + + wfProfileOut( __METHOD__ ); + return $s; + } + + /** + * Get the last author with the last modification time + * @param $article Article object + * @return String HTML + */ + protected function getAuthor( Page $article ) { + $user = User::newFromName( $article->getUserText(), false ); + + $timestamp = $article->getTimestamp(); + if ( $timestamp ) { + $lang = $this->getLanguage(); + $d = $lang->date( $article->getTimestamp(), true ); + $t = $lang->time( $article->getTimestamp(), true ); + } else { + $d = ''; + $t = ''; + } + return $this->msg( 'lastmodifiedatby', $d, $t )->rawParams( + $this->userLink( $user ) )->params( $user->getName() )->escaped(); + } + + /** + * Get a list of contributors of $article + * @param $cnt Int: maximum list of contributors to show + * @param $showIfMax Bool: whether to contributors if there more than $cnt + * @return String: html + */ + protected function getContributors( $cnt, $showIfMax ) { + global $wgHiddenPrefs; + + $contributors = $this->page->getContributors(); + + $others_link = false; + + # Hmm... too many to fit! + if ( $cnt > 0 && $contributors->count() > $cnt ) { + $others_link = $this->othersLink(); + if ( !$showIfMax ) + return $this->msg( 'othercontribs' )->rawParams( + $others_link )->params( $contributors->count() )->escaped(); + } + + $real_names = array(); + $user_names = array(); + $anon_ips = array(); + + # Sift for real versus user names + foreach ( $contributors as $user ) { + $cnt--; + if ( $user->isLoggedIn() ) { + $link = $this->link( $user ); + if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) { + $real_names[] = $link; + } else { + $user_names[] = $link; + } + } else { + $anon_ips[] = $this->link( $user ); + } + + if ( $cnt == 0 ) { + break; + } + } + + $lang = $this->getLanguage(); + + if ( count( $real_names ) ) { + $real = $lang->listToText( $real_names ); + } else { + $real = false; + } + + # "ThisSite user(s) A, B and C" + if ( count( $user_names ) ) { + $user = $this->msg( 'siteusers' )->rawParams( $lang->listToText( $user_names ) )->params( + count( $user_names ) )->escaped(); + } else { + $user = false; + } + + if ( count( $anon_ips ) ) { + $anon = $this->msg( 'anonusers' )->rawParams( $lang->listToText( $anon_ips ) )->params( + count( $anon_ips ) )->escaped(); + } 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 ( $s !== false ) { + array_push( $fulllist, $s ); + } + } + + $count = count( $fulllist ); + # "Based on work by ..." + return $count + ? $this->msg( 'othercontribs' )->rawParams( + $lang->listToText( $fulllist ) )->params( $count )->escaped() + : ''; + } + + /** + * Get a link to $user's user page + * @param $user User object + * @return String: html + */ + protected function link( User $user ) { + global $wgHiddenPrefs; + if ( !in_array( 'realname', $wgHiddenPrefs ) && !$user->isAnon() ) { + $real = $user->getRealName(); + } else { + $real = false; + } + + $page = $user->isAnon() + ? SpecialPage::getTitleFor( 'Contributions', $user->getName() ) + : $user->getUserPage(); + + return Linker::link( $page, htmlspecialchars( $real ? $real : $user->getName() ) ); + } + + /** + * Get a link to $user's user page + * @param $user User object + * @return String: html + */ + protected function userLink( User $user ) { + $link = $this->link( $user ); + if ( $user->isAnon() ) { + return $this->msg( 'anonuser' )->rawParams( $link )->parse(); + } else { + global $wgHiddenPrefs; + if ( !in_array( 'realname', $wgHiddenPrefs ) && $user->getRealName() ) { + return $link; + } else { + return $this->msg( 'siteuser' )->rawParams( $link )->params( $user->getName() )->escaped(); + } + } + } + + /** + * Get a link to action=credits of $article page + * @return String: HTML link + */ + protected function othersLink() { + return Linker::linkKnown( + $this->getTitle(), + $this->msg( 'others' )->escaped(), + array(), + array( 'action' => 'credits' ) + ); } } diff --git a/includes/actions/InfoAction.php b/includes/actions/InfoAction.php index 2f4a4bd085..e09cd20568 100644 --- a/includes/actions/InfoAction.php +++ b/includes/actions/InfoAction.php @@ -96,9 +96,9 @@ class InfoAction extends FormlessAction { } // Page credits - if ( $title->exists() ) { + /*if ( $title->exists() ) { $content .= Html::rawElement( 'div', array( 'id' => 'mw-credits' ), $this->getContributors() ); - } + }*/ return $content; }