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