Add: count record list, search all

This commit is contained in:
2019-03-29 11:23:25 +09:00
parent 5a56144e2c
commit cefd3fc218
2 changed files with 133 additions and 48 deletions
+51 -31
View File
@@ -31,23 +31,25 @@ function initDatePicker() {
language: 'kr' language: 'kr'
}); });
var today = new Date(); setDatePickersForMonths(3);
var yyyy = today.getFullYear();
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var dd = String(today.getDate()).padStart(2, '0');
$('#start_datepicker').datepicker('update', yyyy + "-" + mm + "-" + dd); // var today = new Date();
$('#end_datepicker').datepicker('update', yyyy + "-" + mm + "-" + dd); // var yyyy = today.getFullYear();
// var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
// var dd = String(today.getDate()).padStart(2, '0');
// $('#start_datepicker').datepicker('update', yyyy + "-" + mm + "-" + dd);
// $('#end_datepicker').datepicker('update', yyyy + "-" + mm + "-" + dd);
} }
function setDatePickers1Week() { function setDatePickersForWeeks(weeks) {
var today = new Date(); var today = new Date();
var tyyyy = today.getFullYear(); var tyyyy = today.getFullYear();
var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var tdd = String(today.getDate()).padStart(2, '0'); var tdd = String(today.getDate()).padStart(2, '0');
var startDay = new Date(); var startDay = new Date();
startDay.setDate(startDay.getDate() - 7); startDay.setDate(startDay.getDate() - 7 * weeks);
var syyyy = startDay.getFullYear(); var syyyy = startDay.getFullYear();
var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0! var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0!
var sdd = String(startDay.getDate()).padStart(2, '0'); var sdd = String(startDay.getDate()).padStart(2, '0');
@@ -56,14 +58,14 @@ function setDatePickers1Week() {
$('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd); $('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd);
} }
function setDatePickers1Month() { function setDatePickersForMonths(months) {
var today = new Date(); var today = new Date();
var tyyyy = today.getFullYear(); var tyyyy = today.getFullYear();
var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var tdd = String(today.getDate()).padStart(2, '0'); var tdd = String(today.getDate()).padStart(2, '0');
var startDay = new Date(); var startDay = new Date();
startDay.setMonth(startDay.getMonth() - 1); startDay.setMonth(startDay.getMonth() - months);
var syyyy = startDay.getFullYear(); var syyyy = startDay.getFullYear();
var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0! var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0!
var sdd = String(startDay.getDate()).padStart(2, '0'); var sdd = String(startDay.getDate()).padStart(2, '0');
@@ -72,14 +74,14 @@ function setDatePickers1Month() {
$('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd); $('#end_datepicker').datepicker('update', tyyyy + "-" + tmm + "-" + tdd);
} }
function setDatePickers1Year() { function setDatePickersForYears(years) {
var today = new Date(); var today = new Date();
var tyyyy = today.getFullYear(); var tyyyy = today.getFullYear();
var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! var tmm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var tdd = String(today.getDate()).padStart(2, '0'); var tdd = String(today.getDate()).padStart(2, '0');
var startDay = new Date(); var startDay = new Date();
startDay.setFullYear(startDay.getFullYear() - 1); startDay.setFullYear(startDay.getFullYear() - years);
var syyyy = startDay.getFullYear(); var syyyy = startDay.getFullYear();
var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0! var smm = String(startDay.getMonth() + 1).padStart(2, '0'); //January is 0!
var sdd = String(startDay.getDate()).padStart(2, '0'); var sdd = String(startDay.getDate()).padStart(2, '0');
@@ -233,12 +235,24 @@ function addSubjectBundleItem(subjectListID, appID, appName) {
function requestPlayerRecordList() { function requestPlayerRecordList() {
getPlayerRecordList(50);
$("#search_all").removeClass("disabled");
}
function requestPlayerRecordListAll() {
getPlayerRecordList(0);
}
function getPlayerRecordList(limitCount) {
var startDate = $("#start_date").val(); var startDate = $("#start_date").val();
var endDate = $("#end_date").val(); var endDate = $("#end_date").val();
// console.log(startDate); // console.log(startDate);
// console.log(endDate); // console.log(endDate);
var playerNameList = $("#player_name").val(); var playerNameList = $("#player_name_list").val();
// console.log("player name list");
// console.log($("player_name_list"));
// console.log(playerNameList); // console.log(playerNameList);
var appID = $(":radio[name='subject_group']:checked").val(); var appID = $(":radio[name='subject_group']:checked").val();
@@ -249,10 +263,11 @@ function requestPlayerRecordList() {
sendRequestServer( //url, sendParams, onSuccess, onFail, isDebugMode); sendRequestServer( //url, sendParams, onSuccess, onFail, isDebugMode);
"./../server/record/request_player_record_list.php", "./../server/record/request_player_record_list.php",
"MaestroID=" + maestroID + "&StartDate=" + startDate + "&EndDate=" + endDate "MaestroID=" + maestroID + "&StartDate=" + startDate + "&EndDate=" + endDate
+ "&PlayerNameList=" + playerNameList + "&AppID=" + appID, + "&PlayerNameList=" + playerNameList + "&AppID=" + appID + "&LimitCount=" + limitCount,
(function(jsonData) { (function(jsonData) {
// console.log(jsonData); // console.log(jsonData);
showRecordCount(jsonData);
makeRecordTableContent(jsonData["RecordList"]); makeRecordTableContent(jsonData["RecordList"]);
}), }),
@@ -264,6 +279,16 @@ function requestPlayerRecordList() {
} }
function showRecordCount(jsonData) {
$("#record_count").empty();
var count = jsonData["RecordList"].length;
$("#record_count").append(
'<span class="text-info">표시 : ' + count + '개 / 총 : ' + count + '개</span>'
);
}
function makeRecordTableContent(recordList) { function makeRecordTableContent(recordList) {
$("#record_table_content").empty(); $("#record_table_content").empty();
@@ -272,23 +297,17 @@ function makeRecordTableContent(recordList) {
return; return;
} }
console.log(recordList); // console.log(recordList);
for(var i = 0; i < recordList.length; i++) { for(var i = 0; i < recordList.length; i++) {
var recordData = recordList[i]; var record = recordList[i];
addRecordListItem( addRecordListItem(record.Date, record.Time, record.PlayerName, record.Subject, record.Record);
recordData.Date,
recordData.Time,
recordData.PlayerName,
recordData.Subject,
recordData.Record
);
} }
} }
function showNoResultContent() { function showNoResultContent() {
$("#record_table_content").append('\ $("#record_table_content").append('\
<tr>\ <tr>\
<th scope="row" colspan="5">데이터가 없습니다.</th>\ <th scope="row" class="table-warning text-center" colspan="5">데이터가 없습니다.</th>\
</tr>\ </tr>\
'); ');
} }
@@ -356,9 +375,9 @@ function addRecordListItem($date, $time, $name, $subject, $record) {
<div class="col-auto"> <div class="col-auto">
<button type="button" class="btn btn-primary" onClick="setDatePickers1Week();">1W</button> <button type="button" class="btn btn-primary" onClick="setDatePickersForWeeks(1);">1W</button>
<button type="button" class="btn btn-primary" onClick="setDatePickers1Month();">1M</button> <button type="button" class="btn btn-primary" onClick="setDatePickersForMonths(1);">1M</button>
<button type="button" class="btn btn-primary" onClick="setDatePickers1Year();">1Y</button> <button type="button" class="btn btn-primary" onClick="setDatePickersForYears(1);">1Y</button>
</div> </div>
@@ -374,7 +393,7 @@ function addRecordListItem($date, $time, $name, $subject, $record) {
<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" id="player_name" class="form-control" placeholder="학생 이름을 입력하세요."> <input type="text" id="player_name_list" class="form-control" placeholder="학생 이름을 입력하세요.">
</div> </div>
</div> </div>
@@ -412,7 +431,7 @@ function addRecordListItem($date, $time, $name, $subject, $record) {
<br/> <br/>
<button type="button" class="btn btn-primary" onClick="requestPlayerRecordList();">검색 (50개까지 보기)</button> <button type="button" class="btn btn-primary" onClick="requestPlayerRecordList();">검색 (50개까지 보기)</button>
<button type="button" class="btn btn-primary" disabled>검색 (모든 데이터 보기)</button> <button type="button" id="search_all" class="btn btn-primary disabled" onClick="requestPlayerRecordListAll();">검색 (모든 데이터 보기)</button>
</div> </div>
</div> </div>
@@ -427,8 +446,9 @@ function addRecordListItem($date, $time, $name, $subject, $record) {
<button type="button" class="btn btn-primary" onClick="copyToClipboard();">표 내용을 클립보드에 복사</button> <button type="button" class="btn btn-primary" onClick="copyToClipboard();">표 내용을 클립보드에 복사</button>
<span class="badge badge-pill badge-info" onClick='showModal("recordPopupModal", "recordPopupContent", "search_record_copy_result_to_clipboard");' style="cursor: pointer;">?</span> <span class="badge badge-pill badge-info" onClick='showModal("recordPopupModal", "recordPopupContent", "search_record_copy_result_to_clipboard");' style="cursor: pointer;">?</span>
</div> </div>
<div class="col-auto"> <div id="record_count" class="col-auto">
<button type="button" class="btn btn-primary" disabled>표 내용을 엑셀 파일로 다운로드</button> <span>표시 : 0개 / 총 : 0개</span>
<!-- <button type="button" class="btn btn-primary" disabled>표 내용을 엑셀 파일로 다운로드</button> -->
</div> </div>
</div> </div>
@@ -10,31 +10,34 @@ $start_date = $_POST["StartDate"];
$end_date = $_POST["EndDate"]; $end_date = $_POST["EndDate"];
$player_name_list = $_POST["PlayerNameList"]; $player_name_list = $_POST["PlayerNameList"];
$app_id = $_POST["AppID"]; $app_id = $_POST["AppID"];
$limit_count = $_POST["LimitCount"];
// echo "start_date : ".$start_date."\n"; // echo "start_date : ".$start_date."\n";
// echo "end_date : ".$end_date."\n"; // echo "end_date : ".$end_date."\n";
// echo "player_name_list : ".$player_name_list."\n";
// echo "app_id : ".$app_id."\n"; // echo "app_id : ".$app_id."\n";
// echo "limit_count : ".$limit_count."\n";
// echo "\n"; // echo "\n";
$replyJSON = null;
$date_statement = makeDateStatement($start_date, $end_date); $date_statement = makeDateStatement($start_date, $end_date);
$player_name_statement = makePlayerNameStatement($player_name_list); $player_name_statement = makePlayerNameStatement($player_name_list);
$subject_statement = makeSubjectSentence($app_id); $subject_statement = makeSubjectSentence($app_id);
// echo "maestro : ".$maestro_id."\n"; // echo "maestro : ".$maestro_id."\n";
// echo "date : ".$date_statement."\n"; // echo "date : ".$date_statement."\n";
// echo "player_name : ".$player_name_statement."\n"; // echo "player_name : ".$player_name_statement."\n";
// echo "subject : ".$subject_statement."\n"; // echo "subject : ".$subject_statement."\n";
$where_statement = make_where_statement($date_statement, $player_name_statement, $subject_statement);
$recordCount = get_player_record_count($maestro_id, $where_statement, $limit_count);
$replyJSON = get_player_record_list($maestro_id, $date_statement, $player_name_statement, $subject_statement); $recordTotalCount = get_player_record_total_count($maestro_id, $where_statement);
$replyJSON = get_player_record_list($maestro_id, $where_statement, $limit_count);
if($replyJSON.length === 0) { if($replyJSON.length === 0) {
send_error_message($replyJSON, "오늘의 랭킹 기록 없음"); send_error_message($replyJSON, "오늘의 랭킹 기록 없음");
$db_conn->close(); $db_conn->close();
exit; exit;
} }
set_data("RecordCount", $recordCount);
set_data("RecordList", $replyJSON); set_data("RecordList", $replyJSON);
send_result_success(); send_result_success();
exit; exit;
@@ -55,27 +58,32 @@ function makeSubjectSentence($app_id) {
if(is_subject_bundle_item($app_id)) { if(is_subject_bundle_item($app_id)) {
switch($app_id) { switch($app_id) {
case 1000: // korean practice case 1000: // korean practice
$subject_statement = $subject_statement." A.AppID < 9"; $subject_statement = $subject_statement."A.AppID < 9";
break;
case 1001: // english practice case 1001: // english practice
$subject_statement = $subject_statement." 10 < A.AppID AND A.AppID < 19"; $subject_statement = $subject_statement."10 < A.AppID AND A.AppID < 19";
break;
case 1002: // korean test case 1002: // korean test
$subject_statement = $subject_statement." 20 < A.AppID AND A.AppID < 31"; $subject_statement = $subject_statement."20 < A.AppID AND A.AppID < 31";
break;
case 1003: // english test case 1003: // english test
$subject_statement = $subject_statement." 30 < A.AppID AND A.AppID < 41"; $subject_statement = $subject_statement."30 < A.AppID AND A.AppID < 41";
break;
} }
} else {
$subject_statement = $subject_statement."A.AppID = ".$app_id;
} }
$subject_statement = $subject_statement." A.AppID = ".$app_id;
return $subject_statement." AND BR.AppID = A.AppID"; return $subject_statement." AND BR.AppID = A.AppID";
} }
function makePlayerNameStatement($player_name_list) { function makePlayerNameStatement($player_name_list) {
$player_name_statement = "BR.PlayerID = P.PlayerID"; $player_name_statement = "BR.PlayerID = P.PlayerID";
if($player_name_list.length > 0) if(strlen($player_name_list) > 0)
$player_name_statement = $player_name_statement." AND P.Name LIKE %".$player_name_list."%"; $player_name_statement = $player_name_statement." AND P.Name LIKE '%".$player_name_list."%'";
return $player_name_statement; return $player_name_statement;
} }
@@ -88,28 +96,85 @@ function is_subject_bundle_item($app_id) {
return false; return false;
} }
function get_player_record_list($maestro_id, $date_statement, $player_name_statement, $subject_statement) { function make_where_statement($date_statement, $player_name_statement, $subject_statement) {
global $db_conn; // add date condition
$where_statement = $date_statement; $where_statement = $date_statement;
if(strlen($where_statement) > 0 and strlen($player_name_statement) > 0) if(strlen($where_statement) > 0 and strlen($player_name_statement) > 0)
$where_statement = $where_statement." AND "; $where_statement = $where_statement." AND ";
// add player name condition
$where_statement = $where_statement.$player_name_statement; $where_statement = $where_statement.$player_name_statement;
// add subject condition
if(strlen($where_statement) > 0 and strlen($subject_statement) > 0) if(strlen($where_statement) > 0 and strlen($subject_statement) > 0)
$where_statement = $where_statement." AND "; $where_statement = $where_statement." AND ";
$where_statement = $where_statement.$subject_statement; $where_statement = $where_statement.$subject_statement;
// echo $where_statement."\n\n"; // echo $where_statement."\n\n";
return $where_statement;
}
function get_player_record_count($maestro_id, $where_statement, $limit_count) {
global $db_conn;
$query = "
SELECT COUNT(*)
FROM best_record BR, player P, App A
WHERE BR.MaestroID = ? AND ".$where_statement."
";
if($limit_count > 0)
$query = $query." LIMIT ".$limit_count;
// echo $query;
// return;
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $maestro_id);
$stmt->execute();
$stmt->bind_result($record_count);
$stmt->fetch();
$stmt->close();
return $record_count;
}
function get_player_record_total_count($maestro_id, $where_statement) {
global $db_conn;
$query = "
SELECT COUNT(*)
FROM best_record BR, player P, App A
WHERE BR.MaestroID = ? AND ".$where_statement."
";
// echo $query;
// return;
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $maestro_id);
$stmt->execute();
$stmt->bind_result($record_count);
$stmt->fetch();
$stmt->close();
return $record_count;
}
function get_player_record_list($maestro_id, $where_statement, $limit_count) {
global $db_conn;
$query = " $query = "
SELECT DATE(BR.RecordDateTime) AS Date, TIME(BR.RecordDateTime) AS Time, SELECT DATE(BR.RecordDateTime) AS Date, TIME(BR.RecordDateTime) AS Time,
P.Name AS Name, A.KoreanName AS Subject, BR.BestRecord AS Record P.Name AS Name, A.KoreanName AS Subject, BR.BestRecord AS Record
FROM best_record BR, player P, App A FROM best_record BR, player P, App A
WHERE BR.MaestroID = ? AND ".$where_statement." WHERE BR.MaestroID = ? AND ".$where_statement."
ORDER BY BR.RecordDateTime ASC; ORDER BY BR.RecordDateTime ASC
"; ";
if($limit_count > 0)
$query = $query." LIMIT ".$limit_count;
// echo $query; // echo $query;
// return; // return;
@@ -127,7 +192,7 @@ function get_player_record_list($maestro_id, $date_statement, $player_name_state
$record_date['Record'] = $record; $record_date['Record'] = $record;
array_push($record_array, $record_date); array_push($record_array, $record_date);
} }
$return_array['RecordList'] = $record_array; // $return_array['RecordList'] = $record_array;
// return $return_array; // return $return_array;
return $record_array; return $record_array;