* @ingroup SpecialPage
*/
+use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
if ( $qp === null ) {
// QueryPage subclass, Special page name
$qp = [
- [ AncientPagesPage::class, 'Ancientpages' ],
- [ BrokenRedirectsPage::class, 'BrokenRedirects' ],
- [ DeadendPagesPage::class, 'Deadendpages' ],
- [ DoubleRedirectsPage::class, 'DoubleRedirects' ],
- [ FileDuplicateSearchPage::class, 'FileDuplicateSearch' ],
- [ ListDuplicatedFilesPage::class, 'ListDuplicatedFiles' ],
- [ LinkSearchPage::class, 'LinkSearch' ],
- [ ListredirectsPage::class, 'Listredirects' ],
- [ LonelyPagesPage::class, 'Lonelypages' ],
- [ LongPagesPage::class, 'Longpages' ],
- [ MediaStatisticsPage::class, 'MediaStatistics' ],
- [ MIMEsearchPage::class, 'MIMEsearch' ],
- [ MostcategoriesPage::class, 'Mostcategories' ],
+ [ SpecialAncientPages::class, 'Ancientpages' ],
+ [ SpecialBrokenRedirects::class, 'BrokenRedirects' ],
+ [ SpecialDeadendPages::class, 'Deadendpages' ],
+ [ SpecialDoubleRedirects::class, 'DoubleRedirects' ],
+ [ SpecialFileDuplicateSearch::class, 'FileDuplicateSearch' ],
+ [ SpecialListDuplicatedFiles::class, 'ListDuplicatedFiles' ],
+ [ SpecialLinkSearch::class, 'LinkSearch' ],
+ [ SpecialListRedirects::class, 'Listredirects' ],
+ [ SpecialLonelyPages::class, 'Lonelypages' ],
+ [ SpecialLongPages::class, 'Longpages' ],
+ [ SpecialMediaStatistics::class, 'MediaStatistics' ],
+ [ SpecialMIMESearch::class, 'MIMEsearch' ],
+ [ SpecialMostCategories::class, 'Mostcategories' ],
[ MostimagesPage::class, 'Mostimages' ],
- [ MostinterwikisPage::class, 'Mostinterwikis' ],
- [ MostlinkedCategoriesPage::class, 'Mostlinkedcategories' ],
- [ MostlinkedTemplatesPage::class, 'Mostlinkedtemplates' ],
- [ MostlinkedPage::class, 'Mostlinked' ],
- [ MostrevisionsPage::class, 'Mostrevisions' ],
- [ FewestrevisionsPage::class, 'Fewestrevisions' ],
- [ ShortPagesPage::class, 'Shortpages' ],
- [ UncategorizedCategoriesPage::class, 'Uncategorizedcategories' ],
- [ UncategorizedPagesPage::class, 'Uncategorizedpages' ],
- [ UncategorizedImagesPage::class, 'Uncategorizedimages' ],
- [ UncategorizedTemplatesPage::class, 'Uncategorizedtemplates' ],
- [ UnusedCategoriesPage::class, 'Unusedcategories' ],
- [ UnusedimagesPage::class, 'Unusedimages' ],
- [ WantedCategoriesPage::class, 'Wantedcategories' ],
+ [ SpecialMostInterwikis::class, 'Mostinterwikis' ],
+ [ SpecialMostLinkedCategories::class, 'Mostlinkedcategories' ],
+ [ SpecialMostLinkedTemplates::class, 'Mostlinkedtemplates' ],
+ [ SpecialMostLinked::class, 'Mostlinked' ],
+ [ SpecialMostRevisions::class, 'Mostrevisions' ],
+ [ SpecialFewestRevisions::class, 'Fewestrevisions' ],
+ [ SpecialShortPages::class, 'Shortpages' ],
+ [ SpecialUncategorizedCategories::class, 'Uncategorizedcategories' ],
+ [ SpecialUncategorizedPages::class, 'Uncategorizedpages' ],
+ [ SpecialUncategorizedImages::class, 'Uncategorizedimages' ],
+ [ SpecialUncategorizedTemplates::class, 'Uncategorizedtemplates' ],
+ [ SpecialUnusedCategories::class, 'Unusedcategories' ],
+ [ SpecialUnusedImages::class, 'Unusedimages' ],
+ [ SpecialWantedCategories::class, 'Wantedcategories' ],
[ WantedFilesPage::class, 'Wantedfiles' ],
[ WantedPagesPage::class, 'Wantedpages' ],
- [ WantedTemplatesPage::class, 'Wantedtemplates' ],
- [ UnwatchedpagesPage::class, 'Unwatchedpages' ],
- [ UnusedtemplatesPage::class, 'Unusedtemplates' ],
- [ WithoutInterwikiPage::class, 'Withoutinterwiki' ],
+ [ SpecialWantedTemplates::class, 'Wantedtemplates' ],
+ [ SpecialUnwatchedPages::class, 'Unwatchedpages' ],
+ [ SpecialUnusedTemplates::class, 'Unusedtemplates' ],
+ [ SpecialWithoutInterwiki::class, 'Withoutinterwiki' ],
];
Hooks::run( 'wgQueryPages', [ &$qp ] );
}
return wfGetDB( DB_REPLICA, [ $this->getName(), 'QueryPage::recache', 'vslow' ] );
}
+ /**
+ * Remove a cached result.
+ * Useful for interactive backlogs where the user can fix problems in-place.
+ * @param LinkTarget $title The page to remove.
+ * @since 1.34
+ */
+ public function delete( LinkTarget $title ) {
+ if ( $this->isCached() ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'querycache', [
+ 'qc_type' => $this->getName(),
+ 'qc_namespace' => $title->getNamespace(),
+ 'qc_title' => $title->getDBkey(),
+ ], __METHOD__ );
+ }
+ }
+
/**
* Run the query and return the result
* @param int|bool $limit Numerical limit or false for no limit