資料庫程式碼
This commit is contained in:
parent
e194a5caa8
commit
af0d8c49be
@ -56,24 +56,156 @@ require_once UELEARNING_LIB_ROOT.'Database/Exceptions.php';
|
|||||||
*/
|
*/
|
||||||
class DBAdmin extends Database {
|
class DBAdmin extends Database {
|
||||||
|
|
||||||
/**
|
|
||||||
* 建立資料庫
|
|
||||||
*
|
|
||||||
* 在資料庫系統內建立一個資料庫。
|
|
||||||
* (注意!需有建立資料庫的權限)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function createDB() {
|
|
||||||
// TODO: Fill code in
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 建立所有所需的資料表
|
* 建立所有所需的資料表
|
||||||
*
|
*
|
||||||
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
public function createAllTable() {
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -22,11 +22,6 @@ require_once UELEARNING_LIB_ROOT.'Database/Exceptions.php';
|
|||||||
* @subpackage Database
|
* @subpackage Database
|
||||||
*/
|
*/
|
||||||
class DBUser extends Database {
|
class DBUser extends Database {
|
||||||
/**
|
|
||||||
* 資料表名稱
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
private $form_name = 'user';
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -48,43 +48,43 @@ abstract class Database {
|
|||||||
*
|
*
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_type;
|
protected $db_type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 資料庫伺服器位址
|
* 資料庫伺服器位址
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_host;
|
protected $db_host;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 資料庫伺服器連結埠
|
* 資料庫伺服器連結埠
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_port;
|
protected $db_port;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 資料庫帳號
|
* 資料庫帳號
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_user;
|
protected $db_user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 資料庫密碼
|
* 資料庫密碼
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_passwd;
|
protected $db_passwd;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 資料庫名稱
|
* 資料庫名稱
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_name;
|
protected $db_name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 資料表前綴字元
|
* 資料表前綴字元
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
private $db_prefix;
|
protected $db_prefix;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ abstract class Database {
|
|||||||
* 資料庫連結物件
|
* 資料庫連結物件
|
||||||
* @type UElearning\Database\PDODB
|
* @type UElearning\Database\PDODB
|
||||||
*/
|
*/
|
||||||
private $connDB;
|
protected $connDB;
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ class MySQLDB extends PDO {
|
|||||||
* @author shuliu <https://github.com/shuliu>
|
* @author shuliu <https://github.com/shuliu>
|
||||||
* @see https://github.com/shuliu/myPDO/blob/master/PDO.class.php
|
* @see https://github.com/shuliu/myPDO/blob/master/PDO.class.php
|
||||||
*/
|
*/
|
||||||
public function ErrorMsg(){
|
public function errorMsg(){
|
||||||
$err = parent ::errorinfo();
|
$err = parent ::errorinfo();
|
||||||
if( $err[0]!='00000' ){
|
if( $err[0]!='00000' ){
|
||||||
return array('errorCode'=>$err[0]
|
return array('errorCode'=>$err[0]
|
||||||
|
34
tests/InstallTest.php
Normal file
34
tests/InstallTest.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* InstallTest
|
||||||
|
*
|
||||||
|
* @package UElearning
|
||||||
|
* @author Yuan Chiu <chyuaner@gmail.com>
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user