From c1f9b1f7b1b77776192048005dcc66dcf3df2bfb Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 27 Dec 2014 15:41:37 +0100 Subject: Update to MediaWiki 1.24.1 --- includes/specials/SpecialPageLanguage.php | 195 ++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 includes/specials/SpecialPageLanguage.php (limited to 'includes/specials/SpecialPageLanguage.php') diff --git a/includes/specials/SpecialPageLanguage.php b/includes/specials/SpecialPageLanguage.php new file mode 100644 index 00000000..2acf23cd --- /dev/null +++ b/includes/specials/SpecialPageLanguage.php @@ -0,0 +1,195 @@ +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; + } +} -- cgit v1.2.3-54-g00ecf