* replace use of deprecated makeKnownLinkObj() by linkKnown() in core special pages
[lhc/web/wiklou.git] / includes / specials / SpecialBrokenRedirects.php
1 <?php
2 /**
3 * @file
4 * @ingroup SpecialPage
5 */
6
7 /**
8 * A special page listing redirects to non existent page. Those should be
9 * fixed to point to an existing page.
10 * @ingroup SpecialPage
11 */
12 class BrokenRedirectsPage extends PageQueryPage {
13 var $targets = array();
14
15 function getName() {
16 return 'BrokenRedirects';
17 }
18
19 function isExpensive( ) { return true; }
20 function isSyndicated() { return false; }
21
22 function getPageHeader( ) {
23 return wfMsgExt( 'brokenredirectstext', array( 'parse' ) );
24 }
25
26 function getSQL() {
27 $dbr = wfGetDB( DB_SLAVE );
28 list( $page, $redirect ) = $dbr->tableNamesN( 'page', 'redirect' );
29
30 $sql = "SELECT 'BrokenRedirects' AS type,
31 p1.page_namespace AS namespace,
32 p1.page_title AS title,
33 rd_namespace,
34 rd_title
35 FROM $redirect AS rd
36 JOIN $page p1 ON (rd.rd_from=p1.page_id)
37 LEFT JOIN $page AS p2 ON (rd_namespace=p2.page_namespace AND rd_title=p2.page_title )
38 WHERE rd_namespace >= 0
39 AND p2.page_namespace IS NULL";
40 return $sql;
41 }
42
43 function getOrder() {
44 return '';
45 }
46
47 function formatResult( $skin, $result ) {
48 global $wgUser, $wgContLang;
49
50 $fromObj = Title::makeTitle( $result->namespace, $result->title );
51 if ( isset( $result->rd_title ) ) {
52 $toObj = Title::makeTitle( $result->rd_namespace, $result->rd_title );
53 } else {
54 $blinks = $fromObj->getBrokenLinksFrom(); # TODO: check for redirect, not for links
55 if ( $blinks ) {
56 $toObj = $blinks[0];
57 } else {
58 $toObj = false;
59 }
60 }
61
62 // $toObj may very easily be false if the $result list is cached
63 if ( !is_object( $toObj ) ) {
64 return '<s>' . $skin->link( $fromObj ) . '</s>';
65 }
66
67 $from = $skin->linkKnown(
68 $fromObj,
69 null,
70 array(),
71 array( 'redirect' => 'no' )
72 );
73 $edit = $skin->linkKnown(
74 $fromObj,
75 wfMsgHtml( 'brokenredirects-edit' ),
76 array(),
77 array( 'action' => 'edit' )
78 );
79 $to = $skin->makeBrokenLinkObj( $toObj );
80 $arr = $wgContLang->getArrow();
81
82 $out = "{$from} {$edit}";
83
84 if( $wgUser->isAllowed( 'delete' ) ) {
85 $delete = $skin->linkKnown(
86 $fromObj,
87 wfMsgHtml( 'brokenredirects-delete' ),
88 array(),
89 array( 'action' => 'delete' )
90 );
91 $out .= " {$delete}";
92 }
93
94 $out .= " {$arr} {$to}";
95 return $out;
96 }
97 }
98
99 /**
100 * constructor
101 */
102 function wfSpecialBrokenRedirects() {
103 list( $limit, $offset ) = wfCheckLimits();
104
105 $sbr = new BrokenRedirectsPage();
106
107 return $sbr->doQuery( $offset, $limit );
108 }