mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Nuke
synced 2024-09-23 10:24:40 +00:00
Migrate to query builder and expression builders
As an Iranian, I'm a big fan of this extension so I decided to update some parts of it to use new rdbms APIs. Bug: T350984 Bug: T312361 Change-Id: Id374fc9143d40ac0c65ae99ffab945cde51f77d5
This commit is contained in:
parent
b5b1b11608
commit
910ce4c870
|
@ -62,7 +62,7 @@
|
|||
"class": "MediaWiki\\Extension\\Nuke\\SpecialNuke",
|
||||
"services": [
|
||||
"JobQueueGroup",
|
||||
"DBLoadBalancer",
|
||||
"DBLoadBalancerFactory",
|
||||
"PermissionManager",
|
||||
"RepoGroup",
|
||||
"UserFactory",
|
||||
|
|
|
@ -23,7 +23,10 @@ use OOUI\TextInputWidget;
|
|||
use PermissionsError;
|
||||
use RepoGroup;
|
||||
use UserBlockedError;
|
||||
use Wikimedia\Rdbms\ILoadBalancer;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
use Wikimedia\Rdbms\IExpression;
|
||||
use Wikimedia\Rdbms\LikeValue;
|
||||
use Wikimedia\Rdbms\SelectQueryBuilder;
|
||||
use Xml;
|
||||
|
||||
class SpecialNuke extends SpecialPage {
|
||||
|
@ -34,8 +37,8 @@ class SpecialNuke extends SpecialPage {
|
|||
/** @var JobQueueGroup */
|
||||
private $jobQueueGroup;
|
||||
|
||||
/** @var ILoadBalancer */
|
||||
private $loadBalancer;
|
||||
/** @var IConnectionProvider */
|
||||
private $dbProvider;
|
||||
|
||||
/** @var PermissionManager */
|
||||
private $permissionManager;
|
||||
|
@ -54,7 +57,7 @@ class SpecialNuke extends SpecialPage {
|
|||
|
||||
/**
|
||||
* @param JobQueueGroup $jobQueueGroup
|
||||
* @param ILoadBalancer $loadBalancer
|
||||
* @param IConnectionProvider $dbProvider
|
||||
* @param PermissionManager $permissionManager
|
||||
* @param RepoGroup $repoGroup
|
||||
* @param UserFactory $userFactory
|
||||
|
@ -63,7 +66,7 @@ class SpecialNuke extends SpecialPage {
|
|||
*/
|
||||
public function __construct(
|
||||
JobQueueGroup $jobQueueGroup,
|
||||
ILoadBalancer $loadBalancer,
|
||||
IConnectionProvider $dbProvider,
|
||||
PermissionManager $permissionManager,
|
||||
RepoGroup $repoGroup,
|
||||
UserFactory $userFactory,
|
||||
|
@ -72,7 +75,7 @@ class SpecialNuke extends SpecialPage {
|
|||
) {
|
||||
parent::__construct( 'Nuke', 'nuke' );
|
||||
$this->jobQueueGroup = $jobQueueGroup;
|
||||
$this->loadBalancer = $loadBalancer;
|
||||
$this->dbProvider = $dbProvider;
|
||||
$this->permissionManager = $permissionManager;
|
||||
$this->repoGroup = $repoGroup;
|
||||
$this->userFactory = $userFactory;
|
||||
|
@ -343,54 +346,39 @@ class SpecialNuke extends SpecialPage {
|
|||
* @return array
|
||||
*/
|
||||
protected function getNewPages( $username, $limit, $namespace = null ) {
|
||||
$dbr = $this->loadBalancer->getConnection( DB_REPLICA );
|
||||
|
||||
$what = [
|
||||
'rc_namespace',
|
||||
'rc_title',
|
||||
];
|
||||
|
||||
$where = [
|
||||
$dbr->makeList( [
|
||||
'rc_new' => 1,
|
||||
$dbr->makeList( [
|
||||
'rc_log_type' => 'upload',
|
||||
'rc_log_action' => 'upload',
|
||||
], LIST_AND ),
|
||||
], LIST_OR ),
|
||||
];
|
||||
$dbr = $this->dbProvider->getReplicaDatabase();
|
||||
$queryBuilder = $dbr->newSelectQueryBuilder()
|
||||
->select( [ 'rc_namespace', 'rc_title' ] )
|
||||
->from( 'recentchanges' )
|
||||
->join( 'actor', null, 'actor_id=rc_actor' )
|
||||
->where(
|
||||
$dbr->expr( 'rc_new', '=', 1 )->orExpr(
|
||||
$dbr->expr( 'rc_log_type', '=', 'upload' )
|
||||
->and( 'rc_log_action', '=', 'upload' )
|
||||
)
|
||||
)
|
||||
->orderBy( 'rc_timestamp', SelectQueryBuilder::SORT_DESC )
|
||||
->limit( $limit );
|
||||
|
||||
if ( $username === '' ) {
|
||||
$what['rc_user_text'] = 'actor_name';
|
||||
$queryBuilder->field( 'actor_name', 'rc_user_text' );
|
||||
} else {
|
||||
$where['actor_name'] = $username;
|
||||
$queryBuilder->andWhere( [ 'actor_name' => $username ] );
|
||||
}
|
||||
|
||||
if ( $namespace !== null ) {
|
||||
$where['rc_namespace'] = $namespace;
|
||||
$queryBuilder->andWhere( [ 'rc_namespace' => $namespace ] );
|
||||
}
|
||||
|
||||
$pattern = $this->getRequest()->getText( 'pattern' );
|
||||
if ( $pattern !== null && trim( $pattern ) !== '' ) {
|
||||
// $pattern is a SQL pattern supporting wildcards, so buildLike
|
||||
// will not work.
|
||||
$where[] = 'rc_title LIKE ' . $dbr->addQuotes( $pattern );
|
||||
$queryBuilder->andWhere( $dbr->expr( 'rc_title', IExpression::LIKE, new LikeValue( $pattern ) ) );
|
||||
}
|
||||
|
||||
$result = $dbr->select(
|
||||
[ 'recentchanges', 'actor' ],
|
||||
$what,
|
||||
$where,
|
||||
__METHOD__,
|
||||
[
|
||||
'ORDER BY' => 'rc_timestamp DESC',
|
||||
'LIMIT' => $limit
|
||||
],
|
||||
[ 'actor' => [ 'JOIN', 'actor_id=rc_actor' ] ]
|
||||
);
|
||||
|
||||
$result = $queryBuilder->caller( __METHOD__ )->fetchResultSet();
|
||||
$pages = [];
|
||||
|
||||
foreach ( $result as $row ) {
|
||||
$pages[] = [
|
||||
Title::makeTitle( $row->rc_namespace, $row->rc_title ),
|
||||
|
|
Loading…
Reference in a new issue