From 43b2ca821a65634df61e7c9cc862759ce418d1df Mon Sep 17 00:00:00 2001 From: Tim Laqua Date: Wed, 22 Aug 2007 19:25:22 +0000 Subject: [PATCH] Uploading more extensions --- ContributionScores.i18n.php | 6 ++ ContributionScores.php | 24 ++++++++ ContributionScores_body.php | 116 ++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 ContributionScores.i18n.php create mode 100644 ContributionScores.php create mode 100644 ContributionScores_body.php diff --git a/ContributionScores.i18n.php b/ContributionScores.i18n.php new file mode 100644 index 0000000..257f865 --- /dev/null +++ b/ContributionScores.i18n.php @@ -0,0 +1,6 @@ + array( + 'contributionscores' => 'Contribution Scores' + ) +); diff --git a/ContributionScores.php b/ContributionScores.php new file mode 100644 index 0000000..b5e4c47 --- /dev/null +++ b/ContributionScores.php @@ -0,0 +1,24 @@ +'Contribution Scores', + 'url'=>'http://www.mediawiki.org/wiki/Extension:Contribution_Scores', + 'author'=>'Tim Laqua, t.laqua at gmail dot com', + 'description'=>'Polls Wiki Database for highest user contribution volume.', + 'version'=>'1.2' +); + +$wgAutoloadClasses['ContributionScores'] = dirname(__FILE__) . '/ContributionScores_body.php'; +$wgSpecialPages['ContributionScores'] = 'ContributionScores'; + +if ( version_compare( $wgVersion, '1.10.0', '<' ) ) { + //Extension designed for 1.10.0+, but will work on some older versions + //LoadAllMessages hook throws errors before 1.10.0 +} else { + $wgHooks['LoadAllMessages'][] = 'ContributionScores::loadMessages'; +} diff --git a/ContributionScores_body.php b/ContributionScores_body.php new file mode 100644 index 0000000..e6bb5b5 --- /dev/null +++ b/ContributionScores_body.php @@ -0,0 +1,116 @@ +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 wikiRank " . + "FROM $userTable userTable JOIN $revTable revTable ON (userTable.user_id=revTable.rev_user) "; + + if ( $days > 0 ) { + $date = mktime() - (60*60*24*$days); + $dateString = date("Ymd",$date)."000000"; + + $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 wikiRank DESC " . + "LIMIT $limit"; + + $res = $dbr->query($sql); + + $output = "{|class=\"wikitable sortable\"\n". + "|-\n". + "|style=\"font-weight: bold;\"|Score\n". + "|style=\"font-weight: bold;\"|Pages\n". + "|style=\"font-weight: bold;\"|Changes\n". + "|style=\"font-weight: bold;\"|Username\n"; + + while ( $row = $dbr->fetchObject( $res ) ) { + $wikiUserName = $row->user_name; + $output .= "|-\n|" . + round($row->wikiRank,0) . "\n|" . + $row->page_count . "\n|" . + $row->rev_count . "\n|" . + "[[User:".$wikiUserName."|".$wikiUserName."]] ([[User_talk:".$wikiUserName."|Talk]] | [[Special:Contributions/".$wikiUserName."|contribs]])" . "\n"; + } + $output .= "|}"; + $dbr->freeResult( $res ); + + return $output; + } + + function execute( $par ) { + global $wgRequest, $wgOut, $contribScoreReports; + + $this->setHeaders(); + + # Get request data from, e.g. + $param = $wgRequest->getText('param'); + + if (!is_array($contribScoreReports)) { + $contribScoreReports = array( + array(7,50), + array(30,50), + array(0,50)); + } + + $wgOut->addWikiText ("Scores are calculated as follows:\n". + "*1 point for each unique page edited\n". + "*Square Root of (Total Edits Made) - (Total Unique Pages) * 2\n". + "Scores calculated in this manner weight edit diversity over edit volume. Basically, this score measures". + " primarily unique pages edited, with consideration for high edit volume - assumed to be a higher quality ". + "article."); + + foreach ( $contribScoreReports as $scoreReport) { + if ( $scoreReport[0] > 0 ) { + $reportTitle = "Last $scoreReport[0] Days"; + } else { + $reportTitle = "All Revisions"; + } + $reportTitle .= " (Top $scoreReport[1])"; + $wgOut->addWikiText ("== $reportTitle ==\n".$this->genContributionScoreTable($sql,$dbr,$scoreReport[0],$scoreReport[1])); + } + } + + + function loadMessages() { + static $messagesLoaded = false; + global $wgMessageCache; + if ( $messagesLoaded ) return true; + $messagesLoaded = true; + + require( dirname( __FILE__ ) . '/ContributionScores.i18n.php' ); + foreach ( $allMessages as $lang => $langMessages ) { + $wgMessageCache->addMessages( $langMessages, $lang ); + } + + return true; + } +}