| <?php |
| /** |
| * This script generates a SQLite database for a MediaWiki version 1.19.0 |
| * You must specify the login of the admin (argument 1) and its |
| * password (argument 2) and the folder where the database file |
| * is located (absolute path in argument 3). |
| * It is used by the script install-wiki.sh in order to make easy the |
| * installation of a MediaWiki. |
| * |
| * In order to generate a SQLite database file, MediaWiki ask the user |
| * to submit some forms in its web browser. This script simulates this |
| * behavior though the functions <get> and <submit> |
| * |
| */ |
| $argc = $_SERVER['argc']; |
| $argv = $_SERVER['argv']; |
| |
| $login = $argv[2]; |
| $pass = $argv[3]; |
| $tmp = $argv[4]; |
| $port = $argv[5]; |
| |
| $url = 'http://localhost:'.$port.'/wiki/mw-config/index.php'; |
| $db_dir = urlencode($tmp); |
| $tmp_cookie = tempnam($tmp, "COOKIE_"); |
| /* |
| * Fetches a page with cURL. |
| */ |
| function get($page_name = "") { |
| $curl = curl_init(); |
| $page_name_add = ""; |
| if ($page_name != "") { |
| $page_name_add = '?page='.$page_name; |
| } |
| $url = $GLOBALS['url'].$page_name_add; |
| $tmp_cookie = $GLOBALS['tmp_cookie']; |
| curl_setopt($curl, CURLOPT_COOKIEJAR, $tmp_cookie); |
| curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
| curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
| curl_setopt($curl, CURLOPT_COOKIEFILE, $tmp_cookie); |
| curl_setopt($curl, CURLOPT_HEADER, true); |
| curl_setopt($curl, CURLOPT_URL, $url); |
| |
| $page = curl_exec($curl); |
| if (!$page) { |
| die("Could not get page: $url\n"); |
| } |
| curl_close($curl); |
| return $page; |
| } |
| |
| /* |
| * Submits a form with cURL. |
| */ |
| function submit($page_name, $option = "") { |
| $curl = curl_init(); |
| $datapost = 'submit-continue=Continue+%E2%86%92'; |
| if ($option != "") { |
| $datapost = $option.'&'.$datapost; |
| } |
| $url = $GLOBALS['url'].'?page='.$page_name; |
| $tmp_cookie = $GLOBALS['tmp_cookie']; |
| curl_setopt($curl, CURLOPT_URL, $url); |
| curl_setopt($curl, CURLOPT_POST, true); |
| curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
| curl_setopt($curl, CURLOPT_POSTFIELDS, $datapost); |
| curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
| curl_setopt($curl, CURLOPT_COOKIEJAR, $tmp_cookie); |
| curl_setopt($curl, CURLOPT_COOKIEFILE, $tmp_cookie); |
| |
| $page = curl_exec($curl); |
| if (!$page) { |
| die("Could not get page: $url\n"); |
| } |
| curl_close($curl); |
| return "$page"; |
| } |
| |
| /* |
| * Here starts this script: simulates the behavior of the user |
| * submitting forms to generates the database file. |
| * Note this simulation was made for the MediaWiki version 1.19.0, |
| * we can't assume it works with other versions. |
| * |
| */ |
| |
| $page = get(); |
| if (!preg_match('/input type="hidden" value="([0-9]+)" name="LanguageRequestTime"/', |
| $page, $matches)) { |
| echo "Unexpected content for page downloaded:\n"; |
| echo "$page"; |
| die; |
| }; |
| $timestamp = $matches[1]; |
| $language = "LanguageRequestTime=$timestamp&uselang=en&ContLang=en"; |
| $page = submit('Language', $language); |
| |
| submit('Welcome'); |
| |
| $db_config = 'DBType=sqlite'; |
| $db_config = $db_config.'&sqlite_wgSQLiteDataDir='.$db_dir; |
| $db_config = $db_config.'&sqlite_wgDBname='.$argv[1]; |
| submit('DBConnect', $db_config); |
| |
| $wiki_config = 'config_wgSitename=TEST'; |
| $wiki_config = $wiki_config.'&config__NamespaceType=site-name'; |
| $wiki_config = $wiki_config.'&config_wgMetaNamespace=MyWiki'; |
| $wiki_config = $wiki_config.'&config__AdminName='.$login; |
| |
| $wiki_config = $wiki_config.'&config__AdminPassword='.$pass; |
| $wiki_config = $wiki_config.'&config__AdminPassword2='.$pass; |
| |
| $wiki_config = $wiki_config.'&wiki__configEmail=email%40email.org'; |
| $wiki_config = $wiki_config.'&config__SkipOptional=skip'; |
| submit('Name', $wiki_config); |
| submit('Install'); |
| submit('Install'); |
| |
| unlink($tmp_cookie); |
| ?> |