<?php
/*
 * Name: Database Upgrader
 * Author: Shish <webmaster@shishnet.org>
 * Link: http://code.shishnet.org/shimmie2/
 * Description: Keeps things happy behind the scenes
 * Visibility: admin
 */

class Upgrade extends Extension {
	public function onInitExt(InitExtEvent $event) {
		global $config, $database;

		if($config->get_bool("in_upgrade")) return;

		if(!is_numeric($config->get_string("db_version"))) {
			$config->set_int("db_version", 2);
		}

		if($config->get_int("db_version") < 6) {
			// cry :S
		}

		// v7 is convert to innodb with adodb
		// now done again as v9 with PDO

		if($config->get_int("db_version") < 8) {
			$config->set_bool("in_upgrade", true);
			$config->set_int("db_version", 8);

			$database->execute($database->engine->scoreql_to_sql(
				"ALTER TABLE images ADD COLUMN locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N"
			));

			log_info("upgrade", "Database at version 8");
			$config->set_bool("in_upgrade", false);
		}

		if($config->get_int("db_version") < 9) {
			$config->set_bool("in_upgrade", true);
			$config->set_int("db_version", 9);

			if($database->db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
				$tables = $database->get_col("SHOW TABLES");
				foreach($tables as $table) {
					log_info("upgrade", "converting $table to innodb");
					$database->execute("ALTER TABLE $table TYPE=INNODB");
				}
			}

			log_info("upgrade", "Database at version 9");
			$config->set_bool("in_upgrade", false);
		}

		if($config->get_int("db_version") < 10) {
			$config->set_bool("in_upgrade", true);
			$config->set_int("db_version", 10);

			log_info("upgrade", "Adding foreign keys to images");
			$database->Execute("ALTER TABLE images ADD CONSTRAINT foreign_images_owner_id FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT");
		
			log_info("upgrade", "Database at version 10");
			$config->set_bool("in_upgrade", false);
		}

		if($config->get_int("db_version") < 11) {
			$config->set_bool("in_upgrade", true);
			$config->set_int("db_version", 11);

			log_info("upgrade", "Converting user flags to classes");
			$database->execute("ALTER TABLE users ADD COLUMN class VARCHAR(32) NOT NULL default :user", array("user" => "user"));
			$database->execute("UPDATE users SET class = :name WHERE id=:id", array("name"=>"anonymous", "id"=>$config->get_int('anon_id')));
			$database->execute("UPDATE users SET class = :name WHERE admin=:admin", array("name"=>"admin", "admin"=>'Y'));

			log_info("upgrade", "Database at version 11");
			$config->set_bool("in_upgrade", false);
		}
	}

	public function get_priority() {return 5;}
}
?>