* (bug 8437) Make Title::loadRestrictions() initialise $mRestrictions properly
[lhc/web/wiklou.git] / includes / SpecialBrokenRedirects.php
index 9c48cb4..5093565 100644 (file)
@@ -5,52 +5,72 @@
  * @subpackage SpecialPage
  */
 
-/**
- *
- */
-require_once('QueryPage.php');
-
 /**
  *
  * @package MediaWiki
  * @subpackage SpecialPage
  */
 class BrokenRedirectsPage extends PageQueryPage {
+       var $targets = array();
 
        function getName() {
                return 'BrokenRedirects';
        }
-       
+
        function isExpensive( ) { return true; }
        function isSyndicated() { return false; }
 
        function getPageHeader( ) {
-               #FIXME : probably need to add a backlink to the maintenance page.
-               return '<p>'.wfMsg('brokenredirectstext')."</p><br />\n";
+               global $wgOut;
+               return $wgOut->parse( wfMsg( 'brokenredirectstext' ) );
        }
 
        function getSQL() {
                $dbr =& wfGetDB( DB_SLAVE );
-               extract( $dbr->tableNames( 'page', 'brokenlinks' ) );
+               list( $page, $pagelinks ) = $dbr->tableNamesN( 'page', 'pagelinks' );
 
-               $sql = "SELECT bl_to,page_title FROM $brokenlinks,$page " .
-                      "WHERE page_is_redirect=1 AND page_namespace=0 AND bl_from=page_id ";
+               $sql = "SELECT 'BrokenRedirects'  AS type,
+                               p1.page_namespace AS namespace,
+                               p1.page_title     AS title,
+                               pl_namespace,
+                               pl_title
+                          FROM $pagelinks AS pl
+                   JOIN $page p1 ON (p1.page_is_redirect=1 AND pl.pl_from=p1.page_id)
+                     LEFT JOIN $page AS p2 ON (pl_namespace=p2.page_namespace AND pl_title=p2.page_title )
+                               WHERE p2.page_namespace IS NULL";
                return $sql;
        }
 
        function getOrder() {
                return '';
        }
-       
+
        function formatResult( $skin, $result ) {
-               global $wgContLang ;
+               global $wgContLang;
                
-               $ns = $wgContLang->getNamespaces() ; /* not used, why bother? */
-               $from = $skin->makeKnownLink( $result->page_title ,'', 'redirect=no' );
-               $edit = $skin->makeBrokenLink( $result->page_title , "(".wfMsg("qbedit").")" , 'redirect=no');
-               $to   = $skin->makeBrokenLink( $result->bl_to );
-                               
-               return "$from $edit => $to";
+               $fromObj = Title::makeTitle( $result->namespace, $result->title );
+               if ( isset( $result->pl_title ) ) {
+                       $toObj = Title::makeTitle( $result->pl_namespace, $result->pl_title );
+               } else {
+                       $blinks = $fromObj->getBrokenLinksFrom();
+                       if ( $blinks ) {
+                               $toObj = $blinks[0];
+                       } else {
+                               $toObj = false;
+                       }
+               }
+
+               // $toObj may very easily be false if the $result list is cached
+               if ( !is_object( $toObj ) ) {
+                       return '<s>' . $skin->makeLinkObj( $fromObj ) . '</s>';
+               }
+
+               $from = $skin->makeKnownLinkObj( $fromObj ,'', 'redirect=no' );
+               $edit = $skin->makeBrokenLinkObj( $fromObj , "(".wfMsg("qbedit").")" , 'redirect=no');
+               $to   = $skin->makeBrokenLinkObj( $toObj );
+               $arr = $wgContLang->getArrow();
+
+               return "$from $edit $arr $to";
        }
 }
 
@@ -59,9 +79,9 @@ class BrokenRedirectsPage extends PageQueryPage {
  */
 function wfSpecialBrokenRedirects() {
        list( $limit, $offset ) = wfCheckLimits();
-       
+
        $sbr = new BrokenRedirectsPage();
-       
+
        return $sbr->doQuery( $offset, $limit );
 
 }