Fix bug 17571, now page1 would add to both cat1 and cat2.
authorPhilip Tzou <philip@users.mediawiki.org>
Fri, 20 Feb 2009 06:47:03 +0000 (06:47 +0000)
committerPhilip Tzou <philip@users.mediawiki.org>
Fri, 20 Feb 2009 06:47:03 +0000 (06:47 +0000)
includes/LinksUpdate.php

index 92856e9..0312250 100644 (file)
@@ -427,18 +427,25 @@ class LinksUpdate {
        function getCategoryInsertions( $existing = array() ) {
                global $wgContLang;
                $diffs = array_diff_assoc( $this->mCategories, $existing );
-               $arr = array();
-               foreach ( $diffs as $name => $sortkey ) {
-                       $nt = Title::makeTitleSafe( NS_CATEGORY, $name );
-                       $wgContLang->findVariantLink( $name, $nt, true );
+               foreach ( $this->mCategories as $name => $sortkey ) {
+                       $newname = $name;
+                       $nt = Title::makeTitleSafe( NS_CATEGORY, $newname );
+                       $wgContLang->findVariantLink( $newname, $nt, true );
                        // for category redirection
                        if ( $nt->isRedirect() ) {
                                $at = new Article( $nt );
                                $nt = $at->getRedirectTarget();
+                               $newname = $nt->getText();
                                // we only redirect a category to another category
-                               if ( $nt->getNamespace() == NS_CATEGORY )
-                                       $name = $nt->getText();
+                               if ( ! array_key_exists( $newname, $existing )
+                                        and $nt->getNamespace() == NS_CATEGORY )
+                                       $diffs[$newname] = $sortkey;
                        }
+               }
+               $arr = array();
+               foreach ( $diffs as $name => $sortkey ) {
+                       $nt = Title::makeTitleSafe( NS_CATEGORY, $name );
+                       $wgContLang->findVariantLink( $name, $nt, true );
                        $arr[] = array(
                                'cl_from'    => $this->mId,
                                'cl_to'      => $name,