Add: get_typing_exam_ranking_records

This commit is contained in:
2019-07-18 11:55:49 +09:00
parent 1fe0b08e9f
commit 1f6d91f301
7 changed files with 346 additions and 33 deletions
+101 -2
View File
@@ -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;
}
+1 -1
View File
@@ -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) {
+54 -30
View File
@@ -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) {
+76
View File
@@ -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;
}
}
?>
@@ -0,0 +1,38 @@
<?php
header('Content-Type: application/json');
$maestroID = $_POST["maestroID"];
$playerID = $_POST["playerID"];
$writingID = $_POST["writingID"];
$date = $_POST["date"];
$time = $_POST["time"];
include "./../lib/json_builder.php";
include "./../lib/connect_db.php";
$jsonBuilder = new JsonBuilder();
$dbConnector = new DBConnector();
$isConnected = $dbConnector->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();
?>
@@ -0,0 +1,38 @@
<?php
header('Content-Type: application/json');
$maestroID = $_POST["maestroID"];
$playerID = $_POST["playerID"];
$writingID = $_POST["writingID"];
$date = $_POST["date"];
$time = $_POST["time"];
include "./../lib/json_builder.php";
include "./../lib/connect_db.php";
$jsonBuilder = new JsonBuilder();
$dbConnector = new DBConnector();
$isConnected = $dbConnector->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();
?>
@@ -0,0 +1,38 @@
<?php
header('Content-Type: application/json');
$maestroID = $_POST["maestroID"];
$playerID = $_POST["playerID"];
$writingID = $_POST["writingID"];
$date = $_POST["date"];
$time = $_POST["time"];
include "./../lib/json_builder.php";
include "./../lib/connect_db.php";
$jsonBuilder = new JsonBuilder();
$dbConnector = new DBConnector();
$isConnected = $dbConnector->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();
?>