Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4105885
translator-stats.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
translator-stats.php
View Options
<?php
/**
* Script to gather translator stats.
*
* @author Niklas Laxström
* @license GPL-2.0-or-later
* @file
*/
// Standard boilerplate to define $IP
if
(
getenv
(
'MW_INSTALL_PATH'
)
!==
false
)
{
$IP
=
getenv
(
'MW_INSTALL_PATH'
);
}
else
{
$dir
=
__DIR__
;
$IP
=
"$dir/../../.."
;
}
require_once
"$IP/maintenance/Maintenance.php"
;
class
TS
extends
Maintenance
{
public
function
__construct
()
{
parent
::
__construct
();
$this
->
addDescription
(
'Script to gather translator stats in tsv format. '
.
'You can further process the output with translate-stats-process.php'
);
}
public
function
execute
()
{
$dbr
=
$this
->
getDB
(
DB_REPLICA
);
$users
=
$dbr
->
newSelectQueryBuilder
()
->
select
(
[
'user_name'
,
'user_registration'
,
'user_editcount'
,
'ug_group'
,
]
)
->
from
(
'user'
)
->
leftJoin
(
'user_groups'
,
null
,
[
'user_id=ug_user'
,
'ug_group'
=>
'translator'
,
'ug_expiry IS NULL OR ug_expiry >= '
.
$dbr
->
addQuotes
(
$dbr
->
timestamp
()
),
]
)
->
where
(
[
'user_registration is not null'
]
)
->
orderBy
(
'user_id'
)
->
caller
(
__METHOD__
)
->
fetchResultSet
();
echo
"username
\t
registration ts
\t
edit count
\t
is translator?
\t
promoted ts
\t
method
\n
"
;
$rejected
=
$dbr
->
newSelectQueryBuilder
()
->
select
(
[
'log_title'
,
'log_timestamp'
,
]
)
->
from
(
'logging'
)
->
where
(
[
'log_type'
=>
'translatorsandbox'
,
'log_action'
=>
'rejected'
,
]
)
->
caller
(
__METHOD__
)
->
fetchResultSet
();
foreach
(
$rejected
as
$r
)
{
echo
"{$r->log_title}
\t
{$r->log_timestamp}
\t
0
\t\t\t
sandbox
\n
"
;
}
foreach
(
$users
as
$u
)
{
$logs
=
$dbr
->
newSelectQueryBuilder
()
->
select
(
[
'log_type'
,
'log_action'
,
'log_timestamp'
,
'log_params'
,
]
)
->
from
(
'logging'
)
->
where
(
[
'log_title'
=>
$u
->
user_name
,
'log_type'
=>
[
'rights'
,
'translatorsandbox'
],
]
)
->
orderBy
(
'log_id'
)
->
caller
(
__METHOD__
)
->
fetchResultSet
();
$promoted
=
null
;
$method
=
'normal'
;
foreach
(
$logs
as
$log
)
{
if
(
$log
->
log_action
===
'promoted'
)
{
$promoted
=
$log
->
log_timestamp
;
$method
=
'sandbox'
;
break
;
}
elseif
(
$log
->
log_action
===
'rights'
)
{
// phpcs:disable Generic.PHP.NoSilencedErrors.Discouraged
$data
=
@
unserialize
(
$log
->
log_params
);
if
(
$data
===
false
)
{
$lines
=
explode
(
"
\n
"
,
$log
->
log_params
,
3
);
if
(
str_contains
(
$lines
[
1
],
'translator'
)
)
{
$promoted
=
$log
->
log_timestamp
;
break
;
}
}
elseif
(
isset
(
$data
[
'5::newgroups'
]
)
&&
in_array
(
'translator'
,
$data
[
'5::newgroups'
]
)
)
{
$promoted
=
$log
->
log_timestamp
;
break
;
}
}
}
echo
"{$u->user_name}
\t
{$u->user_registration}
\t
{$u->user_editcount}"
.
"
\t
{$u->ug_group}
\t
{$promoted}
\t
{$method}
\n
"
;
}
}
}
$maintClass
=
TS
::
class
;
require_once
RUN_MAINTENANCE_IF_MAIN
;
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 19:12 (2 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
b0/22/e1191502c68bd2b8a08e865a76a8
Default Alt Text
translator-stats.php (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment