X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FnamespaceDupes.php;h=ea86e880ddfe317bc4e4b2a8ae890e6f4e58431a;hb=74a77b0db63d57214eef470b043e38e779092810;hp=f69850823dacb78e551c7089d6a73e78b5763452;hpb=764b6ff7cbd5b95431f275879bdf3351ffd31aaf;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/namespaceDupes.php b/maintenance/namespaceDupes.php index f69850823d..ea86e880dd 100644 --- a/maintenance/namespaceDupes.php +++ b/maintenance/namespaceDupes.php @@ -44,9 +44,9 @@ class NamespaceConflictChecker extends Maintenance { $this->mDescription = ""; $this->addOption( 'fix', 'Attempt to automatically fix errors' ); $this->addOption( 'suffix', "Dupes will be renamed with correct namespace with " . - " appended after the article name", false, true ); + " appended after the article name", false, true ); $this->addOption( 'prefix', "Do an explicit check for the given title prefix " . - "appended after the article name", false, true ); + "appended after the article name", false, true ); } public function execute() { @@ -72,8 +72,8 @@ class NamespaceConflictChecker extends Maintenance { /** * @todo Document - * @param $fix Boolean: whether or not to fix broken entries - * @param $suffix String: suffix to append to renamed articles + * @param bool $fix Whether or not to fix broken entries + * @param string $suffix Suffix to append to renamed articles * * @return bool */ @@ -138,13 +138,14 @@ class NamespaceConflictChecker extends Maintenance { foreach ( $spaces as $name => $ns ) { $ok = $this->checkNamespace( $ns, $name, $fix, $suffix ) && $ok; } + return $ok; } /** * Get the interwiki list * - * @return Array + * @return array */ private function getInterwikiList() { $result = Interwiki::getAllPrefixes(); @@ -152,15 +153,16 @@ class NamespaceConflictChecker extends Maintenance { foreach ( $result as $row ) { $prefixes[] = $row['iw_prefix']; } + return $prefixes; } /** * @todo Document - * @param $ns Integer: a namespace id - * @param $name String - * @param $fix Boolean: whether to fix broken entries - * @param $suffix String: suffix to append to renamed articles + * @param int $ns A namespace id + * @param string $name + * @param bool $fix Whether to fix broken entries + * @param string $suffix Suffix to append to renamed articles * @return bool */ private function checkNamespace( $ns, $name, $fix, $suffix = '' ) { @@ -178,19 +180,21 @@ class NamespaceConflictChecker extends Maintenance { $ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok; } } + return $ok; } /** * @todo Do this for real - * @param $key - * @param $prefix - * @param $fix - * @param $suffix string + * @param int $ns + * @param string $name + * @param bool $fix + * @param string $suffix * @return bool */ private function checkPrefix( $key, $prefix, $fix, $suffix = '' ) { $this->output( "Checking prefix \"$prefix\" vs namespace $key\n" ); + return $this->checkNamespace( $key, $prefix, $fix, $suffix ); } @@ -198,45 +202,42 @@ 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 Integer: namespace id (id for new namespace?) - * @param $name String: prefix that is being made a namespace + * @param int $ns Namespace id (id for new namespace?) + * @param string $name Prefix that is being made a namespace * * @return array */ private function getConflicts( $ns, $name ) { - $page = 'page'; - $table = $this->db->tableName( $page ); - - $prefix = $this->db->strencode( $name ); - $encNamespace = $this->db->addQuotes( $ns ); - - $titleSql = "TRIM(LEADING '$prefix:' FROM {$page}_title)"; + $titleSql = "TRIM(LEADING {$this->db->addQuotes( "$name:" )} FROM page_title)"; if ( $ns == 0 ) { // An interwiki; try an alternate encoding with '-' for ':' - $titleSql = $this->db->buildConcat( array( "'$prefix-'", $titleSql ) ); + $titleSql = $this->db->buildConcat( array( + $this->db->addQuotes( "$name-" ), + $titleSql, + ) ); } - $sql = "SELECT {$page}_id AS id, - {$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 ) { - $set[] = $row; - } - return $set; + return iterator_to_array( $this->db->select( 'page', + array( + 'id' => 'page_id', + 'oldtitle' => 'page_title', + 'namespace' => $this->db->addQuotes( $ns ) . ' + page_namespace', + 'title' => $titleSql, + 'oldnamespace' => 'page_namespace', + ), + array( + 'page_namespace' => array( 0, 1 ), + 'page_title' . $this->db->buildLike( "$name:", $this->db->anyString() ), + ), + __METHOD__ + ) ); } /** * Report any conflicts we find * + * @param stdClass $row + * @param string $suffix * @return bool */ private function reportConflict( $row, $suffix ) { @@ -249,6 +250,7 @@ class NamespaceConflictChecker extends Maintenance { $row->oldnamespace, $row->oldtitle ) ); $this->output( "... *** cannot resolve automatically; illegal title ***\n" ); + return false; } @@ -263,6 +265,7 @@ class NamespaceConflictChecker extends Maintenance { $id = $newTitle->getArticleID(); if ( $id ) { $this->output( "... *** cannot resolve automatically; page exists with ID $id ***\n" ); + return false; } else { return true; @@ -272,9 +275,9 @@ class NamespaceConflictChecker extends Maintenance { /** * Resolve any conflicts * - * @param $row Object: row from the page table to fix - * @param $resolvable Boolean - * @param $suffix String: suffix to append to the fixed page + * @param stClass $row Row from the page table to fix + * @param bool $resolvable + * @param string $suffix Suffix to append to the fixed page * @return bool */ private function resolveConflict( $row, $resolvable, $suffix ) { @@ -286,6 +289,7 @@ class NamespaceConflictChecker extends Maintenance { $title = Title::makeTitleSafe( $row->namespace, $row->title ); if ( !$title ) { $this->output( "... !!! invalid title\n" ); + return false; } $id = $title->getArticleID(); @@ -298,15 +302,16 @@ class NamespaceConflictChecker extends Maintenance { $this->output( "... *** using suffixed form [[" . $title->getPrefixedText() . "]] ***\n" ); } $this->resolveConflictOn( $row, 'page', 'page' ); + return true; } /** * Resolve a given conflict * - * @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 + * @param stdClass $row Row from the old broken entry + * @param string $table Table to update + * @param string $prefix Prefix for column name, like page or ar * @return bool */ private function resolveConflictOn( $row, $table, $prefix ) { @@ -324,6 +329,7 @@ class NamespaceConflictChecker extends Maintenance { ), __METHOD__ ); $this->output( "ok.\n" ); + return true; } }