Merge "(bug 56849) Deprecate dangerous edittime-based content update functions"
[lhc/web/wiklou.git] / maintenance / namespaceDupes.php
index f698508..ea86e88 100644 (file)
@@ -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 " .
-                                                                       "<text> appended after the article name", false, true );
+                       "<text> 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;
        }
 }