summaryrefslogtreecommitdiff
path: root/includes/specials/SpecialWantedfiles.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/specials/SpecialWantedfiles.php')
-rw-r--r--includes/specials/SpecialWantedfiles.php77
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'
)
)
);