1<?php 2/** 3 * This script generates a SQLite database for a MediaWiki version 1.19.0 4 * You must specify the login of the admin (argument 1) and its 5 * password (argument 2) and the folder where the database file 6 * is located (absolute path in argument 3). 7 * It is used by the script install-wiki.sh in order to make easy the 8 * installation of a MediaWiki. 9 * 10 * In order to generate a SQLite database file, MediaWiki ask the user 11 * to submit some forms in its web browser. This script simulates this 12 * behavior though the functions <get> and <submit> 13 * 14 */ 15$argc=$_SERVER['argc']; 16$argv=$_SERVER['argv']; 17 18$login=$argv[2]; 19$pass=$argv[3]; 20$tmp=$argv[4]; 21$port=$argv[5]; 22 23$url='http://localhost:'.$port.'/wiki/mw-config/index.php'; 24$db_dir=urlencode($tmp); 25$tmp_cookie=tempnam($tmp,"COOKIE_"); 26/* 27 * Fetchs a page with cURL. 28 */ 29functionget($page_name="") { 30$curl=curl_init(); 31$page_name_add=""; 32if($page_name!="") { 33$page_name_add='?page='.$page_name; 34} 35$url=$GLOBALS['url'].$page_name_add; 36$tmp_cookie=$GLOBALS['tmp_cookie']; 37curl_setopt($curl, CURLOPT_COOKIEJAR,$tmp_cookie); 38curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); 39curl_setopt($curl, CURLOPT_FOLLOWLOCATION,true); 40curl_setopt($curl, CURLOPT_COOKIEFILE,$tmp_cookie); 41curl_setopt($curl, CURLOPT_HEADER,true); 42curl_setopt($curl, CURLOPT_URL,$url); 43 44$page=curl_exec($curl); 45if(!$page) { 46die("Could not get page:$url\n"); 47} 48curl_close($curl); 49return$page; 50} 51 52/* 53 * Submits a form with cURL. 54 */ 55functionsubmit($page_name,$option="") { 56$curl=curl_init(); 57$datapost='submit-continue=Continue+%E2%86%92'; 58if($option!="") { 59$datapost=$option.'&'.$datapost; 60} 61$url=$GLOBALS['url'].'?page='.$page_name; 62$tmp_cookie=$GLOBALS['tmp_cookie']; 63curl_setopt($curl, CURLOPT_URL,$url); 64curl_setopt($curl, CURLOPT_POST,true); 65curl_setopt($curl, CURLOPT_FOLLOWLOCATION,true); 66curl_setopt($curl, CURLOPT_POSTFIELDS,$datapost); 67curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); 68curl_setopt($curl, CURLOPT_COOKIEJAR,$tmp_cookie); 69curl_setopt($curl, CURLOPT_COOKIEFILE,$tmp_cookie); 70 71$page=curl_exec($curl); 72if(!$page) { 73die("Could not get page:$url\n"); 74} 75curl_close($curl); 76return"$page"; 77} 78 79/* 80 * Here starts this script: simulates the behavior of the user 81 * submitting forms to generates the database file. 82 * Note this simulation was made for the MediaWiki version 1.19.0, 83 * we can't assume it works with other versions. 84 * 85 */ 86 87$page= get(); 88if (!preg_match('/input type="hidden" value="([0-9]+)" name="LanguageRequestTime"/', 89$page,$matches)) { 90 echo "Unexpected content for page downloaded:\n"; 91 echo "$page"; 92die; 93}; 94$timestamp=$matches[1]; 95$language="LanguageRequestTime=$timestamp&uselang=en&ContLang=en"; 96$page=submit('Language',$language); 97 98submit('Welcome'); 99 100$db_config='DBType=sqlite'; 101$db_config=$db_config.'&sqlite_wgSQLiteDataDir='.$db_dir; 102$db_config=$db_config.'&sqlite_wgDBname='.$argv[1]; 103submit('DBConnect',$db_config); 104 105$wiki_config='config_wgSitename=TEST'; 106$wiki_config=$wiki_config.'&config__NamespaceType=site-name'; 107$wiki_config=$wiki_config.'&config_wgMetaNamespace=MyWiki'; 108$wiki_config=$wiki_config.'&config__AdminName='.$login; 109 110$wiki_config=$wiki_config.'&config__AdminPassword='.$pass; 111$wiki_config=$wiki_config.'&config__AdminPassword2='.$pass; 112 113$wiki_config=$wiki_config.'&wiki__configEmail=email%40email.org'; 114$wiki_config=$wiki_config.'&config__SkipOptional=skip'; 115submit('Name',$wiki_config); 116submit('Install'); 117submit('Install'); 118 119unlink($tmp_cookie); 120?>