https://www.mediawiki.org/wiki/Special:Code/MediaWiki/112588

Revision: 112588
Author:   nikerabbit
Date:     2012-02-28 11:55:58 +0000 (Tue, 28 Feb 2012)
Log Message:
-----------
Fix statistics tables for aggregate group numbers.
Use hooks to consolidate the logic in one place.
Remaining problem is the number of queries done.
We need some kind of batch queries here.

Modified Paths:
--------------
    trunk/extensions/Translate/MessageGroups.php
    trunk/extensions/Translate/Translate.php
    trunk/extensions/Translate/TranslateHooks.php
    trunk/extensions/Translate/specials/SpecialLanguageStats.php
    trunk/extensions/Translate/utils/MessageGroupStats.php
    trunk/extensions/Translate/utils/StatsTable.php

Modified: trunk/extensions/Translate/MessageGroups.php
===================================================================
--- trunk/extensions/Translate/MessageGroups.php        2012-02-28 11:46:36 UTC 
(rev 112587)
+++ trunk/extensions/Translate/MessageGroups.php        2012-02-28 11:55:58 UTC 
(rev 112588)
@@ -1240,7 +1240,7 @@
         * @return string
         * @since 2011-12-12
         */
-       public static function getPriority( MessageGroup $group ) {
+       public static function getPriority( $group ) {
                static $groups = null;
                if ( $groups === null ) {
                        $groups = array();
@@ -1255,7 +1255,11 @@
                        }
                }
 
-               $id = $group->getId();
+               if ( $group instanceof MessageGroup ) {
+                       $id = $group->getId();
+               } else {
+                       $id = $group;
+               }
                return isset( $groups[$id] ) ? $groups[$id] : '';
        }
 

Modified: trunk/extensions/Translate/Translate.php
===================================================================
--- trunk/extensions/Translate/Translate.php    2012-02-28 11:46:36 UTC (rev 
112587)
+++ trunk/extensions/Translate/Translate.php    2012-02-28 11:55:58 UTC (rev 
112588)
@@ -137,6 +137,10 @@
 
 $wgHooks['LinkBegin'][] = 'SpecialMyLanguage::linkfix';
 
+// Stats table manipulation
+$wgHooks['Translate:MessageGroupStats:isIncluded'][] = 
'TranslateHooks::hideDiscouragedFromStats';
+$wgHooks['Translate:MessageGroupStats:isIncluded'][] = 
'TranslateHooks::hideRestrictedFromStats';
+
 // New rights
 $wgAvailableRights[] = 'translate';
 $wgAvailableRights[] = 'translate-import';

Modified: trunk/extensions/Translate/TranslateHooks.php
===================================================================
--- trunk/extensions/Translate/TranslateHooks.php       2012-02-28 11:46:36 UTC 
(rev 112587)
+++ trunk/extensions/Translate/TranslateHooks.php       2012-02-28 11:55:58 UTC 
(rev 112588)
@@ -390,5 +390,24 @@
                return true;
        }
 
+       /// Hook: Translate:MessageGroupStats:isIncluded
+       public static function hideDiscouragedFromStats( $id, $code ) {
+               // Return true to keep, false to exlude
+               return MessageGroups::getPriority( $id ) !== 'discouraged';
+       }
+
+       /// Hook: Translate:MessageGroupStats:isIncluded
+       public static function hideRestrictedFromStats( $id, $code ) {
+               $filterLangs = TranslateMetadata::get( $id, 'prioritylangs' );
+               if ( strlen( $filterLangs ) === 0 ) {
+                       // No restrictions, keep everything
+                       return true;
+               }
+
+               $filter = array_flip( explode( ',', $filterLangs ) );
+               // If the language is in the list, return true to not hide it
+               return isset( $filter[$code] );
+       }
+
 }
 

Modified: trunk/extensions/Translate/specials/SpecialLanguageStats.php
===================================================================
--- trunk/extensions/Translate/specials/SpecialLanguageStats.php        
2012-02-28 11:46:36 UTC (rev 112587)
+++ trunk/extensions/Translate/specials/SpecialLanguageStats.php        
2012-02-28 11:55:58 UTC (rev 112588)
@@ -362,12 +362,6 @@
                        return '';
                }
 
-               # These are hidden, and the code in MessageGroupStats makes 
sure that
-               # these are not counted in the aggregate groups they may belong.
-               if ( MessageGroups::getPriority( $group ) === 'discouraged' ) {
-                       return '';
-               }
-
                $stats = $cache[$groupId];
 
                list( $total, $translated, $fuzzy ) = $stats;

Modified: trunk/extensions/Translate/utils/MessageGroupStats.php
===================================================================
--- trunk/extensions/Translate/utils/MessageGroupStats.php      2012-02-28 
11:46:36 UTC (rev 112587)
+++ trunk/extensions/Translate/utils/MessageGroupStats.php      2012-02-28 
11:55:58 UTC (rev 112588)
@@ -257,7 +257,9 @@
                                if ( !isset( $stats[$sid][$code] ) ) {
                                        $stats[$sid][$code] = 
self::forItemInternal( $stats, $subgroup, $code );
                                }
-                               if ( MessageGroups::getPriority( $subgroup ) 
!== 'discouraged' ) {
+
+                               $include = wfRunHooks( 
'Translate:MessageGroupStats:isIncluded', array( $sid, $code ) );
+                               if ( $include ) {
                                        $aggregates = self::multiAdd( 
$aggregates, $stats[$sid][$code] );
                                }
                        }

Modified: trunk/extensions/Translate/utils/StatsTable.php
===================================================================
--- trunk/extensions/Translate/utils/StatsTable.php     2012-02-28 11:46:36 UTC 
(rev 112587)
+++ trunk/extensions/Translate/utils/StatsTable.php     2012-02-28 11:55:58 UTC 
(rev 112588)
@@ -299,13 +299,11 @@
                        }
                }
 
-               $filterLangs = TranslateMetadata::get( $groupId , 
'prioritylangs' );
-               if ( strlen( $filterLangs ) > 0 ) {
-                       $filter = array_flip( explode( ',', $filterLangs ) );
-                       if ( count( $filter ) > 0 && !isset( $filter[$code] ) ) 
{
-                               $blacklisted = true;
-                       }
+               $include = wfRunHooks( 
'Translate:MessageGroupStats:isIncluded', array( $groupId, $code ) );
+               if ( !$include ) {
+                       $blacklisted = true;
                }
+
                return $blacklisted;
        }
 


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to