2declare( strict_types = 1 );
4namespace MediaWiki\Extension\Translate\TranslatorInterface;
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;
25 ChangesListSpecialPageQueryHook,
26 SpecialRecentChangesPanelHook
29 public function __construct(
30 private readonly LanguageNameUtils $languageNameUtils,
31 private readonly IConnectionProvider $dbProvider,
32 private readonly Config $config,
41 $name, &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts
47 $opts->add(
'trailer',
'' );
48 $trailer = RequestContext::getMain()->getRequest()->getVal(
'trailer',
'' );
49 if ( $trailer ===
'' ) {
53 $dbr = $this->dbProvider->getReplicaDatabase();
54 $conds[] =
'rc_title ' . $dbr->buildLike( $dbr->anyString(), $trailer );
55 $opts->setValue(
'trailer', $trailer );
67 $context = RequestContext::getMain();
70 $default = $context->getRequest()->getVal(
'trailer',
'' );
72 if ( is_callable( [ LanguageNames::class,
'getNames' ] ) ) {
74 $languages = LanguageNames::getNames(
75 $context->getLanguage()->getCode(),
76 LanguageNames::FALLBACK_NORMAL
79 $languages = $this->languageNameUtils->getLanguageNames();
83 $options = Html::element(
87 'selected' => $default ===
'',
89 wfMessage(
'tpt-cleanchanges-language-na' )->text()
92 foreach ( $languages as $code => $name ) {
93 $options .= Html::element(
97 'selected' => $default ===
"/$code",
103 $extraOpts[
'tailer'] = [
104 wfMessage(
'tpt-cleanchanges-language' )->escaped(),
109 'class' =>
'mw-language-selector',
110 'id' =>
'tpt-rc-language',
123 $skin->getOutput()->addModules(
'ext.translate.cleanchanges' );