From f5b044e3b5d4ec0de748b8b6fd7b84c0694199c6 Mon Sep 17 00:00:00 2001 From: Yuan Chiu Date: Mon, 6 Oct 2014 16:42:59 +0800 Subject: [PATCH] Add UserGroupAdmin Class --- htdocs/lib/Database/DBUser.php | 219 +++++++++++++++++++++++++++-- htdocs/lib/User/Exception.php | 63 +++++++++ htdocs/lib/User/UserAdmin.php | 11 +- htdocs/lib/User/UserGroupAdmin.php | 104 +++++++------- tests/Database/DBUserTest.php | 59 ++++++++ tests/User/UserGroupAdminTest.php | 83 +++++++++++ 6 files changed, 467 insertions(+), 72 deletions(-) create mode 100644 tests/User/UserGroupAdminTest.php diff --git a/htdocs/lib/Database/DBUser.php b/htdocs/lib/Database/DBUser.php index 28402d1..af6d4f7 100644 --- a/htdocs/lib/Database/DBUser.php +++ b/htdocs/lib/Database/DBUser.php @@ -68,7 +68,7 @@ class DBUser extends Database { $nickName, $realName, $email, $memo){ // 檢查是否有支援所設定的DBMS - if($this->db_type == 'mysql') { + //if($this->db_type == 'mysql') { //紀錄使用者帳號進資料庫 $sqlString = "INSERT INTO ".$this->table('User'). @@ -90,13 +90,32 @@ class DBUser extends Database { $query->bindParam(":email", $email); $query->bindParam(":memo", $memo); $query->execute(); - } - else { - throw new Exception\DatabaseNoSupportException($this->db_type); - } + //} + //else { + // throw new Exception\DatabaseNoSupportException($this->db_type); + //} } + /** + * 移除一位使用者 + * @param string $uId 使用者名稱 + */ + public function deleteUser($uId) { + + //if($this->db_type == 'mysql') { + $sqlString = "DELETE FROM ".$this->table(self::FORM_USER). + " WHERE `UID` = :id "; + + $query = $this->connDB->prepare($sqlString); + $query->bindParam(":id", $uId); + $query->execute(); + //} + //else { + // throw new Exception\DatabaseNoSupportException($this->db_type); + //} + } + /** * 查詢一位使用者帳號資料 * @@ -151,6 +170,7 @@ class DBUser extends Database { $query->execute(); $queryResultAll = $query->fetchAll(); + // 如果有查到一筆以上 if( count($queryResultAll) >= 1 ) { $queryResult = $queryResultAll[0]; @@ -171,6 +191,66 @@ class DBUser extends Database { return $result; } + // 若都沒查到的話 + else { + return null; + } + } + + /** + * 查詢所有的使用者帳號資料 + * + * @return array 使用者資料陣列,格式為: + * + * array( + * array( + * 'user_id' => <帳號名稱>, + * 'password' => <密碼>, + * 'group_id' => <群組>, + * 'class_id' => <班級>, + * 'enable' => <啟用>, + * 'build_time' => <建立日期>, + * 'learnStyle_mode' => <偏好學習導引模式>, + * 'material_mode' => <偏好教材模式>, + * 'nickname' => <暱稱>, + * 'realname' => <真實姓名>, + * 'email' => <電子郵件地址>, + * 'memo' => <備註> + * ) + * ); + * + */ + public function queryAllUser() { + + $sqlString = "SELECT * FROM ".$this->table('User'); + + $query = $this->connDB->prepare($sqlString); + $query->execute(); + + $queryResultAll = $query->fetchAll(); + // 如果有查到一筆以上 + if( count($queryResultAll) >= 1 ) { + // 製作回傳結果陣列 + $result = array(); + foreach($queryResultAll as $key => $thisResult) { + array_push($result, + array( 'user_id' => $thisResult['UID'], + 'password' => $thisResult['UPassword'], + 'group_id' => $thisResult['GID'], + 'class_id' => $thisResult['CID'], + 'enable' => $thisResult['UEnabled'], + 'build_time' => $thisResult['UBuild_Time'], + 'learnStyle_mode' => $thisResult['LMode'], + 'material_mode' => $thisResult['MMode'], + 'nickname' => $thisResult['UNickname'], + 'realname' => $thisResult['UReal_Name'], + 'email' => $thisResult['UEmail'], + 'memo' => $thisResult['UMemo']) + ); + } + return $result; + } + // 若都沒查到的話 else { return null; } @@ -219,23 +299,132 @@ class DBUser extends Database { $query->execute(); } + // ======================================================================== + /** - * 移除一位使用者 - * @param string $uId 使用者名稱 + * 插入群組資料 + * + * @param string $gId 群組ID + * @param string $name 群組顯示名稱 + * @param string $memo 備註 + * @param string $auth_admin Server端管理權 + * @param string $auth_clientAdmin Client端管理權 */ - public function deleteUser($uId) { + public function insertGroup($gId, $name, $memo, $auth_admin, $auth_clientAdmin) { - if($this->db_type == 'mysql') { - $sqlString = "DELETE FROM ".$this->table(self::FORM_USER). - " WHERE `UID` = :id "; + // 紀錄使用者帳號進資料庫 + $sqlString = "INSERT INTO ".$this->table('AGroup'). + " (`GID`, `GName`, `GMemo`, `GAuth_Admin`, `GAuth_ClientAdmin`) + VALUES ( :id , :name, :memo , :auth_admin , :auth_clientAdmin )"; + + $query = $this->connDB->prepare($sqlString); + $query->bindParam(":id", $gId); + $query->bindParam(":name", $name); + $query->bindParam(":memo", $memo); + $query->bindParam(":auth_admin", $auth_admin); + $query->bindParam(":auth_clientAdmin", $auth_clientAdmin); + $query->execute(); + } + + /** + * 移除一個使用者群組 + * @param string $gId + */ + public function deleteGroup($gId) { + + $sqlString = "DELETE FROM ".$this->table('AGroup'). + " WHERE `GID` = :id "; - $query = $this->connDB->prepare($sqlString); - $query->bindParam(":id", $uId); - $query->execute(); + $query = $this->connDB->prepare($sqlString); + $query->bindParam(":id", $gId); + $query->execute(); + } + + /** + * 查詢一個使用者群組資料 + * + * @return array 使用者群組資料陣列,格式為: + * + * array( 'group_id' => <群組ID>, + * 'name' => <群組顯示名稱>, + * 'memo' => <備註>, + * 'auth_admin' => , + * 'auth_clientAdmin' => + * ); + * + */ + public function queryGroup($gId) { + + $sqlString = "SELECT * FROM ".$this->table('AGroup'). + " WHERE `GID` = :gid"; + + $query = $this->connDB->prepare($sqlString); + $query->bindParam(':gid', $gId); + $query->execute(); + + $queryResultAll = $query->fetchAll(); + // 如果有查到一筆以上 + if( count($queryResultAll) >= 1 ) { + $thisResult = $queryResultAll[0]; + // 製作回傳結果陣列 + $result = array('group_id' => $thisResult['GID'], + 'name' => $thisResult['GName'], + 'memo' => $thisResult['GMemo'], + 'auth_admin' => $thisResult['GAuth_Admin'], + 'auth_clientAdmin' => $thisResult['GAuth_ClientAdmin'] + ); + return $result; } + // 若都沒查到的話 else { - throw new Exception\DatabaseNoSupportException($this->db_type); + return null; } } + /** + * 查詢所有的使用者群組資料 + * + * @return array 使用者群組資料陣列,格式為: + * + * array( + * array( + * 'group_id' => <群組ID>, + * 'name' => <群組顯示名稱>, + * 'memo' => <備註>, + * 'auth_admin' => , + * 'auth_clientAdmin' => + * ) + * ); + * + */ + public function queryAllGroup() { + + $sqlString = "SELECT * FROM ".$this->table('AGroup'); + + $query = $this->connDB->prepare($sqlString); + $query->execute(); + + $queryResultAll = $query->fetchAll(); + // 如果有查到一筆以上 + if( count($queryResultAll) >= 1 ) { + // 製作回傳結果陣列 + $result = array(); + foreach($queryResultAll as $key => $thisResult) { + array_push($result, + array( 'group_id' => $thisResult['GID'], + 'name' => $thisResult['GName'], + 'memo' => $thisResult['GMemo'], + 'auth_admin' => $thisResult['GAuth_Admin'], + 'auth_clientAdmin' => $thisResult['GAuth_ClientAdmin']) + ); + } + return $result; + } + // 若都沒查到的話 + else { + return null; + } + } + + } \ No newline at end of file diff --git a/htdocs/lib/User/Exception.php b/htdocs/lib/User/Exception.php index 2d9b44e..ab1b3a9 100644 --- a/htdocs/lib/User/Exception.php +++ b/htdocs/lib/User/Exception.php @@ -95,3 +95,66 @@ class UserIdExistException extends UserException { parent::__construct($userId, 'UserId: "'.$userId.'" is exist.'); } } + +// ============================================================================ + +/** + * 使用者群組例外 + * @since 2.0.0 + * @package UElearning + * @subpackage User + */ +abstract class GroupException extends \UnexpectedValueException { + + /** + * 指定的使用者群組ID + * @type string + */ + private $groupId; + + /** + * 使用者帳號例外 + * @param string $groupId 輸入的使用者群組ID + * @param string $description 描述 + */ + public function __construct($groupId, $description) { + $this->groupId = $groupId; + parent::__construct($description); + } + + /** + * 取得輸入的資料庫系統名稱 + * @return string 錯誤訊息內容 + */ + public function getGroupId() { + return $this->groupId; + } +} + +/** + * 已有重複的使用者群組ID + * @since 2.0.0 + */ +class GroupIdExistException extends GroupException { + /** + * 已有重複的使用者名稱 + * @param string $groupId 輸入的使用者群組ID + */ + public function __construct($groupId) { + parent::__construct($groupId, 'GroupId: "'.$groupId.'" is exist.'); + } +} + +/** + * 沒有找到此使用者群組ID + * @since 2.0.0 + */ +class GroupNoFoundException extends GroupException { + /** + * 沒有找到此帳號 + * @param string $groupId 輸入的使用者群組ID + */ + public function __construct($groupId) { + parent::__construct($groupId, 'Group: "'.$groupId.'" is no found.'); + } +} \ No newline at end of file diff --git a/htdocs/lib/User/UserAdmin.php b/htdocs/lib/User/UserAdmin.php index a6cfe70..5df69f9 100644 --- a/htdocs/lib/User/UserAdmin.php +++ b/htdocs/lib/User/UserAdmin.php @@ -149,6 +149,16 @@ class UserAdmin { /** * 移除此使用者 * + * 範例: + * + * try { + * $userAdmin = new User\UserAdmin(); + * $userAdmin->remove('eric'); + * } + * catch (User\Exception\UserNoFoundException $e) { + * echo 'No Found user: ', $e->getUserId(); + * } + * * @param string $userName 帳號名稱 * @throw UElearning\User\Exception\UserNoFoundException * @since 2.0.0 @@ -168,7 +178,6 @@ class UserAdmin { else { throw new Exception\UserNoFoundException($userName); } - } } \ No newline at end of file diff --git a/htdocs/lib/User/UserGroupAdmin.php b/htdocs/lib/User/UserGroupAdmin.php index e53db9c..09ed50a 100644 --- a/htdocs/lib/User/UserGroupAdmin.php +++ b/htdocs/lib/User/UserGroupAdmin.php @@ -5,6 +5,10 @@ namespace UElearning\User; +require_once UELEARNING_LIB_ROOT.'/Database/DBUser.php'; +require_once UELEARNING_LIB_ROOT.'/User/Exception.php'; +require_once UELEARNING_LIB_ROOT.'/Exception.php'; +use UElearning\Database; /** * 管理使用者權限群組的操作 @@ -22,8 +26,8 @@ class UserGroupAdmin { * 建立使用者範例: * * try { - * $userAdmin = new User\UserAdmin(); - * $userAdmin->create( + * $groupAdmin = new User\UserGroupAdmin(); + * $groupAdmin->create( * array( 'group_id' => 'student', * 'name' => '學生', * 'memo' => null, @@ -48,71 +52,48 @@ class UserGroupAdmin { */ public function create($groupArray) { - /*// 檢查必填項目有無填寫 - if(isset($userInfoArray)) { + // 檢查有無填寫 + if(isset($groupArray)) { - // 若無填寫 - if( !isset($userInfoArray['user_id']) || - !isset($userInfoArray['password']) || - !isset($userInfoArray['group_id']) ) { + // 若必填項目無填寫 + if( !isset($groupArray['group_id']) ) { throw new UElearning\Exception\NoDataException(); } // 若此id已存在 - else if($this->isExist($userInfoArray['user_id'])) { - throw new Exception\UserIdExistException( - $userInfoArray['user_id'] ); + else if( $this->isExist($groupArray['group_id']) ) { + throw new Exception\GroupIdExistException( + $groupArray['group_id'] ); } // 沒有問題 else { // 處理未帶入的資料 - if( !isset($userInfoArray['class_id']) ){ - $userInfoArray['class_id'] = null; + if( !isset($groupArray['name']) ){ + $groupArray['name'] = null; } - if( !isset($userInfoArray['enable']) ){ - $userInfoArray['enable'] = true; + // 處理未帶入的資料 + if( !isset($groupArray['memo']) ){ + $groupArray['memo'] = null; } - if( !isset($userInfoArray['learnStyle_mode']) ){ - $userInfoArray['learnStyle_mode'] = null; + if( !isset($groupArray['auth_server_admin']) ){ + $groupArray['auth_server_admin'] = false; } - if( !isset($userInfoArray['material_mode']) ){ - $userInfoArray['material_mode'] = null; + if( !isset($groupArray['auth_client_admin']) ){ + $groupArray['auth_client_admin'] = false; } - if( !isset($userInfoArray['nickname']) ){ - $userInfoArray['nickname'] = null; - } - if( !isset($userInfoArray['realname']) ){ - $userInfoArray['realname'] = null; - } - if( !isset($userInfoArray['email']) ){ - $userInfoArray['email'] = null; - } - if( !isset($userInfoArray['memo']) ){ - $userInfoArray['memo'] = null; - } - - // 進行密碼加密 - $passUtil = new Util\Password(); - $passwdEncrypted = $passUtil->encrypt( $userInfoArray['password'] ); // 新增一筆使用者資料進資料庫 $db = new Database\DBUser(); - $db->insertUser( - $userInfoArray['user_id'], - $passwdEncrypted, - $userInfoArray['group_id'], - $userInfoArray['class_id'], - $userInfoArray['enable'], - $userInfoArray['learnStyle_mode'], - $userInfoArray['material_mode'], - $userInfoArray['nickname'], - $userInfoArray['realname'], - $userInfoArray['email'], - $userInfoArray['memo'] + $db->insertGroup( + $groupArray['group_id'], + $groupArray['name'], + $groupArray['memo'], + $groupArray['auth_server_admin'], + $groupArray['auth_client_admin'] ); } } - else throw Exception\NoDataException();*/ + else throw Exception\NoDataException(); } /** @@ -124,36 +105,47 @@ class UserGroupAdmin { */ public function isExist($group_id) { - /*$db = new Database\DBUser(); - $info = $db->queryUser($userName); + $db = new Database\DBUser(); + $info = $db->queryGroup($group_id); if( $info != null ) return true; - else return false;*/ + else return false; } /** * 移除此群組 * + * 範例: + * + * try { + * $groupAdmin = new User\UserGroupAdmin(); + * $groupAdmin->remove('test_student'); + * + * } + * catch (User\Exception\GroupNoFoundException $e) { + * echo 'No Found group: ', $e->getGroupId(); + * } + * * @param string $group_id 群組ID * @throw UElearning\User\Exception\GroupNoFoundException * @since 2.0.0 */ public function remove($group_id) { - /* + // 若有此使用者 - if($this->isExist($userName)) { + if($this->isExist($group_id)) { // TODO: 檢查所有關聯的資料,確認是否可以移除 // 移除資料庫中的使用者 $db = new Database\DBUser(); - $db->deleteUser($userName); + $db->deleteGroup($group_id); } // 若沒有這位使用者 else { - throw new Exception\UserNoFoundException($userName); + throw new Exception\GroupNoFoundException($group_id); } - */ + } } \ No newline at end of file diff --git a/tests/Database/DBUserTest.php b/tests/Database/DBUserTest.php index c0a582f..ca065e3 100644 --- a/tests/Database/DBUserTest.php +++ b/tests/Database/DBUserTest.php @@ -69,6 +69,17 @@ class DBUserTest extends \PHPUnit_Framework_TestCase $this->assertEquals($info['memo'], $memo); } + /** + * 測試查詢所有使用者 + * + * 僅測試是否能成功執行,不驗證結果 + */ + public function testQueryAllUser(){ + + // 查詢使用者 + $infoAll = $this->db->queryAllUser(); + } + /** * 測試更改使用者資料 * @@ -123,4 +134,52 @@ class DBUserTest extends \PHPUnit_Framework_TestCase 'sss', 'Yuan Chiu', 'chyuanesr@gmail.com', null) ); } + + // ======================================================================== + + /** + * 測試建立群組 + * + * @dataProvider groupDataProvider + */ + public function testCreateGroup($gId, $name, $memo, $auth_admin, $auth_clientAdmin){ + + $this->db->insertGroup($gId, $name, $memo, $auth_admin, $auth_clientAdmin); + } + + /** + * 測試查詢群組 + * + * @dataProvider groupDataProvider + */ + public function testQueryGroup($gId, $name, $memo, $auth_admin, $auth_clientAdmin){ + // 查詢使用者 + $info = $this->db->queryGroup($gId); + + // 比對資料是否吻合 + $this->assertEquals($info['group_id'], $gId); + $this->assertEquals($info['name'], $name); + $this->assertEquals($info['memo'], $memo); + $this->assertEquals($info['auth_admin'], $auth_admin); + $this->assertEquals($info['auth_clientAdmin'], $auth_clientAdmin); + } + + /** + * 測試移除使用者 + * + * @dataProvider groupDataProvider + */ + public function testDeleteGroup($gId) { + $this->db->deleteGroup($gId); + } + + /** + * 測試時要填的資料 + */ + public function groupDataProvider(){ + return array( + array('testG_a', '測試用群組a', null, '1', '0'), + array('testG_b', '測試用群組b', 'testhahaha Groups', '0', '1') + ); + } } \ No newline at end of file diff --git a/tests/User/UserGroupAdminTest.php b/tests/User/UserGroupAdminTest.php new file mode 100644 index 0000000..0cd484c --- /dev/null +++ b/tests/User/UserGroupAdminTest.php @@ -0,0 +1,83 @@ + + */ +namespace UElearning; + +require_once UELEARNING_LIB_ROOT.'/User/UserGroupAdmin.php'; +use UElearning\User\UserGroupAdmin; + +class UserGroupAdminTest extends \PHPUnit_Framework_TestCase +{ + + /** + * 測試建立群組 + * + * @dataProvider groupDataProvider + */ + public function testCreateGroup($gId, $name, $memo, $auth_admin, $auth_clientAdmin){ + + try { + $groupAdmin = new User\UserGroupAdmin(); + $groupAdmin->create( + array( 'group_id' => $gId, + 'name' => $name, + 'memo' => $memo, + 'auth_server_admin' => $auth_admin, + 'auth_client_admin' => $auth_clientAdmin + )); + + } + // 若已有重複帳號名稱 + catch (User\Exception\GroupIdExistException $e) { + throw $e; + } + + } + + /** + * 測試查詢群組 + * + * @dataProvider groupDataProvider + */ + public function testCheckExist($gId){ + + $groupAdmin = new User\UserGroupAdmin(); + + // 比對資料是否吻合 + $this->assertEquals($groupAdmin->isExist($gId), true); + } + + /** + * 測試移除使用者 + * + * @dataProvider groupDataProvider + */ + public function testDeleteGroup($gId) { + + try { + $groupAdmin = new User\UserGroupAdmin(); + $groupAdmin->remove($gId); + + $this->assertEquals($groupAdmin->isExist($gId), false); + } + catch (User\Exception\GroupNoFoundException $e) { + throw $e; + } + + } + + /** + * 測試時要填的資料 + */ + public function groupDataProvider(){ + return array( + array('testG_a', '測試用群組a', null, '1', '0'), + array('testG_b', '測試用群組b', 'testhahaha Groups', '0', '1') + ); + } + +} \ No newline at end of file