*/ class ContributionScores extends SpecialPage { function ContributionScores() { SpecialPage::SpecialPage("ContributionScores"); self::loadMessages(); } ///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 ) { global $contribScoreIgnoreBots, $wgUser; $dbr =& wfGetDB( DB_SLAVE ); $userTable = $dbr->tableName('user'); $userGroupTable = $dbr->tableName('user_groups'); $revTable = $dbr->tableName('revision'); $sql = "SELECT user_id, " . "user_name, " . "COUNT(DISTINCT rev_page) AS page_count, " . "COUNT(rev_id) AS rev_count, " . "COUNT(DISTINCT rev_page)+SQRT(COUNT(rev_id)-COUNT(DISTINCT rev_page))*2 AS wiki_rank " . "FROM $userTable userTable JOIN $revTable revTable ON (userTable.user_id=revTable.rev_user) "; if ( $days > 0 ) { $date = mktime() - (60*60*24*$days); $dateString = $dbr->timestamp($date); $sql .= "WHERE rev_timestamp > '$dateString' "; } if ( $contribScoreIgnoreBots ) { if (preg_match("/where/i", $sql)) { $sql .= "AND "; } else { $sql .= "WHERE "; } $sql .= "user_id NOT IN (SELECT ug_user FROM $userGroupTable WHERE ug_group='bot') "; } $sql .= "GROUP BY user_id, user_name " . "ORDER BY wiki_rank DESC " . "LIMIT $limit"; $res = $dbr->query($sql); $output = "
Score | \n". "Pages | \n". "Changes | \n". "Username | \n"; $skin =& $wgUser->getSkin(); while ( $row = $dbr->fetchObject( $res ) ) { $output .= "
" . round($row->wiki_rank,0) . "\n | " . $row->page_count . "\n | " . $row->rev_count . "\n | " . $skin->userLink( $row->user_id, $row->user_name ) . $skin->userToolLinks( $row->user_id, $row->user_name ) . " | \n"; } $output .= "