diff options
Diffstat (limited to 'modules/user/helpers')
-rw-r--r-- | modules/user/helpers/user_installer.php | 71 |
1 files changed, 66 insertions, 5 deletions
diff --git a/modules/user/helpers/user_installer.php b/modules/user/helpers/user_installer.php index 31865ad1..bb6f1ceb 100644 --- a/modules/user/helpers/user_installer.php +++ b/modules/user/helpers/user_installer.php @@ -22,13 +22,74 @@ class user_installer { public static function install() { Kohana::log("debug", "user_installer::install"); - $user = User::instance(); - $user->install(); + $db = Database::instance(); + try { + $base_version = ORM::factory("module")->where("name", "user")->find()->version; + } catch (Exception $e) { + if ($e->getCode() == E_DATABASE_ERROR) { + $base_version = 0; + } else { + Kohana::log("error", $e); + throw $e; + } + } + Kohana::log("debug", "base_version: $base_version"); + + if ($base_version == 0) { + $db->query("CREATE TABLE IF NOT EXISTS `users` ( + `id` int(9) NOT NULL auto_increment, + `name` varchar(255) NOT NULL, + `display_name` char(255) NOT NULL, + `password` varchar(128) NOT NULL, + `email` varchar(255) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY(`display_name`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $db->query("CREATE TABLE IF NOT EXISTS`groups` ( + `id` int(9) NOT NULL auto_increment, + `name` char(255) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY(`name`)) + ENGINE=InnoDB 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`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $user_module = ORM::factory("module")->where("name", "user")->find(); + $user_module->name = "user"; + $user_module->version = 1; + $user_module->save(); + + $user = ORM::factory("user")->where("display_name", "admin")->find(); + $user->name = "admin"; + $user->display_name = "Gallery Administrator"; + // @todo create a helper function to encrypt the password. + $user->password = "admin"; + $user->save(); + $id = $user->id; + $db->query("UPDATE `items` SET `owner_id` = $id WHERE `owner_id` IS NULL"); + + foreach (array("administrator", "registered") as $group_name) { + $group = ORM::factory("group")->where("name", $group_name)->find(); + $group->name = $group_name; + $group->save(); + if (!$group->add($user)) { + throw new Exception("@todo {$user->name} WAS_NOT_ADDED_TO {$group_name}"); + } + } + } } public static function uninstall() { - Kohana::log("debug", "user_installer::install"); - $user = User::instance(); - $user->uninstall(); + $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`;"); + ORM::factory("module")->where("name", "user")->find()->delete(); } }
\ No newline at end of file |