* @ingroup Pager
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
class ImageListPager extends TablePager {
$conds = [];
if ( !is_null( $this->mUserName ) ) {
- $conds[$prefix . '_user_text'] = $this->mUserName;
+ // getQueryInfoReal() should have handled the tables and joins.
+ $dbr = wfGetDB( DB_REPLICA );
+ $actorWhere = ActorMigration::newMigration()->getWhere(
+ $dbr,
+ $prefix . '_user',
+ User::newFromName( $this->mUserName, false )
+ );
+ $conds[] = $actorWhere['conds'];
}
if ( $this->mSearch !== '' ) {
}
$sortable = [ 'img_timestamp', 'img_name', 'img_size' ];
/* For reference, the indicies we can use for sorting are:
- * On the image table: img_user_timestamp, img_usertext_timestamp,
+ * On the image table: img_user_timestamp/img_usertext_timestamp/img_actor_timestamp,
* img_size, img_timestamp
- * On oldimage: oi_usertext_timestamp, oi_name_timestamp
+ * On oldimage: oi_usertext_timestamp/oi_actor_timestamp, oi_name_timestamp
*
* In particular that means we cannot sort by timestamp when not filtering
* by user and including old images in the results. Which is sad.
$tables = [ $table ];
$fields = $this->getFieldNames();
unset( $fields['img_description'] );
+ unset( $fields['img_user_text'] );
$fields = array_keys( $fields );
if ( $table === 'oldimage' ) {
$fields[array_search( 'top', $fields )] = "'yes' AS top";
}
}
- $fields[] = $prefix . '_user AS img_user';
$fields[array_search( 'thumb', $fields )] = $prefix . '_name AS thumb';
$options = $join_conds = [];
# Description field
- $commentQuery = CommentStore::newKey( $prefix . '_description' )->getJoin();
+ $commentQuery = CommentStore::getStore()->getJoin( $prefix . '_description' );
$tables += $commentQuery['tables'];
$fields += $commentQuery['fields'];
$join_conds += $commentQuery['joins'];
$fields['description_field'] = "'{$prefix}_description'";
+ # User fields
+ $actorQuery = ActorMigration::newMigration()->getJoin( $prefix . '_user' );
+ $tables += $actorQuery['tables'];
+ $join_conds += $actorQuery['joins'];
+ $fields['img_user'] = $actorQuery['fields'][$prefix . '_user'];
+ $fields['img_user_text'] = $actorQuery['fields'][$prefix . '_user_text'];
+ $fields['img_actor'] = $actorQuery['fields'][$prefix . '_actor'];
+
# Depends on $wgMiserMode
# Will also not happen if mShowAll is true.
if ( isset( $this->mFieldNames['count'] ) ) {
unset( $field );
$columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) );
- $options = [ 'GROUP BY' => array_merge( [ 'img_user' ], $columnlist ) ];
+ $options = [ 'GROUP BY' => array_merge( [ $fields['img_user'] ], $columnlist ) ];
$join_conds['oldimage'] = [ 'LEFT JOIN', 'oi_name = img_name' ];
}
*
* Note: This will throw away some results
*
- * @param ResultWrapper $res1
- * @param ResultWrapper $res2
+ * @param IResultWrapper $res1
+ * @param IResultWrapper $res2
* @param int $limit
* @param bool $ascending See note about $asc in $this->reallyDoQuery
* @return FakeResultWrapper $res1 and $res2 combined
return htmlspecialchars( $this->getLanguage()->formatSize( $value ) );
case 'img_description':
$field = $this->mCurrentRow->description_field;
- $value = CommentStore::newKey( $field )->getComment( $this->mCurrentRow )->text;
+ $value = CommentStore::getStore()->getComment( $field, $this->mCurrentRow )->text;
return Linker::formatComment( $value );
case 'count':
return $this->getLanguage()->formatNum( intval( $value ) + 1 );