Restore Special:Userrights and bureaucrat log messages mysteriously deleted under...
[lhc/web/wiklou.git] / includes / SpecialDoubleRedirects.php
index cc044f1..3169844 100644 (file)
@@ -31,15 +31,20 @@ class DoubleRedirectsPage extends PageQueryPage {
 
        function getSQL() {
                $dbr =& wfGetDB( DB_SLAVE );
-               extract( $dbr->tableNames( 'page', 'links', 'text' ) );
+               extract( $dbr->tableNames( 'page', 'pagelinks' ) );
 
-               $sql = "SELECT pa.page_namespace as ns_a, pa.page_title as title_a,
-                            pb.page_namespace as ns_b, pb.page_title as title_b,
-                            old_text AS rt 
-                          FROM $text AS t, $links,$page AS pa,$page AS pb 
-                          WHERE pa.page_is_redirect=1 AND pb.page_is_redirect=1 AND l_to=pb.page_id 
-                            AND l_from=pa.page_id 
-                            AND pb.page_latest=t.old_id" ;
+               $sql = "SELECT 'DoubleRedirects' as type," .
+                        " pa.page_namespace as namespace, pa.page_title as title," .
+                            " pb.page_namespace as nsb, pb.page_title as tb," .
+                                " pc.page_namespace as nsc, pc.page_title as tc" .
+                          " FROM $pagelinks AS la, $pagelinks AS lb, $page AS pa, $page AS pb, $page AS pc" .
+                          " WHERE pa.page_is_redirect=1 AND pb.page_is_redirect=1" .
+                            " AND la.pl_from=pa.page_id" .
+                                " AND la.pl_namespace=pb.page_namespace" .
+                                " AND la.pl_title=pb.page_title" .
+                                " AND lb.pl_from=pb.page_id" .
+                                " AND lb.pl_namespace=pc.page_namespace" .
+                                " AND lb.pl_title=pc.page_title";
                return $sql;
        }
 
@@ -48,14 +53,45 @@ class DoubleRedirectsPage extends PageQueryPage {
        }
        
        function formatResult( $skin, $result ) {
-               global $wgContLang ;
-               $ns = $wgContLang->getNamespaces() ;
-               $from = $skin->makeKnownLink( $ns[$result->ns_a].':'.$result->title_a ,'', 'redirect=no' );
-               $edit = $skin->makeBrokenLink( $ns[$result->ns_a].':'.$result->title_a , "(".wfMsg("qbedit").")" , 'redirect=no');
-               $to   = $skin->makeKnownLink( $ns[$result->ns_b].':'.$result->title_b ,'');
-               $content = $result->rt;
+               $fname = 'DoubleRedirectsPage::formatResult';
+               $titleA = Title::makeTitle( $result->namespace, $result->title );
+
+               if ( $result && !isset( $result->nsb ) ) {
+                       $dbr =& wfGetDB( DB_SLAVE );
+                       extract( $dbr->tableNames( 'page', 'pagelinks' ) );
+                       $encTitle = $dbr->addQuotes( $result->title );
+
+                       $sql = "SELECT pa.page_namespace as namespace, pa.page_title as title," .
+                                        " pb.page_namespace as nsb, pb.page_title as tb," .
+                                        " pc.page_namespace as nsc, pc.page_title as tc" .
+                                  " FROM $pagelinks AS la, $pagelinks AS lb, $page AS pa, $page AS pb, $page AS pc" .
+                                  " WHERE pa.page_is_redirect=1 AND pb.page_is_redirect=1" .
+                                        " AND la.pl_from=pa.page_id" .
+                                        " AND la.pl_namespace=pb.page_namespace" .
+                                        " AND la.pl_title=pb.page_title" .
+                                        " AND lb.pl_from=pb.page_id" .
+                                        " AND lb.pl_namespace=pc.page_namespace" .
+                                        " AND lb.pl_title=pc.page_title" .
+                                        " AND pa.page_namespace={$result->namespace}" .
+                                        " AND pa.page_title=$encTitle";
+                       $res = $dbr->query( $sql, $fname );
+                       if ( $res ) {
+                               $result = $dbr->fetchObject( $res );
+                       }
+               }
+               if ( !$result ) {
+                       return '';
+               }
+               
+               $titleB = Title::makeTitle( $result->nsb, $result->tb );
+               $titleC = Title::makeTitle( $result->nsc, $result->tc );
+
+               $linkA = $skin->makeKnownLinkObj( $titleA,'', 'redirect=no' );
+               $edit = $skin->makeBrokenLinkObj( $titleA, "(".wfMsg("qbedit").")" , 'redirect=no');
+               $linkB = $skin->makeKnownLinkObj( $titleB, '', 'redirect=no' );
+               $linkC = $skin->makeKnownLinkObj( $titleC );
                
-               return "$from $edit => $to ($content)";
+               return "$linkA $edit → $linkB → $linkC";
        }
 }