summaryrefslogtreecommitdiff
path: root/maintenance/namespaceDupes.php
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/namespaceDupes.php')
-rw-r--r--maintenance/namespaceDupes.php136
1 files changed, 71 insertions, 65 deletions
diff --git a/maintenance/namespaceDupes.php b/maintenance/namespaceDupes.php
index dd29558c..dbb16bcd 100644
--- a/maintenance/namespaceDupes.php
+++ b/maintenance/namespaceDupes.php
@@ -23,7 +23,7 @@
* @ingroup Maintenance
*/
-require_once( dirname(__FILE__) . '/Maintenance.php' );
+require_once( dirname( __FILE__ ) . '/Maintenance.php' );
class NamespaceConflictChecker extends Maintenance {
public function __construct() {
@@ -47,13 +47,13 @@ class NamespaceConflictChecker extends Maintenance {
$prefix = $this->getOption( 'prefix', '' );
$key = intval( $this->getOption( 'key', 0 ) );
- if( $prefix ) {
+ if ( $prefix ) {
$retval = $this->checkPrefix( $key, $prefix, $fix, $suffix );
} else {
$retval = $this->checkAll( $fix, $suffix );
}
-
- if( $retval ) {
+
+ if ( $retval ) {
$this->output( "\nLooks good!\n" );
} else {
$this->output( "\nOh noeees\n" );
@@ -62,44 +62,44 @@ class NamespaceConflictChecker extends Maintenance {
/**
* @todo Document
- * @param $fix bool Whether or not to fix broken entries
- * @param $suffix String Suffix to append to renamed articles
+ * @param $fix Boolean: whether or not to fix broken entries
+ * @param $suffix String: suffix to append to renamed articles
*/
private function checkAll( $fix, $suffix = '' ) {
global $wgContLang, $wgNamespaceAliases, $wgCanonicalNamespaceNames;
global $wgCapitalLinks;
-
+
$spaces = array();
-
+
// List interwikis first, so they'll be overridden
// by any conflicting local namespaces.
- foreach( $this->getInterwikiList() as $prefix ) {
+ foreach ( $this->getInterwikiList() as $prefix ) {
$name = $wgContLang->ucfirst( $prefix );
$spaces[$name] = 0;
}
// Now pull in all canonical and alias namespaces...
- foreach( $wgCanonicalNamespaceNames as $ns => $name ) {
+ foreach ( $wgCanonicalNamespaceNames as $ns => $name ) {
// This includes $wgExtraNamespaces
- if( $name !== '' ) {
+ if ( $name !== '' ) {
$spaces[$name] = $ns;
}
}
- foreach( $wgContLang->getNamespaces() as $ns => $name ) {
- if( $name !== '' ) {
+ foreach ( $wgContLang->getNamespaces() as $ns => $name ) {
+ if ( $name !== '' ) {
$spaces[$name] = $ns;
}
}
- foreach( $wgNamespaceAliases as $name => $ns ) {
+ foreach ( $wgNamespaceAliases as $name => $ns ) {
$spaces[$name] = $ns;
}
- foreach( $wgContLang->getNamespaceAliases() as $name => $ns ) {
+ foreach ( $wgContLang->getNamespaceAliases() as $name => $ns ) {
$spaces[$name] = $ns;
}
-
+
// We'll need to check for lowercase keys as well,
// since we're doing case-sensitive searches in the db.
- foreach( $spaces as $name => $ns ) {
+ foreach ( $spaces as $name => $ns ) {
$moreNames = array();
$moreNames[] = $wgContLang->uc( $name );
$moreNames[] = $wgContLang->ucfirst( $wgContLang->lc( $name ) );
@@ -107,24 +107,24 @@ class NamespaceConflictChecker extends Maintenance {
$moreNames[] = $wgContLang->ucwords( $wgContLang->lc( $name ) );
$moreNames[] = $wgContLang->ucwordbreaks( $name );
$moreNames[] = $wgContLang->ucwordbreaks( $wgContLang->lc( $name ) );
- if( !$wgCapitalLinks ) {
- foreach( $moreNames as $altName ) {
+ if ( !$wgCapitalLinks ) {
+ foreach ( $moreNames as $altName ) {
$moreNames[] = $wgContLang->lcfirst( $altName );
}
$moreNames[] = $wgContLang->lcfirst( $name );
}
- foreach( array_unique( $moreNames ) as $altName ) {
- if( $altName !== $name ) {
+ foreach ( array_unique( $moreNames ) as $altName ) {
+ if ( $altName !== $name ) {
$spaces[$altName] = $ns;
}
}
}
-
+
ksort( $spaces );
asort( $spaces );
-
+
$ok = true;
- foreach( $spaces as $name => $ns ) {
+ foreach ( $spaces as $name => $ns ) {
$ok = $this->checkNamespace( $ns, $name, $fix, $suffix ) && $ok;
}
return $ok;
@@ -132,44 +132,44 @@ class NamespaceConflictChecker extends Maintenance {
/**
* Get the interwiki list
+ *
* @todo Needs to respect interwiki cache!
- * @return array
+ * @return Array
*/
private function getInterwikiList() {
$result = $this->db->select( 'interwiki', array( 'iw_prefix' ) );
$prefixes = array();
- foreach( $result as $row ) {
+ foreach ( $result as $row ) {
$prefixes[] = $row->iw_prefix;
}
- $this->db->freeResult( $result );
return $prefixes;
}
/**
* @todo Document
- * @param $ns int A namespace id
+ * @param $ns Integer: a namespace id
* @param $name String
- * @param $fix bool Whether to fix broken entries
- * @param $suffix String Suffix to append to renamed articles
+ * @param $fix Boolean: whether to fix broken entries
+ * @param $suffix String: suffix to append to renamed articles
*/
private function checkNamespace( $ns, $name, $fix, $suffix = '' ) {
$conflicts = $this->getConflicts( $ns, $name );
$count = count( $conflicts );
- if( $count == 0 ) {
+ if ( $count == 0 ) {
return true;
}
$ok = true;
- foreach( $conflicts as $row ) {
+ foreach ( $conflicts as $row ) {
$resolvable = $this->reportConflict( $row, $suffix );
$ok = $ok && $resolvable;
- if( $fix && ( $resolvable || $suffix != '' ) ) {
+ if ( $fix && ( $resolvable || $suffix != '' ) ) {
$ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok;
}
}
return $ok;
}
-
+
/**
* @todo: do this for reals
*/
@@ -181,8 +181,9 @@ class NamespaceConflictChecker extends Maintenance {
/**
* Find pages in mainspace that have a prefix of the new namespace
* so we know titles that will need migrating
- * @param $ns int Namespace id (id for new namespace?)
- * @param $name String Prefix that is being made a namespace
+ *
+ * @param $ns Integer: namespace id (id for new namespace?)
+ * @param $name String: prefix that is being made a namespace
*/
private function getConflicts( $ns, $name ) {
$page = 'page';
@@ -192,27 +193,26 @@ class NamespaceConflictChecker extends Maintenance {
$encNamespace = $this->db->addQuotes( $ns );
$titleSql = "TRIM(LEADING '$prefix:' FROM {$page}_title)";
- if( $ns == 0 ) {
+ if ( $ns == 0 ) {
// An interwiki; try an alternate encoding with '-' for ':'
$titleSql = $this->db->buildConcat( array( "'$prefix-'", $titleSql ) );
}
-
+
$sql = "SELECT {$page}_id AS id,
- {$page}_title AS oldtitle,
- $encNamespace AS namespace,
- $titleSql AS title
- FROM {$table}
- WHERE {$page}_namespace=0
- AND {$page}_title " . $this->db->buildLike( $name . ':', $this->db->anyString() );
+ {$page}_title AS oldtitle,
+ $encNamespace + {$page}_namespace AS namespace,
+ $titleSql AS title,
+ {$page}_namespace AS oldnamespace
+ FROM {$table}
+ WHERE ( {$page}_namespace=0 OR {$page}_namespace=1 )
+ AND {$page}_title " . $this->db->buildLike( $name . ':', $this->db->anyString() );
$result = $this->db->query( $sql, __METHOD__ );
$set = array();
- foreach( $result as $row ) {
+ foreach ( $result as $row ) {
$set[] = $row;
}
- $this->db->freeResult( $result );
-
return $set;
}
@@ -221,25 +221,27 @@ class NamespaceConflictChecker extends Maintenance {
*/
private function reportConflict( $row, $suffix ) {
$newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
- if( is_null($newTitle) || !$newTitle->canExist() ) {
+ if ( is_null( $newTitle ) || !$newTitle->canExist() ) {
// Title is also an illegal title...
// For the moment we'll let these slide to cleanupTitles or whoever.
- $this->output( sprintf( "... %d (0,\"%s\")\n",
+ $this->output( sprintf( "... %d (%d,\"%s\")\n",
$row->id,
+ $row->oldnamespace,
$row->oldtitle ) );
$this->output( "... *** cannot resolve automatically; illegal title ***\n" );
return false;
}
- $this->output( sprintf( "... %d (0,\"%s\") -> (%d,\"%s\") [[%s]]\n",
+ $this->output( sprintf( "... %d (%d,\"%s\") -> (%d,\"%s\") [[%s]]\n",
$row->id,
+ $row->oldnamespace,
$row->oldtitle,
$newTitle->getNamespace(),
$newTitle->getDBkey(),
$newTitle->getPrefixedText() ) );
$id = $newTitle->getArticleId();
- if( $id ) {
+ if ( $id ) {
$this->output( "... *** cannot resolve automatically; page exists with ID $id ***\n" );
return false;
} else {
@@ -249,24 +251,26 @@ class NamespaceConflictChecker extends Maintenance {
/**
* Resolve any conflicts
- * @param $row Row from the page table to fix
- * @param $resolveable bool
- * @param $suffix String Suffix to append to the fixed page
+ *
+ * @param $row Object: row from the page table to fix
+ * @param $resolvable Boolean
+ * @param $suffix String: suffix to append to the fixed page
*/
private function resolveConflict( $row, $resolvable, $suffix ) {
- if( !$resolvable ) {
+ if ( !$resolvable ) {
$this->output( "... *** old title {$row->title}\n" );
- while( true ) {
+ while ( true ) {
$row->title .= $suffix;
$this->output( "... *** new title {$row->title}\n" );
$title = Title::makeTitleSafe( $row->namespace, $row->title );
- if ( ! $title ) {
+ if ( !$title ) {
$this->output( "... !!! invalid title\n" );
return false;
}
- if ( $id = $title->getArticleId() ) {
+ $id = $title->getArticleId();
+ if ( $id ) {
$this->output( "... *** page exists with ID $id ***\n" );
- } else {
+ } else {
break;
}
}
@@ -278,9 +282,10 @@ class NamespaceConflictChecker extends Maintenance {
/**
* Resolve a given conflict
- * @param $row Row from the old broken entry
- * @param $table String Table to update
- * @param $prefix String Prefix for column name, like page or ar
+ *
+ * @param $row Object: row from the old broken entry
+ * @param $table String: table to update
+ * @param $prefix String: prefix for column name, like page or ar
*/
private function resolveConflictOn( $row, $table, $prefix ) {
$this->output( "... resolving on $table... " );
@@ -291,8 +296,9 @@ class NamespaceConflictChecker extends Maintenance {
"{$prefix}_title" => $newTitle->getDBkey(),
),
array(
- "{$prefix}_namespace" => 0,
- "{$prefix}_title" => $row->oldtitle,
+ // "{$prefix}_namespace" => 0,
+ // "{$prefix}_title" => $row->oldtitle,
+ "{$prefix}_id" => $row->id,
),
__METHOD__ );
$this->output( "ok.\n" );
@@ -301,4 +307,4 @@ class NamespaceConflictChecker extends Maintenance {
}
$maintClass = "NamespaceConflictChecker";
-require_once( DO_MAINTENANCE );
+require_once( RUN_MAINTENANCE_IF_MAIN );