X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/mediawiki.git/blobdiff_plain/87219ebd28426c6d21cb545233ee52f5f7af7dfd..refs/tags/mediawiki-1.17.0:/maintenance/namespaceDupes.php 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 );