Add: query for record list

This commit is contained in:
2019-03-28 23:26:55 +09:00
parent aba236536b
commit a42eec2ead
2 changed files with 254 additions and 52 deletions
+118 -52
View File
@@ -17,17 +17,19 @@ $(document).ready(function() {
function initDatePicker() { function initDatePicker() {
$('#start_datepicker').datepicker({ $('#start_datepicker')
format: 'yyyy-mm-dd', .datepicker({
autoclose: true, format: 'yyyy-mm-dd',
language: 'kr' autoclose: true,
}); language: 'kr'
});
$('#end_datepicker').datepicker({ $('#end_datepicker')
format: 'yyyy-mm-dd', .datepicker({
autoclose: true, format: 'yyyy-mm-dd',
language: 'kr' autoclose: true,
}); language: 'kr'
});
var today = new Date(); var today = new Date();
var yyyy = today.getFullYear(); var yyyy = today.getFullYear();
@@ -38,6 +40,54 @@ function initDatePicker() {
$('#end_datepicker').datepicker('update', yyyy + "-" + mm + "-" + dd); $('#end_datepicker').datepicker('update', yyyy + "-" + mm + "-" + dd);
} }
function setDatePickers1Week() {
var today = new Date();
var tyyyy = today.getFullYear();
var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var tdd = String(today.getDate()).padStart(2, '0');
var startDay = new Date();
startDay.setDate(startDay.getDate() - 7);
var syyyy = startDay.getFullYear();
var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0!
var sdd = String(startDay.getDate()).padStart(2, '0');
$('#start_datepicker').datepicker('update', syyyy + "-" + smm + "-" + sdd);
$('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd);
}
function setDatePickers1Month() {
var today = new Date();
var tyyyy = today.getFullYear();
var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var tdd = String(today.getDate()).padStart(2, '0');
var startDay = new Date();
startDay.setMonth(startDay.getMonth() - 1);
var syyyy = startDay.getFullYear();
var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0!
var sdd = String(startDay.getDate()).padStart(2, '0');
$('#start_datepicker').datepicker('update', syyyy + "-" + smm + "-" + sdd);
$('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd);
}
function setDatePickers1Year() {
var today = new Date();
var tyyyy = today.getFullYear();
var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var tdd = String(today.getDate()).padStart(2, '0');
var startDay = new Date();
startDay.setFullYear(startDay.getFullYear() - 1);
var syyyy = startDay.getFullYear();
var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0!
var sdd = String(startDay.getDate()).padStart(2, '0');
$('#start_datepicker').datepicker('update', syyyy + "-" + smm + "-" + sdd);
$('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd);
}
function copyToClipboard() { function copyToClipboard() {
@@ -157,16 +207,16 @@ function makeMouseAppSubjectList(appList) {
if(appData.koreanName == "") if(appData.koreanName == "")
continue; continue;
addSubjectListItem("#mouse_app_subject_list", appData.appID, appData.koreanName); addSubjectListItem("#mouse_app_subject_list", appData.appID, appData.koreanName);
} }
} }
function addSubjectListItem(subjectListID, appID, appName) { function addSubjectListItem(subjectListID, appID, appName) {
$(subjectListID).append('\ $(subjectListID).append('\
<div class="form-check form-check-inline">\ <div class="form-check form-check-inline">\
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="' <input class="form-check-input" type="radio" name="subject_group" id="record_'
+ appID + '" \value="option1">\ + appID + '" + " value="' + appID + '">\
<label class="form-check-label" for="inlineRadio1">' + appName + '</label>\ <label class="form-check-label" for="record_' + appID + '">' + appName + '</label>\
</div>\ </div>\
'); ');
} }
@@ -174,13 +224,45 @@ function addSubjectListItem(subjectListID, appID, appName) {
function addSubjectBundleItem(subjectListID, appID, appName) { function addSubjectBundleItem(subjectListID, appID, appName) {
$(subjectListID).append('\ $(subjectListID).append('\
<div class="form-check form-check-inline">\ <div class="form-check form-check-inline">\
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="' <input class="form-check-input" type="radio" name="subject_group" id="record_'
+ appID + '" \value="option1">\ + appID + '" + " value="' + appID + '">\
<label class="form-check-label text-success" for="inlineRadio1">' + appName + '</label>\ <label class="form-check-label text-success" for="record_' + appID + '">' + appName + '</label>\
</div>\ </div>\
'); ');
} }
function requestPlayerRecordList() {
var startDate = $("#start_date").val();
var endDate = $("#end_date").val();
// console.log(startDate);
// console.log(endDate);
var playerNameList = $("#player_name").val();
// console.log(playerNameList);
var appID = $(":radio[name='subject_group']:checked").val();
if(typeof(appID) == "undefined")
appID = 0;
// console.log(appID);
sendRequestServer( //url, sendParams, onSuccess, onFail, isDebugMode);
"./../server/record/request_player_record_list.php",
"MaestroID=" + maestroID + "&StartDate=" + startDate + "&EndDate=" + endDate
+ "&PlayerNameList=" + playerNameList + "&AppID=" + appID,
(function(jsonData) {
console.log(jsonData);
}),
(function(errorMessage, errorCode) {
showErrorMessage(errorMessage, "error");
})
);
}
</script> </script>
@@ -208,8 +290,8 @@ function addSubjectBundleItem(subjectListID, appID, appName) {
<div class="form-row align-items-center"> <div class="form-row align-items-center">
<div class="col-auto"> <div class="col-auto">
<div class="input-group input-append date" id="start_datepicker"> <div class="input-group input-append date" id="start_datepicker">
<label class="col-auto col-form-label" for="start_date">검색 시작일</label> <label class="col-auto col-form-label" for="start_date">시작일</label>
<input type="text" id="start_date" class="form-control" aria-describedby="button-date-picker-1" size="16" readonly> <input type="text" id="start_date" class="form-control" aria-describedby="button-date-picker-1" size="12" readonly>
<div class="input-group-append"> <div class="input-group-append">
<button class="add-on btn btn-primary" id="button-date-picker-1"> <button class="add-on btn btn-primary" id="button-date-picker-1">
<span class="oi oi-calendar" title="icon calendar" aria-hidden="true"></span> <span class="oi oi-calendar" title="icon calendar" aria-hidden="true"></span>
@@ -220,8 +302,8 @@ function addSubjectBundleItem(subjectListID, appID, appName) {
<div class="col-auto"> <div class="col-auto">
<div class="input-group input-append date" id="end_datepicker"> <div class="input-group input-append date" id="end_datepicker">
<label class="col-auto col-form-label" for="end_date">검색 종료일</label> <label class="col-auto col-form-label" for="end_date">종료일</label>
<input type="text" id="end_date" class="form-control" aria-describedby="button-date-picker-2" size="16" readonly> <input type="text" id="end_date" class="form-control" aria-describedby="button-date-picker-2" size="12" readonly>
<div class="input-group-append"> <div class="input-group-append">
<button class="add-on btn btn-primary" id="button-date-picker-2"> <button class="add-on btn btn-primary" id="button-date-picker-2">
<span class="oi oi-calendar" title="icon calendar" aria-hidden="true"></span> <span class="oi oi-calendar" title="icon calendar" aria-hidden="true"></span>
@@ -230,6 +312,14 @@ function addSubjectBundleItem(subjectListID, appID, appName) {
</div> </div>
</div> </div>
<div class="col-auto">
<button type="button" class="btn btn-primary" onClick="setDatePickers1Week();">1W</button>
<button type="button" class="btn btn-primary" onClick="setDatePickers1Month();">1M</button>
<button type="button" class="btn btn-primary" onClick="setDatePickers1Year();">1Y</button>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -242,7 +332,7 @@ function addSubjectBundleItem(subjectListID, appID, appName) {
<span class="badge badge-pill badge-info" onClick='showModal("recordPopupModal", "recordPopupContent", "search_record_player_name");' style="cursor: pointer;">?</span> <span class="badge badge-pill badge-info" onClick='showModal("recordPopupModal", "recordPopupContent", "search_record_player_name");' style="cursor: pointer;">?</span>
</label> </label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input"> <input type="text" id="player_name" class="form-control" placeholder="학생 이름을 입력하세요.">
</div> </div>
</div> </div>
@@ -256,55 +346,31 @@ function addSubjectBundleItem(subjectListID, appID, appName) {
<div class="col-sm-10"> <div class="col-sm-10">
<div class="row"> <div class="row">
<label for="time" class="col-sm-2 col-form-label py-0">타자 연습</label> <label for="time" class="col-sm-2 col-form-label py-0">타자 연습</label>
<div id="typing_practice_subject_list" class="col-sm-10"> <div id="typing_practice_subject_list" class="col-sm-10 mb-2">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
<label class="form-check-label" for="inlineRadio1">한글 타자 연습 묶음</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
<label class="form-check-label" for="inlineRadio2">영문 타자 연습 묶음</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
<label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<label for="time" class="col-sm-2 col-form-label py-0">타자 시험</label> <label for="time" class="col-sm-2 col-form-label py-0">타자 시험</label>
<div id="typing_test_subject_list" class="col-sm-10"> <div id="typing_test_subject_list" class="col-sm-10 mb-2">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
<label class="form-check-label" for="inlineRadio1">한글 타자 시험 묶음</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
<label class="form-check-label" for="inlineRadio2">영문 타자 시험 묶음</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
<label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<label for="time" class="col-sm-2 col-form-label py-0">타자 앱</label> <label for="time" class="col-sm-2 col-form-label py-0">타자 앱</label>
<div id="typing_app_subject_list" class="col-sm-10"> <div id="typing_app_subject_list" class="col-sm-10 mb-2">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<label for="time" class="col-sm-2 col-form-label py-0">마우스 앱</label> <label for="time" class="col-sm-2 col-form-label py-0">마우스 앱</label>
<div id="mouse_app_subject_list" class="col-sm-10"> <div id="mouse_app_subject_list" class="col-sm-10 mb-2">
</div> </div>
</div> </div>
<br/> <br/>
<button type="submit" class="btn btn-primary">검색 (50개까지 보기)</button> <button type="button" class="btn btn-primary" onClick="requestPlayerRecordList();">검색 (50개까지 보기)</button>
<button type="submit" class="btn btn-primary" disabled>검색 (모든 데이터 보기)</button> <button type="button" class="btn btn-primary" disabled>검색 (모든 데이터 보기)</button>
</div> </div>
</div> </div>
@@ -0,0 +1,136 @@
<?php
header('Content-Type: application/json');
include "./../lib/send_reply_json.php";
include "./../lib/maestro_account_info.php";
include "./../setup/connect_db.php";
$maestro_id = $_POST["MaestroID"];
$start_date = $_POST["StartDate"];
$end_date = $_POST["EndDate"];
$player_name_list = $_POST["PlayerNameList"];
$app_id = $_POST["AppID"];
// echo "start_date : ".$start_date."\n";
// echo "end_date : ".$end_date."\n";
// echo "app_id : ".$app_id."\n";
// echo "\n";
$replyJSON = null;
$date_statement = makeDateStatement($start_date, $end_date);
$player_name_statement = makePlayerNameStatement($player_name_list);
$subject_statement = makeSubjectSentence($app_id);
// echo "maestro : ".$maestro_id."\n";
// echo "date : ".$date_statement."\n";
// echo "player_name : ".$player_name_statement."\n";
// echo "subject : ".$subject_statement."\n";
$replyJSON = get_player_record_list($maestro_id, $date_statement, $player_name_statement, $subject_statement);
if($replyJSON.length === 0) {
send_error_message($replyJSON, "오늘의 랭킹 기록 없음");
$db_conn->close();
exit;
}
set_data("RecordList", $replyJSON);
send_result_success();
exit;
function makeDateStatement($start_date, $end_date) {
// return " '".$start_date."' < RecordDateTime AND RecordDateTime < '".$end_date."'";
return " '2017-01-01' < RecordDateTime AND RecordDateTime < '".$end_date."'";
}
function makeSubjectSentence($app_id) {
if($app_id == 0)
return "";
$subject_statement = "";
if(is_subject_bundle_item($app_id)) {
switch($app_id) {
case 1000: // korean practice
$subject_statement = $subject_statement." A.AppID < 9";
case 1001: // english practice
$subject_statement = $subject_statement." 10 < A.AppID AND A.AppID < 19";
case 1002: // korean test
$subject_statement = $subject_statement." 20 < A.AppID AND A.AppID < 31";
case 1003: // english test
$subject_statement = $subject_statement." 30 < A.AppID AND A.AppID < 41";
}
}
$subject_statement = $subject_statement." A.AppID = ".$app_id;
return $subject_statement." AND BR.AppID = A.AppID";
}
function makePlayerNameStatement($player_name_list) {
$player_name_statement = "BR.PlayerID = P.PlayerID";
if($player_name_list.length > 0)
$player_name_statement = $player_name_statement." AND P.Name LIKE %".$player_name_list."%";
return $player_name_statement;
}
function is_subject_bundle_item($app_id) {
if($app_id >= 1000)
return true;
return false;
}
function get_player_record_list($maestro_id, $date_statement, $player_name_statement, $subject_statement) {
global $db_conn;
$where_statement = $date_statement;
if(strlen($where_statement) > 0 and strlen($player_name_statement) > 0)
$where_statement = $where_statement." AND ";
$where_statement = $where_statement.$player_name_statement;
if(strlen($where_statement) > 0 and strlen($subject_statement) > 0)
$where_statement = $where_statement." AND ";
$where_statement = $where_statement.$subject_statement;
// echo $where_statement."\n\n";
$query = "
SELECT DATE(BR.RecordDateTime) AS Date, TIME(BR.RecordDateTime) AS Time,
P.Name AS Name, A.KoreanName AS Subject, BR.BestRecord AS Record
FROM best_record BR, player P, App A
WHERE BR.MaestroID = ? AND ".$where_statement."
ORDER BY BR.RecordDateTime ASC;
";
// echo $query;
// return;
$stmt = $db_conn->prepare($query);
$stmt->bind_param('i', $maestro_id);
$stmt->execute();
$stmt->bind_result($date, $time, $player_name, $subject, $record);
$record_array = array();
while($stmt->fetch()) {
$record_date['Date'] = $date;
$record_date['Time'] = $time;
$record_date['PlayerName'] = $player_name;
$record_date['Subject'] = $subject;
$record_date['Record'] = $record;
array_push($record_array, $record_date);
}
$return_array['RecordList'] = $record_array;
// return $return_array;
return $record_array;
}
?>