follow up r63578 - remove stray debugging code.
[lhc/web/wiklou.git] / maintenance / addwiki.php
1 <?php
2 /**
3 * @defgroup Wikimedia Wikimedia
4 */
5
6 /**
7 * Add a new wiki
8 * Wikimedia specific!
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 * http://www.gnu.org/copyleft/gpl.html
24 *
25 * @file
26 * @ingroup Maintenance
27 * @ingroup Wikimedia
28 */
29
30 require_once( dirname(__FILE__) . '/Maintenance.php' );
31
32 class AddWiki extends Maintenance {
33 public function __construct() {
34 parent::__construct();
35 $this->mDescription = "Add a new wiki to the family. Wikimedia specific!";
36 $this->addArg( 'language', 'Language code of new site' );
37 $this->addArg( 'site', 'Type of site' );
38 $this->addArg( 'dbname', 'Name of database to create' );
39 }
40
41 public function getDbType() {
42 return Maintenance::DB_ADMIN;
43 }
44
45 public function execute() {
46 global $IP, $wgLanguageNames, $wgDefaultExternalStore, $wgNoDBParam;
47
48 $wgNoDBParam = true;
49 $lang = $this->getArg(0);
50 $site = $this->getArg(1);
51 $dbName = $this->getArg(2);
52
53 if ( !isset( $wgLanguageNames[$lang] ) ) {
54 $this->error( "Language $lang not found in \$wgLanguageNames", true );
55 }
56 $name = $wgLanguageNames[$lang];
57
58 $dbw = wfGetDB( DB_MASTER );
59 $common = "/home/wikipedia/common";
60
61 $this->output( "Creating database $dbName for $lang.$site ($name)\n" );
62
63 # Set up the database
64 $dbw->query( "SET table_type=Innodb" );
65 $dbw->query( "CREATE DATABASE $dbName" );
66 $dbw->selectDB( $dbName );
67
68 $this->output( "Initialising tables\n" );
69 $dbw->sourceFile( $this->getDir() . '/tables.sql' );
70 $dbw->sourceFile( "$IP/extensions/OAI/update_table.sql" );
71 $dbw->sourceFile( "$IP/extensions/AntiSpoof/sql/patch-antispoof.mysql.sql" );
72 $dbw->sourceFile( "$IP/extensions/CheckUser/cu_changes.sql" );
73 $dbw->sourceFile( "$IP/extensions/CheckUser/cu_log.sql" );
74 $dbw->sourceFile( "$IP/extensions/TitleKey/titlekey.sql" );
75 $dbw->sourceFile( "$IP/extensions/Oversight/hidden.sql" );
76 $dbw->sourceFile( "$IP/extensions/GlobalBlocking/localdb_patches/setup-global_block_whitelist.sql" );
77 $dbw->sourceFile( "$IP/extensions/AbuseFilter/abusefilter.tables.sql" );
78 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/PrefStats/PrefStats.sql" );
79 $dbw->sourceFile( "$IP/extensions/ProofreadPage/ProofreadPage.sql" );
80 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTrackingEvents.sql" );
81 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/ClickTracking/ClickTracking.sql" );
82 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/UserDailyContribs/UserDailyContribs.sql" );
83 $dbw->sourceFile( "$IP/extensions/UsabilityInitiative/Optin/OptIn.sql" );
84
85 $dbw->query( "INSERT INTO site_stats(ss_row_id) VALUES (1)" );
86
87 # Initialise external storage
88 if ( is_array( $wgDefaultExternalStore ) ) {
89 $stores = $wgDefaultExternalStore;
90 } elseif ( $stores ) {
91 $stores = array( $wgDefaultExternalStore );
92 } else {
93 $stores = array();
94 }
95 if ( count( $stores ) ) {
96 global $wgDBuser, $wgDBpassword, $wgExternalServers;
97 foreach ( $stores as $storeURL ) {
98 $m = array();
99 if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) {
100 continue;
101 }
102
103 $cluster = $m[1];
104 $this->output( "Initialising external storage $cluster...\n" );
105
106 # Hack
107 $wgExternalServers[$cluster][0]['user'] = $wgDBuser;
108 $wgExternalServers[$cluster][0]['password'] = $wgDBpassword;
109
110 $store = new ExternalStoreDB;
111 $extdb = $store->getMaster( $cluster );
112 $extdb->query( "SET table_type=InnoDB" );
113 $extdb->query( "CREATE DATABASE $dbName" );
114 $extdb->selectDB( $dbName );
115
116 # Hack x2
117 $blobsTable = $store->getTable( $extdb );
118 $sedCmd = "sed s/blobs\\\\\\>/$blobsTable/ " . $this->getDir() . "/storage/blobs.sql";
119 $blobsFile = popen( $sedCmd, 'r' );
120 $extdb->sourceStream( $blobsFile );
121 pclose( $blobsFile );
122 $extdb->commit();
123 }
124 }
125
126 global $wgTitle, $wgArticle;
127 $wgTitle = Title::newFromText( wfMsgWeirdKey( "mainpage/$lang" ) );
128 $this->output( "Writing main page to " . $wgTitle->getPrefixedDBkey() . "\n" );
129 $wgArticle = new Article( $wgTitle );
130 $ucsite = ucfirst( $site );
131
132 $wgArticle->insertNewArticle( $this->getFirstArticle( $ucsite, $name ), '', false, false );
133
134 $this->output( "Adding to dblists\n" );
135
136 # Add to dblist
137 $file = fopen( "$common/all.dblist", "a" );
138 fwrite( $file, "$dbName\n" );
139 fclose( $file );
140
141 # Update the sublists
142 shell_exec("cd $common && ./refresh-dblist");
143
144 #print "Constructing interwiki SQL\n";
145 # Rebuild interwiki tables
146 #passthru( '/home/wikipedia/conf/interwiki/update' );
147
148 $this->output( "Script ended. You still have to:
149 * Add any required settings in InitialiseSettings.php
150 * Run sync-common-all
151 * Run /home/wikipedia/conf/interwiki/update
152 " );
153 }
154
155 private function getFirstArticle( $ucsite, $name ) {
156 return <<<EOT
157 ==This subdomain is reserved for the creation of a [[wikimedia:Our projects|$ucsite]] in '''[[w:en:{$name}|{$name}]]''' language==
158
159 * 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.
160
161 * 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]].
162
163 * 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]].
164
165 == Sister projects ==
166 <span class="plainlinks">
167 [http://www.wikipedia.org Wikipedia] |
168 [http://www.wiktionary.org Wiktonary] |
169 [http://www.wikibooks.org Wikibooks] |
170 [http://www.wikinews.org Wikinews] |
171 [http://www.wikiquote.org Wikiquote] |
172 [http://www.wikisource.org Wikisource]
173 [http://www.wikiversity.org Wikiversity]
174 </span>
175
176 See Wikimedia's [[m:|Meta-Wiki]] for the coordination of these projects.
177
178 [[aa:]]
179 [[ab:]]
180 [[ace:]]
181 [[af:]]
182 [[ak:]]
183 [[als:]]
184 [[am:]]
185 [[an:]]
186 [[ang:]]
187 [[ar:]]
188 [[arc:]]
189 [[arz:]]
190 [[as:]]
191 [[ast:]]
192 [[av:]]
193 [[ay:]]
194 [[az:]]
195 [[ba:]]
196 [[bar:]]
197 [[bat-smg:]]
198 [[bcl:]]
199 [[be:]]
200 [[be-x-old:]]
201 [[bg:]]
202 [[bh:]]
203 [[bi:]]
204 [[bm:]]
205 [[bn:]]
206 [[bo:]]
207 [[bpy:]]
208 [[br:]]
209 [[bs:]]
210 [[bug:]]
211 [[bxr:]]
212 [[ca:]]
213 [[cbk-zam:]]
214 [[cdo:]]
215 [[ce:]]
216 [[ceb:]]
217 [[ch:]]
218 [[cho:]]
219 [[chr:]]
220 [[chy:]]
221 [[ckb:]]
222 [[co:]]
223 [[cr:]]
224 [[crh:]]
225 [[cs:]]
226 [[csb:]]
227 [[cu:]]
228 [[cv:]]
229 [[cy:]]
230 [[da:]]
231 [[de:]]
232 [[diq:]]
233 [[dk:]]
234 [[dsb:]]
235 [[dv:]]
236 [[dz:]]
237 [[ee:]]
238 [[el:]]
239 [[eml:]]
240 [[en:]]
241 [[eo:]]
242 [[es:]]
243 [[et:]]
244 [[eu:]]
245 [[ext:]]
246 [[fa:]]
247 [[ff:]]
248 [[fi:]]
249 [[fiu-vro:]]
250 [[fj:]]
251 [[fo:]]
252 [[fr:]]
253 [[frp:]]
254 [[fur:]]
255 [[fy:]]
256 [[ga:]]
257 [[gan:]]
258 [[gd:]]
259 [[gl:]]
260 [[glk:]]
261 [[gn:]]
262 [[got:]]
263 [[gu:]]
264 [[gv:]]
265 [[ha:]]
266 [[hak:]]
267 [[haw:]]
268 [[he:]]
269 [[hi:]]
270 [[hif:]]
271 [[ho:]]
272 [[hr:]]
273 [[hsb:]]
274 [[ht:]]
275 [[hu:]]
276 [[hy:]]
277 [[hz:]]
278 [[ia:]]
279 [[id:]]
280 [[ie:]]
281 [[ig:]]
282 [[ii:]]
283 [[ik:]]
284 [[ilo:]]
285 [[io:]]
286 [[is:]]
287 [[it:]]
288 [[iu:]]
289 [[ja:]]
290 [[jbo:]]
291 [[jv:]]
292 [[ka:]]
293 [[kaa:]]
294 [[kab:]]
295 [[kg:]]
296 [[ki:]]
297 [[kj:]]
298 [[kk:]]
299 [[kl:]]
300 [[km:]]
301 [[kn:]]
302 [[ko:]]
303 [[kr:]]
304 [[ks:]]
305 [[ksh:]]
306 [[ku:]]
307 [[kv:]]
308 [[kw:]]
309 [[ky:]]
310 [[la:]]
311 [[lad:]]
312 [[lb:]]
313 [[lbe:]]
314 [[lg:]]
315 [[li:]]
316 [[lij:]]
317 [[lmo:]]
318 [[ln:]]
319 [[lo:]]
320 [[lt:]]
321 [[lv:]]
322 [[map-bms:]]
323 [[mdf:]]
324 [[mg:]]
325 [[mh:]]
326 [[mhr:]]
327 [[mi:]]
328 [[mk:]]
329 [[ml:]]
330 [[mn:]]
331 [[mo:]]
332 [[mr:]]
333 [[ms:]]
334 [[mt:]]
335 [[mus:]]
336 [[mwl:]]
337 [[my:]]
338 [[myv:]]
339 [[mzn:]]
340 [[na:]]
341 [[nan:]]
342 [[nap:]]
343 [[nds:]]
344 [[nds-nl:]]
345 [[ne:]]
346 [[new:]]
347 [[ng:]]
348 [[nl:]]
349 [[nn:]]
350 [[no:]]
351 [[nov:]]
352 [[nrm:]]
353 [[nv:]]
354 [[ny:]]
355 [[oc:]]
356 [[om:]]
357 [[or:]]
358 [[os:]]
359 [[pa:]]
360 [[pag:]]
361 [[pam:]]
362 [[pap:]]
363 [[pdc:]]
364 [[pi:]]
365 [[pih:]]
366 [[pl:]]
367 [[pms:]]
368 [[pnt:]]
369 [[pnb:]]
370 [[ps:]]
371 [[pt:]]
372 [[qu:]]
373 [[rm:]]
374 [[rmy:]]
375 [[rn:]]
376 [[ro:]]
377 [[roa-rup:]]
378 [[roa-tara:]]
379 [[ru:]]
380 [[rw:]]
381 [[sa:]]
382 [[sah:]]
383 [[sc:]]
384 [[scn:]]
385 [[sco:]]
386 [[sd:]]
387 [[se:]]
388 [[sg:]]
389 [[sh:]]
390 [[si:]]
391 [[simple:]]
392 [[sk:]]
393 [[sl:]]
394 [[sm:]]
395 [[sn:]]
396 [[so:]]
397 [[sq:]]
398 [[sr:]]
399 [[srn:]]
400 [[ss:]]
401 [[st:]]
402 [[stq:]]
403 [[su:]]
404 [[sv:]]
405 [[sw:]]
406 [[szl:]]
407 [[ta:]]
408 [[te:]]
409 [[tet:]]
410 [[tg:]]
411 [[th:]]
412 [[ti:]]
413 [[tk:]]
414 [[tl:]]
415 [[tn:]]
416 [[to:]]
417 [[tpi:]]
418 [[tr:]]
419 [[ts:]]
420 [[tt:]]
421 [[tum:]]
422 [[tw:]]
423 [[ty:]]
424 [[udm:]]
425 [[ug:]]
426 [[uk:]]
427 [[ur:]]
428 [[uz:]]
429 [[ve:]]
430 [[vec:]]
431 [[vi:]]
432 [[vls:]]
433 [[vo:]]
434 [[wa:]]
435 [[war:]]
436 [[wo:]]
437 [[wuu:]]
438 [[xal:]]
439 [[xh:]]
440 [[yi:]]
441 [[yo:]]
442 [[za:]]
443 [[zea:]]
444 [[zh:]]
445 [[zh-classical:]]
446 [[zh-min-nan:]]
447 [[zh-yue:]]
448 [[zu:]]
449
450 EOT;
451 }
452 }
453
454 $maintClass = "AddWiki";
455 require_once( DO_MAINTENANCE );