diff --git a/htdocs/lib/Database/DBAdmin.php b/htdocs/lib/Database/DBAdmin.php index 37db483..1f7de8c 100644 --- a/htdocs/lib/Database/DBAdmin.php +++ b/htdocs/lib/Database/DBAdmin.php @@ -56,24 +56,156 @@ require_once UELEARNING_LIB_ROOT.'Database/Exceptions.php'; */ class DBAdmin extends Database { - /** - * 建立資料庫 - * - * 在資料庫系統內建立一個資料庫。 - * (注意!需有建立資料庫的權限) - * - */ - public function createDB() { - // TODO: Fill code in - - } - /** * 建立所有所需的資料表 * + * @since 2.0.0 */ public function createAllTable() { - // TODO: Fill code in + // 使用的資料庫系統為MySQL + if($this->db_type == 'mysql') { + + // 所有要跑的SQL指令陣列 + $execSql = array( + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."ABelong` ( + `TID` int(10) unsigned NOT NULL, + `AID` int(10) unsigned NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."AGroup` ( + `GID` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `GName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `GMemo` tinytext COLLATE utf8_unicode_ci, + PRIMARY KEY (`GID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Area` ( + `AID` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '區域編號', + `AName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '區域名稱', + `AMapID` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '區域地圖編號', + `AIntroduction` tinytext COLLATE utf8_unicode_ci, + PRIMARY KEY (`AID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."CGroup` ( + `CID` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `CName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `CMemo` tinytext COLLATE utf8_unicode_ci, + PRIMARY KEY (`CID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Edge` ( + `Ti` int(11) NOT NULL, + `Tj` int(11) NOT NULL, + `MoveTime` int(4) NOT NULL COMMENT '移動時間(分鐘)', + `Destance` int(11) NOT NULL COMMENT '距離(M)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."LearnActivity` ( + `LsID` int(10) NOT NULL, + `ThID` int(10) NOT NULL COMMENT '主題編號', + `CID` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '班級名稱', + `StartTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '開始時間', + `Delay` int(11) NOT NULL COMMENT '實際狀態延誤(分)', + PRIMARY KEY (`LsID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Material` ( + `MID` int(10) unsigned NOT NULL COMMENT '教材內部編號', + `TID` int(10) unsigned NOT NULL COMMENT '標的內部編號', + `MMode` int(1) NOT NULL DEFAULT '0' COMMENT '教材模式', + `MUrl` varchar(1000) COLLATE utf8_unicode_ci NOT NULL COMMENT '教材檔案路徑', + PRIMARY KEY (`MID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Recommand` ( + `TID` int(3) NOT NULL COMMENT '標的內部編號', + `UID` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '使用者帳號', + `gradation` int(11) NOT NULL COMMENT '系統推薦標地順序' +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Study` ( + `SID` int(10) NOT NULL AUTO_INCREMENT, + `TID` int(10) NOT NULL COMMENT '標的內部編號', + `UID` int(30) NOT NULL COMMENT '使用者名稱', + `LMode` int(11) NOT NULL COMMENT '學習導引模式', + `MMode` int(11) NOT NULL COMMENT '教材模式', + `In_TargetTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '進入標的時間', + `Out_TargetTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '離開標的時間', + PRIMARY KEY (`SID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."StudyQuestion` ( + `UID` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `TID` int(10) NOT NULL, + `QID` int(11) NOT NULL, + `UAns` int(11) NOT NULL, + `CAns` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Target` ( + `TID` int(10) unsigned NOT NULL COMMENT '標的內部編號', + `TNum` int(10) DEFAULT NULL COMMENT '標的地圖上的編號', + `TName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '標的名稱', + `TMapID` varchar(1000) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地圖圖檔名稱', + `TLearnTime` int(4) unsigned NOT NULL COMMENT '預估此標的應該學習的時間', + `PLj` int(11) unsigned NOT NULL COMMENT '學習標的的人數限制', + `Mj` int(11) unsigned DEFAULT NULL COMMENT '目前人數', + `S` int(11) unsigned DEFAULT NULL COMMENT '學習標的飽和率上限', + `Fi` int(11) DEFAULT NULL COMMENT '學習標的滿額指標', + PRIMARY KEY (`TID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."TBelong` ( + `TID` int(10) NOT NULL, + `ThID` int(10) NOT NULL, + `Weights` int(3) NOT NULL COMMENT '當次學習主題的某一個學習標的之權重' +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."Theme` ( + `ThID` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ThName` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '主題名稱', + `ThLearnTotal` int(4) NOT NULL COMMENT '學習此主題要花的總時間(m)', + `ThIntroduction` tinytext COLLATE utf8_unicode_ci COMMENT '介紹', + PRIMARY KEY (`ThID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."User` ( + `UID` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '使用者帳號', + `UPassword` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '密碼', + `GID` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '使用者群組', + `CID` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '使用者班級', + `UEnabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '帳號啟用狀態', + `UBuild_Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '帳號建立時間', + `LMode` enum('line-learn','harf-line-learn','non-line-learn') COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '學習導引模式', + `MMode` int(11) DEFAULT NULL COMMENT '教材模式', + `UNickname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '暱稱', + `UReal_Name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '真實姓名', + `UEmail` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '使用者email', + `UMemo` tinytext COLLATE utf8_unicode_ci COMMENT '備註', + PRIMARY KEY (`UID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;", + +"CREATE TABLE IF NOT EXISTS `".$this->db_prefix."UserSession` ( + `UsID` int(10) unsigned NOT NULL AUTO_INCREMENT, + `UToken` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '此登入階段的token', + `UID` varchar(30) COLLATE utf8_unicode_ci NOT NULL, + `UAgent` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '使用哪個裝置登入', + `ULoginDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登入時間', + `ULogoutDate` timestamp NULL DEFAULT NULL COMMENT '登出時間', + PRIMARY KEY (`UsID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;" + ); + + // 執行此SQL指令 + foreach ($execSql as $value ){ + $this->connDB->exec($value); + }; + } + else { + throw new Exception\DatabaseNoSupportException($this->db_type); + } } } \ No newline at end of file diff --git a/htdocs/lib/Database/DBUser.php b/htdocs/lib/Database/DBUser.php index 6a58f76..9c1def8 100644 --- a/htdocs/lib/Database/DBUser.php +++ b/htdocs/lib/Database/DBUser.php @@ -22,11 +22,6 @@ require_once UELEARNING_LIB_ROOT.'Database/Exceptions.php'; * @subpackage Database */ class DBUser extends Database { - /** - * 資料表名稱 - * @type string - */ - private $form_name = 'user'; } \ No newline at end of file diff --git a/htdocs/lib/Database/Database.php b/htdocs/lib/Database/Database.php index 9317fbc..6eff00c 100644 --- a/htdocs/lib/Database/Database.php +++ b/htdocs/lib/Database/Database.php @@ -48,43 +48,43 @@ abstract class Database { * * @type string */ - private $db_type; + protected $db_type; /** * 資料庫伺服器位址 * @type string */ - private $db_host; + protected $db_host; /** * 資料庫伺服器連結埠 * @type string */ - private $db_port; + protected $db_port; /** * 資料庫帳號 * @type string */ - private $db_user; + protected $db_user; /** * 資料庫密碼 * @type string */ - private $db_passwd; + protected $db_passwd; /** * 資料庫名稱 * @type string */ - private $db_name; + protected $db_name; /** * 資料表前綴字元 * @type string */ - private $db_prefix; + protected $db_prefix; // ------------------------------------------------------------------------ @@ -92,7 +92,7 @@ abstract class Database { * 資料庫連結物件 * @type UElearning\Database\PDODB */ - private $connDB; + protected $connDB; // ======================================================================== diff --git a/htdocs/lib/Database/MySQLDB.php b/htdocs/lib/Database/MySQLDB.php index 9003f5b..89be3dd 100644 --- a/htdocs/lib/Database/MySQLDB.php +++ b/htdocs/lib/Database/MySQLDB.php @@ -57,7 +57,7 @@ class MySQLDB extends PDO { * @author shuliu * @see https://github.com/shuliu/myPDO/blob/master/PDO.class.php */ - public function ErrorMsg(){ + public function errorMsg(){ $err = parent ::errorinfo(); if( $err[0]!='00000' ){ return array('errorCode'=>$err[0] diff --git a/tests/InstallTest.php b/tests/InstallTest.php new file mode 100644 index 0000000..383899d --- /dev/null +++ b/tests/InstallTest.php @@ -0,0 +1,34 @@ + + */ +namespace UElearning; + +require_once __DIR__.'/../htdocs/config.php'; +require_once UELEARNING_LIB_ROOT.'Database/DBAdmin.php'; + +class InstallTest extends \PHPUnit_Framework_TestCase +{ + + /** + * 測試安裝初始化資料庫 + */ + public function testInstallDatabase() + { + + try { + // 建立資料庫管理物件 + $dbAdmin = new Database\DBAdmin(); + + // 建立所有所需的資料表 + $dbAdmin->createAllTable(); + } + // 若設定的DBMS不被支援 則丟出例外 + catch (Database\Exception\DatabaseNoSupportException $e) { + throw $e; + } + } +} \ No newline at end of file