* @return array Query info
*/
protected function getQueryInfoReal( $table ) {
+ $dbr = wfGetDB( DB_REPLICA );
$prefix = $table === 'oldimage' ? 'oi' : 'img';
$tables = [ $table ];
- $fields = $this->getFieldNames();
+ $fields = array_keys( $this->getFieldNames() );
+ $fields = array_combine( $fields, $fields );
unset( $fields['img_description'] );
unset( $fields['img_user_text'] );
- $fields = array_keys( $fields );
if ( $table === 'oldimage' ) {
- foreach ( $fields as $id => &$field ) {
- if ( substr( $field, 0, 4 ) !== 'img_' ) {
- continue;
+ foreach ( $fields as $id => $field ) {
+ if ( substr( $id, 0, 4 ) === 'img_' ) {
+ $fields[$id] = $prefix . substr( $field, 3 );
}
- $field = $prefix . substr( $field, 3 ) . ' AS ' . $field;
- }
- $fields[array_search( 'top', $fields )] = "'no' AS top";
- } else {
- if ( $this->mShowAll ) {
- $fields[array_search( 'top', $fields )] = "'yes' AS top";
}
+ $fields['top'] = $dbr->addQuotes( 'no' );
+ } elseif ( $this->mShowAll ) {
+ $fields['top'] = $dbr->addQuotes( 'yes' );
}
- $fields[array_search( 'thumb', $fields )] = $prefix . '_name AS thumb';
+ $fields['thumb'] = $prefix . '_name';
$options = $join_conds = [];
$tables += $commentQuery['tables'];
$fields += $commentQuery['fields'];
$join_conds += $commentQuery['joins'];
- $fields['description_field'] = "'{$prefix}_description'";
+ $fields['description_field'] = $dbr->addQuotes( "{$prefix}_description" );
# User fields
$actorQuery = ActorMigration::newMigration()->getJoin( $prefix . '_user' );
# Depends on $wgMiserMode
# Will also not happen if mShowAll is true.
- if ( isset( $this->mFieldNames['count'] ) ) {
- $tables[] = 'oldimage';
-
- # Need to rewrite this one
- foreach ( $fields as &$field ) {
- if ( $field == 'count' ) {
- $field = 'COUNT(oi_archive_name) AS count';
- }
- }
- unset( $field );
-
- $columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) );
- $options = [ 'GROUP BY' => array_merge( [ $fields['img_user'] ], $columnlist ) ];
- $join_conds['oldimage'] = [ 'LEFT JOIN', 'oi_name = img_name' ];
+ if ( isset( $fields['count'] ) ) {
+ $fields['count'] = $dbr->buildSelectSubquery(
+ 'oldimage',
+ 'COUNT(oi_archive_name)',
+ 'oi_name = img_name',
+ __METHOD__
+ );
}
return [
* is descending, so I renamed it to $asc here.
* @param int $offset
* @param int $limit
- * @param bool $asc
- * @return array
+ * @param bool $order IndexPager::QUERY_ASCENDING or IndexPager::QUERY_DESCENDING
+ * @return FakeResultWrapper
* @throws MWException
*/
- function reallyDoQuery( $offset, $limit, $asc ) {
+ function reallyDoQuery( $offset, $limit, $order ) {
$prevTableName = $this->mTableName;
$this->mTableName = 'image';
list( $tables, $fields, $conds, $fname, $options, $join_conds ) =
- $this->buildQueryInfo( $offset, $limit, $asc );
+ $this->buildQueryInfo( $offset, $limit, $order );
$imageRes = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds );
$this->mTableName = $prevTableName;
$this->mIndexField = 'oi_' . substr( $this->mIndexField, 4 );
list( $tables, $fields, $conds, $fname, $options, $join_conds ) =
- $this->buildQueryInfo( $offset, $limit, $asc );
+ $this->buildQueryInfo( $offset, $limit, $order );
$oldimageRes = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds );
$this->mTableName = $prevTableName;
$this->mIndexField = $oldIndex;
- return $this->combineResult( $imageRes, $oldimageRes, $limit, $asc );
+ return $this->combineResult( $imageRes, $oldimageRes, $limit, $order );
}
/**
$resultArray[] = $topRes2;
$topRes2 = $res2->next();
}
+ } elseif ( !$ascending ) {
+ $resultArray[] = $topRes2;
+ $topRes2 = $res2->next();
} else {
- if ( !$ascending ) {
- $resultArray[] = $topRes2;
- $topRes2 = $res2->next();
- } else {
- $resultArray[] = $topRes1;
- $topRes1 = $res1->next();
- }
+ $resultArray[] = $topRes1;
+ $topRes1 = $res1->next();
}
}
* @throws MWException
*/
function formatValue( $field, $value ) {
- $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ $services = MediaWikiServices::getInstance();
+ $linkRenderer = $services->getLinkRenderer();
switch ( $field ) {
case 'thumb':
$opt = [ 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) ];
$filePage,
$filePage->getText()
);
- $download = Xml::element( 'a',
- [ 'href' => wfLocalFile( $filePage )->getUrl() ],
+ $download = Xml::element(
+ 'a',
+ [ 'href' => $services->getRepoGroup()->findFile( $filePage )->getUrl() ],
$imgfile
);
$download = $this->msg( 'parentheses' )->rawParams( $download )->escaped();
return $this->getLanguage()->formatNum( intval( $value ) + 1 );
case 'top':
// Messages: listfiles-latestversion-yes, listfiles-latestversion-no
- return $this->msg( 'listfiles-latestversion-' . $value );
+ return $this->msg( 'listfiles-latestversion-' . $value )->escaped();
default:
throw new MWException( "Unknown field '$field'" );
}