From a793faa88d01dbfea255bcf4632dcabd369914fa Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Mon, 3 Dec 2018 09:29:50 -0500 Subject: [PATCH] API: Use parenthesized join in ApiQueryBase::showHiddenUsersAddBlockInfo The query is LEFT JOINing ipblocks, so we need to properly scope the new JOINs with the comment and actor tables to get the block reason and by-actor. Bug: T210937 Change-Id: I230a4ab78e3ba6e83008b0466eeca8d40013ba3d --- includes/api/ApiQueryBase.php | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/includes/api/ApiQueryBase.php b/includes/api/ApiQueryBase.php index b243ceeb34..d9fe50b8d6 100644 --- a/includes/api/ApiQueryBase.php +++ b/includes/api/ApiQueryBase.php @@ -464,32 +464,31 @@ abstract class ApiQueryBase extends ApiBase { public function showHiddenUsersAddBlockInfo( $showBlockInfo ) { $db = $this->getDB(); - $this->addTables( 'ipblocks' ); - $this->addJoinConds( [ - 'ipblocks' => [ 'LEFT JOIN', [ + $tables = [ 'ipblocks' ]; + $fields = [ 'ipb_deleted' ]; + $joinConds = [ + 'blk' => [ 'LEFT JOIN', [ 'ipb_user=user_id', 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() ), ] ], - ] ); - - $this->addFields( 'ipb_deleted' ); + ]; if ( $showBlockInfo ) { - $this->addFields( [ + $actorQuery = ActorMigration::newMigration()->getJoin( 'ipb_by' ); + $commentQuery = CommentStore::getStore()->getJoin( 'ipb_reason' ); + $tables += $actorQuery['tables'] + $commentQuery['tables']; + $joinConds += $actorQuery['joins'] + $commentQuery['joins']; + $fields = array_merge( $fields, [ 'ipb_id', 'ipb_expiry', 'ipb_timestamp' - ] ); - $actorQuery = ActorMigration::newMigration()->getJoin( 'ipb_by' ); - $this->addTables( $actorQuery['tables'] ); - $this->addFields( $actorQuery['fields'] ); - $this->addJoinConds( $actorQuery['joins'] ); - $commentQuery = CommentStore::getStore()->getJoin( 'ipb_reason' ); - $this->addTables( $commentQuery['tables'] ); - $this->addFields( $commentQuery['fields'] ); - $this->addJoinConds( $commentQuery['joins'] ); + ], $actorQuery['fields'], $commentQuery['fields'] ); } + $this->addTables( [ 'blk' => $tables ] ); + $this->addFields( $fields ); + $this->addJoinConds( $joinConds ); + // Don't show hidden names if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' ); -- 2.20.1