MediaWiki REL1_30
SpecialBrokenRedirects.php
Go to the documentation of this file.
1<?php
26
34 function __construct( $name = 'BrokenRedirects' ) {
35 parent::__construct( $name );
36 }
37
38 public function isExpensive() {
39 return true;
40 }
41
42 function isSyndicated() {
43 return false;
44 }
45
46 function sortDescending() {
47 return false;
48 }
49
50 function getPageHeader() {
51 return $this->msg( 'brokenredirectstext' )->parseAsBlock();
52 }
53
54 public function getQueryInfo() {
56
57 return [
58 'tables' => [
59 'redirect',
60 'p1' => 'page',
61 'p2' => 'page',
62 ],
63 'fields' => [
64 'namespace' => 'p1.page_namespace',
65 'title' => 'p1.page_title',
66 'value' => 'p1.page_title',
67 'rd_namespace',
68 'rd_title',
69 'rd_fragment',
70 ],
71 'conds' => [
72 // Exclude pages that don't exist locally as wiki pages,
73 // but aren't "broken" either.
74 // Special pages and interwiki links
75 'rd_namespace >= 0',
76 'rd_interwiki IS NULL OR rd_interwiki = ' . $dbr->addQuotes( '' ),
77 'p2.page_namespace IS NULL',
78 ],
79 'join_conds' => [
80 'p1' => [ 'JOIN', [
81 'rd_from=p1.page_id',
82 ] ],
83 'p2' => [ 'LEFT JOIN', [
84 'rd_namespace=p2.page_namespace',
85 'rd_title=p2.page_title'
86 ] ],
87 ],
88 ];
89 }
90
94 function getOrderFields() {
95 return [ 'rd_namespace', 'rd_title', 'rd_from' ];
96 }
97
103 function formatResult( $skin, $result ) {
104 $fromObj = Title::makeTitle( $result->namespace, $result->title );
105 if ( isset( $result->rd_title ) ) {
106 $toObj = Title::makeTitle( $result->rd_namespace, $result->rd_title, $result->rd_fragment );
107 } else {
108 $blinks = $fromObj->getBrokenLinksFrom(); # TODO: check for redirect, not for links
109 if ( $blinks ) {
110 $toObj = $blinks[0];
111 } else {
112 $toObj = false;
113 }
114 }
115
117 // $toObj may very easily be false if the $result list is cached
118 if ( !is_object( $toObj ) ) {
119 return '<del>' . $linkRenderer->makeLink( $fromObj ) . '</del>';
120 }
121
122 $from = $linkRenderer->makeKnownLink(
123 $fromObj,
124 null,
125 [],
126 [ 'redirect' => 'no' ]
127 );
128 $links = [];
129 // if the page is editable, add an edit link
130 if (
131 // check user permissions
132 $this->getUser()->isAllowed( 'edit' ) &&
133 // check, if the content model is editable through action=edit
134 ContentHandler::getForTitle( $fromObj )->supportsDirectEditing()
135 ) {
136 $links[] = $linkRenderer->makeKnownLink(
137 $fromObj,
138 $this->msg( 'brokenredirects-edit' )->text(),
139 [],
140 [ 'action' => 'edit' ]
141 );
142 }
143 $to = $linkRenderer->makeBrokenLink( $toObj, $toObj->getFullText() );
144 $arr = $this->getLanguage()->getArrow();
145
146 $out = $from . $this->msg( 'word-separator' )->escaped();
147
148 if ( $this->getUser()->isAllowed( 'delete' ) ) {
149 $links[] = $linkRenderer->makeKnownLink(
150 $fromObj,
151 $this->msg( 'brokenredirects-delete' )->text(),
152 [],
153 [ 'action' => 'delete' ]
154 );
155 }
156
157 if ( $links ) {
158 $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()
159 ->pipeList( $links ) )->escaped();
160 }
161 $out .= " {$arr} {$to}";
162
163 return $out;
164 }
165
172 function preprocessResults( $db, $res ) {
174 }
175
176 protected function getGroupName() {
177 return 'maintenance';
178 }
179}
This list may contain false positives That usually means there is additional text with links below the first Each row contains links to the first and second redirect
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
A special page listing redirects to non existent page.
getQueryInfo()
Subclasses return an SQL query here, formatted as an array with the following keys: tables => Table(s...
isSyndicated()
Sometime we don't want to build rss / atom feeds.
__construct( $name='BrokenRedirects')
getPageHeader()
The content returned by this function will be output before any result.
preprocessResults( $db, $res)
Cache page content model for performance.
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
sortDescending()
Override to sort by increasing values.
isExpensive()
Is this query expensive (for some definition of expensive)? Then we don't let it run in miser mode.
static getForTitle(Title $title)
Returns the appropriate ContentHandler singleton for the given title.
This is a class for doing query pages; since they're almost all the same, we factor out some of the f...
Definition QueryPage.php:34
executeLBFromResultWrapper(ResultWrapper $res, $ns=null)
Creates a new LinkBatch object, adds all pages from the passed ResultWrapper (MUST include title and ...
getUser()
Shortcut to get the User executing this instance.
msg( $key)
Wrapper around wfMessage that sets the current context.
getLanguage()
Shortcut to get user's language.
MediaWiki Linker LinkRenderer null $linkRenderer
Result wrapper for grabbing data queried from an IDatabase object.
if(! $regexes) $dbr
Definition cleanup.php:94
$res
Definition database.txt:21
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at etc Handles the details of getting and saving to the user table of the and dealing with sessions and cookies OutputPage Encapsulates the entire HTML page that will be sent in response to any server request It is used by calling its functions to add text
Definition design.txt:18
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output $out
Definition hooks.txt:862
in this case you re responsible for computing and outputting the entire conflict i the difference between revisions and your text headers and sections and Diff or overridable Default is either copyrightwarning or copyrightwarning2 overridable Default is editpage tos summary such as anonymity and the real check
Definition hooks.txt:1471
Basic database interface for live and lazy-loaded relation database handles.
Definition IDatabase.php:40
const DB_REPLICA
Definition defines.php:25
This document describes the XML format used to represent information about external sites known to a MediaWiki installation This information about external sites is used to allow inter wiki links
in the order they appear.
Definition sitelist.txt:3