query("CREATE TABLE IF NOT EXISTS {users} ( `id` int(9) NOT NULL auto_increment, `name` varchar(32) NOT NULL, `full_name` varchar(255) NOT NULL, `password` varchar(64) NOT NULL, `login_count` int(10) unsigned NOT NULL DEFAULT 0, `last_login` int(10) unsigned NOT NULL DEFAULT 0, `email` varchar(64) default NULL, `admin` BOOLEAN default 0, `guest` BOOLEAN default 0, `hash` char(32) default NULL, `url` varchar(255) default NULL, `locale` char(10) default NULL, PRIMARY KEY (`id`), UNIQUE KEY(`hash`), UNIQUE KEY(`name`)) DEFAULT CHARSET=utf8;"); $db->query("CREATE TABLE IF NOT EXISTS {groups} ( `id` int(9) NOT NULL auto_increment, `name` char(64) default NULL, `special` BOOLEAN default 0, PRIMARY KEY (`id`), UNIQUE KEY(`name`)) DEFAULT CHARSET=utf8;"); $db->query("CREATE TABLE IF NOT EXISTS {groups_users} ( `group_id` int(9) NOT NULL, `user_id` int(9) NOT NULL, PRIMARY KEY (`group_id`, `user_id`), UNIQUE KEY(`user_id`, `group_id`)) DEFAULT CHARSET=utf8;"); $everybody = ORM::factory("group"); $everybody->name = "Everybody"; $everybody->special = true; $everybody->save(); $registered = ORM::factory("group"); $registered->name = "Registered Users"; $registered->special = true; $registered->save(); // Avoid ORM to sidestep validation. db::build()->insert( "users", array("name" => "guest", "full_name" => "Guest User", "password" => "", "guest" => true)) ->execute(); $guest = ORM::factory("user")->where("id", "=", 1)->find(); $guest->add($everybody); $guest->save(); db::build()->insert( "users", array("name" => "admin", "full_name" => "Gallery Administrator", "password" => "admin", "admin" => true)) ->execute(); $admin = ORM::factory("user")->where("id", "=", 2)->find(); $admin->add($everybody); $admin->add($registered); $admin->save(); $current_provider = module::get_var("gallery", "identity_provider"); if (empty($current_provider)) { // If there is no provider defined then we are doing an initial install // so we need to set the provider and make the administrator own everything // If the installer is called and there is an identity provider, then we // are switching identity providers and and the event handlers will do the // right things module::set_var("gallery", "identity_provider", "user"); // Let the admin own everything $db->query("update {items} set owner_id = {$admin->id}"); } $root = ORM::factory("item", 1); access::allow($everybody, "view", $root); access::allow($everybody, "view_full", $root); access::allow($registered, "view", $root); access::allow($registered, "view_full", $root); module::set_var("user", "mininum_password_length", 5); module::set_version("user", 2); } static function upgrade($version) { if ($version == 1) { module::set_var("user", "mininum_password_length", 5); module::set_version("user", $version = 2); } } static function uninstall() { // Delete all users and groups so that we give other modules an opportunity to clean up foreach (ORM::factory("user")->find_all() as $user) { $user->delete(); } foreach (ORM::factory("group")->find_all() as $group) { $group->delete(); } $db = Database::instance(); $db->query("DROP TABLE IF EXISTS {users};"); $db->query("DROP TABLE IF EXISTS {groups};"); $db->query("DROP TABLE IF EXISTS {groups_users};"); } }