/**
* Add a set of tables to the internal array
- * @param string|string[] $tables Table name or array of table names
+ * @param string|array $tables Table name or array of table names
+ * or nested arrays for joins using parentheses for grouping
* @param string|null $alias Table alias, or null for no alias. Cannot be
* used with multiple tables
*/
protected function addTables( $tables, $alias = null ) {
if ( is_array( $tables ) ) {
- if ( !is_null( $alias ) ) {
+ if ( $alias !== null ) {
ApiBase::dieDebug( __METHOD__, 'Multiple table aliases not supported' );
}
$this->tables = array_merge( $this->tables, $tables );
+ } elseif ( $alias !== null ) {
+ $this->tables[$alias] = $tables;
} else {
- if ( !is_null( $alias ) ) {
- $this->tables[$alias] = $tables;
- } else {
- $this->tables[] = $tables;
- }
+ $this->tables[] = $tables;
}
}
if ( count( $ids ) ) {
$ids = $this->filterIDs( [ [ $table, $field ] ], $ids );
- if ( !count( $ids ) ) {
+ if ( $ids === [] ) {
// Return nothing, no IDs are valid
$this->where[] = '0 = 1';
} else {
return Hooks::run( 'ApiQueryBaseProcessRow', [ $this, $row, &$data, &$hookData ] );
}
- /**
- * @deprecated since 1.33, use LinkFilter::getQueryConditions() instead
- * @param string|null $query
- * @param string|null $protocol
- * @return null|string
- */
- public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
- wfDeprecated( __METHOD__, '1.33' );
- $db = $this->getDB();
- if ( $query !== null && $query !== '' ) {
- if ( is_null( $protocol ) ) {
- $protocol = 'http://';
- }
-
- $likeQuery = LinkFilter::makeLikeArray( $query, $protocol );
- if ( !$likeQuery ) {
- $this->dieWithError( 'apierror-badquery' );
- }
-
- $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
-
- return 'el_index ' . $db->buildLike( $likeQuery );
- } elseif ( !is_null( $protocol ) ) {
- return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
- }
-
- return null;
- }
-
/**
* Filters hidden users (where the user doesn't have the right to view them)
* Also adds relevant block information
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' );
* @param string $prefix Module prefix
*/
public static function addTitleInfo( &$arr, $title, $prefix = '' ) {
- $arr[$prefix . 'ns'] = intval( $title->getNamespace() );
+ $arr[$prefix . 'ns'] = (int)$title->getNamespace();
$arr[$prefix . 'title'] = $title->getPrefixedText();
}
$result = $this->getResult();
ApiResult::setIndexedTagName( $data, $this->getModulePrefix() );
- return $result->addValue( [ 'query', 'pages', intval( $pageId ) ],
+ return $result->addValue( [ 'query', 'pages', (int)$pageId ],
$this->getModuleName(),
$data );
}
/**
* Same as addPageSubItems(), but one element of $data at a time
* @param int $pageId Page ID
- * @param array $item Data array à la ApiResult
+ * @param mixed $item Data à la ApiResult
* @param string|null $elemname XML element name. If null, getModuleName()
* is used
* @return bool Whether the element fit in the result