Initial revision
[lhc/web/wiklou.git] / includes / SpecialMaintenance.php
1 <?
2
3 function sns()
4 {
5 global $wgLang ;
6 $ns = $wgLang->getNamespaces() ;
7 return $ns[-1] ;
8 }
9
10 function wfSpecialMaintenance ()
11 {
12 global $wgUser, $wgOut, $wgLang, $wgTitle, $subfunction, $wgLanguageCode, $submitmll;
13 global $wgMiserMode;
14 if ( $wgMiserMode ) {
15 $wgOut->addWikiText( wfMsg( "perfdisabled" ) );
16 return;
17 }
18
19 if ( $subfunction == "disambiguations" ) return wfSpecialDisambiguations() ;
20 if ( $subfunction == "doubleredirects" ) return wfSpecialDoubleRedirects() ;
21 if ( $subfunction == "brokenredirects" ) return wfSpecialBrokenRedirects() ;
22 if ( $subfunction == "selflinks" ) return wfSpecialSelfLinks() ;
23 if ( $subfunction == "mispeelings" ) return wfSpecialMispeelings() ;
24 if ( $subfunction == "missinglanguagelinks" ) return wfSpecialMissingLanguageLinks() ;
25 if ( isset ( $submitmll ) ) return wfSpecialMissingLanguageLinks() ;
26
27 $sk = $wgUser->getSkin();
28 $ns = $wgLang->getNamespaces() ;
29 $r = wfMsg("maintnancepagetext") ;
30 $r .= "<UL>\n" ;
31 $r .= "<li>".getMPL("disambiguations")."</li>\n" ;
32 $r .= "<li>".getMPL("doubleredirects")."</li>\n" ;
33 $r .= "<li>".getMPL("brokenredirects")."</li>\n" ;
34 $r .= "<li>".getMPL("selflinks")."</li>\n" ;
35 $r .= "<li>".getMPL("mispeelings")."</li>\n" ;
36
37 $r .= "<li>";
38 $l = getMPL("missinglanguagelinks");
39 $l = str_replace ( "</a>" , "" , $l ) ;
40 $l = str_replace ( "<a " , "<FORM method=post " , $l ) ;
41 $l = explode ( ">" , $l ) ;
42 $l = $l[0] ;
43 $r .= $l.">\n" ;
44 $r .= "<input type=submit name='submitmll' value='" ;
45 $r .= wfMsg("missinglanguagelinksbutton");
46 $r .= "'>\n" ;
47 $r .= "<select name=thelang>\n" ;
48 $a = $wgLang->getLanguageNames();
49 $ak = array_keys ( $a ) ;
50 foreach ( $ak AS $k ) {
51 if ( $k != $wgLanguageCode )
52 $r .= "<option value='{$k}'>{$a[$k]}</option>\n" ;
53 }
54 $r .= "</select>\n" ;
55 $r .= "</FORM>\n</li>" ;
56
57 $r .= "</UL>\n" ;
58 $wgOut->addHTML ( $r ) ;
59 }
60
61 function getMPL ( $x )
62 {
63 global $wgUser , $wgLang;
64 $sk = $wgUser->getSkin() ;
65 return $sk->makeKnownLink(sns().":Maintenance",wfMsg($x),"subfunction={$x}") ;
66 }
67
68 function getMaintenancePageBacklink()
69 {
70 global $wgUser , $wgLang , $subfunction ;
71 $sk = $wgUser->getSkin() ;
72 $ns = $wgLang->getNamespaces() ;
73 $r = $sk->makeKnownLink (
74 $ns[-1].":Maintenance",
75 wfMsg("maintenancebacklink") ) ;
76 $t = wfMsg ( $subfunction ) ;
77
78 $s = "<table width=100% border=0><tr><td>";
79 $s .= "<h2>{$t}</h2></td><td align=right>";
80 $s .= "{$r}</td></tr></table>\n" ;
81 return $s ;
82 }
83
84
85 function wfSpecialDisambiguations()
86 {
87 global $wgUser, $wgOut, $wgLang, $wgTitle;
88 global $limit, $offset; # From query string
89 $fname = "wfSpecialDisambiguations";
90
91 if ( ! $limit ) {
92 $limit = $wgUser->getOption( "rclimit" );
93 if ( ! $limit ) { $limit = 50; }
94 }
95 if ( ! $offset ) { $offset = 0; }
96
97 $dp = wfStrencode( wfMsg("disambiguationspage") );
98
99 $sql = "SELECT la.l_from,la.l_to,"
100 . " lb.l_from AS source,lb.l_to AS dest,"
101 . " c.cur_id, c.cur_title AS dt"
102 . " FROM links AS la, links AS lb, cur AS c, cur AS d"
103 . " WHERE la.l_from='{$dp}'"
104 . " AND la.l_to=lb.l_to"
105 . " AND la.l_from<>lb.l_from"
106 . " AND c.cur_id=lb.l_to"
107 . " AND c.cur_namespace=0"
108 . " AND d.cur_title=lb.l_from"
109 . " AND d.cur_namespace=0"
110 . " LIMIT {$offset}, {$limit}";
111
112 $res = wfQuery( $sql, $fname );
113
114 $sk = $wgUser->getSkin();
115
116 $top = "<p>".wfMsg("disambiguationstext")."</p><br>\n";
117 $top = str_replace ( "$1" , $sk->makeKnownLink ( $dp ) , $top ) ;
118 $top = getMaintenancePageBacklink().$top ;
119 $top .= wfShowingResults( $offset, $limit );
120 $wgOut->addHTML( "<p>{$top}\n" );
121
122 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
123 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=disambiguations" , $sl ) ;
124 $wgOut->addHTML( "<br>{$sl}\n" );
125
126 $s = "<ol start=" . ( $offset + 1 ) . ">";
127 while ( $obj = wfFetchObject( $res ) ) {
128 $l1 = $sk->makeKnownLink ( $obj->source , "" , "redirect=no" ) ;
129 $l2 = $sk->makeKnownLink ( $obj->dt ) ;
130 $l3 = $sk->makeBrokenLink ( $obj->source , "(".wfMsg("qbedit").")" , "redirect=no" ) ;
131 $s .= "<li>{$l1} {$l3} => {$l2}</li>\n" ;
132 }
133 wfFreeResult( $res );
134 $s .= "</ol>";
135 $wgOut->addHTML( $s );
136 $wgOut->addHTML( "<p>{$sl}\n" );
137 }
138
139 function wfSpecialDoubleRedirects()
140 {
141 global $wgUser, $wgOut, $wgLang, $wgTitle;
142 global $limit, $offset; # From query string
143 $fname = "wfSpecialDoubleRedirects";
144
145 if ( ! $limit ) {
146 $limit = $wgUser->getOption( "rclimit" );
147 if ( ! $limit ) { $limit = 50; }
148 }
149 if ( ! $offset ) { $offset = 0; }
150
151 $sql = "SELECT l_from,l_to,cb.cur_text AS rt,cb.cur_title AS ti FROM links,cur AS ca, cur AS cb WHERE ca.cur_is_redirect=1 AND cb.cur_is_redirect=1 AND l_to=cb.cur_id AND l_from=ca.cur_title AND ca.cur_namespace=0 LIMIT {$offset}, {$limit}" ;
152
153 $res = wfQuery( $sql, $fname );
154
155 $top = getMaintenancePageBacklink();
156 $top .= "<p>".wfMsg("doubleredirectstext")."</p><br>\n";
157 $top .= wfShowingResults( $offset, $limit );
158 $wgOut->addHTML( "<p>{$top}\n" );
159
160 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
161 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=doubleredirects" , $sl ) ;
162 $wgOut->addHTML( "<br>{$sl}\n" );
163
164 $sk = $wgUser->getSkin();
165 $s = "<ol start=" . ( $offset + 1 ) . ">";
166 while ( $obj = wfFetchObject( $res ) ) {
167 $n = explode ( "\n" , $obj->rt ) ;
168 $n = $n[0] ;
169 $l1 = $sk->makeKnownLink ( $obj->l_from , "" , "redirect=no" ) ;
170 $l2 = $sk->makeKnownLink ( $obj->ti , "" , "redirect=no" ) ;
171 $l3 = $sk->makeBrokenLink ( $obj->l_from , "(".wfMsg("qbedit").")" , "redirect=no" ) ;
172 $s .= "<li>{$l1} {$l3} => {$l2} (\"{$n}\")</li>\n" ;
173 }
174 wfFreeResult( $res );
175 $s .= "</ol>";
176 $wgOut->addHTML( $s );
177 $wgOut->addHTML( "<p>{$sl}\n" );
178 }
179
180 function wfSpecialBrokenRedirects()
181 {
182 global $wgUser, $wgOut, $wgLang, $wgTitle;
183 global $limit, $offset; # From query string
184 $fname = "wfSpecialBrokenRedirects";
185
186 if ( ! $limit ) {
187 $limit = $wgUser->getOption( "rclimit" );
188 if ( ! $limit ) { $limit = 50; }
189 }
190 if ( ! $offset ) { $offset = 0; }
191
192 $sql = "SELECT bl_to,cur_title FROM brokenlinks,cur WHERE cur_is_redirect=1 AND cur_namespace=0 AND bl_from=cur_id LIMIT {$offset}, {$limit}" ;
193
194 $res = wfQuery( $sql, $fname );
195
196 $top = getMaintenancePageBacklink();
197 $top .= "<p>".wfMsg("brokenredirectstext")."</p><br>\n";
198 $top .= wfShowingResults( $offset, $limit );
199 $wgOut->addHTML( "<p>{$top}\n" );
200
201 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
202 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=brokenredirects" , $sl ) ;
203 $wgOut->addHTML( "<br>{$sl}\n" );
204
205 $sk = $wgUser->getSkin();
206 $s = "<ol start=" . ( $offset + 1 ) . ">";
207 while ( $obj = wfFetchObject( $res ) ) {
208 $l1 = $sk->makeKnownLink ( $obj->cur_title , "" , "redirect=no" ) ;
209 $l2 = $sk->makeBrokenLink ( $obj->cur_title , "(".wfMsg("qbedit").")" , "redirect=no" ) ;
210 $l3 = $sk->makeBrokenLink ( $obj->bl_to , "" , "redirect=no" ) ;
211 $s .= "<li>{$l1} {$l2} => {$l3}</li>\n" ;
212 }
213 wfFreeResult( $res );
214 $s .= "</ol>";
215 $wgOut->addHTML( $s );
216 $wgOut->addHTML( "<p>{$sl}\n" );
217 }
218
219 function wfSpecialSelfLinks()
220 {
221 global $wgUser, $wgOut, $wgLang, $wgTitle;
222 global $limit, $offset; # From query string
223 $fname = "wfSpecialSelfLinks";
224
225 if ( ! $limit ) {
226 $limit = $wgUser->getOption( "rclimit" );
227 if ( ! $limit ) { $limit = 50; }
228 }
229 if ( ! $offset ) { $offset = 0; }
230
231 $sql = "SELECT cur_title FROM cur,links WHERE cur_is_redirect=0 AND cur_namespace=0 AND l_from=cur_title AND l_to=cur_id LIMIT {$offset}, {$limit}";
232
233 $res = wfQuery( $sql, $fname );
234
235 $top = getMaintenancePageBacklink();
236 $top .= "<p>".wfMsg("selflinkstext")."</p><br>\n";
237 $top .= wfShowingResults( $offset, $limit );
238 $wgOut->addHTML( "<p>{$top}\n" );
239
240 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
241 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=selflinks" , $sl ) ;
242 $wgOut->addHTML( "<br>{$sl}\n" );
243
244 $sk = $wgUser->getSkin();
245 $s = "<ol start=" . ( $offset + 1 ) . ">";
246 while ( $obj = wfFetchObject( $res ) )
247 $s .= "<li>".$sk->makeKnownLink ( $obj->cur_title )."</li>\n" ;
248 wfFreeResult( $res );
249 $s .= "</ol>";
250 $wgOut->addHTML( $s );
251 $wgOut->addHTML( "<p>{$sl}\n" );
252 }
253
254 function wfSpecialMispeelings ()
255 {
256 global $wgUser, $wgOut, $wgLang, $wgTitle;
257 global $limit, $offset; # From query string
258 $sk = $wgUser->getSkin();
259 $fname = "wfSpecialMispeelings";
260
261 if ( ! $limit ) {
262 $limit = $wgUser->getOption( "rclimit" );
263 if ( ! $limit ) { $limit = 50; }
264 }
265 if ( ! $offset ) { $offset = 0; }
266
267 # Determine page name
268 $ms = wfMsg ( "mispeelingspage" ) ;
269 $mss = str_replace ( " " , "_" , $ms ) ;
270 $msp = $wgLang->getNsText(4).":".$ms ;
271 $msl = $sk->makeKnownLink ( $msp ) ;
272
273 # Load list from database
274 $sql = "SELECT cur_text FROM cur WHERE cur_title='{$mss}' AND cur_namespace=4" ;
275 $res = wfQuery( $sql, $fname );
276 $obj = wfFetchObject ( $res ) ;
277 $l = $obj->cur_text ;
278 $l = explode ( "\n" , $l ) ;
279 $a = array () ;
280 foreach ( $l as $x )
281 if ( substr ( trim ( $x ) , 0 , 1 ) == "*" )
282 $a[] = strtolower ( trim ( substr ( trim ( $x ) , 1 ) ) );
283 asort ( $a ) ;
284
285 $cnt = 0 ;
286 $b = array () ;
287 foreach ( $a AS $x ) {
288 if ( $cnt < $offset+$limit && $x != "" ) {
289 $y = $x ;
290 $x = preg_replace( '/^(\S+).*$/', '$1', $x );
291 #$sql = "SELECT DISTINCT cur_title FROM cur WHERE cur_namespace=0 AND cur_is_redirect=0 AND (MATCH(cur_ind_text) AGAINST ('" . wfStrencode( $wgLang->stripForSearch( $x ) ) . "'))" ;
292 $sql = "SELECT DISTINCT cur_title FROM cur,searchindex WHERE cur_id=si_page AND cur_namespace=0 AND cur_is_redirect=0 AND (MATCH(si_text) AGAINST ('" . wfStrencode( $wgLang->stripForSearch( $x ) ) . "'))" ;
293 $res = wfQuery( $sql, $fname );
294 while ( $obj = wfFetchObject ( $res ) ) {
295 if ( $cnt >= $offset AND $cnt < $offset+$limit ) {
296 if ( $y != "" ) {
297 if ( count ( $b ) > 0 ) $b[] = "</OL>\n" ;
298 $b[] = "<H3>{$y}</H3>\n<OL start=".($cnt+1).">\n" ;
299 $y = "" ;
300 }
301 $b[] = "<li>".
302 $sk->makeKnownLink ( $obj->cur_title ).
303 " (".
304 $sk->makeBrokenLink ( $obj->cur_title , wfMsg ( "qbedit" ) ).
305 ")</li>\n" ;
306 }
307 $cnt++ ;
308 }
309 }
310 }
311 $top = getMaintenancePageBacklink();
312 $top .= "<p>".str_replace("$1",$msl,wfMsg("mispeelingstext"))."</p><br>\n";
313 $top .= wfShowingResults( $offset, $limit );
314 $wgOut->addHTML( "<p>{$top}\n" );
315
316 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
317 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=mispeelings" , $sl ) ;
318 $wgOut->addHTML( "<br>{$sl}\n" );
319
320 $s = implode ( "" , $b ) ;
321 if ( count ( $b ) > 0 ) $s .= "</ol>";
322 $wgOut->addHTML( $s );
323 $wgOut->addHTML( "<p>{$sl}\n" );
324 }
325
326
327 function wfSpecialMissingLanguageLinks()
328 {
329 global $wgUser, $wgOut, $wgLang, $wgTitle, $thelang, $subfunction;
330 global $limit, $offset; # From query string
331 $fname = "wfSpecialMissingLanguageLinks";
332 $subfunction = "missinglanguagelinks" ;
333 if ( $thelang == "w" ) $thelang = "en" ; # Fix for international wikis
334
335 if ( ! $limit ) {
336 $limit = $wgUser->getOption( "rclimit" );
337 if ( ! $limit ) { $limit = 50; }
338 }
339 if ( ! $offset ) { $offset = 0; }
340
341 $sql = "SELECT cur_title FROM cur WHERE cur_namespace=0 AND cur_is_redirect=0 AND cur_title NOT LIKE '%/%' AND cur_text NOT LIKE '%[[{$thelang}:%' LIMIT {$offset}, {$limit}";
342
343 $res = wfQuery( $sql, $fname );
344
345
346 $mll = wfMsg("missinglanguagelinkstext");
347 $mll = str_replace ( "$1" , $wgLang->getLanguageName($thelang) , $mll ) ;
348
349 $top = getMaintenancePageBacklink();
350 $top .= "<p>$mll</p><br>";
351 $top .= wfShowingResults( $offset, $limit );
352 $wgOut->addHTML( "<p>{$top}\n" );
353
354 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
355 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=missinglanguagelinks&thelang={$thelang}" , $sl ) ;
356 $wgOut->addHTML( "<br>{$sl}\n" );
357
358 $sk = $wgUser->getSkin();
359 $s = "<ol start=" . ( $offset + 1 ) . ">";
360 while ( $obj = wfFetchObject( $res ) )
361 $s .= "<li>".$sk->makeKnownLink ( $obj->cur_title )."</li>\n" ;
362 wfFreeResult( $res );
363 $s .= "</ol>";
364 $wgOut->addHTML( $s );
365 $wgOut->addHTML( "<p>{$sl}\n" );
366 }
367
368 ?>