Translate extension for MediaWiki
 
Loading...
Searching...
No Matches
CleanChangesFilters.php
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\Translate\TranslatorInterface;
5
6use MediaWiki\Config\Config;
7use MediaWiki\Context\RequestContext;
8use MediaWiki\Extension\CLDR\LanguageNames;
10use MediaWiki\Html\Html;
11use MediaWiki\Language\LanguageNameUtils;
12use MediaWiki\RecentChanges\Hook\FetchChangesListHook;
13use MediaWiki\SpecialPage\Hook\ChangesListSpecialPageQueryHook;
14use MediaWiki\Specials\Hook\SpecialRecentChangesPanelHook;
15use Wikimedia\Rdbms\IConnectionProvider;
16
23class CleanChangesFilters implements
24 FetchChangesListHook,
25 ChangesListSpecialPageQueryHook,
26 SpecialRecentChangesPanelHook
27{
28
29 public function __construct(
30 private readonly LanguageNameUtils $languageNameUtils,
31 private readonly IConnectionProvider $dbProvider,
32 private readonly Config $config,
33 ) {
34 }
35
41 $name, &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts
42 ) {
43 if ( !$this->config->get( ConfigNames::RecentChangesLanguageFilter ) ) {
44 return;
45 }
46
47 $opts->add( 'trailer', '' );
48 $trailer = RequestContext::getMain()->getRequest()->getVal( 'trailer', '' );
49 if ( $trailer === '' ) {
50 return;
51 }
52
53 $dbr = $this->dbProvider->getReplicaDatabase();
54 $conds[] = 'rc_title ' . $dbr->buildLike( $dbr->anyString(), $trailer );
55 $opts->setValue( 'trailer', $trailer );
56 }
57
62 public function onSpecialRecentChangesPanel( &$extraOpts, $opts ) {
63 if ( !$this->config->get( ConfigNames::RecentChangesLanguageFilter ) ) {
64 return;
65 }
66
67 $context = RequestContext::getMain();
68 // TODO the query is parsed (and unknown options are discarded) before we got a chance to define our option.
69 // SEE https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Translate/+/1053288/comment/5303b6a3_aaef9399/
70 $default = $context->getRequest()->getVal( 'trailer', '' );
71
72 if ( is_callable( [ LanguageNames::class, 'getNames' ] ) ) {
73 // cldr extension
74 $languages = LanguageNames::getNames(
75 $context->getLanguage()->getCode(),
76 LanguageNames::FALLBACK_NORMAL
77 );
78 } else {
79 $languages = $this->languageNameUtils->getLanguageNames();
80 }
81 ksort( $languages );
82
83 $options = Html::element(
84 'option',
85 [
86 'value' => '',
87 'selected' => $default === '',
88 ],
89 wfMessage( 'tpt-cleanchanges-language-na' )->text()
90 );
91
92 foreach ( $languages as $code => $name ) {
93 $options .= Html::element(
94 'option',
95 [
96 'value' => "/$code",
97 'selected' => $default === "/$code",
98 ],
99 "$code - $name"
100 ) . "\n";
101 }
102
103 $extraOpts['tailer'] = [
104 wfMessage( 'tpt-cleanchanges-language' )->escaped(),
105 Html::rawElement(
106 'select',
107 [
108 'name' => 'trailer',
109 'class' => 'mw-language-selector',
110 'id' => 'tpt-rc-language',
111 ],
112 $options
113 ),
114 ];
115 }
116
121 public function onFetchChangesList( $user, $skin, &$list, $groups ) {
122 if ( $this->config->get( ConfigNames::RecentChangesLanguageFilter ) && defined( 'ULS_VERSION' ) ) {
123 $skin->getOutput()->addModules( 'ext.translate.cleanchanges' );
124 }
125 }
126}
Constants for configuration variables for the Translate extension.
const RecentChangesLanguageFilter
Add language filter to the Special:RecentChanges.
This class adds a language filter to Special:RecentChanges.
onChangesListSpecialPageQuery( $name, &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts)
Hook: ChangesListSpecialPageQuery @inheritDoc.
onSpecialRecentChangesPanel(&$extraOpts, $opts)
Hook: SpecialRecentChangesPanel @inheritDoc.
onFetchChangesList( $user, $skin, &$list, $groups)
Hook: FetchChangesList @inheritDoc.