get rid of xmlschema
This commit is contained in:
		
							parent
							
								
									64fb261b87
								
							
						
					
					
						commit
						44ac62e1ae
					
				@ -104,14 +104,14 @@ class EventLog implements Extension {
 | 
			
		||||
		global $config;
 | 
			
		||||
 | 
			
		||||
		if($config->get_int("ext_event_log_version", 0) < 1) {
 | 
			
		||||
			$database->Execute("CREATE TABLE event_log (
 | 
			
		||||
				id int(11) NOT NULL auto_increment primary key,
 | 
			
		||||
				owner_id int(11) NOT NULL,
 | 
			
		||||
				owner_ip char(15) NOT NULL,
 | 
			
		||||
				date datetime NOT NULL,
 | 
			
		||||
				event varchar(32) NOT NULL,
 | 
			
		||||
				entry varchar(255) NOT NULL
 | 
			
		||||
			)");
 | 
			
		||||
			$database->create_table("event_log", "
 | 
			
		||||
				id SCORE_AIPK,
 | 
			
		||||
				owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
				owner_ip SCORE_INET NOT NULL,
 | 
			
		||||
				date DATETIME NOT NULL,
 | 
			
		||||
				event VARCHAR(32) NOT NULL,
 | 
			
		||||
				entry TEXT NOT NULL
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_event_log_version", 1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -116,13 +116,12 @@ class ImageBan implements Extension {
 | 
			
		||||
	protected function install() {
 | 
			
		||||
		global $database;
 | 
			
		||||
		global $config;
 | 
			
		||||
		$database->Execute("CREATE TABLE image_bans (
 | 
			
		||||
			id int(11) NOT NULL auto_increment,
 | 
			
		||||
			   hash char(32) default NULL,
 | 
			
		||||
			   date datetime default NULL,
 | 
			
		||||
			   reason varchar(255) default NULL,
 | 
			
		||||
			   PRIMARY KEY (id)
 | 
			
		||||
				   )");
 | 
			
		||||
		$database->create_table("image_bans", "
 | 
			
		||||
			id SCORE_AIPK,
 | 
			
		||||
			hash CHAR(32) NOT NULL,
 | 
			
		||||
			date DATETIME DEFAULT now(),
 | 
			
		||||
			reason TEXT NOT NULL,
 | 
			
		||||
		");
 | 
			
		||||
		$config->set_int("ext_imageban_version", 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -103,15 +103,13 @@ class IPBan implements Extension {
 | 
			
		||||
 | 
			
		||||
		// shortcut to latest
 | 
			
		||||
		if($config->get_int("ext_ipban_version") < 1) {
 | 
			
		||||
			$database->execute("
 | 
			
		||||
				CREATE TABLE bans (
 | 
			
		||||
					id {$database->engine->auto_increment},
 | 
			
		||||
			$database->create_table("bans", "
 | 
			
		||||
				id SCORE_AIPK,
 | 
			
		||||
				banner_id INTEGER NOT NULL,
 | 
			
		||||
					ip VARCHAR(15) NOT NULL,
 | 
			
		||||
				ip SCORE_INET NOT NULL,
 | 
			
		||||
				end_timestamp INTEGER,
 | 
			
		||||
				reason TEXT NOT NULL,
 | 
			
		||||
				INDEX (end_timestamp)
 | 
			
		||||
				) {$database->engine->create_table_extras};
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_ipban_version", 6);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -31,21 +31,21 @@ class Notes implements Extension {
 | 
			
		||||
	protected function install() {
 | 
			
		||||
		global $database;
 | 
			
		||||
		global $config;
 | 
			
		||||
		$database->Execute("CREATE TABLE image_notes (
 | 
			
		||||
			id int(11) NOT NULL auto_increment PRIMARY KEY,
 | 
			
		||||
			image_id int(11) NOT NULL,
 | 
			
		||||
			user_id int(11) NOT NULL,
 | 
			
		||||
			owner_ip char(15) NOT NULL,
 | 
			
		||||
			created_at datetime NOT NULL,
 | 
			
		||||
			updated_at datetime NOT NULL,
 | 
			
		||||
			version int(11) DEFAULT 1 NOT NULL,
 | 
			
		||||
			is_active enum('Y', 'N') DEFAULT 'Y' NOT NULL,
 | 
			
		||||
			x int(11) NOT NULL,
 | 
			
		||||
			y int(11) NOT NULL,
 | 
			
		||||
			w int(11) NOT NULL,
 | 
			
		||||
			h int(11) NOT NULL,
 | 
			
		||||
			body text NOT NULL
 | 
			
		||||
		)");
 | 
			
		||||
		$database->create_table("image_notes", "
 | 
			
		||||
			id SCORE_AIPK,
 | 
			
		||||
			image_id INTEGER NOT NULL,
 | 
			
		||||
			user_id INTEGER NOT NULL,
 | 
			
		||||
			owner_ip SCORE_INET NOT NULL,
 | 
			
		||||
			created_at DATETIME NOT NULL,
 | 
			
		||||
			updated_at DATETIME NOT NULL,
 | 
			
		||||
			version INTEGER DEFAULT 1 NOT NULL,
 | 
			
		||||
			is_active SCORE_BOOL DEFAULT SCORE_BOOL_Y NOT NULL,
 | 
			
		||||
			x INTEGER NOT NULL,
 | 
			
		||||
			y INTEGER NOT NULL,
 | 
			
		||||
			w INTEGER NOT NULL,
 | 
			
		||||
			h INTEGER NOT NULL,
 | 
			
		||||
			body TEXT NOT NULL
 | 
			
		||||
		");
 | 
			
		||||
		$config->set_int("ext_notes_version", 1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -92,14 +92,12 @@ class NumericScore implements Extension {
 | 
			
		||||
		if($config->get_int("ext_numeric_score_version") < 1) {
 | 
			
		||||
			$database->Execute("ALTER TABLE images ADD COLUMN numeric_score INTEGER NOT NULL DEFAULT 0");
 | 
			
		||||
			$database->Execute("CREATE INDEX images__numeric_score ON images(numeric_score)");
 | 
			
		||||
			$database->Execute("
 | 
			
		||||
				CREATE TABLE numeric_score_votes (
 | 
			
		||||
					image_id INTEGER NOT NULL,
 | 
			
		||||
					user_id INTEGER NOT NULL,
 | 
			
		||||
			$database->create_table("numeric_score_votes", "
 | 
			
		||||
				image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
 | 
			
		||||
				user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
				score INTEGER NOT NULL,
 | 
			
		||||
				UNIQUE(image_id, user_id),
 | 
			
		||||
				INDEX(image_id)
 | 
			
		||||
				)
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_numeric_score_version", 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -121,18 +121,16 @@ class PM implements Extension {
 | 
			
		||||
 | 
			
		||||
		// shortcut to latest
 | 
			
		||||
		if($config->get_int("pm_version") < 1) {
 | 
			
		||||
			$database->execute("
 | 
			
		||||
				CREATE TABLE private_message (
 | 
			
		||||
					id {$database->engine->auto_increment},
 | 
			
		||||
			$database->create_table("private_message", "
 | 
			
		||||
				id SCORE_AIPK,
 | 
			
		||||
				from_id INTEGER NOT NULL,
 | 
			
		||||
					from_ip VARCHAR(15) NOT NULL,
 | 
			
		||||
				from_ip SCORE_INET NOT NULL,
 | 
			
		||||
				to_id INTEGER NOT NULL,
 | 
			
		||||
				sent_date DATETIME NOT NULL,
 | 
			
		||||
				subject VARCHAR(64) NOT NULL,
 | 
			
		||||
				message TEXT NOT NULL,
 | 
			
		||||
					is_read ENUM('Y', 'N') NOT NULL DEFAULT 'N',
 | 
			
		||||
				is_read SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
 | 
			
		||||
				INDEX (to_id)
 | 
			
		||||
				) {$database->engine->create_table_extras};
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("pm_version", 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -115,12 +115,12 @@ class ReportImage implements Extension {
 | 
			
		||||
		global $database;
 | 
			
		||||
		global $config;
 | 
			
		||||
		if($config->get_int("ext_report_image_version") < 1) {
 | 
			
		||||
			$database->Execute("CREATE TABLE image_reports (
 | 
			
		||||
				id {$database->engine->auto_increment},
 | 
			
		||||
				image_id INTEGER NOT NULL,
 | 
			
		||||
				reporter_id INTEGER NOT NULL,
 | 
			
		||||
			$database->create_table("image_reports", "
 | 
			
		||||
				id SCORE_AIPK,
 | 
			
		||||
				image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
 | 
			
		||||
				reporter_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
				reason TEXT NOT NULL
 | 
			
		||||
			)");
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_report_image_version", 1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -67,12 +67,11 @@ class Tag_History implements Extension {
 | 
			
		||||
		global $config;
 | 
			
		||||
 | 
			
		||||
		if($config->get_int("ext_tag_history_version") < 1) {
 | 
			
		||||
			$database->Execute("CREATE TABLE tag_histories
 | 
			
		||||
			(
 | 
			
		||||
	    		id integer NOT NULL auto_increment PRIMARY KEY,
 | 
			
		||||
	    		image_id integer NOT NULL,
 | 
			
		||||
	    		tags text NOT NULL
 | 
			
		||||
			)");
 | 
			
		||||
			$database->create_table("tag_histories", "
 | 
			
		||||
	    		id SCORE_AIPK,
 | 
			
		||||
	    		image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
 | 
			
		||||
	    		tags TEXT NOT NULL
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_tag_history_version", 1);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
@ -81,14 +81,12 @@ class TextScore implements Extension {
 | 
			
		||||
		if($config->get_int("ext_text_score_version") < 1) {
 | 
			
		||||
			$database->Execute("ALTER TABLE images ADD COLUMN text_score INTEGER NOT NULL DEFAULT 0");
 | 
			
		||||
			$database->Execute("CREATE INDEX images__text_score ON images(text_score)");
 | 
			
		||||
			$database->Execute("
 | 
			
		||||
				CREATE TABLE text_score_votes (
 | 
			
		||||
					image_id INTEGER NOT NULL,
 | 
			
		||||
					user_id INTEGER NOT NULL,
 | 
			
		||||
			$database->create_table("text_score_votes", "
 | 
			
		||||
				image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
 | 
			
		||||
				user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
				score INTEGER NOT NULL,
 | 
			
		||||
				UNIQUE(image_id, user_id),
 | 
			
		||||
				INDEX(image_id)
 | 
			
		||||
				)
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_text_score_version", 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -147,17 +147,18 @@ class Wiki implements Extension {
 | 
			
		||||
		global $config;
 | 
			
		||||
 | 
			
		||||
		if($config->get_int("ext_wiki_version", 0) < 1) {
 | 
			
		||||
			$database->Execute("CREATE TABLE wiki_pages (
 | 
			
		||||
				id int(11) NOT NULL auto_increment,
 | 
			
		||||
				owner_id int(11) NOT NULL,
 | 
			
		||||
				owner_ip char(15) NOT NULL,
 | 
			
		||||
				date datetime default NULL,
 | 
			
		||||
				title varchar(255) NOT NULL,
 | 
			
		||||
				revision int(11) NOT NULL default 1,
 | 
			
		||||
				body text NOT NULL,
 | 
			
		||||
				PRIMARY KEY (id), UNIQUE (title, revision)
 | 
			
		||||
			)");
 | 
			
		||||
			$config->set_int("ext_wiki_version", 1);
 | 
			
		||||
			$database->create_table("wiki_pages", "
 | 
			
		||||
				id SCORE_AIPK,
 | 
			
		||||
				owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
				owner_ip SCORE_INET NOT NULL,
 | 
			
		||||
				date DATETIME DEFAULT NULL,
 | 
			
		||||
				title VARCHAR(255) NOT NULL,
 | 
			
		||||
				revision INTEGER NOT NULL DEFAULT 1,
 | 
			
		||||
				locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
 | 
			
		||||
				body TEXT NOT NULL,
 | 
			
		||||
				UNIQUE (title, revision)
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_wiki_version", 2);
 | 
			
		||||
		}
 | 
			
		||||
		if($config->get_int("ext_wiki_version") < 2) {
 | 
			
		||||
			$database->Execute("ALTER TABLE wiki_pages ADD COLUMN
 | 
			
		||||
 | 
			
		||||
@ -53,22 +53,45 @@ class ImgQuerylet {
 | 
			
		||||
class DBEngine {
 | 
			
		||||
	var $name = null;
 | 
			
		||||
	var $auto_increment = null;
 | 
			
		||||
	var $inet = null;
 | 
			
		||||
	var $create_table_extras = "";
 | 
			
		||||
 | 
			
		||||
	public function create_table_sql($name, $data) {
 | 
			
		||||
		return "CREATE TABLE $name ($data)";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
class MySQL extends DBEngine {
 | 
			
		||||
	var $name = "mysql";
 | 
			
		||||
	var $auto_increment = "INTEGER PRIMARY KEY auto_increment";
 | 
			
		||||
	var $create_table_extras = "TYPE=INNODB DEFAULT CHARSET='utf8'";
 | 
			
		||||
 | 
			
		||||
	function init($db) {
 | 
			
		||||
	public function init($db) {
 | 
			
		||||
		$db->Execute("SET NAMES utf8;");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function create_table_sql($name, $data) {
 | 
			
		||||
		$data = str_replace($data, "SCORE_AIPK", "INTEGER PRIMARY KEY auto_increment");
 | 
			
		||||
		$data = str_replace($data, "SCORE_INET", "CHAR(15)");
 | 
			
		||||
		$data = str_replace($data, "SCORE_BOOL", "ENUM('Y', 'N')");
 | 
			
		||||
		$data = str_replace($data, "SCORE_BOOL_Y", "'Y'");
 | 
			
		||||
		$data = str_replace($data, "SCORE_BOOL_N", "'N'");
 | 
			
		||||
		$data = str_replace($data, "SCORE_NOW", "now()");
 | 
			
		||||
		$ctes = "TYPE=InnoDB DEFAULT CHARSET='utf8'";
 | 
			
		||||
		return "CREATE TABLE $name ($data) $ctes";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
class PostgreSQL extends DBEngine {
 | 
			
		||||
	var $name = "pgsql";
 | 
			
		||||
	var $auto_increment = "SERIAL PRIMARY KEY";
 | 
			
		||||
 | 
			
		||||
	function init($db) {
 | 
			
		||||
	public function init($db) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function create_table_sql($name, $data) {
 | 
			
		||||
		$data = str_replace($data, "SCORE_AIPK", "SERIAL PRIMARY KEY");
 | 
			
		||||
		$data = str_replace($data, "SCORE_INET", "INET");
 | 
			
		||||
		$data = str_replace($data, "SCORE_BOOL", "BOOL",);
 | 
			
		||||
		$data = str_replace($data, "SCORE_BOOL_Y", "'t'");
 | 
			
		||||
		$data = str_replace($data, "SCORE_BOOL_N", "'f'");
 | 
			
		||||
		$data = str_replace($data, "SCORE_NOW", "current_time");
 | 
			
		||||
		return "CREATE TABLE $name ($data)";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
// }}}
 | 
			
		||||
@ -180,7 +203,6 @@ class Database {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
// safety wrapping {{{
 | 
			
		||||
	public function execute($query, $args=array()) {
 | 
			
		||||
		$result = $this->db->Execute($query, $args);
 | 
			
		||||
		if($result === False) {
 | 
			
		||||
@ -220,9 +242,7 @@ class Database {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function create_table($name, $data) {
 | 
			
		||||
		$data = str_replace($data, "SCORE_AIPK", $this->engine->auto_increment);
 | 
			
		||||
		$ctes = $this->engine->create_table_extras;
 | 
			
		||||
		$this->execute("CREATE TABLE $name ($data) $ctes");
 | 
			
		||||
		$this->execute($this->engine->create_table_sql($name, $data));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function upgrade_schema($filename) {
 | 
			
		||||
@ -248,6 +268,5 @@ class Database {
 | 
			
		||||
 | 
			
		||||
		$config->set_bool("in_upgrade", false);
 | 
			
		||||
	}
 | 
			
		||||
// }}}
 | 
			
		||||
}
 | 
			
		||||
?>
 | 
			
		||||
 | 
			
		||||
@ -160,17 +160,17 @@ class CommentList implements Extension {
 | 
			
		||||
 | 
			
		||||
		// shortcut to latest
 | 
			
		||||
		if($config->get_int("ext_comments_version") < 1) {
 | 
			
		||||
			$database->Execute("CREATE TABLE comments (
 | 
			
		||||
				id {$database->engine->auto_increment},
 | 
			
		||||
				image_id INTEGER NOT NULL,
 | 
			
		||||
				owner_id INTEGER NOT NULL,
 | 
			
		||||
				owner_ip CHAR(16) NOT NULL,
 | 
			
		||||
			$database->create_table("comments", "
 | 
			
		||||
				id SCORE_AIPK,
 | 
			
		||||
				image_id INTEGER NOT NULL REFERENCES images(id) ON DELETE CASCADE,
 | 
			
		||||
				owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
				owner_ip SCORE_INET NOT NULL,
 | 
			
		||||
				posted DATETIME DEFAULT NULL,
 | 
			
		||||
				comment TEXT NOT NULL,
 | 
			
		||||
				INDEX (image_id),
 | 
			
		||||
				INDEX (owner_ip),
 | 
			
		||||
				INDEX (posted)
 | 
			
		||||
			) {$database->engine->create_table_extras}");
 | 
			
		||||
			");
 | 
			
		||||
			$config->set_int("ext_comments_version", 2);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,68 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<schema version="0.3">
 | 
			
		||||
	<!-- FIXME: mysql utf8ness -->
 | 
			
		||||
	<table name="aliases">
 | 
			
		||||
		<field name="oldtag" type="C" size="128"><key/><notnull/></field>
 | 
			
		||||
		<field name="newtag" type="C" size="128"><notnull/></field>
 | 
			
		||||
		<index name="aliases__unique"><col>oldtag</col><col>newtag</col><unique/></index>
 | 
			
		||||
		<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
 | 
			
		||||
	</table>
 | 
			
		||||
	
 | 
			
		||||
	<table name="config">
 | 
			
		||||
		<field name="name" type="C" size="128"><key/><notnull/></field>
 | 
			
		||||
		<field name="value" type="X" size="4000"></field>
 | 
			
		||||
		<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
 | 
			
		||||
	</table>
 | 
			
		||||
 | 
			
		||||
	<table name="images">
 | 
			
		||||
		<field name="id" type="I"><key/><autoincrement/></field>
 | 
			
		||||
		<field name="owner_id" type="I"><notnull/></field>
 | 
			
		||||
		<field name="owner_ip" type="C" size="15"><notnull/></field>
 | 
			
		||||
		<field name="filename" type="C" size="64"><notnull/></field>
 | 
			
		||||
		<field name="filesize" type="I"><notnull/></field>
 | 
			
		||||
		<field name="hash" type="C" size="32"><notnull/></field>
 | 
			
		||||
		<field name="ext" type="C" size="4"><notnull/></field>
 | 
			
		||||
		<field name="source" type="C" size="249"></field>
 | 
			
		||||
		<field name="width" type="I"><notnull/></field>
 | 
			
		||||
		<field name="height" type="I"><notnull/></field>
 | 
			
		||||
		<field name="posted" type="T"><notnull/></field>
 | 
			
		||||
		<index name="images__owner_id"><col>owner_id</col></index>
 | 
			
		||||
		<index name="images__hash"><col>hash</col><unique/></index>
 | 
			
		||||
		<index name="images__width"><col>width</col></index>
 | 
			
		||||
		<index name="images__height"><col>height</col></index>
 | 
			
		||||
		<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
 | 
			
		||||
	</table>
 | 
			
		||||
 | 
			
		||||
	<table name="users">
 | 
			
		||||
		<field name="id" type="I"><key/><autoincrement/></field>
 | 
			
		||||
		<field name="name" type="C" size="32"><notnull/></field>
 | 
			
		||||
		<field name="pass" type="C" size="32"></field>
 | 
			
		||||
		<field name="joindate" type="T"><notnull/></field>
 | 
			
		||||
		<field name="admin" type="C" size="1"><notnull/><default value="N"/></field>
 | 
			
		||||
		<field name="email" type="C" size="249"></field>
 | 
			
		||||
		<index name="users__name"><col>name</col><unique/></index>
 | 
			
		||||
		<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
 | 
			
		||||
	</table>
 | 
			
		||||
 | 
			
		||||
	<table name="tags">
 | 
			
		||||
		<field name="id" type="I"><key/><autoincrement/></field>
 | 
			
		||||
		<field name="tag" type="C" size="64"><notnull/></field>
 | 
			
		||||
		<field name="count" type="I"><notnull/><default value="0"/></field>
 | 
			
		||||
		<index name="tags__tag"><col>tag</col><unique/></index>
 | 
			
		||||
		<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
 | 
			
		||||
	</table>
 | 
			
		||||
 | 
			
		||||
	<table name="image_tags">
 | 
			
		||||
		<field name="image_id" type="I"><notnull/></field>
 | 
			
		||||
		<field name="tag_id" type="I"><notnull/></field>
 | 
			
		||||
		<index name="image_tags__image_id"><col>image_id</col></index>
 | 
			
		||||
		<index name="image_tags__tag_id"><col>tag_id</col></index>
 | 
			
		||||
		<index name="image_tags__key"><col>image_id</col><col>tag_id</col><unique/></index>
 | 
			
		||||
		<opt platform="mysql">DEFAULT CHARSET='utf8'</opt>
 | 
			
		||||
	</table>
 | 
			
		||||
 | 
			
		||||
	<sql>
 | 
			
		||||
		<query>DELETE FROM config WHERE name='db_version'</query>
 | 
			
		||||
		<query>INSERT INTO config(name, value) VALUES('db_version', 6)</query>
 | 
			
		||||
	</sql>
 | 
			
		||||
</schema>
 | 
			
		||||
							
								
								
									
										66
									
								
								install.php
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								install.php
									
									
									
									
									
								
							@ -53,8 +53,7 @@ if(is_readable("config.php")) {
 | 
			
		||||
	exit;
 | 
			
		||||
}
 | 
			
		||||
require_once "core/compat.inc.php";
 | 
			
		||||
require_once "lib/adodb/adodb.inc.php";
 | 
			
		||||
require_once "lib/adodb/adodb-xmlschema03.inc.php";
 | 
			
		||||
require_once "core/database.class.php";
 | 
			
		||||
 | 
			
		||||
do_install();
 | 
			
		||||
 | 
			
		||||
@ -143,15 +142,62 @@ function create_tables($dsn) { // {{{
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		if(substr($dsn, 0, 5) == "mysql") {
 | 
			
		||||
			$db->Execute("SET NAMES utf8");
 | 
			
		||||
			$engine = new MySQL();
 | 
			
		||||
		}
 | 
			
		||||
		$schema = new adoSchema($db);
 | 
			
		||||
		$sql = $schema->ParseSchema("ext/upgrade/schema.xml");
 | 
			
		||||
		$result = $schema->ExecuteSchema();
 | 
			
		||||
		else if(substr($dsn, 0, 5) == "pgsql") {
 | 
			
		||||
			$engine = new PostgreSQL();
 | 
			
		||||
		}
 | 
			
		||||
		$engine->init($db);
 | 
			
		||||
 | 
			
		||||
		if(!$result) {
 | 
			
		||||
			die("Error creating tables from XML schema");
 | 
			
		||||
		}
 | 
			
		||||
		$db->execute($engine->create_table_sql("aliases", "
 | 
			
		||||
			oldtag VARCHAR(128) NOT NULL PRIMARY KEY,
 | 
			
		||||
			newtag VARCHAR(128) NOT NULL,
 | 
			
		||||
			UNIQUE(oldtag, newtag)
 | 
			
		||||
		"));
 | 
			
		||||
		$db->execute($engine->create_table_sql("config", "
 | 
			
		||||
			name VARCHAR(128) NOT NULL PRIMARY KEY,
 | 
			
		||||
			value TEXT
 | 
			
		||||
		"));
 | 
			
		||||
		$db->execute($engine->create_table_sql("images", "
 | 
			
		||||
			id SCORE_AIPK,
 | 
			
		||||
			owner_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
 | 
			
		||||
			owner_ip SCORE_INET NOT NULL,
 | 
			
		||||
			filename VARCHAR(64) NOT NULL,
 | 
			
		||||
			filesize INTEGER NOT NULL,
 | 
			
		||||
			hash CHAR(32) NOT NULL,
 | 
			
		||||
			ext CHAR(4) NOT NULL,
 | 
			
		||||
			source VARCHAR(255),
 | 
			
		||||
			width INTEGER NOT NULL,
 | 
			
		||||
			height INTEGER NOT NULL,
 | 
			
		||||
			posted TIMESTAMP NOT NULL DEFAULT SCORE_NOW,
 | 
			
		||||
			INDEX(owner_id),
 | 
			
		||||
			INDEX(hash),
 | 
			
		||||
			INDEX(width),
 | 
			
		||||
			INDEX(height)
 | 
			
		||||
		"));
 | 
			
		||||
		$db->execute($engine->create_table_sql("users", "
 | 
			
		||||
			id SCORE_AIPK,
 | 
			
		||||
			name VARCHAR(32) NOT NULL,
 | 
			
		||||
			pass CHAR(32),
 | 
			
		||||
			joindate DATATIME NOT NULL DEFAULT SCORE_NOW,
 | 
			
		||||
			admin SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N,
 | 
			
		||||
			email VARCHAR(128),
 | 
			
		||||
			INDEX(name)
 | 
			
		||||
		"));
 | 
			
		||||
		$db->execute($engine->create_table_sql("tags", "
 | 
			
		||||
			id SCORE_AIPK,
 | 
			
		||||
			tag VARCHAR(64) NOT NULL,
 | 
			
		||||
			count NOT NULL DEFAULT 0,
 | 
			
		||||
			INDEX(tag)
 | 
			
		||||
		"));
 | 
			
		||||
		$db->execute($engine->create_table_sql("image_tags", "
 | 
			
		||||
			image_id INTEGER REFERENCES images(id) ON DELETE CASCADE,
 | 
			
		||||
			tag_id INTEGER REFERENCES tags(id) ON DELETE CASCADE,
 | 
			
		||||
			INDEX(image_id),
 | 
			
		||||
			INDEX(tag_id),
 | 
			
		||||
			INDEX(image_id, tag_id)
 | 
			
		||||
		"));
 | 
			
		||||
		$db->execute("INSERT INTO config(name, value) VALUES('db_version', 7)");
 | 
			
		||||
	}
 | 
			
		||||
	$db->Close();
 | 
			
		||||
} // }}}
 | 
			
		||||
@ -220,7 +266,7 @@ function write_config($dsn) { // {{{
 | 
			
		||||
 | 
			
		||||
		<p><textarea cols="80" rows="2">$file_content</textarea>
 | 
			
		||||
						
 | 
			
		||||
		<p>One done, <a href='index.php?q=setup'>Continue</a>
 | 
			
		||||
		<p>One done, <a href='index.php'>Continue</a>
 | 
			
		||||
EOD;
 | 
			
		||||
		exit;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user