00001 <?php
00030 require_once( dirname(__FILE__) . '/Maintenance.php' );
00031
00032 class AddWiki extends Maintenance {
00033 public function __construct() {
00034 parent::__construct();
00035 $this->mDescription = "Add a new wiki to the family. Wikimedia specific!";
00036 $this->addArg( 'language', 'Language code of new site' );
00037 $this->addArg( 'site', 'Type of site' );
00038 $this->addArg( 'dbname', 'Name of database to create' );
00039 }
00040
00041 public function getDbType() {
00042 return Maintenance::DB_ADMIN;
00043 }
00044
00045 public function execute() {
00046 global $IP, $wgLanguageNames, $wgDefaultExternalStore, $wgNoDBParam;
00047
00048 $wgNoDBParam = true;
00049 $lang = $this->getArg(0);
00050 $site = $this->getArg(1);
00051 $dbName = $this->getArg(2);
00052
00053 if ( !isset( $wgLanguageNames[$lang] ) ) {
00054 $this->error( "Language $lang not found in \$wgLanguageNames", true );
00055 }
00056 $name = $wgLanguageNames[$lang];
00057
00058 $dbw = wfGetDB( DB_MASTER );
00059 $common = "/home/wikipedia/common";
00060
00061 $this->output( "Creating database $dbName for $lang.$site ($name)\n" );
00062
00063 # Set up the database
00064 $dbw->query( "SET table_type=Innodb" );
00065 $dbw->query( "CREATE DATABASE $dbName" );
00066 $dbw->selectDB( $dbName );
00067
00068 $this->output( "Initialising tables\n" );
00069 $dbw->sourceFile( $this->getDir() . '/tables.sql' );
00070 $dbw->sourceFile( "$IP/extensions/OAI/update_table.sql" );
00071 $dbw->sourceFile( "$IP/extensions/AntiSpoof/sql/patch-antispoof.mysql.sql" );
00072 $dbw->sourceFile( "$IP/extensions/CheckUser/cu_changes.sql" );
00073 $dbw->sourceFile( "$IP/extensions/CheckUser/cu_log.sql" );
00074 $dbw->sourceFile( "$IP/extensions/TitleKey/titlekey.sql" );
00075 $dbw->sourceFile( "$IP/extensions/Oversight/hidden.sql" );
00076 $dbw->sourceFile( "$IP/extensions/GlobalBlocking/localdb_patches/setup-global_block_whitelist.sql" );
00077 $dbw->sourceFile( "$IP/extensions/AbuseFilter/abusefilter.tables.sql" );
00078 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/PrefStats/PrefStats.sql" );
00079 $dbw->sourceFile( "$IP/extensions/ProofreadPage/ProofreadPage.sql" );
00080 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTrackingEvents.sql" );
00081 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTracking.sql" );
00082 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/UserDailyContribs/UserDailyContribs.sql" );
00083
00084 $dbw->query( "INSERT INTO site_stats(ss_row_id) VALUES (1)" );
00085
00086 # Initialise external storage
00087 if ( is_array( $wgDefaultExternalStore ) ) {
00088 $stores = $wgDefaultExternalStore;
00089 } elseif ( $stores ) {
00090 $stores = array( $wgDefaultExternalStore );
00091 } else {
00092 $stores = array();
00093 }
00094 if ( count( $stores ) ) {
00095 global $wgDBuser, $wgDBpassword, $wgExternalServers;
00096 foreach ( $stores as $storeURL ) {
00097 $m = array();
00098 if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) {
00099 continue;
00100 }
00101
00102 $cluster = $m[1];
00103 $this->output( "Initialising external storage $cluster...\n" );
00104
00105 # Hack
00106 $wgExternalServers[$cluster][0]['user'] = $wgDBuser;
00107 $wgExternalServers[$cluster][0]['password'] = $wgDBpassword;
00108
00109 $store = new ExternalStoreDB;
00110 $extdb = $store->getMaster( $cluster );
00111 $extdb->query( "SET table_type=InnoDB" );
00112 $extdb->query( "CREATE DATABASE $dbName" );
00113 $extdb->selectDB( $dbName );
00114
00115 # Hack x2
00116 $blobsTable = $store->getTable( $extdb );
00117 $sedCmd = "sed s/blobs\\\\\\>/$blobsTable/ " . $this->getDir() . "/storage/blobs.sql";
00118 $blobsFile = popen( $sedCmd, 'r' );
00119 $extdb->sourceStream( $blobsFile );
00120 pclose( $blobsFile );
00121 $extdb->commit();
00122 }
00123 }
00124
00125 global $wgTitle, $wgArticle;
00126 $wgTitle = Title::newFromText( wfMsgWeirdKey( "mainpage/$lang" ) );
00127 $this->output( "Writing main page to " . $wgTitle->getPrefixedDBkey() . "\n" );
00128 $wgArticle = new Article( $wgTitle );
00129 $ucsite = ucfirst( $site );
00130
00131 $wgArticle->insertNewArticle( $this->getFirstArticle( $ucsite, $name ), '', false, false );
00132
00133 $this->output( "Adding to dblists\n" );
00134
00135 # Add to dblist
00136 $file = fopen( "$common/all.dblist", "a" );
00137 fwrite( $file, "$dbName\n" );
00138 fclose( $file );
00139
00140 # Update the sublists
00141 shell_exec("cd $common && ./refresh-dblist");
00142
00143 #print "Constructing interwiki SQL\n";
00144 # Rebuild interwiki tables
00145 #passthru( '/home/wikipedia/conf/interwiki/update' );
00146
00147 $this->output( "Script ended. You still have to:
00148 * Add any required settings in InitialiseSettings.php
00149 * Run sync-common-all
00150 * Run /home/wikipedia/conf/interwiki/update
00151 " );
00152 }
00153
00154 private function getFirstArticle( $ucsite, $name ) {
00155 return <<<EOT
00156 ==This subdomain is reserved for the creation of a [[wikimedia:Our projects|$ucsite]] in '''[[w:en:{$name}|{$name}]]''' language==
00157
00158 * 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.
00159
00160 * 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]].
00161
00162 * 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]].
00163
00164 == Sister projects ==
00165 <span class="plainlinks">
00166 [http://www.wikipedia.org Wikipedia] |
00167 [http://www.wiktionary.org Wiktonary] |
00168 [http://www.wikibooks.org Wikibooks] |
00169 [http://www.wikinews.org Wikinews] |
00170 [http://www.wikiquote.org Wikiquote] |
00171 [http://www.wikisource.org Wikisource]
00172 [http://www.wikiversity.org Wikiversity]
00173 </span>
00174
00175 See Wikimedia's [[m:|Meta-Wiki]] for the coordination of these projects.
00176
00177 [[aa:]]
00178 [[ab:]]
00179 [[ace:]]
00180 [[af:]]
00181 [[ak:]]
00182 [[als:]]
00183 [[am:]]
00184 [[an:]]
00185 [[ang:]]
00186 [[ar:]]
00187 [[arc:]]
00188 [[arz:]]
00189 [[as:]]
00190 [[ast:]]
00191 [[av:]]
00192 [[ay:]]
00193 [[az:]]
00194 [[ba:]]
00195 [[bar:]]
00196 [[bat-smg:]]
00197 [[bcl:]]
00198 [[be:]]
00199 [[be-x-old:]]
00200 [[bg:]]
00201 [[bh:]]
00202 [[bi:]]
00203 [[bm:]]
00204 [[bn:]]
00205 [[bo:]]
00206 [[bpy:]]
00207 [[br:]]
00208 [[bs:]]
00209 [[bug:]]
00210 [[bxr:]]
00211 [[ca:]]
00212 [[cbk-zam:]]
00213 [[cdo:]]
00214 [[ce:]]
00215 [[ceb:]]
00216 [[ch:]]
00217 [[cho:]]
00218 [[chr:]]
00219 [[chy:]]
00220 [[ckb:]]
00221 [[co:]]
00222 [[cr:]]
00223 [[crh:]]
00224 [[cs:]]
00225 [[csb:]]
00226 [[cu:]]
00227 [[cv:]]
00228 [[cy:]]
00229 [[da:]]
00230 [[de:]]
00231 [[diq:]]
00232 [[dk:]]
00233 [[dsb:]]
00234 [[dv:]]
00235 [[dz:]]
00236 [[ee:]]
00237 [[el:]]
00238 [[eml:]]
00239 [[en:]]
00240 [[eo:]]
00241 [[es:]]
00242 [[et:]]
00243 [[eu:]]
00244 [[ext:]]
00245 [[fa:]]
00246 [[ff:]]
00247 [[fi:]]
00248 [[fiu-vro:]]
00249 [[fj:]]
00250 [[fo:]]
00251 [[fr:]]
00252 [[frp:]]
00253 [[fur:]]
00254 [[fy:]]
00255 [[ga:]]
00256 [[gan:]]
00257 [[gd:]]
00258 [[gl:]]
00259 [[glk:]]
00260 [[gn:]]
00261 [[got:]]
00262 [[gu:]]
00263 [[gv:]]
00264 [[ha:]]
00265 [[hak:]]
00266 [[haw:]]
00267 [[he:]]
00268 [[hi:]]
00269 [[hif:]]
00270 [[ho:]]
00271 [[hr:]]
00272 [[hsb:]]
00273 [[ht:]]
00274 [[hu:]]
00275 [[hy:]]
00276 [[hz:]]
00277 [[ia:]]
00278 [[id:]]
00279 [[ie:]]
00280 [[ig:]]
00281 [[ii:]]
00282 [[ik:]]
00283 [[ilo:]]
00284 [[io:]]
00285 [[is:]]
00286 [[it:]]
00287 [[iu:]]
00288 [[ja:]]
00289 [[jbo:]]
00290 [[jv:]]
00291 [[ka:]]
00292 [[kaa:]]
00293 [[kab:]]
00294 [[kg:]]
00295 [[ki:]]
00296 [[kj:]]
00297 [[kk:]]
00298 [[kl:]]
00299 [[km:]]
00300 [[kn:]]
00301 [[ko:]]
00302 [[kr:]]
00303 [[ks:]]
00304 [[ksh:]]
00305 [[ku:]]
00306 [[kv:]]
00307 [[kw:]]
00308 [[ky:]]
00309 [[la:]]
00310 [[lad:]]
00311 [[lb:]]
00312 [[lbe:]]
00313 [[lg:]]
00314 [[li:]]
00315 [[lij:]]
00316 [[lmo:]]
00317 [[ln:]]
00318 [[lo:]]
00319 [[lt:]]
00320 [[lv:]]
00321 [[map-bms:]]
00322 [[mdf:]]
00323 [[mg:]]
00324 [[mh:]]
00325 [[mhr:]]
00326 [[mi:]]
00327 [[mk:]]
00328 [[ml:]]
00329 [[mn:]]
00330 [[mo:]]
00331 [[mr:]]
00332 [[ms:]]
00333 [[mt:]]
00334 [[mus:]]
00335 [[mwl:]]
00336 [[my:]]
00337 [[myv:]]
00338 [[mzn:]]
00339 [[na:]]
00340 [[nan:]]
00341 [[nap:]]
00342 [[nds:]]
00343 [[nds-nl:]]
00344 [[ne:]]
00345 [[new:]]
00346 [[ng:]]
00347 [[nl:]]
00348 [[nn:]]
00349 [[no:]]
00350 [[nov:]]
00351 [[nrm:]]
00352 [[nv:]]
00353 [[ny:]]
00354 [[oc:]]
00355 [[om:]]
00356 [[or:]]
00357 [[os:]]
00358 [[pa:]]
00359 [[pag:]]
00360 [[pam:]]
00361 [[pap:]]
00362 [[pdc:]]
00363 [[pi:]]
00364 [[pih:]]
00365 [[pl:]]
00366 [[pms:]]
00367 [[pnt:]]
00368 [[pnb:]]
00369 [[ps:]]
00370 [[pt:]]
00371 [[qu:]]
00372 [[rm:]]
00373 [[rmy:]]
00374 [[rn:]]
00375 [[ro:]]
00376 [[roa-rup:]]
00377 [[roa-tara:]]
00378 [[ru:]]
00379 [[rw:]]
00380 [[sa:]]
00381 [[sah:]]
00382 [[sc:]]
00383 [[scn:]]
00384 [[sco:]]
00385 [[sd:]]
00386 [[se:]]
00387 [[sg:]]
00388 [[sh:]]
00389 [[si:]]
00390 [[simple:]]
00391 [[sk:]]
00392 [[sl:]]
00393 [[sm:]]
00394 [[sn:]]
00395 [[so:]]
00396 [[sq:]]
00397 [[sr:]]
00398 [[srn:]]
00399 [[ss:]]
00400 [[st:]]
00401 [[stq:]]
00402 [[su:]]
00403 [[sv:]]
00404 [[sw:]]
00405 [[szl:]]
00406 [[ta:]]
00407 [[te:]]
00408 [[tet:]]
00409 [[tg:]]
00410 [[th:]]
00411 [[ti:]]
00412 [[tk:]]
00413 [[tl:]]
00414 [[tn:]]
00415 [[to:]]
00416 [[tpi:]]
00417 [[tr:]]
00418 [[ts:]]
00419 [[tt:]]
00420 [[tum:]]
00421 [[tw:]]
00422 [[ty:]]
00423 [[udm:]]
00424 [[ug:]]
00425 [[uk:]]
00426 [[ur:]]
00427 [[uz:]]
00428 [[ve:]]
00429 [[vec:]]
00430 [[vi:]]
00431 [[vls:]]
00432 [[vo:]]
00433 [[wa:]]
00434 [[war:]]
00435 [[wo:]]
00436 [[wuu:]]
00437 [[xal:]]
00438 [[xh:]]
00439 [[yi:]]
00440 [[yo:]]
00441 [[za:]]
00442 [[zea:]]
00443 [[zh:]]
00444 [[zh-classical:]]
00445 [[zh-min-nan:]]
00446 [[zh-yue:]]
00447 [[zu:]]
00448
00449 EOT;
00450 }
00451 }
00452
00453 $maintClass = "AddWiki";
00454 require_once( DO_MAINTENANCE );