Factor out ChangeTags::tagUsageStatistics() from SpecialTags
authorMatmaRex <matma.rex@gmail.com>
Tue, 27 Aug 2013 13:26:06 +0000 (15:26 +0200)
committerReedy <reedy@wikimedia.org>
Thu, 19 Sep 2013 03:15:55 +0000 (03:15 +0000)
It's prettier if we keep all explicit DB queries to those tables
in one place.

Change-Id: I85b6854e26ffc656b990079d463a085ba39556df

includes/ChangeTags.php
includes/specials/SpecialTags.php

index 029911f..3fc27f9 100644 (file)
@@ -281,4 +281,34 @@ class ChangeTags {
                $wgMemc->set( $key, $emptyTags, 300 );
                return $emptyTags;
        }
+
+       /**
+        * Returns a map of any tags used on the wiki to number of edits
+        * tagged with them, ordered descending by the hitcount.
+        *
+        * @return array Array of string => int
+        */
+       public static function tagUsageStatistics() {
+               $out = array();
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select(
+                       'change_tag',
+                       array( 'ct_tag', 'hitcount' => 'count(*)' ),
+                       array(),
+                       __METHOD__,
+                       array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' )
+               );
+
+               foreach ( $res as $row ) {
+                       $out[$row->ct_tag] = $row->hitcount;
+               }
+               foreach ( self::listDefinedTags() as $tag ) {
+                       if ( !isset( $out[$tag] ) ) {
+                               $out[$tag] = 0;
+                       }
+               }
+
+               return $out;
+       }
 }
index 6a282c9..80c38d5 100644 (file)
@@ -46,28 +46,15 @@ class SpecialTags extends SpecialPage {
                                Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
                                Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() )
                        );
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'change_tag', array( 'ct_tag', 'hitcount' => 'count(*)' ),
-                       array(), __METHOD__, array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' ) );
 
-               foreach ( $res as $row ) {
-                       $html .= $this->doTagRow( $row->ct_tag, $row->hitcount );
-               }
-
-               foreach ( ChangeTags::listDefinedTags() as $tag ) {
-                       $html .= $this->doTagRow( $tag, 0 );
+               foreach ( ChangeTags::tagUsageStatistics() as $tag => $hitcount ) {
+                       $html .= $this->doTagRow( $tag, $hitcount );
                }
 
                $out->addHTML( Xml::tags( 'table', array( 'class' => 'wikitable sortable mw-tags-table' ), $html ) );
        }
 
        function doTagRow( $tag, $hitcount ) {
-               static $doneTags = array();
-
-               if ( in_array( $tag, $doneTags ) ) {
-                       return '';
-               }
-
                $user = $this->getUser();
                $newRow = '';
                $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
@@ -94,8 +81,6 @@ class SpecialTags extends SpecialPage {
                // add raw $hitcount for sorting, because tags-hitcount contains numbers and letters
                $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLink );
 
-               $doneTags[] = $tag;
-
                return Xml::tags( 'tr', null, $newRow ) . "\n";
        }