[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/specials/ -> SpecialPageLanguage.php (source)

   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  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1