diff --git a/htdocs/config.sample.php b/htdocs/config.sample.php index 3a56f3a..939646c 100644 --- a/htdocs/config.sample.php +++ b/htdocs/config.sample.php @@ -53,7 +53,7 @@ * * 針對未個別設定過的使用者,採用預設的導引模式 */ - define('LMODE', '0'); + define('LMODE', '1'); /** * 預設教材模式 diff --git a/htdocs/lib/Database/DBStudyActivity.php b/htdocs/lib/Database/DBStudyActivity.php new file mode 100644 index 0000000..4694455 --- /dev/null +++ b/htdocs/lib/Database/DBStudyActivity.php @@ -0,0 +1,341 @@ +insertActivity('yuan', '1', null, null, null, 0, null, true, null); + * // 設定延後 + * $db->setDelay(40, -12); + * + * // 查詢'yuan'的所有活動 + * $data = $db->queryAllActivityByUserId('yuan'); + * echo '
';print_r($data);echo ''; + * + * @author Yuan Chiu
'; print_r($targetInfo); echo ''; + * + * + * @param int $td 學習活動ID + * @return array 活動資料陣列,格式為: + * array( 'activity_id' => <活動流水編號>, + * 'user_id' => <使用者ID>, + * 'theme_id' => <主題ID>, + * 'start_time' => <開始學習時間>, + * 'end_time' => <結束學習時間>, + * 'learn_time' => <學習所需時間(分)>, + * 'delay' => <延誤結束時間(分)>, + * 'learnStyle_mode' => <學習導引模式>, + * 'learnStyle_force' => <拒絕前往非推薦的學習點>, + * 'material_mode' => <教材模式> + * ); + * + */ + public function queryActivity($id) { + + $queryResultAll = + $this->queryActivityByWhere("`SaID`=".$this->connDB->quote($id)); + + // 如果有查到一筆以上 + if( count($queryResultAll) >= 1 ) { + return $queryResultAll[0]; + } + // 若都沒查到的話 + else { + return null; + } + } + + /** + * 查詢所有活動資料 + * + * @return array 學習活動資料陣列,格式為: + * + * array( + * array( + * 'activity_id' => <活動流水編號>, + * 'user_id' => <使用者ID>, + * 'theme_id' => <主題ID>, + * 'start_time' => <開始學習時間>, + * 'end_time' => <結束學習時間>, + * 'delay' => <延誤結束時間(分)>, + * 'learnStyle_mode' => <學習導引模式>, + * 'learnStyle_force' => <拒絕前往非推薦的學習點>, + * 'material_mode' => <教材模式> + * ) + * ); + * + */ + public function queryAllActivity() { + + return $this->queryActivityByWhere("1"); + } + + /** + * 查詢此使用者所有活動資料 + * + * @param int $user_id 使用者ID + * @return array 學習活動資料陣列,格式為: + * + * array( + * array( + * 'activity_id' => <活動流水編號>, + * 'user_id' => <使用者ID>, + * 'theme_id' => <主題ID>, + * 'start_time' => <開始學習時間>, + * 'end_time' => <結束學習時間>, + * 'delay' => <延誤結束時間(分)>, + * 'learnStyle_mode' => <學習導引模式>, + * 'learnStyle_force' => <拒絕前往非推薦的學習點>, + * 'material_mode' => <教材模式> + * ) + * ); + * + */ + public function queryAllActivityByUserId($user_id) { + + return $this->queryActivityByWhere( + "`UID`=".$this->connDB->quote($user_id)); + } + + /** + * 設定結束時間 + * + * 只要一設定,就代表學習活動結束了 + * @param int $activity_id 活動編號 + * @param string $endTime 時間 + */ + public function setEndTime($activity_id, $endTime) { + $sqlString = "UPDATE ".$this->table('StudyActivity'). + " SET `EndTime` = :value". + " WHERE `SaID` = :id"; + + $query = $this->connDB->prepare($sqlString); + $query->bindParam(':id', $activity_id); + $query->bindParam(':value', $endTime); + $query->execute(); + } + + /** + * 設定立即結束 + * + * 只要一設定,就代表學習活動結束了 + * @param int $activity_id 活動編號 + */ + public function setEndTimeNow($activity_id) { + $sqlString = "UPDATE ".$this->table('StudyActivity'). + " SET `EndTime` = NOW()". + " WHERE `SaID` = :id"; + + $query = $this->connDB->prepare($sqlString); + $query->bindParam(':id', $activity_id); + $query->execute(); + } + + /** + * 設定延後時間 + * + * 只要一設定,就代表學習活動結束了 + * @param int $activity_id 活動編號 + * @param int $delay 延後時間(分) + */ + public function setDelay($activity_id, $delay) { + $sqlString = "UPDATE ".$this->table('StudyActivity'). + " SET `Delay` = :value". + " WHERE `SaID` = :id"; + + $query = $this->connDB->prepare($sqlString); + $query->bindParam(':id', $activity_id); + $query->bindParam(':value', $delay); + $query->execute(); + } +} \ No newline at end of file diff --git a/htdocs/lib/Database/DBTarget.php b/htdocs/lib/Database/DBTarget.php index 37a8e08..0a934d1 100644 --- a/htdocs/lib/Database/DBTarget.php +++ b/htdocs/lib/Database/DBTarget.php @@ -153,7 +153,7 @@ class DBTarget extends Database { * @param string $field 欄位名稱 * @param string $value 內容 */ - function changeTargetData($tId, $field, $value) { + public function changeTargetData($tId, $field, $value) { $sqlField = null; switch($field) { case 'area_id': $sqlField = 'AID'; break; diff --git a/htdocs/lib/Study/Exception.php b/htdocs/lib/Study/Exception.php new file mode 100644 index 0000000..7ea1153 --- /dev/null +++ b/htdocs/lib/Study/Exception.php @@ -0,0 +1,39 @@ +id = $id; + parent::__construct('No Activity: '.$this->id); + } + + /** + * 取得輸入的標的ID + * @return int 標的ID + */ + public function getId() { + return $this->id; + } +} \ No newline at end of file diff --git a/htdocs/lib/Study/StudyActivity.php b/htdocs/lib/Study/StudyActivity.php index a6feb5b..393e371 100644 --- a/htdocs/lib/Study/StudyActivity.php +++ b/htdocs/lib/Study/StudyActivity.php @@ -5,8 +5,9 @@ namespace UElearning\Study; -//require_once UELEARNING_LIB_ROOT.'/Database/DBTarget.php'; -//require_once UELEARNING_LIB_ROOT.'/Target/Exception.php'; +require_once UELEARNING_LIB_ROOT.'/Database/DBStudyActivity.php'; +require_once UELEARNING_LIB_ROOT.'/User/User.php'; +require_once UELEARNING_LIB_ROOT.'/Study/Exception.php'; use UElearning\Database; use UElearning\Exception; use UElearning\User; @@ -43,17 +44,17 @@ class StudyActivity { * @throw UElearning\Exception\AreaNoFoundException * @since 2.0.0 */ - protected function getQuery(){ - // TODO: 從資料庫取得查詢 - //// 從資料庫查詢 - //$db = new Database\DBTarget(); - //$areaInfo = $db->queryArea($this->aId); - // - //// 判斷有沒有這個 - //if( $areaInfo != null ) { - // $this->queryResultArray = $areaInfo; - //} - //else throw new Exception\AreaNoFoundException($this->aId); + protected function getQuery() { + + // 從資料庫查詢 + $db = new Database\DBStudyActivity(); + $info = $db->queryActivity($this->id); + + // 判斷有沒有這個 + if( $info != null ) { + $this->queryResultArray = $info; + } + else throw new Exception\StudyActivityNoFoundException($this->id); } // ======================================================================== @@ -64,40 +65,20 @@ class StudyActivity { * @param int $inputID 學習階段流水號ID * @since 2.0.0 */ - public function __construct($inputID){ - $this->id = $inputAID; + public function __construct($inputID) { + $this->id = $inputID; $this->getQuery(); } // ======================================================================== - // 控制這次學習階段: - - /** - * 設定這次學習時間要延長多久 - * - * @return int 延長時間(分) - * @since 2.0.0 - */ - public function setDelay(){ - //return $this->queryResultArray['name']; - } - - /** - * 設定累加這次學習時間要延長多久 - * - * @return int 延長時間(分) - * @since 2.0.0 - */ - public function addDelay(){ - //return $this->queryResultArray['name']; - } + // 控制這次學習階段時間: /** * 結束這次學習 * * @since 2.0.0 */ - public function finishActivity(){ + public function finishActivity() { //return $this->queryResultArray['name']; } @@ -106,10 +87,32 @@ class StudyActivity { * * @since 2.0.0 */ - public function cancelActivity(){ + public function cancelActivity() { //return $this->queryResultArray['name']; } + // ======================================================================== + + /** + * 取得已經學過幾個學習點 + * + * @return ing 已學過幾個學習點 + * @since 2.0.0 + */ + public function getLearnedPointTotal() { + + } + + /** + * 取得還剩下幾個學習點還沒學 + * + * @return ing 還剩下幾個學習點 + * @since 2.0.0 + */ + public function getRemainingPointTotal() { + + } + // ======================================================================== // 取得資料: @@ -119,7 +122,7 @@ class StudyActivity { * @return int 學習階段流水號ID * @since 2.0.0 */ - public function getId(){ + public function getId() { return $this->id; } @@ -129,7 +132,7 @@ class StudyActivity { * @return \UElearning\User\User 使用者物件 * @since 2.0.0 */ - public function getUser(){ + public function getUser() { $userId = $this->queryResultArray['user_id'];; return new User\User($userId); @@ -141,7 +144,7 @@ class StudyActivity { * @return string 使用者ID * @since 2.0.0 */ - public function getUserId(){ + public function getUserId() { return $this->queryResultArray['user_id']; } @@ -151,7 +154,7 @@ class StudyActivity { // * @return int 主題物件 // * @since 2.0.0 // */ - //public function getTheme(){ + //public function getTheme() { // $tId = $this->queryResultArray['theme_id']; // return new Target\User($userId);; //} @@ -162,18 +165,21 @@ class StudyActivity { * @return int 主題ID * @since 2.0.0 */ - public function getThemeId(){ + public function getThemeId() { return $this->queryResultArray['theme_id']; } + // ------------------------------------------------------------------------ + // 時間控制: + /** * 取得這次學習是什麼時候開始的 * * @return string 開始學習時間 * @since 2.0.0 */ - public function getStartTime(){ - //return $this->queryResultArray['build_time']; + public function getStartTime() { + return $this->queryResultArray['start_time']; } /** @@ -182,8 +188,8 @@ class StudyActivity { * @return string 結束學習時間 * @since 2.0.0 */ - public function getEndTime(){ - //return $this->queryResultArray['build_time']; + public function getEndTime() { + return $this->queryResultArray['end_time']; } /** @@ -192,27 +198,79 @@ class StudyActivity { * @return int 所需學習時間(分) * @since 2.0.0 */ - public function getLearnTime(){ - //return $this->queryResultArray['name']; + public function getLearnTime() { + return $this->queryResultArray['learn_time']; } + /** + * 取得這次學習還剩下多少學習時間 + * + * @return int 剩下的學習時間(分) + * @since 2.0.0 + */ + public function getRemainingTime() { + + // TODO: 取得這次學習還剩下多少學習時間 + + // 計算總共學習時間(包含延長時間) + $haveTime = $this->getLearnTime() - $this->getDelay(); + + // 取得現在時間 + // 開始時間+學習時間 = 應結束時間 + + // 應結束時間-現在時間 = 剩餘時間 + } + /** * 取得這次學習時間要延長多久 * * @return int 延長時間(分) * @since 2.0.0 */ - public function getDelay(){ - //return $this->queryResultArray['name']; + public function getDelay() { + return $this->queryResultArray['delay']; } + /** + * 設定這次學習時間要延長多久 + * + * @param int $minute 延長時間(分) + * @since 2.0.0 + */ + public function setDelay($minute) { + $db = new Database\DBStudyActivity(); + $db->setDelay($this->id, $minute); + + $this->getQuery(); + } + + /** + * 設定累加這次學習時間要延長多久 + * + * @param int $minute 延長時間(分) + * @since 2.0.0 + */ + public function addDelay($minute) { + + $setMinute = $this->queryResultArray['delay'] + $minute; + + $db = new Database\DBStudyActivity(); + $db->setDelay($this->id, $setMinute); + + // TODO: 防呆-不能設的比開始時間還早 + + $this->getQuery(); + } + + // ------------------------------------------------------------------------ + /** * 取得這次學習的導引風格 * * @return int 將推薦幾個學習點 * @since 2.0.0 */ - public function getLearnStyle(){ + public function getLearnStyle() { return $this->queryResultArray['learnStyle_mode']; } @@ -222,7 +280,7 @@ class StudyActivity { * @return bool 是否拒絕前往非推薦的學習點 * @since 2.0.0 */ - public function isForceLearnStyle(){ + public function isForceLearnStyle() { return $this->queryResultArray['learnStyle_force']; } @@ -232,7 +290,7 @@ class StudyActivity { * @return string 教材風格 * @since 2.0.0 */ - public function getMaterialStyle(){ + public function getMaterialStyle() { return $this->queryResultArray['material_mode']; }