diff --git a/src/game/lib/db_service.js b/src/game/lib/db_service.js index 0dbf481..816bed4 100644 --- a/src/game/lib/db_service.js +++ b/src/game/lib/db_service.js @@ -193,7 +193,7 @@ DBService.prototype.getTypingExamHighestRecord = function(writingID, onSucceeded ); } -DBService.prototype.requestWritingPlayerHistory = function(writingID, date, onSucceededListener, onFailedListener) { +DBService.prototype.requestTypingExamPlayerHistory = function(writingID, date, onSucceededListener, onFailedListener) { /* var historyRecordManager = new HistoryRecordManager(); this.loadTempPlayerHistory(historyRecordManager); @@ -224,7 +224,6 @@ DBService.prototype.requestWritingPlayerHistory = function(writingID, date, onSu ); } - DBService.prototype.parseJSONtoHistoryRecord = function(jsonData) { var historyRecordManager = new HistoryRecordManager(); @@ -276,3 +275,103 @@ DBService.prototype.loadTempRanking = function(rankingRecordManager) { rankingRecordManager.push(new RankingRecord(15, 15, "우습지", 10)); rankingRecordManager.push(new RankingRecord(16, 16, "하하하", 4)); } + + +DBService.prototype.requestTypingExamRanking = function(type, writingID, date, time, onSucceededListener, onFailedListener) { + /* + var rankingRecordManager = new RankingRecordManager(); + this.loadTempRanking(rankingRecordManager); + if(listener !== null) + listener(rankingRecordManager); + + return; + } + */ + + var xhr = this.makeXhr( + this.getRankingRecordUrl(type), + (function() { // onreadystatechange + if(xhr.readyState == 4 && xhr.status == 200) { + var replyJSON = JSON.parse(xhr.responseText); + + if(replyJSON != null && replyJSON.result == "success") + onSucceededListener(type, this.parseJSONtoRankingRecord(type, replyJSON)); + else + onFailedListener(replyJSON); + } + }).bind(this) + ); + xhr.send( + "maestroID=" + this.maestroID + + "&writingID=" + writingID + + "&date=" + date + + "&time=" + time + ); +} + +DBService.prototype.getRankingRecordUrl = function(type) { + var rankingRecordURL = this.webPath + "web/php/record/"; + + switch(type) { + case DBConnectManager.TYPE_MY_RANKING_HOUR: + case DBConnectManager.TYPE_ALL_RANKING_HOUR: + rankingRecordURL += "get_typing_exam_ranking_record_hour.php"; + break; + + case DBConnectManager.TYPE_MY_RANKING_DAY: + case DBConnectManager.TYPE_ALL_RANKING_DAY: + rankingRecordURL += "get_typing_exam_ranking_record_day.php"; + break; + + case DBConnectManager.TYPE_MY_RANKING_MONTH: + case DBConnectManager.TYPE_ALL_RANKING_MONTH: + rankingRecordURL += "get_typing_exam_ranking_record_month.php"; + break; + } + + return rankingRecordURL; +} + +DBService.prototype.parseJSONtoRankingRecord = function(type, jsonData) { + var rankingRecordManager = new RankingRecordManager(); + + if(typeof jsonData === "undefined") + return rankingRecordManager; + + var replyJSON = null; + switch(type) { + case DBConnectManager.TYPE_MY_RANKING_HOUR: + case DBConnectManager.TYPE_ALL_RANKING_HOUR: + replyJSON = jsonData.rankingHour; + break; + + case DBConnectManager.TYPE_MY_RANKING_DAY: + case DBConnectManager.TYPE_ALL_RANKING_DAY: + replyJSON = jsonData.rankingDay; + break; + + case DBConnectManager.TYPE_MY_RANKING_MONTH: + case DBConnectManager.TYPE_ALL_RANKING_MONTH: + replyJSON = jsonData.rankingMonth; + break; + } + + if(replyJSON === null) + return rankingRecordManager; + + var count = replyJSON.length; + for(var i = 0; i < count; i++) { + var record = new RankingRecord( + i + 1, + replyJSON[i]["PlayerID"], + replyJSON[i]["Name"], + replyJSON[i]["HighScore"] + ); + rankingRecordManager.push(record); + } + + return rankingRecordManager; +} + + + diff --git a/src/game/result/history_board.js b/src/game/result/history_board.js index d1baea0..c27273f 100644 --- a/src/game/result/history_board.js +++ b/src/game/result/history_board.js @@ -26,7 +26,7 @@ function HistoryBoard(dataType) { this.date = DateUtil.getYYYYMMDD(today); if(isTypingExamApp()) { - this.dbService.requestWritingPlayerHistory( + this.dbService.requestTypingExamPlayerHistory( sessionStorageManager.getWritingID(), this.date, (function(historyRecordManager) { diff --git a/src/game/result/ranking_board.js b/src/game/result/ranking_board.js index 549179a..f27876c 100644 --- a/src/game/result/ranking_board.js +++ b/src/game/result/ranking_board.js @@ -20,6 +20,11 @@ function RankingBoard(type) { this.makeMedalSprites(); this.dbConnectManager = new DBConnectManager(); + + this.dbService = new DBService(); + this.dbService.setMaestroID(sessionStorageManager.getMaestroID()); + this.dbService.setPlayerID(sessionStorageManager.getPlayerID()); + setTimeout( (function() { this.requestRanking(DBConnectManager.TYPE_MY_RANKING_HOUR); @@ -37,42 +42,61 @@ RankingBoard.prototype.requestRanking = function(type) { var date = DateUtil.getYYYYMMDD(today); var time = DateUtil.getHHMMSS(today); - this.dbConnectManager.requestRanking( - type, - sessionStorageManager.getMaestroID(), - date, - time, - (function(type, rankingRecordManager) { - if(rankingRecordManager.getCount() == 0) { - console.log("ranking board - no data"); - return; - } + if(isTypingExamApp()) { + this.dbService.requestTypingExamRanking( + type, + sessionStorageManager.getWritingID(), + date, + time, + (function(type, rankingRecordManager) { + this.onReceiveRankingData(type, rankingRecordManager); + }).bind(this), + (function(jsonData) { + console.log(jsonData); + }).bind(this) + ); + } else { + this.dbConnectManager.requestRanking( + type, + sessionStorageManager.getMaestroID(), + date, + time, + (function(type, rankingRecordManager) { + this.onReceiveRankingData(type, rankingRecordManager); + }).bind(this) + ); + } +} - var beginIndex = this.getBeginIndex(rankingRecordManager); - var endIndex = this.getEndIndex(rankingRecordManager); +RankingBoard.prototype.onReceiveRankingData = function(type, rankingRecordManager) { + if(rankingRecordManager.getCount() == 0) { + console.log("ranking board - no data"); + return; + } - for(var i = 0; i < endIndex - beginIndex; i++) { - var index = beginIndex + i; - var data = rankingRecordManager.getAt(index); - this.printRecord(type, i, data); - } + var beginIndex = this.getBeginIndex(rankingRecordManager); + var endIndex = this.getEndIndex(rankingRecordManager); - switch(type) { - case DBConnectManager.TYPE_MY_RANKING_HOUR: - this.showMedal(this.medalHour, this.getMyRank(rankingRecordManager)); - break; + for(var i = 0; i < endIndex - beginIndex; i++) { + var index = beginIndex + i; + var data = rankingRecordManager.getAt(index); + this.printRecord(type, i, data); + } - case DBConnectManager.TYPE_MY_RANKING_DAY: - this.showMedal(this.medalDay, this.getMyRank(rankingRecordManager)); - break; + switch(type) { + case DBConnectManager.TYPE_MY_RANKING_HOUR: + this.showMedal(this.medalHour, this.getMyRank(rankingRecordManager)); + break; - case DBConnectManager.TYPE_MY_RANKING_MONTH: - this.showMedal(this.medalMonth, this.getMyRank(rankingRecordManager)); - break; + case DBConnectManager.TYPE_MY_RANKING_DAY: + this.showMedal(this.medalDay, this.getMyRank(rankingRecordManager)); + break; - } - }).bind(this) - ); + case DBConnectManager.TYPE_MY_RANKING_MONTH: + this.showMedal(this.medalMonth, this.getMyRank(rankingRecordManager)); + break; + + } } RankingBoard.prototype.getMyRank = function(rankingRecordManager) { diff --git a/src/web/php/db/typing_exam_collection.php b/src/web/php/db/typing_exam_collection.php index 4472218..e59acda 100644 --- a/src/web/php/db/typing_exam_collection.php +++ b/src/web/php/db/typing_exam_collection.php @@ -181,8 +181,84 @@ class TypingExamCollection extends DBMethodContainer $historyRecord['AppName'] = "TypingExam"; array_push($historyRecordArray, $historyRecord); } + $stmt->close(); return $historyRecordArray; } + + function getRankingRecordHour($maestroID, $writingID, $date, $time) { + $query = " + SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore + FROM typing_exam_record TER, player U + WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND DAYOFMONTH(TER.RecordDateTime) = DAYOFMONTH(?) AND HOUR(TER.RecordDateTime) = HOUR(?) AND TER.WritingID = ? + GROUP BY TER.playerID + ORDER BY MAX(TER.Record) DESC; + "; + $stmt = $this->mysqli->prepare($query); + $stmt->bind_param('issssi', $maestroID, $date, $date, $date, $time, $writingID); + $stmt->execute(); + $stmt->bind_result($playerID, $name, $highScore); + + $rankingRecordArray = array(); + while($stmt->fetch()) { + $rankingRecord['PlayerID'] = $playerID; + $rankingRecord['Name'] = $name; + $rankingRecord['HighScore'] = $highScore; + array_push($rankingRecordArray, $rankingRecord); + } + $stmt->close(); + + return $rankingRecordArray; + } + + function getRankingRecordDay($maestroID, $writingID, $date) { + $query = " + SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore + FROM typing_exam_record TER, player U + WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND DAYOFMONTH(TER.RecordDateTime) = DAYOFMONTH(?) AND TER.WritingID = ? + GROUP BY TER.playerID + ORDER BY MAX(TER.Record) DESC; + "; + $stmt = $this->mysqli->prepare($query); + $stmt->bind_param('isssi', $maestroID, $date, $date, $date, $writingID); + $stmt->execute(); + $stmt->bind_result($playerID, $name, $highScore); + + $rankingRecordArray = array(); + while($stmt->fetch()) { + $rankingRecord['PlayerID'] = $playerID; + $rankingRecord['Name'] = $name; + $rankingRecord['HighScore'] = $highScore; + array_push($rankingRecordArray, $rankingRecord); + } + $stmt->close(); + + return $rankingRecordArray; + } + + function getRankingRecordMonth($maestroID, $writingID, $date) { + $query = " + SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore + FROM typing_exam_record TER, player U + WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND TER.WritingID = ? + GROUP BY TER.playerID + ORDER BY MAX(TER.Record) DESC; + "; + $stmt = $this->mysqli->prepare($query); + $stmt->bind_param('issi', $maestroID, $date, $date, $writingID); + $stmt->execute(); + $stmt->bind_result($playerID, $name, $highScore); + + $rankingRecordArray = array(); + while($stmt->fetch()) { + $rankingRecord['PlayerID'] = $playerID; + $rankingRecord['Name'] = $name; + $rankingRecord['HighScore'] = $highScore; + array_push($rankingRecordArray, $rankingRecord); + } + $stmt->close(); + + return $rankingRecordArray; + } } ?> \ No newline at end of file diff --git a/src/web/php/record/get_typing_exam_ranking_record_day.php b/src/web/php/record/get_typing_exam_ranking_record_day.php new file mode 100644 index 0000000..9880ef6 --- /dev/null +++ b/src/web/php/record/get_typing_exam_ranking_record_day.php @@ -0,0 +1,38 @@ +connectDB(); +if (!$isConnected) { + $jsonBuilder->setErrorMessage("DB connection : failed"); + $jsonBuilder->sendResultFail(); + exit; +} + + +include "./../db/db_method_container.php"; +include "./../db/typing_exam_collection.php"; + +$typingExam = new TypingExamCollection($dbConnector->getMysqli()); + +$rankingRecordArray = $typingExam->getRankingRecordDay($maestroID, $writingID, $date); +$jsonBuilder->setData("rankingDay", $rankingRecordArray); + +if ($rankingRecordArray === null) { + $jsonBuilder->sendResultFail(); + exit; +} + +$jsonBuilder->sendResultSuccess(); +?> \ No newline at end of file diff --git a/src/web/php/record/get_typing_exam_ranking_record_hour.php b/src/web/php/record/get_typing_exam_ranking_record_hour.php new file mode 100644 index 0000000..c156213 --- /dev/null +++ b/src/web/php/record/get_typing_exam_ranking_record_hour.php @@ -0,0 +1,38 @@ +connectDB(); +if (!$isConnected) { + $jsonBuilder->setErrorMessage("DB connection : failed"); + $jsonBuilder->sendResultFail(); + exit; +} + + +include "./../db/db_method_container.php"; +include "./../db/typing_exam_collection.php"; + +$typingExam = new TypingExamCollection($dbConnector->getMysqli()); + +$rankingRecordArray = $typingExam->getRankingRecordHour($maestroID, $writingID, $date, $time); +$jsonBuilder->setData("rankingHour", $rankingRecordArray); + +if ($rankingRecordArray === null) { + $jsonBuilder->sendResultFail(); + exit; +} + +$jsonBuilder->sendResultSuccess(); +?> \ No newline at end of file diff --git a/src/web/php/record/get_typing_exam_ranking_record_month.php b/src/web/php/record/get_typing_exam_ranking_record_month.php new file mode 100644 index 0000000..a8b209d --- /dev/null +++ b/src/web/php/record/get_typing_exam_ranking_record_month.php @@ -0,0 +1,38 @@ +connectDB(); +if (!$isConnected) { + $jsonBuilder->setErrorMessage("DB connection : failed"); + $jsonBuilder->sendResultFail(); + exit; +} + + +include "./../db/db_method_container.php"; +include "./../db/typing_exam_collection.php"; + +$typingExam = new TypingExamCollection($dbConnector->getMysqli()); + +$rankingRecordArray = $typingExam->getRankingRecordMonth($maestroID, $writingID, $date); +$jsonBuilder->setData("rankingMonth", $rankingRecordArray); + +if ($rankingRecordArray === null) { + $jsonBuilder->sendResultFail(); + exit; +} + +$jsonBuilder->sendResultSuccess(); +?> \ No newline at end of file