From: Jan Luca Naumann Date: Mon, 18 May 2009 14:20:46 +0000 (+0000) Subject: (bug 18834) Commit Patch from User Joshua C. Lerner for include... X-Git-Tag: 1.31.0-rc.0~41760 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22auteur_infos%22%2C%20%22id_auteur=%24id%22%29%20.%20%22?a=commitdiff_plain;h=4a04bbca9a0b6141371fa0cd6fd9eff32264ff3c;p=lhc%2Fweb%2Fwiklou.git (bug 18834) Commit Patch from User Joshua C. Lerner for include/Linker.php --- diff --git a/includes/Linker.php b/includes/Linker.php index f3fdb549b3..e93598e1b5 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1621,7 +1621,56 @@ class Linker { } $query['token'] = $wgUser->editToken( array( $title->getPrefixedText(), $rev->getUserText() ) ); - return $this->link( $title, wfMsgHtml( 'rollbacklink' ), + + $dbr = wfGetDB( DB_MASTER ); + + // Latest edits by this user, up to 10; if too expensive, use only on smaller wikis + $res = $dbr->select( 'revision', + array( 'rev_id' ), + array( 'rev_page' => $rev->getPage(), + 'rev_user_text' => $rev->getUserText() + ), __METHOD__, + array( 'USE INDEX' => 'page_timestamp', + 'ORDER BY' => 'rev_timestamp DESC', + 'LIMIT' => 10 ) + ); + + // Swiped from Article::commitRollback() + $user = intval( $rev->getUser() ); + $user_text = $dbr->addQuotes( $rev->getUserText() ); + + // Get the last edit not by this guy + $s = $dbr->selectRow( 'revision', + array( 'rev_id', 'rev_timestamp', 'rev_deleted' ), + array( 'rev_page' => $rev->getPage(), + "rev_user != {$user} OR rev_user_text != {$user_text}" + ), __METHOD__, + array( 'USE INDEX' => 'page_timestamp', + 'ORDER BY' => 'rev_timestamp DESC' ) + ); + + if( $s === false ) { + // No one else ever edited this page + return false; + } + elseif( $s->rev_deleted & REVISION::DELETED_TEXT || $s->rev_deleted & REVISION::DELETED_USER ) { + // Only admins can see this text + return false; + } + + $editCount = 0; + while( $row = $dbr->fetchObject( $res ) ) { + $editCount++; + if( $s->rev_id > $row->rev_id ) { + break; + } + } + + // We only bother to count up to 10 + if( $editCount == 10 ) + $editCount = '10+'; + + return $this->link( $title, wfMsgHtml( 'rollbacklink', $editCount ), array( 'title' => wfMsg( 'tooltip-rollback' ) ), $query, array( 'known', 'noclasses' ) ); }