*/ class ContributionScores extends IncludableSpecialPage { public function __construct() { parent::__construct( 'ContributionScores' ); } ///Generates a "Contribution Scores" table for a given LIMIT and date range /** * Function generates Contribution Scores tables in HTML format (not wikiText) * * @param $days int Days in the past to run report for * @param $limit int Maximum number of users to return (default 50) * * @return HTML Table representing the requested Contribution Scores. */ function genContributionScoreTable( $days, $limit, $title = null, $options = 'none' ) { global $wgContribScoreIgnoreBots, $wgContribScoreIgnoreBlockedUsers, $wgLang; $opts = explode( ',', strtolower( $options ) ); $dbr = wfGetDB( DB_SLAVE ); $userTable = $dbr->tableName('user'); $userGroupTable = $dbr->tableName('user_groups'); $revTable = $dbr->tableName('revision'); $ipBlocksTable = $dbr->tableName('ipblocks'); $sqlWhere = ""; $nextPrefix = "WHERE"; if ( $days > 0 ) { $date = time() - (60*60*24*$days); $dateString = $dbr->timestamp($date); $sqlWhere .= " {$nextPrefix} rev_timestamp > '$dateString'"; $nextPrefix = "AND"; } if ( $wgContribScoreIgnoreBlockedUsers ) { $sqlWhere .= " {$nextPrefix} rev_user NOT IN (SELECT ipb_user FROM {$ipBlocksTable} WHERE ipb_user <> 0)"; $nextPrefix = "AND"; } if ( $wgContribScoreIgnoreBots ) { $sqlWhere .= " {$nextPrefix} rev_user NOT IN (SELECT ug_user FROM {$userGroupTable} WHERE ug_group='bot')"; $nextPrefix = "AND"; } $sqlMostPages = "SELECT rev_user, COUNT(DISTINCT rev_page) AS page_count, COUNT(rev_id) AS rev_count FROM {$revTable} {$sqlWhere} GROUP BY rev_user ORDER BY page_count DESC LIMIT {$limit}"; $sqlMostRevs = "SELECT rev_user, COUNT(DISTINCT rev_page) AS page_count, COUNT(rev_id) AS rev_count FROM {$revTable} {$sqlWhere} GROUP BY rev_user ORDER BY rev_count DESC LIMIT {$limit}"; $sql = "SELECT user_id, " . "user_name, " . "page_count, " . "rev_count, " . "page_count+SQRT(rev_count-page_count)*2 AS wiki_rank " . "FROM $userTable u JOIN (($sqlMostPages) UNION ($sqlMostRevs)) s ON (user_id=rev_user) " . "ORDER BY wiki_rank DESC " . "LIMIT $limit"; $res = $dbr->query( $sql ); $sortable = in_array( 'nosort', $opts ) ? '' : ' sortable'; $output = "
" . $wgLang->formatNum( round( $row->wiki_rank, 0 ) ) . "\n | " . $wgLang->formatNum( $row->page_count ) . "\n | " . $wgLang->formatNum( $row->rev_count ) . "\n | " . Linker::userLink( $row->user_id, $row->user_name ); # Option to not display user tools if ( !in_array( 'notools', $opts ) ) { $output .= Linker::userToolLinks( $row->user_id, $row->user_name ); } $output .= Html::closeElement( 'td' ) . "\n"; if ( $altrow == '' && empty( $sortable ) ) { $altrow = 'odd '; } else { $altrow = ''; } } $output .= Html::closeElement( 'tr' ); $output .= Html::closeElement( 'table' ); $dbr->freeResult( $res ); if ( !empty( $title ) ) $output = Html::rawElement( 'table', array( 'cellspacing' => 0, 'cellpadding' => 0, 'class' => 'contributionscores-wrapper', 'lang' => $wgLang->getCode(), 'dir' => $wgLang->getDir() ), "\n". " |
{$title} | \n". "|||
{$output} | \n". "