]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - maintenance/addwiki.php
MediaWiki 1.16.0
[autoinstallsdev/mediawiki.git] / maintenance / addwiki.php
index ebe52f2ed0aabed053d8412b44e4cd089229e7ff..0cb4d74a49c1c477adecb1f28aae1c72ff08c467 100644 (file)
 <?php
+/**
+ * @defgroup Wikimedia Wikimedia
+ */
+
 /**
  * Add a new wiki
  * Wikimedia specific!
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Maintenance
+ * @ingroup Wikimedia
  */
 
-$wgNoDBParam = true;
+require_once( dirname(__FILE__) . '/Maintenance.php' );
 
-require_once( "commandLine.inc" );
-require_once( "rebuildInterwiki.inc" );
-require_once( "languages/Names.php" );
-if ( count( $args ) != 3 ) {
-       wfDie( "Usage: php addwiki.php <language> <site> <dbname>\nThe site for Wikipedia is 'wikipedia'.\n" );
-}
+class AddWiki extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Add a new wiki to the family. Wikimedia specific!";
+               $this->addArg( 'language', 'Language code of new site' );
+               $this->addArg( 'site', 'Type of site' );
+               $this->addArg( 'dbname', 'Name of database to create' );
+       }
 
-addWiki( $args[0], $args[1], $args[2] );
+       public function getDbType() {
+               return Maintenance::DB_ADMIN;
+       }
 
-# -----------------------------------------------------------------
+       public function execute() {
+               global $IP, $wgLanguageNames, $wgDefaultExternalStore, $wgNoDBParam;
 
-function addWiki( $lang, $site, $dbName )
-{
-       global $IP, $wgLanguageNames, $wgDefaultExternalStore;
+               $wgNoDBParam = true;
+               $lang = $this->getArg(0);
+               $site = $this->getArg(1);
+               $dbName = $this->getArg(2);
 
-       if ( !isset( $wgLanguageNames[$lang] ) ) {
-               print "Language $lang not found in \$wgLanguageNames\n";
-               return;
-       }
-       $name = $wgLanguageNames[$lang];
+               if ( !isset( $wgLanguageNames[$lang] ) ) {
+                       $this->error( "Language $lang not found in \$wgLanguageNames", true );
+               }
+               $name = $wgLanguageNames[$lang];
 
-       $dbw = wfGetDB( DB_MASTER );
-       $common = "/home/wikipedia/common";
-       $maintenance = "$IP/maintenance";
+               $dbw = wfGetDB( DB_MASTER );
+               $common = "/home/wikipedia/common";
 
-       print "Creating database $dbName for $lang.$site ($name)\n";
-       
-       # Set up the database
-       $dbw->query( "SET table_type=Innodb" );
-       $dbw->query( "CREATE DATABASE $dbName" );
-       $dbw->selectDB( $dbName );
-
-       print "Initialising tables\n";
-       dbsource( "$maintenance/tables.sql", $dbw );
-       dbsource( "$IP/extensions/OAI/update_table.sql", $dbw );
-       dbsource( "$IP/extensions/AntiSpoof/sql/patch-antispoof.mysql.sql", $dbw );
-       dbsource( "$IP/extensions/CheckUser/cu_changes.sql", $dbw );
-       dbsource( "$IP/extensions/CheckUser/cu_log.sql", $dbw );
-       dbsource( "$IP/extensions/TitleKey/titlekey.sql", $dbw );
-       dbsource( "$IP/extensions/Oversight/hidden.sql", $dbw );
-       dbsource( "$IP/extensions/GlobalBlocking/localdb_patches/setup-global_block_whitelist.sql", $dbw );
-
-       $dbw->query( "INSERT INTO site_stats(ss_row_id) VALUES (1)" );
-
-       # Initialise external storage
-       if ( is_array( $wgDefaultExternalStore ) ) {
-               $stores = $wgDefaultExternalStore;
-       } elseif ( $stores ) {
-               $stores = array( $wgDefaultExternalStore );
-       } else {
-               $stores = array();
-       }
-       if ( count( $stores ) ) {
-               require_once( 'ExternalStoreDB.php' );
-               print "Initialising external storage $store...\n";
-               global $wgDBuser, $wgDBpassword, $wgExternalServers;
-               foreach ( $stores as $storeURL ) {
-                       $m = array();
-                       if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) {
-                               continue;
+               $this->output( "Creating database $dbName for $lang.$site ($name)\n" );
+
+               # Set up the database
+               $dbw->query( "SET table_type=Innodb" );
+               $dbw->query( "CREATE DATABASE $dbName" );
+               $dbw->selectDB( $dbName );
+
+               $this->output( "Initialising tables\n" );
+               $dbw->sourceFile( $this->getDir() . '/tables.sql' );
+               $dbw->sourceFile( "$IP/extensions/OAI/update_table.sql" );
+               $dbw->sourceFile( "$IP/extensions/AntiSpoof/sql/patch-antispoof.mysql.sql" );
+               $dbw->sourceFile( "$IP/extensions/CheckUser/cu_changes.sql" );
+               $dbw->sourceFile( "$IP/extensions/CheckUser/cu_log.sql" );
+               $dbw->sourceFile( "$IP/extensions/TitleKey/titlekey.sql" );
+               $dbw->sourceFile( "$IP/extensions/Oversight/hidden.sql" );
+               $dbw->sourceFile( "$IP/extensions/GlobalBlocking/localdb_patches/setup-global_block_whitelist.sql" );
+               $dbw->sourceFile( "$IP/extensions/AbuseFilter/abusefilter.tables.sql" );
+               $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/PrefStats/PrefStats.sql" );
+               $dbw->sourceFile( "$IP/extensions/ProofreadPage/ProofreadPage.sql" );
+               $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTrackingEvents.sql" );
+               $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTracking.sql" );
+               $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/UserDailyContribs/UserDailyContribs.sql" );
+
+               $dbw->query( "INSERT INTO site_stats(ss_row_id) VALUES (1)" );
+
+               # Initialise external storage
+               if ( is_array( $wgDefaultExternalStore ) ) {
+                       $stores = $wgDefaultExternalStore;
+               } elseif ( $stores ) {
+                       $stores = array( $wgDefaultExternalStore );
+               } else {
+                       $stores = array();
+               }
+               if ( count( $stores ) ) {
+                       global $wgDBuser, $wgDBpassword, $wgExternalServers;
+                       foreach ( $stores as $storeURL ) {
+                               $m = array();
+                               if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) {
+                                       continue;
+                               }
+
+                               $cluster = $m[1];
+                               $this->output( "Initialising external storage $cluster...\n" );
+
+                               # Hack
+                               $wgExternalServers[$cluster][0]['user'] = $wgDBuser;
+                               $wgExternalServers[$cluster][0]['password'] = $wgDBpassword;
+
+                               $store = new ExternalStoreDB;
+                               $extdb = $store->getMaster( $cluster );
+                               $extdb->query( "SET table_type=InnoDB" );
+                               $extdb->query( "CREATE DATABASE $dbName" );
+                               $extdb->selectDB( $dbName );
+
+                               # Hack x2
+                               $blobsTable = $store->getTable( $extdb );
+                               $sedCmd = "sed s/blobs\\\\\\>/$blobsTable/ " . $this->getDir() . "/storage/blobs.sql";
+                               $blobsFile = popen( $sedCmd, 'r' );
+                               $extdb->sourceStream( $blobsFile );
+                               pclose( $blobsFile );
+                               $extdb->commit();
                        }
-                       
-                       $cluster = $m[1];
-                       
-                       # Hack
-                       $wgExternalServers[$cluster][0]['user'] = $wgDBuser;
-                       $wgExternalServers[$cluster][0]['password'] = $wgDBpassword;
-                       
-                       $store = new ExternalStoreDB;
-                       $extdb =& $store->getMaster( $cluster );
-                       $extdb->query( "SET table_type=InnoDB" );
-                       $extdb->query( "CREATE DATABASE $dbName" );
-                       $extdb->selectDB( $dbName );
-                       dbsource( "$maintenance/storage/blobs.sql", $extdb );
-                       $extdb->immediateCommit();
                }
-       }
 
-       global $wgTitle, $wgArticle;
-       $wgTitle = Title::newFromText( wfMsgWeirdKey( "mainpage/$lang" ) );
-       print "Writing main page to " . $wgTitle->getPrefixedDBkey() . "\n";
-       $wgArticle = new Article( $wgTitle );
-       $ucsite = ucfirst( $site );
+               global $wgTitle, $wgArticle;
+               $wgTitle = Title::newFromText( wfMsgWeirdKey( "mainpage/$lang" ) );
+               $this->output( "Writing main page to " . $wgTitle->getPrefixedDBkey() . "\n" );
+               $wgArticle = new Article( $wgTitle );
+               $ucsite = ucfirst( $site );
+
+               $wgArticle->insertNewArticle( $this->getFirstArticle( $ucsite, $name ), '', false, false );
+
+               $this->output( "Adding to dblists\n" );
+
+               # Add to dblist
+               $file = fopen( "$common/all.dblist", "a" );
+               fwrite( $file, "$dbName\n" );
+               fclose( $file );
+
+               # Update the sublists
+               shell_exec("cd $common && ./refresh-dblist");
+
+               #print "Constructing interwiki SQL\n";
+               # Rebuild interwiki tables
+               #passthru( '/home/wikipedia/conf/interwiki/update' );
 
-       $wgArticle->insertNewArticle( <<<EOT
+               $this->output( "Script ended. You still have to:
+       * Add any required settings in InitialiseSettings.php
+       * Run sync-common-all
+       * Run /home/wikipedia/conf/interwiki/update
+       " );
+       }
+       
+       private function getFirstArticle( $ucsite, $name ) {
+               return <<<EOT
 ==This subdomain is reserved for the creation of a [[wikimedia:Our projects|$ucsite]] in '''[[w:en:{$name}|{$name}]]''' language==
 
 * Please '''do not start editing''' this new site. This site has a test project on the [[incubator:|Wikimedia Incubator]] (or on the [[betawikiversity:|BetaWikiversity]] or on the [[oldwikisource:|Old Wikisource]]) and it will be imported to here.
 
-* If you would like to help translating the interface to this language, please do not translate here, but go to [[betawiki:|Betawiki]], a special wiki for translating the interface. That way everyone can use it on every wiki using the [[mw:|same software]].
+* If you would like to help translating the interface to this language, please do not translate here, but go to [[translatewiki:|translatewiki]], a special wiki for translating the interface. That way everyone can use it on every wiki using the [[mw:|same software]].
 
 * For information about how to edit and for other general help, see [[m:Help:Contents|Help on Wikimedia's Meta-Wiki]] or [[mw:Help:Contents|Help on MediaWiki.org]].
 
@@ -116,135 +175,280 @@ function addWiki( $lang, $site, $dbName )
 See Wikimedia's [[m:|Meta-Wiki]] for the coordination of these projects.
 
 [[aa:]]
+[[ab:]]
+[[ace:]]
 [[af:]]
+[[ak:]]
 [[als:]]
+[[am:]]
+[[an:]]
+[[ang:]]
 [[ar:]]
-[[de:]]
-[[en:]]
+[[arc:]]
+[[arz:]]
 [[as:]]
 [[ast:]]
+[[av:]]
 [[ay:]]
 [[az:]]
+[[ba:]]
+[[bar:]]
+[[bat-smg:]]
 [[bcl:]]
 [[be:]]
+[[be-x-old:]]
 [[bg:]]
+[[bh:]]
+[[bi:]]
+[[bm:]]
 [[bn:]]
 [[bo:]]
+[[bpy:]]
+[[br:]]
 [[bs:]]
-[[cs:]]
+[[bug:]]
+[[bxr:]]
+[[ca:]]
+[[cbk-zam:]]
+[[cdo:]]
+[[ce:]]
+[[ceb:]]
+[[ch:]]
+[[cho:]]
+[[chr:]]
+[[chy:]]
+[[ckb:]]
 [[co:]]
+[[cr:]]
+[[crh:]]
 [[cs:]]
+[[csb:]]
+[[cu:]]
+[[cv:]]
 [[cy:]]
 [[da:]]
+[[de:]]
+[[diq:]]
+[[dk:]]
+[[dsb:]]
+[[dv:]]
+[[dz:]]
+[[ee:]]
 [[el:]]
+[[eml:]]
+[[en:]]
 [[eo:]]
 [[es:]]
 [[et:]]
 [[eu:]]
+[[ext:]]
 [[fa:]]
+[[ff:]]
 [[fi:]]
+[[fiu-vro:]]
+[[fj:]]
+[[fo:]]
 [[fr:]]
+[[frp:]]
+[[fur:]]
 [[fy:]]
 [[ga:]]
+[[gan:]]
+[[gd:]]
 [[gl:]]
+[[glk:]]
 [[gn:]]
+[[got:]]
 [[gu:]]
+[[gv:]]
+[[ha:]]
+[[hak:]]
+[[haw:]]
 [[he:]]
 [[hi:]]
+[[hif:]]
+[[ho:]]
 [[hr:]]
 [[hsb:]]
+[[ht:]]
+[[hu:]]
 [[hy:]]
+[[hz:]]
 [[ia:]]
 [[id:]]
+[[ie:]]
+[[ig:]]
+[[ii:]]
+[[ik:]]
+[[ilo:]]
+[[io:]]
 [[is:]]
 [[it:]]
+[[iu:]]
 [[ja:]]
+[[jbo:]]
+[[jv:]]
 [[ka:]]
+[[kaa:]]
+[[kab:]]
+[[kg:]]
+[[ki:]]
+[[kj:]]
 [[kk:]]
+[[kl:]]
 [[km:]]
 [[kn:]]
 [[ko:]]
+[[kr:]]
 [[ks:]]
+[[ksh:]]
 [[ku:]]
+[[kv:]]
+[[kw:]]
 [[ky:]]
 [[la:]]
+[[lad:]]
+[[lb:]]
+[[lbe:]]
+[[lg:]]
+[[li:]]
+[[lij:]]
+[[lmo:]]
 [[ln:]]
 [[lo:]]
 [[lt:]]
 [[lv:]]
-[[hu:]]
+[[map-bms:]]
+[[mdf:]]
+[[mg:]]
+[[mh:]]
+[[mhr:]]
 [[mi:]]
 [[mk:]]
 [[ml:]]
 [[mn:]]
+[[mo:]]
 [[mr:]]
 [[ms:]]
 [[mt:]]
+[[mus:]]
+[[mwl:]]
 [[my:]]
+[[myv:]]
+[[mzn:]]
 [[na:]]
-[[nah:]]
+[[nan:]]
+[[nap:]]
 [[nds:]]
+[[nds-nl:]]
 [[ne:]]
+[[new:]]
+[[ng:]]
 [[nl:]]
+[[nn:]]
 [[no:]]
+[[nov:]]
+[[nrm:]]
+[[nv:]]
+[[ny:]]
 [[oc:]]
 [[om:]]
+[[or:]]
+[[os:]]
 [[pa:]]
+[[pag:]]
+[[pam:]]
+[[pap:]]
+[[pdc:]]
+[[pi:]]
+[[pih:]]
 [[pl:]]
+[[pms:]]
+[[pnt:]]
+[[pnb:]]
 [[ps:]]
 [[pt:]]
 [[qu:]]
+[[rm:]]
+[[rmy:]]
+[[rn:]]
 [[ro:]]
+[[roa-rup:]]
+[[roa-tara:]]
 [[ru:]]
+[[rw:]]
 [[sa:]]
+[[sah:]]
+[[sc:]]
+[[scn:]]
+[[sco:]]
+[[sd:]]
+[[se:]]
+[[sg:]]
+[[sh:]]
 [[si:]]
+[[simple:]]
 [[sk:]]
 [[sl:]]
+[[sm:]]
+[[sn:]]
+[[so:]]
 [[sq:]]
 [[sr:]]
+[[srn:]]
+[[ss:]]
+[[st:]]
+[[stq:]]
+[[su:]]
 [[sv:]]
 [[sw:]]
+[[szl:]]
 [[ta:]]
 [[te:]]
+[[tet:]]
 [[tg:]]
 [[th:]]
+[[ti:]]
 [[tk:]]
 [[tl:]]
+[[tn:]]
+[[to:]]
+[[tpi:]]
 [[tr:]]
+[[ts:]]
 [[tt:]]
+[[tum:]]
+[[tw:]]
+[[ty:]]
+[[udm:]]
 [[ug:]]
 [[uk:]]
 [[ur:]]
 [[uz:]]
+[[ve:]]
+[[vec:]]
 [[vi:]]
+[[vls:]]
 [[vo:]]
+[[wa:]]
+[[war:]]
+[[wo:]]
+[[wuu:]]
+[[xal:]]
 [[xh:]]
+[[yi:]]
 [[yo:]]
 [[za:]]
+[[zea:]]
 [[zh:]]
+[[zh-classical:]]
+[[zh-min-nan:]]
+[[zh-yue:]]
 [[zu:]]
 
-EOT
-, '', false, false );
-
-       print "Adding to dblists\n";
-
-       # Add to dblist
-       $file = fopen( "$common/all.dblist", "a" );
-       fwrite( $file, "$dbName\n" );
-       fclose( $file );
-
-       # Update the sublists
-       shell_exec("cd $common && ./refresh-dblist");
-
-       #print "Constructing interwiki SQL\n";
-       # Rebuild interwiki tables
-       #passthru( '/home/wikipedia/conf/interwiki/update' );
-
-       print "Script ended. You still have to:
-* Add any required settings in InitialiseSettings.php
-* Run sync-common-all
-* Run /home/wikipedia/conf/interwiki/update
-";
+EOT;
+       }
 }
 
+$maintClass = "AddWiki";
+require_once( DO_MAINTENANCE );