Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
85f1c49728 | ||
|
|
eb06751a3d | ||
|
|
c68ced7f7e | ||
|
|
4906174274 | ||
|
|
0a533b36f5 | ||
|
|
5be2c8ed72 | ||
|
|
71ace6a83c | ||
|
|
5ade4bf529 | ||
|
|
81fe64aea5 | ||
|
|
32d5ef59fa | ||
|
|
b0e2a7c59a | ||
|
|
89e7ebc584 | ||
|
|
908d2f68a2 | ||
|
|
95800b51f3 | ||
|
|
bb3429ecff | ||
|
|
e5d96719d8 | ||
|
|
fcb9c19544 | ||
|
|
20f33b07f3 | ||
|
|
309914b267 | ||
|
|
571a707b3b | ||
|
|
20b9a568e2 | ||
|
|
4dc3f4fc3e | ||
|
|
6fac0091ec | ||
|
|
0c3861304e | ||
|
|
9f53a1eba9 | ||
|
|
2dc00fa1ae | ||
|
|
ca10b2089e | ||
|
|
fdcc307d8e | ||
|
|
9d46bcf5c7 | ||
|
|
b8a91c6731 | ||
|
|
e51c7662d1 | ||
|
|
18e42f349b | ||
|
|
ddd94477cf | ||
|
|
95f9a48ac4 | ||
|
|
5aefac796c | ||
|
|
4f60431795 | ||
|
|
b11635777b | ||
|
|
f42092ec06 | ||
|
|
a131b2a47b | ||
|
|
6e2d039150 | ||
|
|
b04514e353 | ||
|
|
de739003d4 | ||
|
|
ea143f6b66 | ||
|
|
70cc5ee193 | ||
|
|
234c4f6622 | ||
|
|
2b3ff2324d | ||
|
|
4817b0112c |
+4
-6
@@ -1,10 +1,8 @@
|
||||
{
|
||||
"root": true,
|
||||
"extends": [
|
||||
"wikimedia/client",
|
||||
"wikimedia/jquery"
|
||||
],
|
||||
"globals": {
|
||||
"mw": false
|
||||
}
|
||||
"wikimedia/client-es5",
|
||||
"wikimedia/jquery",
|
||||
"wikimedia/mediawiki"
|
||||
]
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset>
|
||||
<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
|
||||
<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
|
||||
<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
|
||||
<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
|
||||
<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage" />
|
||||
<exclude name="PSR12.Properties.ConstantVisibility.NotFound" />
|
||||
<exclude name="Squiz.Scope.MethodScope.Missing" />
|
||||
</rule>
|
||||
<file>.</file>
|
||||
<arg name="extensions" value="php,php5,inc" />
|
||||
<arg name="extensions" value="php" />
|
||||
<arg name="encoding" value="UTF-8" />
|
||||
</ruleset>
|
||||
|
||||
@@ -233,6 +233,16 @@ $specialPageAliases['sk'] = [
|
||||
'ContributionScores' => [ 'SkórePríspevkov' ],
|
||||
];
|
||||
|
||||
/** Serbian Cyrillic (српски (ћирилица)) */
|
||||
$specialPageAliases['sr-ec'] = [
|
||||
'ContributionScores' => [ 'ОценеДоприноса' ],
|
||||
];
|
||||
|
||||
/** Serbian Latin (srpski (latinica)) */
|
||||
$specialPageAliases['sr-el'] = [
|
||||
'ContributionScores' => [ 'OceneDoprinosa' ],
|
||||
];
|
||||
|
||||
/** Swedish (svenska) */
|
||||
$specialPageAliases['sv'] = [
|
||||
'ContributionScores' => [ 'Bidragspoäng' ],
|
||||
|
||||
+13
-106
@@ -1,109 +1,16 @@
|
||||
<?php
|
||||
/** \file
|
||||
* \brief Contains setup code for the Contribution Scores Extension.
|
||||
*/
|
||||
|
||||
# Not a valid entry point, skip unless MEDIAWIKI is defined
|
||||
if ( !defined( 'MEDIAWIKI' ) ) {
|
||||
echo 'Contribution Scores extension';
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
$wgExtensionCredits['specialpage'][] = [
|
||||
'path' => __FILE__,
|
||||
'name' => 'Contribution Scores',
|
||||
'url' => 'https://www.mediawiki.org/wiki/Extension:Contribution_Scores',
|
||||
'author' => 'Tim Laqua',
|
||||
'descriptionmsg' => 'contributionscores-desc',
|
||||
'version' => '1.25.0'
|
||||
];
|
||||
|
||||
define( 'CONTRIBUTIONSCORES_MAXINCLUDELIMIT', 50 );
|
||||
$wgContribScoreReports = null;
|
||||
|
||||
// These settings can be overridden in LocalSettings.php.
|
||||
|
||||
// Set to true to exclude bots from the reporting.
|
||||
$wgContribScoreIgnoreBlockedUsers = false;
|
||||
|
||||
// Set to true to exclude blocked users from the reporting.
|
||||
$wgContribScoreIgnoreBots = false;
|
||||
|
||||
// Set to true to use real user names when available. Only for MediaWiki 1.19 and later.
|
||||
$wgContribScoresUseRealName = false;
|
||||
|
||||
// Set to true to disable cache for parser function and inclusion of table.
|
||||
$wgContribScoreDisableCache = false;
|
||||
|
||||
$wgAutoloadClasses['ContributionScores'] = __DIR__ . '/ContributionScores_body.php';
|
||||
$wgSpecialPages['ContributionScores'] = 'ContributionScores';
|
||||
|
||||
$wgMessagesDirs['ContributionScores'] = __DIR__ . '/i18n';
|
||||
$wgExtensionMessagesFiles['ContributionScoresAlias'] = __DIR__ . '/ContributionScores.alias.php';
|
||||
$wgExtensionMessagesFiles['ContributionScoresMagic'] =
|
||||
__DIR__ . '/ContributionScores.i18n.magic.php';
|
||||
|
||||
$wgHooks['ParserFirstCallInit'][] = 'efContributionScores_Setup';
|
||||
|
||||
function efContributionScores_Setup( &$parser ) {
|
||||
$parser->setFunctionHook( 'cscore', 'efContributionScores_Render' );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function efContributionScores_Render( &$parser, $usertext, $metric = 'score' ) {
|
||||
global $wgContribScoreDisableCache;
|
||||
|
||||
if ( $wgContribScoreDisableCache ) {
|
||||
$parser->getOutput()->updateCacheExpiry( 0 );
|
||||
}
|
||||
|
||||
$user = User::newFromName( $usertext );
|
||||
$dbr = wfGetDB( DB_REPLICA );
|
||||
|
||||
if ( $user instanceof User && $user->isLoggedIn() ) {
|
||||
global $wgLang;
|
||||
|
||||
$revWhere = ActorMigration::newMigration()->getWhere( $dbr, 'rev_user', $user );
|
||||
if ( $metric == 'score' ) {
|
||||
$res = $dbr->select(
|
||||
[ 'revision' ] + $revWhere['tables'],
|
||||
'COUNT(DISTINCT rev_page)+SQRT(COUNT(rev_id)-COUNT(DISTINCT rev_page))*2 AS wiki_rank',
|
||||
$revWhere['conds'],
|
||||
__METHOD__,
|
||||
[],
|
||||
$revWhere['joins']
|
||||
);
|
||||
$row = $dbr->fetchObject( $res );
|
||||
$output = $wgLang->formatNum( round( $row->wiki_rank, 0 ) );
|
||||
} elseif ( $metric == 'changes' ) {
|
||||
$res = $dbr->select(
|
||||
[ 'revision' ] + $revWhere['tables'],
|
||||
'COUNT(rev_id) AS rev_count',
|
||||
$revWhere['conds'],
|
||||
__METHOD__,
|
||||
[],
|
||||
$revWhere['joins']
|
||||
);
|
||||
$row = $dbr->fetchObject( $res );
|
||||
$output = $wgLang->formatNum( $row->rev_count );
|
||||
} elseif ( $metric == 'pages' ) {
|
||||
$res = $dbr->select(
|
||||
[ 'revision' ] + $revWhere['tables'],
|
||||
'COUNT(DISTINCT rev_page) AS page_count',
|
||||
$revWhere['conds'],
|
||||
__METHOD__,
|
||||
[],
|
||||
$revWhere['joins']
|
||||
);
|
||||
$row = $dbr->fetchObject( $res );
|
||||
$output = $wgLang->formatNum( $row->page_count );
|
||||
} else {
|
||||
$output = wfMessage( 'contributionscores-invalidmetric' )->text();
|
||||
}
|
||||
} else {
|
||||
$output = wfMessage( 'contributionscores-invalidusername' )->text();
|
||||
}
|
||||
|
||||
return $parser->insertStripItem( $output, $parser->mStripState );
|
||||
if ( function_exists( 'wfLoadExtension' ) ) {
|
||||
wfLoadExtension( 'ContributionScores' );
|
||||
// Keep i18n globals so mergeMessageFileList.php doesn't break
|
||||
$wgMessageDirs['ContributionScores'] = __DIR__ . '/i18n';
|
||||
$wgExtensionMessagesFiles['ContributionScoresAlias'] = __DIR__ . '/ContributionScores.alias.php';
|
||||
$wgExtensionMessagesFiles['ContributionScoresMagic'] = __DIR__ . '/ContributionScores.i18n.magic.php';
|
||||
wfWarn(
|
||||
'Deprecated PHP entry point used for ContributionScores extension. ' .
|
||||
'Please use wfLoadExtension instead, ' .
|
||||
'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
|
||||
);
|
||||
} else {
|
||||
die( 'This version of the ContributionScores extension requires MediaWiki 1.29+' );
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ module.exports = function ( grunt ) {
|
||||
},
|
||||
eslint: {
|
||||
options: {
|
||||
extensions: [ '.js', '.json' ],
|
||||
cache: true
|
||||
},
|
||||
all: [
|
||||
|
||||
+6
-5
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"mediawiki/mediawiki-codesniffer": "31.0.0",
|
||||
"mediawiki/minus-x": "1.1.0",
|
||||
"mediawiki/mediawiki-codesniffer": "37.0.0",
|
||||
"mediawiki/minus-x": "1.1.1",
|
||||
"php-parallel-lint/php-console-highlighter": "0.5.0",
|
||||
"php-parallel-lint/php-parallel-lint": "1.2.0"
|
||||
"php-parallel-lint/php-parallel-lint": "1.3.0"
|
||||
},
|
||||
"scripts": {
|
||||
"fix": [
|
||||
@@ -12,8 +12,9 @@
|
||||
],
|
||||
"test": [
|
||||
"parallel-lint . --exclude vendor --exclude node_modules",
|
||||
"phpcs -p -s",
|
||||
"@phpcs",
|
||||
"minus-x check ."
|
||||
]
|
||||
],
|
||||
"phpcs": "phpcs -sp --cache"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "ContributionScores",
|
||||
"author": "Tim Laqua",
|
||||
"url": "https://www.mediawiki.org/wiki/Extension:Contribution_Scores",
|
||||
"descriptionmsg": "contributionscores-desc",
|
||||
"version": "1.26.0",
|
||||
"type": "specialpage",
|
||||
"requires": {
|
||||
"MediaWiki": ">= 1.34.0"
|
||||
},
|
||||
"SpecialPages": {
|
||||
"ContributionScores": "ContributionScores"
|
||||
},
|
||||
"AutoloadClasses": {
|
||||
"ContributionScores": "src/ContributionScores.php"
|
||||
},
|
||||
"Hooks": {
|
||||
"ParserFirstCallInit": "ContributionScores::onParserFirstCallInit"
|
||||
},
|
||||
"MessagesDirs": {
|
||||
"ContributionScores": [
|
||||
"i18n"
|
||||
]
|
||||
},
|
||||
"ExtensionMessagesFiles": {
|
||||
"ContribScoreAlias": "ContributionScores.alias.php",
|
||||
"ContribScoreMagic": "ContributionScores.i18n.magic.php"
|
||||
},
|
||||
"config": {
|
||||
"ContribScoreReports": {
|
||||
"value": null,
|
||||
"description": "Each array defines a report - 7,50 is \"past 7 days \" and \"LIMIT 50 \" - Can be omitted."
|
||||
},
|
||||
"ContribScoreIgnoreBlockedUsers": {
|
||||
"value": false,
|
||||
"description": "Set to true to exclude blocked users from the reporting."
|
||||
},
|
||||
"ContribScoreIgnoreBots": {
|
||||
"value": false,
|
||||
"description": "Set to true to exclude bots users from the reporting."
|
||||
},
|
||||
"ContribScoresUseRealName": {
|
||||
"value": false,
|
||||
"description": "Set to true to use real user names when available."
|
||||
},
|
||||
"ContribScoreDisableCache": {
|
||||
"value": false,
|
||||
"description": "Set to true to disable cache for parser function and inclusion of table."
|
||||
}
|
||||
},
|
||||
"manifest_version": 2
|
||||
}
|
||||
+2
-1
@@ -3,7 +3,8 @@
|
||||
"authors": [
|
||||
"CERminator",
|
||||
"KWiki",
|
||||
"Srdjan m"
|
||||
"Srdjan m",
|
||||
"Srđan"
|
||||
]
|
||||
},
|
||||
"contributionscores": "Rezultat doprinosa",
|
||||
|
||||
+3
-1
@@ -4,7 +4,8 @@
|
||||
"Byrial",
|
||||
"Christian List",
|
||||
"Kaare",
|
||||
"Peter Alberti"
|
||||
"Peter Alberti",
|
||||
"Saederup92"
|
||||
]
|
||||
},
|
||||
"contributionscores": "Bidragspoint",
|
||||
@@ -14,6 +15,7 @@
|
||||
"contributionscores-days": "Sidste {{PLURAL:$1|dag|$1 dage}}",
|
||||
"contributionscores-allrevisions": "Gennem tiden",
|
||||
"contributionscores-score": "Point",
|
||||
"contributionscores-rank": "Rang",
|
||||
"contributionscores-pages": "Sider",
|
||||
"contributionscores-changes": "Ændringer",
|
||||
"contributionscores-username": "Brugernavn",
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
"contributionscores-info": "Ebe pawıtışê hecmê tedqiqê berzi ra, puwan raveri pelanê bêemsalanê vurniyayeyan senceno.",
|
||||
"contributionscores-top": "(Tewr Gırde $1)",
|
||||
"contributionscores-days": "{{PLURAL:$1|Roca peyêne|$1 Rocê peyêni}}",
|
||||
"contributionscores-allrevisions": "Çaxan de hemi",
|
||||
"contributionscores-allrevisions": "Her dem",
|
||||
"contributionscores-score": "Puwan",
|
||||
"contributionscores-rank": "Rêze",
|
||||
"contributionscores-pages": "Peli",
|
||||
|
||||
+1
-1
@@ -15,4 +15,4 @@
|
||||
"contributionscores-username": "Username",
|
||||
"contributionscores-invalidusername": "Invalid username",
|
||||
"contributionscores-invalidmetric": "Invalid metric"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Better"
|
||||
]
|
||||
},
|
||||
"contributionscores-days": "Úrtimus $1 dias"
|
||||
}
|
||||
+3
-2
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"01miki10",
|
||||
"Crt",
|
||||
"Nike",
|
||||
"Pxos",
|
||||
@@ -18,7 +19,7 @@
|
||||
"contributionscores-rank": "Sija",
|
||||
"contributionscores-pages": "Sivuja",
|
||||
"contributionscores-changes": "Muutoksia",
|
||||
"contributionscores-username": "Käyttäjätunnus",
|
||||
"contributionscores-invalidusername": "Virheellinen käyttäjätunnus",
|
||||
"contributionscores-username": "Käyttäjänimi",
|
||||
"contributionscores-invalidusername": "Virheellinen käyttäjänimi",
|
||||
"contributionscores-invalidmetric": "Virheellinen muuttuja"
|
||||
}
|
||||
|
||||
+1
-1
@@ -21,6 +21,6 @@
|
||||
"contributionscores-pages": "Pages",
|
||||
"contributionscores-changes": "Changements",
|
||||
"contributionscores-username": "Nom d’utilisateur",
|
||||
"contributionscores-invalidusername": "Nom d’utilisateur invalide",
|
||||
"contributionscores-invalidusername": "Nom d’utilisateur incorrect",
|
||||
"contributionscores-invalidmetric": "Métrique incorrecte"
|
||||
}
|
||||
|
||||
+2
-1
@@ -6,11 +6,12 @@
|
||||
},
|
||||
"contributionscores": "Contes de contribution",
|
||||
"contributionscores-desc": "Calcula li funde de data del wiki por max alt [[Special:ContributionScores|volúmine de contribution de usator]]",
|
||||
"contributionscores-info": "Contes es calculat quam seque:\n*Un (1) punctu por chascun págine unic redactet\n*Fonte de quadrat de (total de redactiones fat) - (total unique pages) * 2\nContes calculat in ti diversitá de redaction in pesa maniere súper de volúmine de redaction.\nBasicmen, ti conte mesura primarimen págines unic redactet, che consideration por alt volúmine de redaction - suposit esser un págine de alt qualitá.",
|
||||
"contributionscores-info": "Li calcul primarimen mesura págines unic redactet, considerant li alt volume de redactiones.",
|
||||
"contributionscores-top": "(Prim $1)",
|
||||
"contributionscores-days": "Ultim {{PLURAL:$1|die|$1 dies}}",
|
||||
"contributionscores-allrevisions": "Omni témpor",
|
||||
"contributionscores-score": "Conte",
|
||||
"contributionscores-rank": "Classification",
|
||||
"contributionscores-pages": "Págines",
|
||||
"contributionscores-changes": "Changes",
|
||||
"contributionscores-username": "Nómine de usator",
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Balyozxane",
|
||||
"George Animal"
|
||||
]
|
||||
},
|
||||
"contributionscores-allrevisions": "Hemû dem",
|
||||
"contributionscores-pages": "Rûpel",
|
||||
"contributionscores-changes": "Guhartin",
|
||||
"contributionscores-username": "Navê bikarhêner"
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Abbas dhothar",
|
||||
"BukhariSaeed"
|
||||
]
|
||||
},
|
||||
"contributionscores-days": "پچھلے{{PLURAL:$1|دن|$1 دناں}}",
|
||||
"contributionscores-changes": "تبدیلیاں",
|
||||
"contributionscores-username": "ورتن آلے دا ناں"
|
||||
}
|
||||
|
||||
+5
-3
@@ -3,16 +3,18 @@
|
||||
"authors": [
|
||||
"Helix84",
|
||||
"Luky001",
|
||||
"Teslaton"
|
||||
"Teslaton",
|
||||
"Yardom78"
|
||||
]
|
||||
},
|
||||
"contributionscores": "Skóre príspevkov",
|
||||
"contributionscores-desc": "Zisťuje naväčší [[Special:ContributionScores|objem používateľských príspevkov]] z databázy wiki",
|
||||
"contributionscores-desc": "Získava údaje z databázy wiki o [[Special:ContributionScores|množstve používateľských príspevkov]]",
|
||||
"contributionscores-info": "Skóre primárne meria jedinečné editované stránky s ohľadom na veľké množstvo úprav.",
|
||||
"contributionscores-top": "(Najlepších $1)",
|
||||
"contributionscores-days": "{{PLURAL:$1|Posledný $1 deň|Posledné $1 dni|Posledných $1 dní}}",
|
||||
"contributionscores-allrevisions": "Celá história",
|
||||
"contributionscores-allrevisions": "Celkom",
|
||||
"contributionscores-score": "Skóre",
|
||||
"contributionscores-rank": "Poradie",
|
||||
"contributionscores-pages": "Stránky",
|
||||
"contributionscores-changes": "Zmeny",
|
||||
"contributionscores-username": "Používateľské meno",
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Acamicamacaraca",
|
||||
"Kizule",
|
||||
"Milicevic01",
|
||||
"Rancher",
|
||||
"Sasa Stefanovic",
|
||||
|
||||
+1
-1
@@ -6,5 +6,5 @@
|
||||
},
|
||||
"contributionscores-pages": "ገጻት",
|
||||
"contributionscores-changes": "ለውጥታት",
|
||||
"contributionscores-username": "ሽም ተጠቃሚ"
|
||||
"contributionscores-username": "ስም ተጠቃሚ"
|
||||
}
|
||||
|
||||
+3
-1
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Moon0319",
|
||||
"PhiLiP",
|
||||
"Roy17",
|
||||
"Shinjiman",
|
||||
"Shirayuki",
|
||||
"Yueman"
|
||||
@@ -12,7 +14,7 @@
|
||||
"contributionscores-info": "呢個分數係會依主要嘅唯一編輯過嘅頁,同埋考慮高編輯量。",
|
||||
"contributionscores-top": "(最高$1名)",
|
||||
"contributionscores-days": "最近$1日",
|
||||
"contributionscores-allrevisions": "全部時間",
|
||||
"contributionscores-allrevisions": "有史以來",
|
||||
"contributionscores-score": "分數",
|
||||
"contributionscores-rank": "等級",
|
||||
"contributionscores-pages": "版",
|
||||
|
||||
Generated
+3722
-888
File diff suppressed because it is too large
Load Diff
+4
-3
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"name": "ContributionScores",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint-config-wikimedia": "0.15.3",
|
||||
"grunt": "1.1.0",
|
||||
"eslint-config-wikimedia": "0.20.0",
|
||||
"grunt": "1.5.3",
|
||||
"grunt-banana-checker": "0.9.0",
|
||||
"grunt-eslint": "22.0.0"
|
||||
"grunt-eslint": "23.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
* \brief Contains code for the ContributionScores Class (extends SpecialPage).
|
||||
*/
|
||||
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
||||
/// Special page class for the Contribution Scores extension
|
||||
/**
|
||||
* Special page that generates a list of wiki contributors based
|
||||
@@ -15,10 +13,72 @@ use MediaWiki\MediaWikiServices;
|
||||
* @author Tim Laqua <t.laqua@gmail.com>
|
||||
*/
|
||||
class ContributionScores extends IncludableSpecialPage {
|
||||
const CONTRIBUTIONSCORES_MAXINCLUDELIMIT = 50;
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct( 'ContributionScores' );
|
||||
}
|
||||
|
||||
public static function onParserFirstCallInit( Parser $parser ) {
|
||||
$parser->setFunctionHook( 'cscore', [ self::class, 'efContributionScoresRender' ] );
|
||||
}
|
||||
|
||||
public static function efContributionScoresRender( $parser, $usertext, $metric = 'score' ) {
|
||||
global $wgContribScoreDisableCache;
|
||||
|
||||
if ( $wgContribScoreDisableCache ) {
|
||||
$parser->getOutput()->updateCacheExpiry( 0 );
|
||||
}
|
||||
|
||||
$user = User::newFromName( $usertext );
|
||||
$dbr = wfGetDB( DB_REPLICA );
|
||||
|
||||
if ( $user instanceof User && $user->isRegistered() ) {
|
||||
global $wgLang;
|
||||
|
||||
$revWhere = ActorMigration::newMigration()->getWhere( $dbr, 'rev_user', $user );
|
||||
if ( $metric == 'score' ) {
|
||||
$res = $dbr->select(
|
||||
[ 'revision' ] + $revWhere['tables'],
|
||||
'COUNT(DISTINCT rev_page)+SQRT(COUNT(rev_id)-COUNT(DISTINCT rev_page))*2 AS wiki_rank',
|
||||
$revWhere['conds'],
|
||||
__METHOD__,
|
||||
[],
|
||||
$revWhere['joins']
|
||||
);
|
||||
$row = $dbr->fetchObject( $res );
|
||||
$output = $wgLang->formatNum( round( $row->wiki_rank, 0 ) );
|
||||
} elseif ( $metric == 'changes' ) {
|
||||
$res = $dbr->select(
|
||||
[ 'revision' ] + $revWhere['tables'],
|
||||
'COUNT(rev_id) AS rev_count',
|
||||
$revWhere['conds'],
|
||||
__METHOD__,
|
||||
[],
|
||||
$revWhere['joins']
|
||||
);
|
||||
$row = $dbr->fetchObject( $res );
|
||||
$output = $wgLang->formatNum( $row->rev_count );
|
||||
} elseif ( $metric == 'pages' ) {
|
||||
$res = $dbr->select(
|
||||
[ 'revision' ] + $revWhere['tables'],
|
||||
'COUNT(DISTINCT rev_page) AS page_count',
|
||||
$revWhere['conds'],
|
||||
__METHOD__,
|
||||
[],
|
||||
$revWhere['joins']
|
||||
);
|
||||
$row = $dbr->fetchObject( $res );
|
||||
$output = $wgLang->formatNum( $row->page_count );
|
||||
} else {
|
||||
$output = wfMessage( 'contributionscores-invalidmetric' )->text();
|
||||
}
|
||||
} else {
|
||||
$output = wfMessage( 'contributionscores-invalidusername' )->text();
|
||||
}
|
||||
return $parser->insertStripItem( $output, $parser->mStripState );
|
||||
}
|
||||
|
||||
/// Generates a "Contribution Scores" table for a given LIMIT and date range
|
||||
|
||||
/**
|
||||
@@ -37,10 +97,8 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
|
||||
$dbr = wfGetDB( DB_REPLICA );
|
||||
|
||||
$store = MediaWikiServices::getInstance()
|
||||
->getRevisionStoreFactory()
|
||||
->getRevisionStore();
|
||||
$revQuery = $store->getQueryInfo();
|
||||
$revQuery = ActorMigration::newMigration()->getJoin( 'rev_user' );
|
||||
$revQuery['tables'] = array_merge( [ 'revision' ], $revQuery['tables'] );
|
||||
|
||||
$revUser = $revQuery['fields']['rev_user'];
|
||||
|
||||
@@ -48,8 +106,7 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
|
||||
if ( $days > 0 ) {
|
||||
$date = time() - ( 60 * 60 * 24 * $days );
|
||||
$dateString = $dbr->timestamp( $date );
|
||||
$sqlWhere[] = "rev_timestamp > '$dateString'";
|
||||
$sqlWhere[] = 'rev_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( $date ) );
|
||||
}
|
||||
|
||||
if ( $wgContribScoreIgnoreBlockedUsers ) {
|
||||
@@ -59,18 +116,20 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
|
||||
if ( $wgContribScoreIgnoreBots ) {
|
||||
$sqlWhere[] = "{$revUser} NOT IN " .
|
||||
$dbr->buildSelectSubquery( 'user_groups', 'ug_user', [ 'ug_group' => 'bot' ], __METHOD__ );
|
||||
|
||||
$dbr->buildSelectSubquery( 'user_groups', 'ug_user', [
|
||||
'ug_group' => 'bot',
|
||||
'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() )
|
||||
], __METHOD__ );
|
||||
}
|
||||
|
||||
if ( $dbr->unionSupportsOrderAndLimit() ) {
|
||||
$order = [
|
||||
'GROUP BY' => $revUser,
|
||||
'GROUP BY' => 'rev_user',
|
||||
'ORDER BY' => 'page_count DESC',
|
||||
'LIMIT' => $limit
|
||||
];
|
||||
} else {
|
||||
$order = [ 'GROUP BY' => $revUser ];
|
||||
$order = [ 'GROUP BY' => 'rev_user' ];
|
||||
}
|
||||
|
||||
$sqlMostPages = $dbr->selectSQLText(
|
||||
@@ -87,13 +146,7 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
);
|
||||
|
||||
if ( $dbr->unionSupportsOrderAndLimit() ) {
|
||||
$order = [
|
||||
'GROUP BY' => 'rev_user',
|
||||
'ORDER BY' => 'rev_count DESC',
|
||||
'LIMIT' => $limit
|
||||
];
|
||||
} else {
|
||||
$order = [ 'GROUP BY' => 'rev_user' ];
|
||||
$order['ORDER BY'] = 'rev_count DESC';
|
||||
}
|
||||
|
||||
$sqlMostRevs = $dbr->selectSQLText(
|
||||
@@ -170,7 +223,7 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
$output .= Html::closeElement( 'tr' );
|
||||
$output .= "<tr class='{$altrow}'>\n" .
|
||||
"<td class='content' style='padding-right:10px;text-align:right;'>" .
|
||||
$lang->formatNum( round( $user_rank, 0 ) ) .
|
||||
$lang->formatNum( $user_rank ) .
|
||||
"\n</td><td class='content' style='padding-right:10px;text-align:right;'>" .
|
||||
$lang->formatNum( round( $row->wiki_rank, 0 ) ) .
|
||||
"\n</td><td class='content' style='padding-right:10px;text-align:right;'>" .
|
||||
@@ -257,7 +310,7 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty( $limit ) || $limit < 1 || $limit > CONTRIBUTIONSCORES_MAXINCLUDELIMIT ) {
|
||||
if ( empty( $limit ) || $limit < 1 || $limit > self::CONTRIBUTIONSCORES_MAXINCLUDELIMIT ) {
|
||||
$limit = 10;
|
||||
}
|
||||
if ( $days === null || $days < 0 ) {
|
||||
@@ -316,6 +369,9 @@ class ContributionScores extends IncludableSpecialPage {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected function getGroupName() {
|
||||
return 'wiki';
|
||||
}
|
||||
Reference in New Issue
Block a user