RepoGroup::singleton()->findFiles() returns an associative array mapping
the redirect *target* to the image object; the image object refers back
to the original title queried.
If a redirect and its target are both queried,
RepoGroup::singleton()->findFiles() will return an entry for the target
title only, mapping to an image object that may have getOriginalTitle()
returning the redirect. If this happens, prop=imageinfo will never see
an entry for which getOriginalTitle()->isRedirect() is false and so will
not return any information about the image.
The fix is to ignore getOriginalTitle() entirely. Instead, we just go
through each of our queried titles and see if we got any result back.
Note this automatically handles a "redirects=1" query correctly, since
in that case any local redirect will already have been followed before
we ever got the list of titles to query.
Change-Id: I0b2982901e2dc4491e2933291fd97697b2a622a9
* (bug 35885) Removed version parameter and all getVersion() methods.
* action=options now takes a "resetkinds" option, which allows only resetting
certain types of preferences when the "reset" option is set.
+* (bug 36751) ApiQueryImageInfo now returns imageinfo for the redirect target
+ when queried with &redirects=.
+* (bug 31849) ApiQueryImageInfo no longer gets confused when asked for info on
+ a redirect and its target.
+* (bug 43849) ApiQueryImageInfo no longer throws exceptions with ForeignDBRepo
+ redirects.
=== API internal changes in 1.21 ===
* For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
} else {
$images = RepoGroup::singleton()->findFiles( $titles );
}
- $resolveRedirects = $this->getPageSet()->isResolvingRedirects();
- foreach ( $images as $img ) {
- // Skip redirects
- if ( $img->getOriginalTitle()->isRedirect() && !$resolveRedirects ) {
+ foreach ( $titles as $title ) {
+ if ( !isset( $images[$title] ) ) {
continue;
}
$start = $skip ? $fromTimestamp : $params['start'];
- $pageId = $pageIds[NS_FILE][$img->getTitle()->getDBkey()];
+ $pageId = $pageIds[NS_FILE][$title];
+ $img = $images[$title];
$fit = $result->addValue(
array( 'query', 'pages', intval( $pageId ) ),