Maintenance script to import all scripts in the MediaWiki namespace from a local...
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Mon, 28 Feb 2011 13:54:14 +0000 (13:54 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Mon, 28 Feb 2011 13:54:14 +0000 (13:54 +0000)
Useful for local debugging of broken scripts.

maintenance/importSiteScripts.php [new file with mode: 0644]

diff --git a/maintenance/importSiteScripts.php b/maintenance/importSiteScripts.php
new file mode 100644 (file)
index 0000000..849c7b1
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Maintenance script to import all scripts in the MediaWiki namespace from a 
+ * local site.
+ */
+require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+
+class ImportSiteScripts extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Import site scripts from a site';
+               $this->addArg( 'api', 'API base url' );
+               $this->addArg( 'index', 'index.php base url' );
+               $this->addOption( 'username', 'User name of the script importer' );
+       }
+       
+       public function execute() {
+               global $wgUser;
+               $wgUser = User::newFromName( $this->getOption( 'username', 'ScriptImporter' ) );
+               
+               $baseUrl = $this->getArg( 1 );
+               $pageList = $this->fetchScriptList();
+               $this->output( 'Importing ' . count( $pageList ) . " pages\n" );
+               
+               foreach ( $pageList as $page ) {
+                       $this->output( "Importing $page\n" );
+                       $url = wfAppendQuery( $baseUrl, array( 
+                               'action' => 'raw', 
+                               'title' => "MediaWiki:{$page}" ) );
+                       $text = Http::get( $url );
+                       
+                       $title = Title::makeTitleSafe( NS_MEDIAWIKI, $page );
+                       $article = new Article( $title );
+                       $article->doEdit( $text, "Importing from $url", 0 );
+               }
+               
+       }
+       
+       protected function fetchScriptList() {
+               $data = array( 
+                       'action' => 'query',
+                       'format' => 'php',//'json',
+                       'list' => 'allpages',
+                       'apnamespace' => '8',
+                       'aplimit' => '500', 
+               );
+               $baseUrl = $this->getArg( 0 );
+               $pages = array();
+               
+               do {
+                       $url = wfAppendQuery( $baseUrl, $data );
+                       $strResult = Http::get( $url );
+                       //$result = FormatJson::decode( $strResult ); // Still broken
+                       $result = unserialize( $strResult );
+                       
+                       if ( !empty( $result['query']['allpages'] ) ) {
+                               foreach ( $result['query']['allpages'] as $page ) {
+                                       if ( substr( $page['title'], -3 ) === '.js' ) {
+                                               strtok( $page['title'], ':' );
+                                               $pages[] = strtok( '' );
+                                       }
+                               }
+                       }
+                       if ( !empty( $result['query-continue'] ) ) {
+                               $data['apfrom'] = $result['query-continue']['allpages']['apfrom'];
+                               $this->output( "Fetching new batch from {$data['apfrom']}\n" );
+                       }
+               } while ( isset( $result['query-continue'] ) );
+               
+               return $pages;
+               
+       }
+}
+
+$maintClass = 'ImportSiteScripts';
+require_once( RUN_MAINTENANCE_IF_MAIN );