Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
CleanupTranslationProgressStatsMaintenanceScript.php
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\Translate\Statistics;
5
6use Maintenance;
9use MediaWiki\MediaWikiServices;
11use RawMessage;
12use const DB_PRIMARY;
13
20 public function __construct() {
21 parent::__construct();
22 $this->addDescription( 'Remove obsolete entries from translate_groupstats table' );
23 $this->requireExtension( 'Translate' );
24 }
25
26 public function execute() {
27 $services = MediaWikiServices::getInstance();
28 $db = $services->getDBLoadBalancer()->getConnection( DB_PRIMARY );
29
30 $dbGroupIds = $db->selectFieldValues(
31 'translate_groupstats',
32 'DISTINCT(tgs_group)',
33 '*',
34 __METHOD__
35 );
36 $knownGroupIds = array_map(
37 [ MessageGroupStats::class, 'getDatabaseIdForGroupId' ],
38 array_keys( MessageGroups::singleton()->getGroups() )
39 );
40 $unknownGroupIds = array_diff( $dbGroupIds, $knownGroupIds );
41
42 if ( $unknownGroupIds !== [] ) {
43 $msg = ( new RawMessage( "Removing rows for $1 unknown group{{PLURAL:$1||s}}:\n" ) )
44 ->numParams( count( $unknownGroupIds ) )
45 ->inLanguage( 'en' )
46 ->text();
47 $this->output( $msg );
48 foreach ( $unknownGroupIds as $id ) {
49 $this->output( "* $id\n" );
50 }
51 $db->delete(
52 'translate_groupstats',
53 [ 'tgs_group' => $unknownGroupIds ],
54 __METHOD__
55 );
56 }
57
58 $dbLanguages = $db->selectFieldValues(
59 'translate_groupstats',
60 'DISTINCT(tgs_lang)',
61 '*',
62 __METHOD__
63 );
64 $knownLanguages = array_keys( Utilities::getLanguageNames( 'en' ) );
65 $unknownLanguages = array_diff( $dbLanguages, $knownLanguages );
66
67 if ( $unknownLanguages !== [] ) {
68 $msg = ( new RawMessage( "Removing rows for $1 unknown language{{PLURAL:$1||s}}:\n" ) )
69 ->numParams( count( $unknownLanguages ) )
70 ->inLanguage( 'en' )
71 ->text();
72 $this->output( $msg );
73 foreach ( $unknownLanguages as $languageCode ) {
74 $this->output( "* $languageCode\n" );
75 }
76 $db->delete(
77 'translate_groupstats',
78 [ 'tgs_lang' => $unknownLanguages ],
79 __METHOD__
80 );
81 }
82
83 $this->output( "Done.\n" );
84 }
85}
Factory class for accessing message groups individually by id or all of them as a list.
Essentially random collection of helper functions, similar to GlobalFunctions.php.
Definition Utilities.php:31
This class abstract MessageGroup statistics calculation and storing.