getOutput()->addModules( 'mediawiki.special.pageLanguage' ); } protected function getFormFields() { // Get default from the subpage of Special page $defaultName = $this->par; $page = array(); $page['pagename'] = array( 'type' => 'text', 'label-message' => 'pagelang-name', 'default' => $defaultName, ); // Options for whether to use the default language or select language $selectoptions = array( (string)$this->msg( 'pagelang-use-default' )->escaped() => 1, (string)$this->msg( 'pagelang-select-lang' )->escaped() => 2, ); $page['selectoptions'] = array( 'id' => 'mw-pl-options', 'type' => 'radio', 'options' => $selectoptions, 'default' => 1 ); // Building a language selector $userLang = $this->getLanguage()->getCode(); $languages = Language::fetchLanguageNames( $userLang, 'mwfile' ); ksort( $languages ); $options = array(); foreach ( $languages as $code => $name ) { $options["$code - $name"] = $code; } $page['language'] = array( 'id' => 'mw-pl-languageselector', 'cssclass' => 'mw-languageselector', 'type' => 'select', 'options' => $options, 'label-message' => 'pagelang-language', 'default' => $this->getConfig()->get( 'LanguageCode' ), ); return $page; } protected function postText() { return $this->showLogFragment( $this->par ); } public function alterForm( HTMLForm $form ) { $form->setDisplayFormat( 'vform' ); $form->setWrapperLegend( false ); wfRunHooks( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) ); } /** * * @param array $data * @return bool */ public function onSubmit( array $data ) { $title = Title::newFromText( $data['pagename'] ); // Check if title is valid if ( !$title ) { return false; } // Get the default language for the wiki // Returns the default since the page is not loaded from DB $defLang = $title->getPageLanguage()->getCode(); $pageId = $title->getArticleID(); // Check if article exists if ( !$pageId ) { return false; } // Load the page language from DB $dbw = wfGetDB( DB_MASTER ); $langOld = $dbw->selectField( 'page', 'page_lang', array( 'page_id' => $pageId ), __METHOD__ ); // Url to redirect to after the operation $this->goToUrl = $title->getFullURL(); // Check if user wants to use default language if ( $data['selectoptions'] == 1 ) { $langNew = null; } else { $langNew = $data['language']; } // No change in language if ( $langNew === $langOld ) { return false; } // Hardcoded [def] if the language is set to null $logOld = $langOld ? $langOld : $defLang . '[def]'; $logNew = $langNew ? $langNew : $defLang . '[def]'; // Writing new page language to database $dbw = wfGetDB( DB_MASTER ); $dbw->update( 'page', array( 'page_lang' => $langNew ), array( 'page_id' => $pageId, 'page_lang' => $langOld ), __METHOD__ ); if ( !$dbw->affectedRows() ) { return false; } // Logging change of language $logParams = array( '4::oldlanguage' => $logOld, '5::newlanguage' => $logNew ); $entry = new ManualLogEntry( 'pagelang', 'pagelang' ); $entry->setPerformer( $this->getUser() ); $entry->setTarget( $title ); $entry->setParameters( $logParams ); $logid = $entry->insert(); $entry->publish( $logid ); return true; } public function onSuccess() { // Success causes a redirect $this->getOutput()->redirect( $this->goToUrl ); } function showLogFragment( $title ) { $moveLogPage = new LogPage( 'pagelang' ); $out1 = Xml::element( 'h2', null, $moveLogPage->getName()->text() ); $out2 = ''; LogEventsList::showLogExtract( $out2, 'pagelang', $title ); return $out1 . $out2; } }