Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 51 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
CleanupTranslationProgressStatsMaintenanceScript | |
0.00% |
0 / 51 |
|
0.00% |
0 / 2 |
42 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
execute | |
0.00% |
0 / 48 |
|
0.00% |
0 / 1 |
30 |
1 | <?php |
2 | declare( strict_types = 1 ); |
3 | |
4 | namespace MediaWiki\Extension\Translate\Statistics; |
5 | |
6 | use Maintenance; |
7 | use MediaWiki\Extension\Translate\MessageGroupProcessing\MessageGroups; |
8 | use MediaWiki\Extension\Translate\Utilities\Utilities; |
9 | use MediaWiki\Language\RawMessage; |
10 | use MediaWiki\MediaWikiServices; |
11 | use MessageGroupStats; |
12 | use const DB_PRIMARY; |
13 | |
14 | /** |
15 | * @since 2021.03 |
16 | * @license GPL-2.0-or-later |
17 | * @author Niklas Laxström |
18 | */ |
19 | class CleanupTranslationProgressStatsMaintenanceScript extends Maintenance { |
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->newSelectQueryBuilder() |
31 | ->select( 'tgs_group' ) |
32 | ->distinct() |
33 | ->from( 'translate_groupstats' ) |
34 | ->caller( __METHOD__ ) |
35 | ->fetchFieldValues(); |
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->newSelectQueryBuilder() |
59 | ->select( 'tgs_lang' ) |
60 | ->distinct() |
61 | ->from( 'translate_groupstats' ) |
62 | ->caller( __METHOD__ ) |
63 | ->fetchFieldValues(); |
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 | } |