Merge "Code to read from change_tag_def table instead of valid_tag"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 24 Sep 2018 17:19:48 +0000 (17:19 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 24 Sep 2018 17:19:48 +0000 (17:19 +0000)
1  2 
includes/changetags/ChangeTags.php

@@@ -88,7 -88,6 +88,7 @@@ class ChangeTags 
         * @return array Array with two items: (html, classes)
         *   - html: String: HTML for displaying the tags (empty string when param $tags is empty)
         *   - classes: Array of strings: CSS classes used in the generated html, one class for each tag
 +       * @return-taint onlysafefor_htmlnoent
         */
        public static function formatSummaryRow( $tags, $page, IContextSource $context = null ) {
                if ( !$tags ) {
                        );
                }
  
-               $dbw->replace(
-                       'valid_tag',
-                       [ 'vt_tag' ],
-                       [ 'vt_tag' => $tag ],
-                       __METHOD__
-               );
+               if ( $wgChangeTagsSchemaMigrationStage < MIGRATION_NEW ) {
+                       $dbw->replace(
+                               'valid_tag',
+                               [ 'vt_tag' ],
+                               [ 'vt_tag' => $tag ],
+                               __METHOD__
+                       );
+               }
                // clear the memcache of defined tags
                self::purgeTagCacheAll();
        }
                        );
                }
  
-               $dbw->delete( 'valid_tag', [ 'vt_tag' => $tag ], __METHOD__ );
+               if ( $wgChangeTagsSchemaMigrationStage < MIGRATION_NEW ) {
+                       $dbw->delete( 'valid_tag', [ 'vt_tag' => $tag ], __METHOD__ );
+               }
  
                // clear the memcache of defined tags
                self::purgeTagCacheAll();
        /**
         * Lists tags explicitly defined in the `valid_tag` table of the database.
         * Tags in table 'change_tag' which are not in table 'valid_tag' are not
-        * included.
+        * included. In case of new backend loads the data from `change_tag_def` table.
         *
         * Tries memcached first.
         *
                        $cache->makeKey( 'valid-tags-db' ),
                        WANObjectCache::TTL_MINUTE * 5,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
+                               global $wgChangeTagsSchemaMigrationStage;
                                $dbr = wfGetDB( DB_REPLICA );
  
                                $setOpts += Database::getCacheSetOptions( $dbr );
  
-                               $tags = $dbr->selectFieldValues( 'valid_tag', 'vt_tag', [], $fname );
+                               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
+                                       $tags = self::listExplicitlyDefinedTagsNewBackend();
+                               } else {
+                                       $tags = $dbr->selectFieldValues( 'valid_tag', 'vt_tag', [], $fname );
+                               }
  
                                return array_filter( array_unique( $tags ) );
                        },
                );
        }
  
+       /**
+        * Lists tags explicitly user defined tags. When ctd_user_defined is true.
+        *
+        * @return string[] Array of strings: tags
+        * @since 1.25
+        */
+       private static function listExplicitlyDefinedTagsNewBackend() {
+               $dbr = wfGetDB( DB_REPLICA );
+               return $dbr->selectFieldValues(
+                       'change_tag_def',
+                       'ctd_name',
+                       [ 'ctd_user_defined' => 1 ],
+                       __METHOD__
+               );
+       }
        /**
         * Lists tags defined by core or extensions using the ListDefinedTags hook.
         * Extensions need only define those tags they deem to be in active use.