[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Implements Special:PageLanguage 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * http://www.gnu.org/copyleft/gpl.html 19 * 20 * @file 21 * @ingroup SpecialPage 22 * @author Kunal Grover 23 * @since 1.24 24 */ 25 26 /** 27 * Special page for changing the content language of a page 28 * 29 * @ingroup SpecialPage 30 */ 31 class SpecialPageLanguage extends FormSpecialPage { 32 /** 33 * @var string URL to go to if language change successful 34 */ 35 private $goToUrl; 36 37 public function __construct() { 38 parent::__construct( 'PageLanguage', 'pagelang' ); 39 } 40 41 protected function preText() { 42 $this->getOutput()->addModules( 'mediawiki.special.pageLanguage' ); 43 } 44 45 protected function getFormFields() { 46 // Get default from the subpage of Special page 47 $defaultName = $this->par; 48 49 $page = array(); 50 $page['pagename'] = array( 51 'type' => 'text', 52 'label-message' => 'pagelang-name', 53 'default' => $defaultName, 54 ); 55 56 // Options for whether to use the default language or select language 57 $selectoptions = array( 58 (string)$this->msg( 'pagelang-use-default' )->escaped() => 1, 59 (string)$this->msg( 'pagelang-select-lang' )->escaped() => 2, 60 ); 61 $page['selectoptions'] = array( 62 'id' => 'mw-pl-options', 63 'type' => 'radio', 64 'options' => $selectoptions, 65 'default' => 1 66 ); 67 68 // Building a language selector 69 $userLang = $this->getLanguage()->getCode(); 70 $languages = Language::fetchLanguageNames( $userLang, 'mwfile' ); 71 ksort( $languages ); 72 $options = array(); 73 foreach ( $languages as $code => $name ) { 74 $options["$code - $name"] = $code; 75 } 76 77 $page['language'] = array( 78 'id' => 'mw-pl-languageselector', 79 'cssclass' => 'mw-languageselector', 80 'type' => 'select', 81 'options' => $options, 82 'label-message' => 'pagelang-language', 83 'default' => $this->getConfig()->get( 'LanguageCode' ), 84 ); 85 86 return $page; 87 } 88 89 protected function postText() { 90 return $this->showLogFragment( $this->par ); 91 } 92 93 public function alterForm( HTMLForm $form ) { 94 $form->setDisplayFormat( 'vform' ); 95 $form->setWrapperLegend( false ); 96 wfRunHooks( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) ); 97 } 98 99 /** 100 * 101 * @param array $data 102 * @return bool 103 */ 104 public function onSubmit( array $data ) { 105 $title = Title::newFromText( $data['pagename'] ); 106 107 // Check if title is valid 108 if ( !$title ) { 109 return false; 110 } 111 112 // Get the default language for the wiki 113 // Returns the default since the page is not loaded from DB 114 $defLang = $title->getPageLanguage()->getCode(); 115 116 $pageId = $title->getArticleID(); 117 118 // Check if article exists 119 if ( !$pageId ) { 120 return false; 121 } 122 123 // Load the page language from DB 124 $dbw = wfGetDB( DB_MASTER ); 125 $langOld = $dbw->selectField( 126 'page', 127 'page_lang', 128 array( 'page_id' => $pageId ), 129 __METHOD__ 130 ); 131 132 // Url to redirect to after the operation 133 $this->goToUrl = $title->getFullURL(); 134 135 // Check if user wants to use default language 136 if ( $data['selectoptions'] == 1 ) { 137 $langNew = null; 138 } else { 139 $langNew = $data['language']; 140 } 141 142 // No change in language 143 if ( $langNew === $langOld ) { 144 return false; 145 } 146 147 // Hardcoded [def] if the language is set to null 148 $logOld = $langOld ? $langOld : $defLang . '[def]'; 149 $logNew = $langNew ? $langNew : $defLang . '[def]'; 150 151 // Writing new page language to database 152 $dbw = wfGetDB( DB_MASTER ); 153 $dbw->update( 154 'page', 155 array( 'page_lang' => $langNew ), 156 array( 157 'page_id' => $pageId, 158 'page_lang' => $langOld 159 ), 160 __METHOD__ 161 ); 162 163 if ( !$dbw->affectedRows() ) { 164 return false; 165 } 166 167 // Logging change of language 168 $logParams = array( 169 '4::oldlanguage' => $logOld, 170 '5::newlanguage' => $logNew 171 ); 172 $entry = new ManualLogEntry( 'pagelang', 'pagelang' ); 173 $entry->setPerformer( $this->getUser() ); 174 $entry->setTarget( $title ); 175 $entry->setParameters( $logParams ); 176 177 $logid = $entry->insert(); 178 $entry->publish( $logid ); 179 180 return true; 181 } 182 183 public function onSuccess() { 184 // Success causes a redirect 185 $this->getOutput()->redirect( $this->goToUrl ); 186 } 187 188 function showLogFragment( $title ) { 189 $moveLogPage = new LogPage( 'pagelang' ); 190 $out1 = Xml::element( 'h2', null, $moveLogPage->getName()->text() ); 191 $out2 = ''; 192 LogEventsList::showLogExtract( $out2, 'pagelang', $title ); 193 return $out1 . $out2; 194 } 195 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |