55 $services = $this->getServiceContainer();
56 $contLang = $services->getContentLanguage();
58 $this->output(
"\n... fetching message info for language: $langCode" );
59 $nonContentLanguage =
true;
61 $this->output(
"\n... fetching message info for content language" );
62 $langCode = $contLang->getCode();
63 $nonContentLanguage =
false;
68 $l10nCache = $services->getLocalisationCache();
69 $messageNames = $l10nCache->getSubitemList(
'en',
'messages' );
71 $messageNames = array_map( [ $contLang,
'ucfirst' ], $messageNames );
73 $statuses = AllMessagesTablePager::getCustomisedStatuses(
80 $titleSuffix = $nonContentLanguage ?
"/$langCode" :
'';
82 foreach ( $messageNames as $key ) {
83 $customised = isset( $statuses[
'pages'][$key] );
85 $actual =
wfMessage( $key )->inLanguage( $langCode )->plain();
86 $default =
wfMessage( $key )->inLanguage( $langCode )->useDatabase(
false )->plain();
88 $messageInfo[
'relevantPages']++;
93 $default !==
'' && $default !==
'-' &&
96 $hasTalk = isset( $statuses[
'talks'][$key] );
97 $messageInfo[
'results'][] = [
98 'title' => $key . $titleSuffix,
99 'hasTalk' => $hasTalk,
101 $messageInfo[
'equalPages']++;
103 $messageInfo[
'equalPagesTalks']++;
111 $doDelete = $this->hasOption(
'delete' );
112 $doDeleteTalk = $this->hasOption(
'delete-talk' );
113 $langCode = $this->getOption(
'lang-code' );
116 'relevantPages' => 0,
118 'equalPagesTalks' => 0,
122 $this->output(
'Checking for pages with default message...' );
124 $services = $this->getServiceContainer();
127 $langCodes = $services->getLanguageNameUtils()
128 ->getLanguageNames( LanguageNameUtils::AUTONYMS, LanguageNameUtils::SUPPORTED );
129 if ( $langCode ===
'*' ) {
132 foreach ( $langCodes as $key => $value ) {
139 if ( !isset( $langCodes[$langCode] ) ) {
140 $this->fatalError(
'Invalid language code: ' . $langCode );
148 if ( $messageInfo[
'equalPages'] === 0 ) {
150 $this->output(
"\ndone.\n" );
155 $this->output(
"\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace "
156 .
"override messages." );
157 $this->output(
"\n{$messageInfo['equalPages']} pages are equal to the default message "
158 .
"(+ {$messageInfo['equalPagesTalks']} talk pages).\n" );
162 foreach ( $messageInfo[
'results'] as $result ) {
163 $title = Title::makeTitle(
NS_MEDIAWIKI, $result[
'title'] );
164 $list .=
"* [[$title]]\n";
165 if ( $result[
'hasTalk'] ) {
167 $list .=
"* [[$title]]\n";
170 $this->output(
"\nList:\n$list\nRun the script again with --delete to delete these pages" );
171 if ( $messageInfo[
'equalPagesTalks'] !== 0 ) {
172 $this->output(
" (include --delete-talk to also delete the talk pages)" );
174 $this->output(
"\n" );
179 $user = User::newSystemUser(
'MediaWiki default', [
'steal' =>
true ] );
181 $this->fatalError(
"Invalid username" );
183 StubGlobalUser::setUser( $user );
186 $userGroupManager = $services->getUserGroupManager();
187 $userGroupManager->addUserToGroup( $user,
'bot' );
190 $this->output(
"\n...deleting equal messages (this may take a long time!)..." );
191 $dbw = $this->getPrimaryDB();
192 $wikiPageFactory = $services->getWikiPageFactory();
193 $delPageFactory = $services->getDeletePageFactory();
194 foreach ( $messageInfo[
'results'] as $result ) {
195 $this->waitForReplication();
197 $title = Title::makeTitle(
NS_MEDIAWIKI, $result[
'title'] );
198 $this->output(
"\n* [[$title]]" );
199 $page = $wikiPageFactory->newFromTitle( $title );
200 $status = $delPageFactory->newDeletePage( $page, $user )->deleteUnsafe(
'No longer required' );
201 if ( !$status->isOK() ) {
202 $this->output(
" (Failed!)" );
204 if ( $result[
'hasTalk'] && $doDeleteTalk ) {
206 $this->output(
"\n* [[$title]]" );
207 $page = $wikiPageFactory->newFromTitle( $title );
208 $status = $delPageFactory->newDeletePage( $page, $user )
209 ->deleteUnsafe(
'Orphaned talk page of no longer required message' );
210 if ( !$status->isOK() ) {
211 $this->output(
" (Failed!)" );
215 $this->output(
"\n\ndone!\n" );