diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2008-11-10 21:29:30 +0000 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2008-11-10 21:29:30 +0000 |
commit | 7bcf7efc097cc0a9264d9714cdc72fc30554f376 (patch) | |
tree | b26d77767f58adbba72325282b6f83e86f16311c | |
parent | 0a8d5edbdc8e3e251f29b7370fdc2e594b06446f (diff) |
Remove the complexity of a interface driven user management module
-rw-r--r-- | modules/gallery_unit_test/controllers/test.php | 4 | ||||
-rw-r--r-- | modules/user/config/user.php | 25 | ||||
-rw-r--r-- | modules/user/helpers/user_installer.php | 71 | ||||
-rw-r--r-- | modules/user/libraries/User.php | 196 | ||||
-rw-r--r-- | modules/user/libraries/drivers/User.php | 60 | ||||
-rw-r--r-- | modules/user/libraries/drivers/User/Gallery.php | 163 |
6 files changed, 68 insertions, 451 deletions
diff --git a/modules/gallery_unit_test/controllers/test.php b/modules/gallery_unit_test/controllers/test.php index c50ba5c4..203edcba 100644 --- a/modules/gallery_unit_test/controllers/test.php +++ b/modules/gallery_unit_test/controllers/test.php @@ -62,13 +62,13 @@ class Test_Controller extends Controller { // this way. Uninstall modules first and core last. Ignore errors during uninstall. try { comment_installer::uninstall(); -// user_installer::uninstall(); + user_installer::uninstall(); core_installer::uninstall(); } catch (Exception $e) { } core_installer::install(); -// user_installer::install(); + user_installer::install(); comment_installer::install(); print new Unit_Test(); diff --git a/modules/user/config/user.php b/modules/user/config/user.php deleted file mode 100644 index 9a82c5fd..00000000 --- a/modules/user/config/user.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php defined("SYSPATH") or die("No direct script access."); -/** - * Gallery - a web based photo album viewer and editor - * Copyright (C) 2000-2008 Bharat Mediratta - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ - -/** - * Name of the driver to be used for handling user authentication and password management - */ -$config['driver'] = 'Gallery'; - 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 diff --git a/modules/user/libraries/User.php b/modules/user/libraries/User.php deleted file mode 100644 index a32c5691..00000000 --- a/modules/user/libraries/User.php +++ /dev/null @@ -1,196 +0,0 @@ -<?php defined("SYSPATH") or die("No direct script access."); -/** - * Gallery - a web based photo album viewer and editor - * Copyright (C) 2000-2008 Bharat Mediratta - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ -/** - * This is the generalized wrapper to provide user management. The actual user management - * fucntionality is implemented by a driver module. This will insulate gallery3 user management - * from various CMS implementations. - * - */ -class User_Core implements User_Driver { - - // Session singleton - private static $instance; - - // Configuration and driver - protected $_config; - protected $_driver; - - /** - * Singleton instance of Session. - */ - public static function instance($config = array()) { - if (self::$instance == NULL) { - // Create a new instance - self::$instance = new User($config); - } - - return self::$instance; - } - - /** - * On first instance creation, sets up the driver. - */ - protected function __construct($config = array()) { - // Load config - $config += Kohana::config('user'); - - // Set the driver class name - $driver = "User_{$config['driver']}_Driver"; - if (!Kohana::auto_load($driver)) { - // @todo change to gallery specific exceptions - throw new Exception("@todo DRIVER_NOT_DEFINED {$config['driver']}"); - } - - // Load the driver - $driver = new $driver(); - - if (!($driver instanceof User_Driver)) { - // @todo change to gallery specific exceptions - throw new Exception( - "@todo User_Driver_INTERFACE_NOT_IMPLEMENTED: {$config['driver']}"); - } - - $this->_driver = $driver; - $this->_config = $config; - - Kohana::log('debug', 'Auth Library initialized'); - } - - /** - * @see User_Driver::install - */ - public function install() { - $this->_driver->install(); - - $user_module = ORM::factory("module")->where("name", "user")->find(); - $user_module->name = "user"; - $user_module->version = 1; - $user_module->save(); - - $user = $this->_driver->get_user_by_name("admin"); - if (!$user->loaded) { - $user = $this->_driver->create_user("admin", "admin", "admin"); - } - - foreach (array("administrator", "registered") as $group_name) { - $group = $user = $this->_driver->get_group_by_name($group_name); - if (!$group->loaded) { - $group = $this->_driver->create_group($group_name); - // Don't assume we can use ORM relationship to join groups and users. Use the interface. - $this->_driver->add_user_to_group($group->id, $user->id); - } - } - - $db = Database::instance(); - $db->query("UPDATE `items` SET `owner_id` = {$user->id} WHERE `owner_id` IS NULL"); - } - - /** - * @see User_Driver::uninstall - */ - public function uninstall() { - $this->_driver->uninstall(); - ORM::factory("module")->where("name", "user")->find()->delete(); - } - - /** - * @see User_Driver::install - */ - public function create_user($name, $display_name, $password, $email=null) { - $this->_driver->create_user($name, $display_name, $password, $email); - } - - /** - * @see User_Driver::update_user - */ - public function update_user($id, $name, $display_name, $password, $email=null) { - $this->_driver->update_user($id, $name, $display_name, $password, $email); - } - - /** - * @see User_Driver::get_user - */ - public function get_user($id) { - $this->_driver->get_user($id); - } - - /** - * @see User_Driver::get_user_by_name - */ - public function get_user_by_name($name) { - $this->_driver->get_user_by_name($name); - } - - /** - * @see User_Driver::delete_user - */ - public function delete_user($id) { - $this->_driver->delete_user($id); - } - - /** - * @see User_Driver::create_group - */ - public function create_group($group_name) { - $this->_driver->create_group($group_name); - } - - /** - * @see User_Driver::rename_group - */ - public function rename_group($id, $new_name) { - $this->_driver->rename_group($id, $new_name); - } - - /** - * @see User_Driver::get_group - */ - public function get_group($id) { - $this->_driver->get_group($id); - } - - /** - * @see User_Driver::get_group_by_name - */ - public function get_group_by_name($group_name) { - $this->_driver->get_group_by_name($group_name); - } - - /** - * @see User_Driver::delete_group - */ - public function delete_group($id) { - $this->_driver->delete_group($id); - } - - /** - * @see User_Driver::add_user_to_group - */ - public function add_user_to_group($group_id, $user_id) { - $this->_driver->add_user_to_group($group_id, $user_id); - } - - /** - * @see User_Driver::remove_user_from_group - */ - public function remove_user_from_group($group_id, $user_id) { - $this->_driver->remove_user_from_group($group_id, $user_id); - } -}
\ No newline at end of file diff --git a/modules/user/libraries/drivers/User.php b/modules/user/libraries/drivers/User.php deleted file mode 100644 index 1030f5e9..00000000 --- a/modules/user/libraries/drivers/User.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php defined("SYSPATH") or die("No direct script access."); -/** - * Gallery - a web based photo album viewer and editor - * Copyright (C) 2000-2008 Bharat Mediratta - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ -/** - * This is the generalized wrapper to provide user management. The actual user management - * fucntionality is implemented by a driver module. This will insulate gallery3 user management - * from various CMS implementations. - * - */ -interface User_Driver { - /** - * Performs the installation steps that a specific driver requires - */ - public function install(); - - /** - * Performs the un install steps that a specific driver requires - */ - public function uninstall(); - - public function create_user($name, $display_name, $password, $email=null); - - public function update_user($id, $name, $display_name, $password, $email=null); - - public function get_user($id); - - public function get_user_by_name($name); - - public function delete_user($id); - - public function create_group($group_name); - - public function rename_group($id, $new_name); - - public function get_group($id); - - public function get_group_by_name($group_name); - - public function delete_group($id); - - public function add_user_to_group($group_id, $user_id); - - public function remove_user_from_group($group_id, $user_id); -}
\ No newline at end of file diff --git a/modules/user/libraries/drivers/User/Gallery.php b/modules/user/libraries/drivers/User/Gallery.php deleted file mode 100644 index 62c88ca6..00000000 --- a/modules/user/libraries/drivers/User/Gallery.php +++ /dev/null @@ -1,163 +0,0 @@ -<?php defined("SYSPATH") or die("No direct script access."); -/** - * Gallery - a web based photo album viewer and editor - * Copyright (C) 2000-2008 Bharat Mediratta - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - */ -class User_Gallery_Driver implements User_Driver { - /** - * @see User_Driver::install - */ - public function install() { - Kohana::log("debug", "user_gallery_driver::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, - `logins` int(10) unsigned NOT NULL default '0', - `last_login` int(10) unsigned NOT NULL default '0', - `email` int(9) 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;"); - - } - } - - /** - * @see User_Driver::install - * - */ - public function 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`;"); - } - - /** - * @see User_Driver::create_user - */ - public function create_user($name, $display_name, $password, $email=null) { - throw new Exception("@todo NOT_IMPLMENTED: create_user"); - } - - /** - * @see User_Driver::update_user - */ - public function update_user($id, $name, $display_name, $password, $email=null) { - throw new Exception("@todo NOT_IMPLMENTED: update_user"); - } - - /** - * @see User_Driver::get_user - */ - public function get_user($id) { - throw new Exception("@todo NOT_IMPLMENTED: get_user"); - } - - /** - * @see User_Driver::get_user_by_name - */ - public function get_user_by_name($name) { - throw new Exception("@todo NOT_IMPLMENTED: get_user_by_name"); - } - - /** - * @see User_Driver::delete_user - */ - public function delete_user($id) { - throw new Exception("@todo NOT_IMPLMENTED: delete_user"); - } - - /** - * @see User_Driver::create_group - */ - public function create_group($group_name) { - throw new Exception("@todo NOT_IMPLMENTED: create_group"); - } - - /** - * @see User_Driver::rename_group - */ - public function rename_group($id, $new_name) { - throw new Exception("@todo NOT_IMPLMENTED: rename_group"); - } - - /** - * @see User_Driver::get_group - */ - public function get_group($id) { - throw new Exception("@todo NOT_IMPLMENTED: get_group"); - } - - /** - * @see User_Driver::get_group_by_name - */ - public function get_group_by_name($group_name) { - throw new Exception("@todo NOT_IMPLMENTED: get_group_by_name"); - } - - /** - * @see User_Driver::delete_group - */ - public function delete_group($id) { - throw new Exception("@todo NOT_IMPLMENTED: delete_group"); - } - - /** - * @see User_Driver::add_user_to_group - */ - public function add_user_to_group($group_id, $user_id) { - throw new Exception("@todo NOT_IMPLMENTED: add_user_to_group"); - } - - /** - * @see User_Driver::remove_user_from_group - */ - public function remove_user_from_group($group_id, $user_id) { - throw new Exception("@todo NOT_IMPLMENTED: remove_user_from_group"); - } -}
\ No newline at end of file |