[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> importSiteScripts.php (source)

   1  <?php
   2  /**
   3   * Import all scripts in the MediaWiki namespace from a local site.
   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 Maintenance
  22   */
  23  
  24  require_once  __DIR__ . '/Maintenance.php';
  25  
  26  /**
  27   * Maintenance script to import all scripts in the MediaWiki namespace from a
  28   * local site.
  29   *
  30   * @ingroup Maintenance
  31   */
  32  class ImportSiteScripts extends Maintenance {
  33  	public function __construct() {
  34          parent::__construct();
  35          $this->mDescription = 'Import site scripts from a site';
  36          $this->addArg( 'api', 'API base url' );
  37          $this->addArg( 'index', 'index.php base url' );
  38          $this->addOption( 'username', 'User name of the script importer' );
  39      }
  40  
  41  	public function execute() {
  42          global $wgUser;
  43  
  44          $user = User::newFromName( $this->getOption( 'username', 'ScriptImporter' ) );
  45          $wgUser = $user;
  46  
  47          $baseUrl = $this->getArg( 1 );
  48          $pageList = $this->fetchScriptList();
  49          $this->output( 'Importing ' . count( $pageList ) . " pages\n" );
  50  
  51          foreach ( $pageList as $page ) {
  52              $title = Title::makeTitleSafe( NS_MEDIAWIKI, $page );
  53              if ( !$title ) {
  54                  $this->error( "$page is an invalid title; it will not be imported\n" );
  55                  continue;
  56              }
  57  
  58              $this->output( "Importing $page\n" );
  59              $url = wfAppendQuery( $baseUrl, array(
  60                  'action' => 'raw',
  61                  'title' => "MediaWiki:{$page}" ) );
  62              $text = Http::get( $url );
  63  
  64              $wikiPage = WikiPage::factory( $title );
  65              $content = ContentHandler::makeContent( $text, $wikiPage->getTitle() );
  66              $wikiPage->doEditContent( $content, "Importing from $url", 0, false, $user );
  67          }
  68      }
  69  
  70  	protected function fetchScriptList() {
  71          $data = array(
  72              'action' => 'query',
  73              'format' => 'php', //'json',
  74              'list' => 'allpages',
  75              'apnamespace' => '8',
  76              'aplimit' => '500',
  77          );
  78          $baseUrl = $this->getArg( 0 );
  79          $pages = array();
  80  
  81          do {
  82              $url = wfAppendQuery( $baseUrl, $data );
  83              $strResult = Http::get( $url );
  84              //$result = FormatJson::decode( $strResult ); // Still broken
  85              $result = unserialize( $strResult );
  86  
  87              if ( !empty( $result['query']['allpages'] ) ) {
  88                  foreach ( $result['query']['allpages'] as $page ) {
  89                      if ( substr( $page['title'], -3 ) === '.js' ) {
  90                          strtok( $page['title'], ':' );
  91                          $pages[] = strtok( '' );
  92                      }
  93                  }
  94              }
  95              if ( !empty( $result['query-continue'] ) ) {
  96                  $data['apfrom'] = $result['query-continue']['allpages']['apfrom'];
  97                  $this->output( "Fetching new batch from {$data['apfrom']}\n" );
  98              }
  99          } while ( isset( $result['query-continue'] ) );
 100  
 101          return $pages;
 102      }
 103  }
 104  
 105  $maintClass = 'ImportSiteScripts';
 106  require_once RUN_MAINTENANCE_IF_MAIN;


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