6 $ns = $wgLang->getNamespaces() ;
10 function wfSpecialMaintenance ()
12 global $wgUser, $wgOut, $wgLang, $wgTitle, $subfunction, $wgLanguageCode, $submitmll;
15 $wgOut->addWikiText( wfMsg( "perfdisabled" ) );
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() ;
27 $sk = $wgUser->getSkin();
28 $ns = $wgLang->getNamespaces() ;
29 $r = wfMsg("maintnancepagetext") ;
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" ;
38 $l = getMPL("missinglanguagelinks");
39 $l = str_replace ( "</a>" , "" , $l ) ;
40 $l = str_replace ( "<a " , "<FORM method=post " , $l ) ;
41 $l = explode ( ">" , $l ) ;
44 $r .= "<input type=submit name='submitmll' value='" ;
45 $r .= wfMsg("missinglanguagelinksbutton");
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" ;
55 $r .= "</FORM>\n</li>" ;
58 $wgOut->addHTML ( $r ) ;
61 function getMPL ( $x )
63 global $wgUser , $wgLang;
64 $sk = $wgUser->getSkin() ;
65 return $sk->makeKnownLink(sns().":Maintenance",wfMsg($x),"subfunction={$x}") ;
68 function getMaintenancePageBacklink()
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 ) ;
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" ;
85 function wfSpecialDisambiguations()
87 global $wgUser, $wgOut, $wgLang, $wgTitle;
88 $fname = "wfSpecialDisambiguations";
90 list( $limit, $offset ) = wfCheckLimits();
92 $dp = wfStrencode( wfMsg("disambiguationspage") );
94 $sql = "SELECT la.l_from,la.l_to,"
95 . " lb.l_from AS source,lb.l_to AS dest,"
96 . " c.cur_id, c.cur_title AS dt"
97 . " FROM links AS la, links AS lb, cur AS c, cur AS d"
98 . " WHERE la.l_from='{$dp}'"
99 . " AND la.l_to=lb.l_to"
100 . " AND la.l_from<>lb.l_from"
101 . " AND c.cur_id=lb.l_to"
102 . " AND c.cur_namespace=0"
103 . " AND d.cur_title=lb.l_from"
104 . " AND d.cur_namespace=0"
105 . " LIMIT {$offset}, {$limit}";
107 $res = wfQuery( $sql, $fname );
109 $sk = $wgUser->getSkin();
111 $top = "<p>".wfMsg("disambiguationstext")."</p><br>\n";
112 $top = str_replace ( "$1" , $sk->makeKnownLink ( $dp ) , $top ) ;
113 $top = getMaintenancePageBacklink().$top ;
114 $top .= wfShowingResults( $offset, $limit );
115 $wgOut->addHTML( "<p>{$top}\n" );
117 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
118 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=disambiguations" , $sl ) ;
119 $wgOut->addHTML( "<br>{$sl}\n" );
121 $s = "<ol start=" . ( $offset +
1 ) . ">";
122 while ( $obj = wfFetchObject( $res ) ) {
123 $l1 = $sk->makeKnownLink ( $obj->source
, "" , "redirect=no" ) ;
124 $l2 = $sk->makeKnownLink ( $obj->dt
) ;
125 $l3 = $sk->makeBrokenLink ( $obj->source
, "(".wfMsg("qbedit").")" , "redirect=no" ) ;
126 $s .= "<li>{$l1} {$l3} => {$l2}</li>\n" ;
128 wfFreeResult( $res );
130 $wgOut->addHTML( $s );
131 $wgOut->addHTML( "<p>{$sl}\n" );
134 function wfSpecialDoubleRedirects()
136 global $wgUser, $wgOut, $wgLang, $wgTitle;
137 $fname = "wfSpecialDoubleRedirects";
139 list( $limit, $offset ) = wfCheckLimits();
141 $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}" ;
143 $res = wfQuery( $sql, $fname );
145 $top = getMaintenancePageBacklink();
146 $top .= "<p>".wfMsg("doubleredirectstext")."</p><br>\n";
147 $top .= wfShowingResults( $offset, $limit );
148 $wgOut->addHTML( "<p>{$top}\n" );
150 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
151 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=doubleredirects" , $sl ) ;
152 $wgOut->addHTML( "<br>{$sl}\n" );
154 $sk = $wgUser->getSkin();
155 $s = "<ol start=" . ( $offset +
1 ) . ">";
156 while ( $obj = wfFetchObject( $res ) ) {
157 $n = explode ( "\n" , $obj->rt
) ;
159 $l1 = $sk->makeKnownLink ( $obj->l_from
, "" , "redirect=no" ) ;
160 $l2 = $sk->makeKnownLink ( $obj->ti
, "" , "redirect=no" ) ;
161 $l3 = $sk->makeBrokenLink ( $obj->l_from
, "(".wfMsg("qbedit").")" , "redirect=no" ) ;
162 $s .= "<li>{$l1} {$l3} => {$l2} (\"{$n}\")</li>\n" ;
164 wfFreeResult( $res );
166 $wgOut->addHTML( $s );
167 $wgOut->addHTML( "<p>{$sl}\n" );
170 function wfSpecialBrokenRedirects()
172 global $wgUser, $wgOut, $wgLang, $wgTitle;
173 $fname = "wfSpecialBrokenRedirects";
175 list( $limit, $offset ) = wfCheckLimits();
177 $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}" ;
179 $res = wfQuery( $sql, $fname );
181 $top = getMaintenancePageBacklink();
182 $top .= "<p>".wfMsg("brokenredirectstext")."</p><br>\n";
183 $top .= wfShowingResults( $offset, $limit );
184 $wgOut->addHTML( "<p>{$top}\n" );
186 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
187 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=brokenredirects" , $sl ) ;
188 $wgOut->addHTML( "<br>{$sl}\n" );
190 $sk = $wgUser->getSkin();
191 $s = "<ol start=" . ( $offset +
1 ) . ">";
192 while ( $obj = wfFetchObject( $res ) ) {
193 $l1 = $sk->makeKnownLink ( $obj->cur_title
, "" , "redirect=no" ) ;
194 $l2 = $sk->makeBrokenLink ( $obj->cur_title
, "(".wfMsg("qbedit").")" , "redirect=no" ) ;
195 $l3 = $sk->makeBrokenLink ( $obj->bl_to
, "" , "redirect=no" ) ;
196 $s .= "<li>{$l1} {$l2} => {$l3}</li>\n" ;
198 wfFreeResult( $res );
200 $wgOut->addHTML( $s );
201 $wgOut->addHTML( "<p>{$sl}\n" );
204 function wfSpecialSelfLinks()
206 global $wgUser, $wgOut, $wgLang, $wgTitle;
207 $fname = "wfSpecialSelfLinks";
209 list( $limit, $offset ) = wfCheckLimits();
211 $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}";
213 $res = wfQuery( $sql, $fname );
215 $top = getMaintenancePageBacklink();
216 $top .= "<p>".wfMsg("selflinkstext")."</p><br>\n";
217 $top .= wfShowingResults( $offset, $limit );
218 $wgOut->addHTML( "<p>{$top}\n" );
220 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
221 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=selflinks" , $sl ) ;
222 $wgOut->addHTML( "<br>{$sl}\n" );
224 $sk = $wgUser->getSkin();
225 $s = "<ol start=" . ( $offset +
1 ) . ">";
226 while ( $obj = wfFetchObject( $res ) )
227 $s .= "<li>".$sk->makeKnownLink ( $obj->cur_title
)."</li>\n" ;
228 wfFreeResult( $res );
230 $wgOut->addHTML( $s );
231 $wgOut->addHTML( "<p>{$sl}\n" );
234 function wfSpecialMispeelings ()
236 global $wgUser, $wgOut, $wgLang, $wgTitle;
237 $sk = $wgUser->getSkin();
238 $fname = "wfSpecialMispeelings";
240 list( $limit, $offset ) = wfCheckLimits();
242 # Determine page name
243 $ms = wfMsg ( "mispeelingspage" ) ;
244 $mss = str_replace ( " " , "_" , $ms ) ;
245 $msp = $wgLang->getNsText(4).":".$ms ;
246 $msl = $sk->makeKnownLink ( $msp ) ;
248 # Load list from database
249 $sql = "SELECT cur_text FROM cur WHERE cur_title='{$mss}' AND cur_namespace=4" ;
250 $res = wfQuery( $sql, $fname );
251 $obj = wfFetchObject ( $res ) ;
252 $l = $obj->cur_text
;
253 $l = explode ( "\n" , $l ) ;
256 if ( substr ( trim ( $x ) , 0 , 1 ) == "*" )
257 $a[] = strtolower ( trim ( substr ( trim ( $x ) , 1 ) ) );
262 foreach ( $a AS $x ) {
263 if ( $cnt < $offset+
$limit && $x != "" ) {
265 $x = preg_replace( '/^(\S+).*$/', '$1', $x );
266 #$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 ) ) . "'))" ;
267 $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 ) ) . "'))" ;
268 $res = wfQuery( $sql, $fname );
269 while ( $obj = wfFetchObject ( $res ) ) {
270 if ( $cnt >= $offset AND $cnt < $offset+
$limit ) {
272 if ( count ( $b ) > 0 ) $b[] = "</OL>\n" ;
273 $b[] = "<H3>{$y}</H3>\n<OL start=".($cnt+
1).">\n" ;
277 $sk->makeKnownLink ( $obj->cur_title
).
279 $sk->makeBrokenLink ( $obj->cur_title
, wfMsg ( "qbedit" ) ).
286 $top = getMaintenancePageBacklink();
287 $top .= "<p>".str_replace("$1",$msl,wfMsg("mispeelingstext"))."</p><br>\n";
288 $top .= wfShowingResults( $offset, $limit );
289 $wgOut->addHTML( "<p>{$top}\n" );
291 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
292 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=mispeelings" , $sl ) ;
293 $wgOut->addHTML( "<br>{$sl}\n" );
295 $s = implode ( "" , $b ) ;
296 if ( count ( $b ) > 0 ) $s .= "</ol>";
297 $wgOut->addHTML( $s );
298 $wgOut->addHTML( "<p>{$sl}\n" );
302 function wfSpecialMissingLanguageLinks()
304 global $wgUser, $wgOut, $wgLang, $wgTitle, $thelang, $subfunction;
305 $fname = "wfSpecialMissingLanguageLinks";
306 $subfunction = "missinglanguagelinks" ;
307 if ( $thelang == "w" ) $thelang = "en" ; # Fix for international wikis
309 list( $limit, $offset ) = wfCheckLimits();
311 $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}";
313 $res = wfQuery( $sql, $fname );
316 $mll = wfMsg("missinglanguagelinkstext");
317 $mll = str_replace ( "$1" , $wgLang->getLanguageName($thelang) , $mll ) ;
319 $top = getMaintenancePageBacklink();
320 $top .= "<p>$mll</p><br>";
321 $top .= wfShowingResults( $offset, $limit );
322 $wgOut->addHTML( "<p>{$top}\n" );
324 $sl = wfViewPrevNext( $offset, $limit, "REPLACETHIS" ) ;
325 $sl = str_replace ( "REPLACETHIS" , sns().":Maintenance&subfunction=missinglanguagelinks&thelang={$thelang}" , $sl ) ;
326 $wgOut->addHTML( "<br>{$sl}\n" );
328 $sk = $wgUser->getSkin();
329 $s = "<ol start=" . ( $offset +
1 ) . ">";
330 while ( $obj = wfFetchObject( $res ) )
331 $s .= "<li>".$sk->makeKnownLink ( $obj->cur_title
)."</li>\n" ;
332 wfFreeResult( $res );
334 $wgOut->addHTML( $s );
335 $wgOut->addHTML( "<p>{$sl}\n" );