diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2014-12-27 15:41:37 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2014-12-31 11:43:28 +0100 |
commit | c1f9b1f7b1b77776192048005dcc66dcf3df2bfb (patch) | |
tree | 2b38796e738dd74cb42ecd9bfd151803108386bc /includes/specials/SpecialWantedfiles.php | |
parent | b88ab0086858470dd1f644e64cb4e4f62bb2be9b (diff) |
Update to MediaWiki 1.24.1
Diffstat (limited to 'includes/specials/SpecialWantedfiles.php')
-rw-r--r-- | includes/specials/SpecialWantedfiles.php | 77 |
1 files changed, 67 insertions, 10 deletions
diff --git a/includes/specials/SpecialWantedfiles.php b/includes/specials/SpecialWantedfiles.php index b5c1fdbe..937a503c 100644 --- a/includes/specials/SpecialWantedfiles.php +++ b/includes/specials/SpecialWantedfiles.php @@ -49,40 +49,97 @@ class WantedFilesPage extends WantedQueryPage { $category = false; } + $noForeign = ''; + if ( !$this->likelyToHaveFalsePositives() ) { + // Additional messages for grep: + // wantedfiletext-cat-noforeign, wantedfiletext-nocat + $noForeign = '-noforeign'; + } + if ( $category ) { return $this - ->msg( 'wantedfiletext-cat' ) + ->msg( 'wantedfiletext-cat' . $noForeign ) ->params( $category->getFullText() ) ->parseAsBlock(); } else { return $this - ->msg( 'wantedfiletext-nocat' ) + ->msg( 'wantedfiletext-nocat' . $noForeign ) ->parseAsBlock(); } } /** + * Whether foreign repos are likely to cause false positives + * + * In its own function to allow subclasses to override. + * @see SpecialWantedFilesGUOverride in GlobalUsage extension. + * @since 1.24 + */ + protected function likelyToHaveFalsePositives() { + return RepoGroup::singleton()->hasForeignRepos(); + } + + /** * KLUGE: The results may contain false positives for files * that exist e.g. in a shared repo. Setting this at least * keeps them from showing up as redlinks in the output, even * if it doesn't fix the real problem (bug 6220). + * + * @note could also have existing links here from broken file + * redirects. * @return bool */ function forceExistenceCheck() { return true; } + /** + * Does the file exist? + * + * Use wfFindFile so we still think file namespace pages without + * files are missing, but valid file redirects and foreign files are ok. + * + * @return boolean + */ + protected function existenceCheck( Title $title ) { + return (bool) wfFindFile( $title ); + } + function getQueryInfo() { return array( - 'tables' => array( 'imagelinks', 'image' ), - 'fields' => array( 'namespace' => NS_FILE, - 'title' => 'il_to', - 'value' => 'COUNT(*)' ), - 'conds' => array( 'img_name IS NULL' ), + 'tables' => array( + 'imagelinks', + 'page', + 'redirect', + 'img1' => 'image', + 'img2' => 'image', + ), + 'fields' => array( + 'namespace' => NS_FILE, + 'title' => 'il_to', + 'value' => 'COUNT(*)' + ), + 'conds' => array( + 'img1.img_name' => null, + // We also need to exclude file redirects + 'img2.img_name' => null, + ), 'options' => array( 'GROUP BY' => 'il_to' ), - 'join_conds' => array( 'image' => - array( 'LEFT JOIN', - array( 'il_to = img_name' ) + 'join_conds' => array( + 'img1' => array( 'LEFT JOIN', + 'il_to = img1.img_name' + ), + 'page' => array( 'LEFT JOIN', array( + 'il_to = page_title', + 'page_namespace' => NS_FILE, + ) ), + 'redirect' => array( 'LEFT JOIN', array( + 'page_id = rd_from', + 'rd_namespace' => NS_FILE, + 'rd_interwiki' => '' + ) ), + 'img2' => array( 'LEFT JOIN', + 'rd_title = img2.img_name' ) ) ); |