diff options
Diffstat (limited to 'maintenance/cleanupTitles.php')
-rw-r--r-- | maintenance/cleanupTitles.php | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/maintenance/cleanupTitles.php b/maintenance/cleanupTitles.php index ed714b2d..f03b7957 100644 --- a/maintenance/cleanupTitles.php +++ b/maintenance/cleanupTitles.php @@ -1,12 +1,12 @@ <?php -/* +/** * Script to clean up broken, unparseable titles. * * Usage: php cleanupTitles.php [--fix] * Options: * --fix Actually clean up titles; otherwise just checks for them * - * Copyright (C) 2005 Brion Vibber <brion@pobox.com> + * Copyright © 2005 Brion Vibber <brion@pobox.com> * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -24,11 +24,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * + * @file * @author Brion Vibber <brion at pobox.com> * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/cleanupTable.inc' ); +require_once( dirname( __FILE__ ) . '/cleanupTable.inc' ); class TitleCleanup extends TableCleanup { public function __construct() { @@ -42,7 +43,7 @@ class TitleCleanup extends TableCleanup { $verified = $wgContLang->normalize( $display ); $title = Title::newFromText( $verified ); - if( !is_null( $title ) + if ( !is_null( $title ) && $title->canExist() && $title->getNamespace() == $row->page_namespace && $title->getDBkey() === $row->page_title ) @@ -50,10 +51,10 @@ class TitleCleanup extends TableCleanup { return $this->progress( 0 ); // all is fine } - if( $row->page_namespace == NS_FILE && $this->fileExists( $row->page_title ) ) { + if ( $row->page_namespace == NS_FILE && $this->fileExists( $row->page_title ) ) { $this->output( "file $row->page_title needs cleanup, please run cleanupImages.php.\n" ); return $this->progress( 0 ); - } elseif( is_null( $title ) ) { + } elseif ( is_null( $title ) ) { $this->output( "page $row->page_id ($display) is illegal.\n" ); $this->moveIllegalPage( $row ); return $this->progress( 1 ); @@ -77,23 +78,23 @@ class TitleCleanup extends TableCleanup { $legalized = preg_replace_callback( "!([^$legal])!", array( &$this, 'hexChar' ), $row->page_title ); - if( $legalized == '.' ) $legalized = '(dot)'; - if( $legalized == '_' ) $legalized = '(space)'; + if ( $legalized == '.' ) $legalized = '(dot)'; + if ( $legalized == '_' ) $legalized = '(space)'; $legalized = 'Broken/' . $legalized; $title = Title::newFromText( $legalized ); - if( is_null( $title ) ) { + if ( is_null( $title ) ) { $clean = 'Broken/id:' . $row->page_id; $this->output( "Couldn't legalize; form '$legalized' still invalid; using '$clean'\n" ); $title = Title::newFromText( $clean ); - } elseif( $title->exists() ) { + } elseif ( $title->exists() ) { $clean = 'Broken/id:' . $row->page_id; $this->output( "Legalized for '$legalized' exists; using '$clean'\n" ); $title = Title::newFromText( $clean ); } $dest = $title->getDBkey(); - if( $this->dryrun ) { + if ( $this->dryrun ) { $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" ); } else { $this->output( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" ); @@ -106,28 +107,34 @@ class TitleCleanup extends TableCleanup { } protected function moveInconsistentPage( $row, $title ) { - if( $title->exists() || $title->getInterwiki() ) { - if( $title->getInterwiki() ) { + if ( $title->exists() || $title->getInterwiki() || !$title->canExist() ) { + if ( $title->getInterwiki() || !$title->canExist() ) { $prior = $title->getPrefixedDbKey(); } else { $prior = $title->getDBkey(); } + + # Old cleanupTitles could move articles there. See bug 23147. + $ns = $row->page_namespace; + if ( $ns < 0 ) $ns = 0; + $clean = 'Broken/' . $prior; - $verified = Title::makeTitleSafe( $row->page_namespace, $clean ); - if( $verified->exists() ) { + $verified = Title::makeTitleSafe( $ns, $clean ); + if ( $verified->exists() ) { $blah = "Broken/id:" . $row->page_id; $this->output( "Couldn't legalize; form '$clean' exists; using '$blah'\n" ); - $verified = Title::makeTitleSafe( $row->page_namespace, $blah ); + $verified = Title::makeTitleSafe( $ns, $blah ); } $title = $verified; } - if( is_null( $title ) ) { + if ( is_null( $title ) ) { $this->error( "Something awry; empty title.", true ); } $ns = $title->getNamespace(); $dest = $title->getDBkey(); - if( $this->dryrun ) { - $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')\n" ); + + if ( $this->dryrun ) { + $this->output( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')\n" ); } else { $this->output( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')\n" ); $dbw = wfGetDB( DB_MASTER ); @@ -145,4 +152,4 @@ class TitleCleanup extends TableCleanup { } $maintClass = "TitleCleanup"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN ); |