xml schema for installer
git-svn-id: file:///home/shish/svn/shimmie2/trunk@704 7f39781d-f577-437e-ae19-be835c7a54ca
This commit is contained in:
		
							parent
							
								
									980ebd5189
								
							
						
					
					
						commit
						4fb0092742
					
				
							
								
								
									
										222
									
								
								install.php
									
									
									
									
									
								
							
							
						
						
									
										222
									
								
								install.php
									
									
									
									
									
								
							@ -1,7 +1,16 @@
 | 
			
		||||
<?php if(false) { ?>
 | 
			
		||||
<html>
 | 
			
		||||
<!--
 | 
			
		||||
 - install.php (c) Shish 2007
 | 
			
		||||
 -
 | 
			
		||||
 - Initialise the database, check that folder
 | 
			
		||||
 - permissions are set properly, set an admin
 | 
			
		||||
 - account.
 | 
			
		||||
 -
 | 
			
		||||
 - This file should be independant of the database
 | 
			
		||||
 - and other such things that aren't ready yet
 | 
			
		||||
-->
 | 
			
		||||
	<head>
 | 
			
		||||
		<title>Error</title>
 | 
			
		||||
		<title>Shimmie Installation</title>
 | 
			
		||||
		<style>
 | 
			
		||||
BODY {background: #EEE;font-family: "Arial", sans-serif;font-size: 14px;}
 | 
			
		||||
H1, H3 {border: 1px solid black;background: #DDD;text-align: center;}
 | 
			
		||||
@ -11,9 +20,12 @@ FORM {margin: 0px;}
 | 
			
		||||
A {text-decoration: none;}
 | 
			
		||||
A:hover {text-decoration: underline;}
 | 
			
		||||
#block {width: 512px; margin: auto; margin-top: 64px;}
 | 
			
		||||
#iblock {width: 512px; margin: auto; margin-top: 16px;}
 | 
			
		||||
TD INPUT {width: 350px;}
 | 
			
		||||
		</style>
 | 
			
		||||
	</head>
 | 
			
		||||
	<body>
 | 
			
		||||
<?php if(false) { ?>
 | 
			
		||||
		<div id="block">
 | 
			
		||||
			<h1>Install Error</h1>
 | 
			
		||||
			<p>Shimmie needs to be run via a web server with PHP support -- you
 | 
			
		||||
@ -26,23 +38,25 @@ A:hover {text-decoration: underline;}
 | 
			
		||||
			documentation wiki</a>.
 | 
			
		||||
		</div>
 | 
			
		||||
		<div style="display: none;">
 | 
			
		||||
			<PLAINTEXT>
 | 
			
		||||
<?php }
 | 
			
		||||
/*
 | 
			
		||||
 * install.php (c) Shish 2007
 | 
			
		||||
 *
 | 
			
		||||
 * Initialise the database, check that folder
 | 
			
		||||
 * permissions are set properly, set an admin
 | 
			
		||||
 * account.
 | 
			
		||||
 *
 | 
			
		||||
 * This file should be independant of the database
 | 
			
		||||
 * and other such things that aren't ready yet
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// FIXME: should be called from index
 | 
			
		||||
do_install();
 | 
			
		||||
assert_options(ASSERT_ACTIVE, 1);
 | 
			
		||||
assert_options(ASSERT_BAIL, 1);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file lets anyone destroy the database -- disable it
 | 
			
		||||
 * as soon as the admin is done installing for the first time
 | 
			
		||||
 */
 | 
			
		||||
if(is_readable("config.php")) {
 | 
			
		||||
	echo "'config.php' exists -- install function is disabled";
 | 
			
		||||
	exit;
 | 
			
		||||
}
 | 
			
		||||
require_once "lib/adodb/adodb.inc.php";
 | 
			
		||||
require_once "lib/adodb/adodb-xmlschema03.inc.php";
 | 
			
		||||
 | 
			
		||||
do_install();
 | 
			
		||||
 | 
			
		||||
// utilities {{{
 | 
			
		||||
function installer_write_file($fname, $data) {
 | 
			
		||||
	$fp = fopen($fname, "w");
 | 
			
		||||
@ -68,19 +82,16 @@ function check_gd_version() {
 | 
			
		||||
 | 
			
		||||
	return $gdversion;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function check_im_version() {
 | 
			
		||||
	if(!ini_get('safe_mode')) {
 | 
			
		||||
		$convert_check = exec("convert");
 | 
			
		||||
	}
 | 
			
		||||
	return (empty($convert_check) ? 0 : 1);
 | 
			
		||||
}
 | 
			
		||||
// }}}
 | 
			
		||||
// init {{{
 | 
			
		||||
function do_install() {
 | 
			
		||||
	/*
 | 
			
		||||
	 * This file lets anyone destroy the database -- disable it
 | 
			
		||||
	 * as soon as the admin is done installing for the first time
 | 
			
		||||
	 */
 | 
			
		||||
	if(is_readable("config.php")) {
 | 
			
		||||
		echo "'config.php' exists -- install function is disabled";
 | 
			
		||||
		exit;
 | 
			
		||||
	}
 | 
			
		||||
	require_once "lib/adodb/adodb.inc.php";
 | 
			
		||||
 | 
			
		||||
	session_start(); // hold temp stuff in session
 | 
			
		||||
 | 
			
		||||
	$stage = isset($_GET['stage']) ? $_GET['stage'] : "begin";
 | 
			
		||||
@ -93,31 +104,16 @@ function do_install() {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function begin() {
 | 
			
		||||
	if(check_gd_version() == 0) {
 | 
			
		||||
		$gd = "<h3>Error</h3>\nPHP's GD extension seems to be missing; ".
 | 
			
		||||
		      "you can live without it if you have imagemagick installed...";
 | 
			
		||||
	if(check_gd_version() == 0 && check_im_version() == 0) {
 | 
			
		||||
		$gd = "<h3>Error</h3>\nPHP's GD extension seems to be missing, ".
 | 
			
		||||
		      "and imagemagick's \"convert\" command cannot be found - ".
 | 
			
		||||
			  "no thumbnailing engines are available.";
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		$gd = "";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	print <<<EOD
 | 
			
		||||
<html>
 | 
			
		||||
	<head>
 | 
			
		||||
		<title>Shimmie2 Installer</title>
 | 
			
		||||
		<style>
 | 
			
		||||
BODY {background: #EEE;font-family: "Arial", sans-serif;font-size: 14px;}
 | 
			
		||||
H1, H3 {border: 1px solid black;background: #DDD;text-align: center;}
 | 
			
		||||
H1 {margin-top: 0px;margin-bottom: 0px;padding: 2px;}
 | 
			
		||||
H3 {margin-top: 32px;padding: 1px;}
 | 
			
		||||
FORM {margin: 0px;}
 | 
			
		||||
A {text-decoration: none;}
 | 
			
		||||
A:hover {text-decoration: underline;}
 | 
			
		||||
#iblock {width: 512px; margin: auto; margin-top: 16px;}
 | 
			
		||||
TD INPUT {width: 350px;}
 | 
			
		||||
		</style>
 | 
			
		||||
	</head>
 | 
			
		||||
	<body>
 | 
			
		||||
		<div id="iblock">
 | 
			
		||||
			<h1>Shimmie Installer</h1>
 | 
			
		||||
 | 
			
		||||
@ -145,8 +141,6 @@ TD INPUT {width: 350px;}
 | 
			
		||||
			<a href="http://trac.shishnet.org/shimmie2/wiki/Guides/Admin/Install">the
 | 
			
		||||
			documentation wiki</a>.
 | 
			
		||||
		</div>
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
EOD;
 | 
			
		||||
}
 | 
			
		||||
// }}}
 | 
			
		||||
@ -164,26 +158,16 @@ function create_tables($dsn) { // {{{
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		if(substr($dsn, 0, 5) == "mysql") {
 | 
			
		||||
			if(create_tables_mysql($db)) {
 | 
			
		||||
				$_SESSION['tables_created'] = true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if(substr($dsn, 0, 5) == "pgsql" || substr($dsn, 0, 8) == "postgres") {
 | 
			
		||||
			if(create_tables_pgsql($db)) {
 | 
			
		||||
				$_SESSION['tables_created'] = true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if(substr($dsn, 0, 6) == "sqlite") {
 | 
			
		||||
			if(create_tables_sqlite($db)) {
 | 
			
		||||
				$_SESSION['tables_created'] = true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			die("This database format isn't currently supported. Please use either MySQL, PostgreSQL, or SQLite.");
 | 
			
		||||
			$db->Execute("SET NAMES utf8");
 | 
			
		||||
		}
 | 
			
		||||
		$schema = new adoSchema($db);
 | 
			
		||||
		$sql = $schema->ParseSchema("ext/upgrade/schema.xml");
 | 
			
		||||
		echo "<pre>"; var_dump($sql); echo "</pre>";
 | 
			
		||||
		$result = $schema->ExecuteSchema();
 | 
			
		||||
 | 
			
		||||
		if(!isset($_SESSION['tables_created']) || !$_SESSION['tables_created']) {
 | 
			
		||||
			die("Error creating tables");
 | 
			
		||||
		if(!$result) {
 | 
			
		||||
			define( 'XMLS_DEBUG', TRUE );
 | 
			
		||||
			die("Error creating tables from XML schema");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$db->Close();
 | 
			
		||||
@ -228,9 +212,6 @@ function write_config($dsn) { // {{{
 | 
			
		||||
	else {
 | 
			
		||||
		$h_file_content = htmlentities($file_content);
 | 
			
		||||
		print <<<EOD
 | 
			
		||||
<html>
 | 
			
		||||
	<head><title>Shimmie2 Installer</title></head>
 | 
			
		||||
	<body>
 | 
			
		||||
		The web server isn't allowed to write to the config file; please copy
 | 
			
		||||
	    the text below, save it as 'config.php', and upload it into the shimmie
 | 
			
		||||
	    folder manually. Make sure that when you save it, there is no whitespace
 | 
			
		||||
@ -239,15 +220,11 @@ function write_config($dsn) { // {{{
 | 
			
		||||
		<p><textarea cols="80" rows="2">$file_content</textarea>
 | 
			
		||||
						
 | 
			
		||||
		<p>One done, <a href='index.php?q=setup'>Continue</a>
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
EOD;
 | 
			
		||||
		session_destroy();
 | 
			
		||||
		exit;
 | 
			
		||||
	}
 | 
			
		||||
} // }}}
 | 
			
		||||
// }}}
 | 
			
		||||
// install {{{
 | 
			
		||||
function install_process() { // {{{
 | 
			
		||||
	if(!isset($_POST['database_dsn']) || !isset($_POST["admin_name"]) || !isset($_POST["admin_pass"])) {
 | 
			
		||||
		die("Install is missing some paramaters (database_dsn, admin_name, or admin_pass)");
 | 
			
		||||
@ -294,111 +271,14 @@ function insert_defaults($dsn, $admin_name, $admin_pass) { // {{{
 | 
			
		||||
		$admin_pass = md5(strtolower($admin_name).$admin_pass);
 | 
			
		||||
		$db->Execute($user_insert, Array($admin_name, $admin_pass, 'Y'));
 | 
			
		||||
 | 
			
		||||
		if(!ini_get('safe_mode')) {
 | 
			
		||||
			$convert_check = exec("convert");
 | 
			
		||||
			if(!empty($convert_check)) {
 | 
			
		||||
				$db->Execute($config_insert, Array('thumb_engine', 'convert'));
 | 
			
		||||
			}
 | 
			
		||||
		if(check_im_version() > 0) {
 | 
			
		||||
			$db->Execute($config_insert, Array('thumb_engine', 'convert'));
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$db->Close();
 | 
			
		||||
	}
 | 
			
		||||
} // }}}
 | 
			
		||||
// }}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// table creation {{{
 | 
			
		||||
/*
 | 
			
		||||
 * Note: try and keep this as ANSI SQL compliant as possible,
 | 
			
		||||
 * so that we can (in theory) support other databases
 | 
			
		||||
 */
 | 
			
		||||
function create_tables_common($db, $auto_incrementing_id, $boolean, $true, $false, $ip) {
 | 
			
		||||
	$db->Execute("CREATE TABLE aliases (
 | 
			
		||||
		oldtag VARCHAR(255) NOT NULL PRIMARY KEY,
 | 
			
		||||
		newtag VARCHAR(255) NOT NULL
 | 
			
		||||
	)");
 | 
			
		||||
 | 
			
		||||
	$db->Execute("CREATE TABLE config (
 | 
			
		||||
		name VARCHAR(255) NOT NULL PRIMARY KEY,
 | 
			
		||||
		value TEXT
 | 
			
		||||
	)");
 | 
			
		||||
 | 
			
		||||
	$db->Execute("CREATE TABLE images (
 | 
			
		||||
		id $auto_incrementing_id,
 | 
			
		||||
		owner_id INTEGER NOT NULL,
 | 
			
		||||
		owner_ip $ip,
 | 
			
		||||
		filename VARCHAR(64) NOT NULL DEFAULT '',
 | 
			
		||||
		filesize INTEGER NOT NULL,
 | 
			
		||||
		hash CHAR(32) NOT NULL UNIQUE,
 | 
			
		||||
		ext CHAR(4) NOT NULL,
 | 
			
		||||
		source VARCHAR(255),
 | 
			
		||||
		width INTEGER NOT NULL,
 | 
			
		||||
		height INTEGER NOT NULL,
 | 
			
		||||
		posted TIMESTAMP NOT NULL
 | 
			
		||||
	)");
 | 
			
		||||
 | 
			
		||||
	$db->Execute("CREATE TABLE users (
 | 
			
		||||
		id $auto_incrementing_id,
 | 
			
		||||
		name VARCHAR(32) NOT NULL UNIQUE,
 | 
			
		||||
		pass CHAR(32),
 | 
			
		||||
		joindate DATETIME NOT NULL,
 | 
			
		||||
		enabled $boolean NOT NULL DEFAULT $true,
 | 
			
		||||
		admin $boolean NOT NULL DEFAULT $false,
 | 
			
		||||
		email VARCHAR(255)
 | 
			
		||||
	)");
 | 
			
		||||
	
 | 
			
		||||
	$db->Execute("CREATE TABLE layout (
 | 
			
		||||
		title VARCHAR(64) PRIMARY KEY NOT NULL,
 | 
			
		||||
		section VARCHAR(32) NOT NULL DEFAULT 'left',
 | 
			
		||||
		position INTEGER NOT NULL DEFAULT 50,
 | 
			
		||||
		visible $boolean DEFAULT $true
 | 
			
		||||
	)");
 | 
			
		||||
 | 
			
		||||
	$db->Execute("CREATE TABLE tags (
 | 
			
		||||
		id $auto_incrementing_id,
 | 
			
		||||
		tag VARCHAR(64) NOT NULL UNIQUE,
 | 
			
		||||
		count INTEGER NOT NULL DEFAULT 0
 | 
			
		||||
	)");
 | 
			
		||||
	$db->Execute("CREATE INDEX tags__count ON tags(count)");
 | 
			
		||||
	
 | 
			
		||||
	$db->Execute("CREATE TABLE image_tags (
 | 
			
		||||
		image_id INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
		tag_id INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
		UNIQUE (image_id, tag_id)
 | 
			
		||||
	)");
 | 
			
		||||
	$db->Execute("CREATE INDEX image_tags__tag_id ON image_tags(tag_id)");
 | 
			
		||||
	$db->Execute("CREATE INDEX image_tags__image_id ON image_tags(image_id)");
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	$db->Execute("INSERT INTO config(name, value) VALUES(?, ?)", Array('db_version', 5));
 | 
			
		||||
}
 | 
			
		||||
function create_tables_mysql($db) {
 | 
			
		||||
	$db->StartTrans();
 | 
			
		||||
	$db->Execute("SET NAMES utf8");
 | 
			
		||||
	create_tables_common($db,
 | 
			
		||||
		"INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY",
 | 
			
		||||
		"ENUM('Y', 'N')", "'Y'", "'N'",
 | 
			
		||||
		"CHAR(15)"
 | 
			
		||||
	);
 | 
			
		||||
	return $db->CommitTrans();
 | 
			
		||||
}
 | 
			
		||||
function create_tables_pgsql($db) {
 | 
			
		||||
	$db->StartTrans();
 | 
			
		||||
	create_tables_common($db,
 | 
			
		||||
		"SERIAL NOT NULL PRIMARY KEY",
 | 
			
		||||
		"BOOLEAN", "True", "False",
 | 
			
		||||
		"INET"
 | 
			
		||||
	);
 | 
			
		||||
	return $db->CommitTrans();
 | 
			
		||||
}
 | 
			
		||||
function create_tables_sqlite($db) {
 | 
			
		||||
	$db->StartTrans();
 | 
			
		||||
	create_tables_common($db,
 | 
			
		||||
		"INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL",
 | 
			
		||||
		"CHAR(1)", "'Y'", "'N'",
 | 
			
		||||
		"CHAR(15)"
 | 
			
		||||
	);
 | 
			
		||||
	return $db->CommitTrans();
 | 
			
		||||
}
 | 
			
		||||
// }}}
 | 
			
		||||
?>
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user