Some more editor files to ignore.
[lhc/web/wiklou.git] / maintenance / refreshLinks.php
index 9ba8682..7b25566 100644 (file)
@@ -105,7 +105,7 @@ class RefreshLinks extends Maintenance {
                                array(),
                                array( 'redirect' => array( "LEFT JOIN", "page_id=rd_from" ) )
                        );
-                       $num = $dbr->numRows( $res );
+                       $num = $res->numRows();
                        $this->output( "Refreshing $num old redirects from $start...\n" );
 
                        $i = 0;
@@ -126,7 +126,7 @@ class RefreshLinks extends Maintenance {
                                        "page_id >= $start" ),
                                __METHOD__
                        );
-                       $num = $dbr->numRows( $res );
+                       $num = $res->numRows();
                        $this->output( "$num new articles...\n" );
 
                        $i = 0;
@@ -176,8 +176,16 @@ class RefreshLinks extends Maintenance {
        }
 
        /**
-        * Update the redirect entry for a given page
-        * @param $id int The page_id of the redirect
+        * Update the redirect entry for a given page.
+        *
+        * This methods bypasses the "redirect" table to get the redirect target,
+        * and parses the page's content to fetch it. This allows to be sure that
+        * the redirect target is up to date and valid.
+        * This is particularly useful when modifying namespaces to be sure the
+        * entry in the "redirect" table points to the correct page and not to an
+        * invalid one.
+        *
+        * @param $id int The page ID to check
         */
        private function fixRedirect( $id ) {
                $page = WikiPage::newFromID( $id );
@@ -191,14 +199,25 @@ class RefreshLinks extends Maintenance {
                        return;
                }
 
-               $rt = $page->getRedirectTarget();
+               $rt = null;
+               $content = $page->getContent( Revision::RAW );
+               if ( $content !== null ) {
+                       $rt = $content->getUltimateRedirectTarget();
+               }
 
                if ( $rt === null ) {
                        // The page is not a redirect
                        // Delete any redirect table entry for it
-                       $dbw->delete( 'redirect', array( 'rd_from' => $id ),
-                               __METHOD__ );
+                       $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ );
+                       $fieldValue = 0;
+               } else {
+                       $page->insertRedirectEntry( $rt );
+                       $fieldValue = 1;
                }
+
+               // Update the page table to be sure it is an a consistent state
+               $dbw->update( 'page', array( 'page_is_redirect' => $fieldValue ),
+                       array( 'page_id' => $id ), __METHOD__ );
        }
 
        /**
@@ -215,7 +234,7 @@ class RefreshLinks extends Maintenance {
                }
 
                $content = $page->getContent( Revision::RAW );
-               if ( null === false ) {
+               if ( $content === null ) {
                        return;
                }