summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'MLEB/Translate/scripts/createCheckIndex.php')
-rw-r--r--MLEB/Translate/scripts/createCheckIndex.php110
1 files changed, 66 insertions, 44 deletions
diff --git a/MLEB/Translate/scripts/createCheckIndex.php b/MLEB/Translate/scripts/createCheckIndex.php
index 6b6f4296..24e2ae4a 100644
--- a/MLEB/Translate/scripts/createCheckIndex.php
+++ b/MLEB/Translate/scripts/createCheckIndex.php
@@ -10,6 +10,8 @@
*/
// Standard boilerplate to define $IP
+use MediaWiki\MediaWikiServices;
+
if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
$IP = getenv( 'MW_INSTALL_PATH' );
} else {
@@ -21,19 +23,26 @@ require_once "$IP/maintenance/Maintenance.php";
class CreateCheckIndex extends Maintenance {
public function __construct() {
parent::__construct();
- $this->mDescription = 'Creates serialised database of messages that need ' .
- 'checking for problems.';
+ $this->addDescription( 'Creates serialised database of messages that need ' .
+ 'checking for problems.' );
$this->addOption(
'group',
- '(optional) Comma separated list of group IDs to process (can use * as wildcard). ' .
- 'Default: "*"',
- false, /*required*/
+ 'Comma separated list of group IDs to process (can use * as wildcard).',
+ true, /*required*/
true /*has arg*/
);
+
+ $this->addOption(
+ 'verbose',
+ '(optional) Enable verbose logging. Default: off',
+ false, /*required*/
+ false /*has arg*/
+ );
+ $this->requireExtension( 'Translate' );
}
public function execute() {
- $codes = Language::fetchLanguageNames( false );
+ $codes = Language::fetchLanguageNames( null, Language::ALL );
// Exclude the documentation language code
global $wgTranslateDocumentationLanguageCode;
@@ -41,41 +50,42 @@ class CreateCheckIndex extends Maintenance {
unset( $codes[$wgTranslateDocumentationLanguageCode] );
}
- $reqGroups = $this->getOption( 'group' );
- if ( $reqGroups ) {
- $reqGroups = explode( ',', $reqGroups );
- $reqGroups = array_map( 'trim', $reqGroups );
- $reqGroups = MessageGroups::expandWildcards( $reqGroups );
- }
+ $reqGroupsPattern = $this->getOption( 'group' );
+ $reqGroups = explode( ',', $reqGroupsPattern );
+ $reqGroups = array_map( 'trim', $reqGroups );
+ $reqGroups = MessageGroups::expandWildcards( $reqGroups );
- $verbose = isset( $options['verbose'] );
+ $verbose = $this->hasOption( 'verbose' );
+
+ if ( !$reqGroups ) {
+ $this->fatalError( "Pattern '$reqGroupsPattern' did not match any groups" );
+ }
$groups = MessageGroups::singleton()->getGroups();
+ $contLang = MediaWikiServices::getInstance()->getContentLanguage();
- /** @var $g MessageGroup */
- foreach ( $groups as $g ) {
+ /** @var MessageGroup $g */
+ foreach ( $reqGroups as $id ) {
+ $g = MessageGroups::getGroup( $id );
+ // Aliases may have changed the id
$id = $g->getId();
$sourceLanguage = $g->getSourceLanguage();
- // Skip groups that are not requested
- if ( $reqGroups && !in_array( $id, $reqGroups ) ) {
- unset( $g );
- continue;
- }
-
- $checker = $g->getChecker();
- if ( !$checker ) {
+ $validator = $g->getValidator();
+ if ( !$validator ) {
unset( $g );
+ $this->output( "Skipping group $id due to lack of validators" );
continue;
}
// Initialise messages, using unique definitions if appropriate
+ // @phan-suppress-next-line PhanParamTooMany MessageGroupOld takes two args
$collection = $g->initCollection( $sourceLanguage, true );
if ( !count( $collection ) ) {
continue;
}
- $this->output( "Working with $id: ", $id );
+ $this->output( "Processing group $id: ", $id );
// Skip source language code
$langCodes = $codes;
@@ -91,20 +101,21 @@ class CreateCheckIndex extends Maintenance {
$collection->resetForNewLanguage( $code );
$collection->loadTranslations();
-
- global $wgContLang;
+ $collection->filter( 'ignored' );
+ $collection->filter( 'fuzzy' );
+ $collection->filter( 'translated', false );
foreach ( $collection as $key => $message ) {
- $prob = $checker->checkMessageFast( $message, $code );
- if ( $prob ) {
+ $result = $validator->quickValidate( $message, $code );
+ if ( $result->hasIssues() ) {
if ( $verbose ) {
// Print it
- $nsText = $wgContLang->getNsText( $g->namespaces[0] );
+ $nsText = $contLang->getNsText( $g->getNamespace() );
$this->output( "# [[$nsText:$key/$code]]\n" );
}
// Add it to the array
- $problematic[] = [ $g->namespaces[0], "$key/$code" ];
+ $problematic[] = [ $g->getNamespace(), "$key/$code" ];
}
}
@@ -113,28 +124,39 @@ class CreateCheckIndex extends Maintenance {
}
}
- public static function tagFuzzy( $problematic ) {
- if ( !count( $problematic ) ) {
+ public static function tagFuzzy( array $problematic ): void {
+ if ( $problematic === [] ) {
return;
}
+ $titleConditions = [];
$dbw = wfGetDB( DB_MASTER );
+
foreach ( $problematic as $p ) {
+ // Normalize page key
$title = Title::makeTitleSafe( $p[0], $p[1] );
$titleText = $title->getDBkey();
- $res = $dbw->select( 'page', [ 'page_id', 'page_latest' ],
- [ 'page_namespace' => $p[0], 'page_title' => $titleText ], __METHOD__ );
-
- $inserts = [];
- foreach ( $res as $r ) {
- $inserts = [
- 'rt_page' => $r->page_id,
- 'rt_revision' => $r->page_latest,
- 'rt_type' => RevTag::getType( 'fuzzy' )
- ];
- }
- $dbw->replace( 'revtag', 'rt_type_page_revision', $inserts, __METHOD__ );
+ $titleConditions[] = $dbw->makeList(
+ [
+ 'page_namespace' => $p[0],
+ 'page_title' => $titleText
+ ],
+ LIST_AND
+ );
+ }
+
+ $conds = $dbw->makeList( $titleConditions, LIST_OR );
+
+ $res = $dbw->select( 'page', [ 'page_id', 'page_latest' ], $conds, __METHOD__ );
+ $inserts = [];
+ foreach ( $res as $row ) {
+ $inserts[] = [
+ 'rt_page' => $row->page_id,
+ 'rt_revision' => $row->page_latest,
+ 'rt_type' => RevTag::getType( 'fuzzy' )
+ ];
}
+ $dbw->replace( 'revtag', 'rt_type_page_revision', $inserts, __METHOD__ );
}
}