[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/api/ -> ApiImport.php (source)

   1  <?php
   2  /**
   3   *
   4   *
   5   * Created on Feb 4, 2009
   6   *
   7   * Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
   8   *
   9   * This program is free software; you can redistribute it and/or modify
  10   * it under the terms of the GNU General Public License as published by
  11   * the Free Software Foundation; either version 2 of the License, or
  12   * (at your option) any later version.
  13   *
  14   * This program is distributed in the hope that it will be useful,
  15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17   * GNU General Public License for more details.
  18   *
  19   * You should have received a copy of the GNU General Public License along
  20   * with this program; if not, write to the Free Software Foundation, Inc.,
  21   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  22   * http://www.gnu.org/copyleft/gpl.html
  23   *
  24   * @file
  25   */
  26  
  27  /**
  28   * API module that imports an XML file like Special:Import does
  29   *
  30   * @ingroup API
  31   */
  32  class ApiImport extends ApiBase {
  33  
  34  	public function execute() {
  35          $user = $this->getUser();
  36          $params = $this->extractRequestParams();
  37  
  38          $isUpload = false;
  39          if ( isset( $params['interwikisource'] ) ) {
  40              if ( !$user->isAllowed( 'import' ) ) {
  41                  $this->dieUsageMsg( 'cantimport' );
  42              }
  43              if ( !isset( $params['interwikipage'] ) ) {
  44                  $this->dieUsageMsg( array( 'missingparam', 'interwikipage' ) );
  45              }
  46              $source = ImportStreamSource::newFromInterwiki(
  47                  $params['interwikisource'],
  48                  $params['interwikipage'],
  49                  $params['fullhistory'],
  50                  $params['templates']
  51              );
  52          } else {
  53              $isUpload = true;
  54              if ( !$user->isAllowed( 'importupload' ) ) {
  55                  $this->dieUsageMsg( 'cantimport-upload' );
  56              }
  57              $source = ImportStreamSource::newFromUpload( 'xml' );
  58          }
  59          if ( !$source->isOK() ) {
  60              $this->dieStatus( $source );
  61          }
  62  
  63          $importer = new WikiImporter( $source->value );
  64          if ( isset( $params['namespace'] ) ) {
  65              $importer->setTargetNamespace( $params['namespace'] );
  66          }
  67          if ( isset( $params['rootpage'] ) ) {
  68              $statusRootPage = $importer->setTargetRootPage( $params['rootpage'] );
  69              if ( !$statusRootPage->isGood() ) {
  70                  $this->dieStatus( $statusRootPage );
  71              }
  72          }
  73          $reporter = new ApiImportReporter(
  74              $importer,
  75              $isUpload,
  76              $params['interwikisource'],
  77              $params['summary']
  78          );
  79  
  80          try {
  81              $importer->doImport();
  82          } catch ( MWException $e ) {
  83              $this->dieUsageMsg( array( 'import-unknownerror', $e->getMessage() ) );
  84          }
  85  
  86          $resultData = $reporter->getData();
  87          $result = $this->getResult();
  88          $result->setIndexedTagName( $resultData, 'page' );
  89          $result->addValue( null, $this->getModuleName(), $resultData );
  90      }
  91  
  92  	public function mustBePosted() {
  93          return true;
  94      }
  95  
  96  	public function isWriteMode() {
  97          return true;
  98      }
  99  
 100  	public function getAllowedParams() {
 101          return array(
 102              'summary' => null,
 103              'xml' => array(
 104                  ApiBase::PARAM_TYPE => 'upload',
 105              ),
 106              'interwikisource' => array(
 107                  ApiBase::PARAM_TYPE => $this->getConfig()->get( 'ImportSources' ),
 108              ),
 109              'interwikipage' => null,
 110              'fullhistory' => false,
 111              'templates' => false,
 112              'namespace' => array(
 113                  ApiBase::PARAM_TYPE => 'namespace'
 114              ),
 115              'rootpage' => null,
 116          );
 117      }
 118  
 119  	public function getParamDescription() {
 120          return array(
 121              'summary' => 'Import summary',
 122              'xml' => 'Uploaded XML file',
 123              'interwikisource' => 'For interwiki imports: wiki to import from',
 124              'interwikipage' => 'For interwiki imports: page to import',
 125              'fullhistory' => 'For interwiki imports: import the full history, not just the current version',
 126              'templates' => 'For interwiki imports: import all included templates as well',
 127              'namespace' => 'For interwiki imports: import to this namespace',
 128              'rootpage' => 'Import as subpage of this page',
 129          );
 130      }
 131  
 132  	public function getDescription() {
 133          return array(
 134              'Import a page from another wiki, or an XML file.',
 135              'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
 136              'sending a file for the "xml" parameter.'
 137          );
 138      }
 139  
 140  	public function needsToken() {
 141          return 'csrf';
 142      }
 143  
 144  	public function getExamples() {
 145          return array(
 146              'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
 147                  'namespace=100&fullhistory=&token=123ABC'
 148                  => 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
 149          );
 150      }
 151  
 152  	public function getHelpUrls() {
 153          return 'https://www.mediawiki.org/wiki/API:Import';
 154      }
 155  }
 156  
 157  /**
 158   * Import reporter for the API
 159   * @ingroup API
 160   */
 161  class ApiImportReporter extends ImportReporter {
 162      private $mResultArr = array();
 163  
 164      /**
 165       * @param Title $title
 166       * @param Title $origTitle
 167       * @param int $revisionCount
 168       * @param int $successCount
 169       * @param array $pageInfo
 170       * @return void
 171       */
 172  	function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) {
 173          // Add a result entry
 174          $r = array();
 175  
 176          if ( $title === null ) {
 177              # Invalid or non-importable title
 178              $r['title'] = $pageInfo['title'];
 179              $r['invalid'] = '';
 180          } else {
 181              ApiQueryBase::addTitleInfo( $r, $title );
 182              $r['revisions'] = intval( $successCount );
 183          }
 184  
 185          $this->mResultArr[] = $r;
 186  
 187          // Piggyback on the parent to do the logging
 188          parent::reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo );
 189      }
 190  
 191  	function getData() {
 192          return $this->mResultArr;
 193      }
 194  }


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