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