학생 기록 삭제 기능 추가

- 기록 삭제시 highest_record 최고 기록도 갱신
This commit is contained in:
2024-09-15 08:41:01 +09:00
parent b50643a3e2
commit 6b671f8881
5 changed files with 454 additions and 12 deletions
+59 -6
View File
@@ -182,7 +182,9 @@ function makeTypingAppSubjectList(appList) {
for(var i = 0; i < appList.length; i++) {
var appData = appList[i];
if(appData.appID < 50)
if(appData.appID == 200) // 긴 글 시험
continue;
else if(appData.appID < 50) // 손가락 연습, 단어/문장 연습
continue;
else if(appData.koreanName == "")
continue;
@@ -269,7 +271,7 @@ function getPlayerRecordList(limitCount) {
+ "&AppID=" + appID + "&LimitCount=" + limitCount,
(function(jsonData) {
// console.log(jsonData);
console.log(jsonData);
showRecordCount(jsonData);
makeRecordTableContent(jsonData["RecordList"]);
}),
@@ -303,43 +305,92 @@ function makeRecordTableContent(recordList) {
// console.log(recordList);
for(var i = 0; i < recordList.length; i++) {
var record = recordList[i];
addRecordListItem(record.Date, record.Time, record.PlayerName, record.Subject, record.Record);
addRecordListItem(record.Id, record.Date, record.Time, record.PlayerName, record.Subject, record.Record);
}
}
function showNoResultContent() {
$("#record_table_content").empty();
$("#record_table_content").append('\
<tr>\
<th scope="row" class="table-warning text-center" colspan="5">데이터가 없습니다.</th>\
<th scope="row" class="table-warning text-center" colspan="6">데이터가 없습니다.</th>\
</tr>\
');
}
function addRecordListItem(date, time, name, subject, record) {
function addRecordListItem(id, date, time, name, subject, record) {
if(record >= 0) {
$("#record_table_content").append('\
<tr>\
<td class="text-center d-none">' + id + '</td>\
<th scope="row" class="text-center">' + date + '</th>\
<td class="text-center">' + time + '</td>\
<td class="text-center">' + name + '</td>\
<td class="text-center">' + subject + '</td>\
<td class="text-right">' + record + '</td>\
<td class="text-center"><button class="btn btn-danger" type="button" onClick="deleteRecord(this)"> X </button></td>\
</tr>\
');
} else {
var disqualificationRecord = -1 * record;
$("#record_table_content").append('\
<tr>\
<td class="text-center d-none">' + id + '</td>\
<th scope="row" class="text-center">' + date + '</th>\
<td class="text-center">' + time + '</td>\
<td class="text-center">' + name + '</td>\
<td class="text-center">' + subject + '</td>\
<td class="text-right text-danger">(아깝) ' + disqualificationRecord + '</td>\
<td class="text-center"><button class="btn btn-danger" type="button" onClick="deleteRecord(this)"> X </button></td>\
</tr>\
');
}
}
function deleteRecord(target) {
console.log(target);
var id = $(target).parent().siblings().eq(0).text();
var date = $(target).parent().siblings().eq(1).text();
var time = $(target).parent().siblings().eq(2).text();
var name = $(target).parent().siblings().eq(3).text();
var subject = $(target).parent().siblings().eq(4).text();
var record = $(target).parent().siblings().eq(5).text();
var message = "선택한 기록을 삭제하시겠습니까?\n"
+ "(경고: 기록을 삭제한 후에는 되살릴 수 없습니다)\n\n"
+ "* 날짜: " + date + "\n"
+ "* 시간: " + time + "\n"
+ "* 이름: " + name + "\n"
+ "* 과목: " + subject + "\n"
+ "* 기록: " + record;
if (confirm(message)) {
console.log("delete record: " + id);
var appID = $(":radio[name='subject_group']:checked").val();
if(typeof(appID) == "undefined") {
showErrorMessage("검색할 과목을 선택하세요.");
return false;
}
sendRequestServer( //url, sendParams, onSuccess, onFail, isDebugMode);
"./../server/record/delete_record.php",
"MaestroID=" + maestroID
+ "&AppID=" + appID
+ "&BestRecordID=" + id,
(function(jsonData) {
console.log(jsonData);
requestPlayerRecordListAll();
}),
(function(errorMessage, errorCode) {
showErrorMessage(errorMessage, "error");
})
);
}
}
</script>
@@ -491,17 +542,19 @@ function addRecordListItem(date, time, name, subject, record) {
<table class="table table-striped" id="dataTable">
<thead class="thead-dark">
<tr>
<th scope="col" class="text-center d-none">RecordID</th>
<th scope="col" class="text-center">날짜</th>
<th scope="col" class="text-center">시간</th>
<th scope="col" class="text-center">이름</th>
<th scope="col" class="text-center">과목</th>
<th scope="col" class="text-center">점수</th>
<th scope="col" class="text-center">기록 삭제</th>
</tr>
</thead>
<tbody id="record_table_content">
<tr>
<th scope="row" class="table-warning text-center" colspan="5">데이터가 없습니다.</th>
<th scope="row" class="table-warning text-center" colspan="6">데이터가 없습니다.</th>
</tr>
</tbody>
+386
View File
@@ -0,0 +1,386 @@
<?php
header('Content-Type: application/json');
$maestro_id = $_POST["MaestroID"];
$selected_app_id = $_POST["AppID"];
$best_record_id = $_POST["BestRecordID"];
include "./../lib/send_reply_json.php";
include "./../setup/connect_db.php";
include "./../lib/app_highest_record.php";
include "./../lib/util_app.php";
function sendSuccessReplyForTest() {
global $db_conn;
global $maestro_id;
global $selected_app_id;
global $best_record_id;
set_data("maestro_id", $maestro_id);
set_data("selected_app_id", $selected_app_id);
set_data("best_record_id", $best_record_id);
send_result_success();
$db_conn->close();
exit;
}
//sendSuccessReplyForTest();
// 앱 종류에 따라
if($selected_app_id == 3000) { // 자격증 타이머
// 기록 삭제 : license_score
$deletedRecordCount = delete_license_score($best_record_id);
if($deletedRecordCount < 1) {
sendErrorMessageAndExit("자격증 타이머 기록 삭제 실패");
}
} else if($selected_app_id == 1004 || $selected_app_id == 1005) { // 긴글 (시험)
$record_info_array = get_typing_exam_record_info($best_record_id);
$player_id = $record_info_array["PlayerID"];
$writing_id = $record_info_array["WritingID"];
if($player_id === null || $writing_id === null) {
sendErrorMessageAndExit("긴글 (시험) 기록 오류");
}
// 기록 삭제 : typing_exam_record
$deletedRecordCount = delete_typing_exam_record($best_record_id);
if($deletedRecordCount < 1) {
sendErrorMessageAndExit("긴글 (시험) 기록 삭제 실패");
}
// typing_exam_highest_record 업데이트
updateTypingExamHighestRecord($maestro_id, $player_id, $writing_id);
}
else { // 일반 앱
$record_info_array = get_best_record_info($best_record_id);
$player_id = $record_info_array["PlayerID"];
$app_id = $record_info_array["AppID"];
if($player_id === null || $app_id === null) {
sendErrorMessageAndExit("기록 오류");
}
// 기록 삭제 : best_record
$deletedRecordCount = delete_best_record($best_record_id);
if($deletedRecordCount < 1) {
sendErrorMessageAndExit("기록 삭제 실패");
}
// app_highest_record 업데이트
updateAppHighestRecord($maestro_id, $player_id, $app_id);
}
set_data("message", "기록 삭제 성공");
send_result_success();
$db_conn->close();
exit;
function sendErrorMessageAndExit($message) {
global $db_conn;
set_error_message($message);
send_result_fail();
$db_conn->close();
exit;
}
function updateTypingExamHighestRecord($maestro_id, $player_id, $writing_id) {
global $db_conn;
$record_info_array = get_typing_exam_best_record_info($maestro_id, $player_id, $writing_id);
$record = $record_info_array["Record"];
$record_date_time = $record_info_array["RecordDateTime"];
if ($record === null || $record_date_time === null) {
delete_typing_exam_highest_record($maestro_id, $player_id, $writing_id);
return;
}
$highest_record_id = get_typing_exam_highest_record_id($maestro_id, $player_id, $writing_id);
if ($highest_record_id !== null && $highest_record_id > 0) {
update_typing_exam_highest_record($highest_record_id, $record, $record_date_time);
} else {
insert_new_typing_exam_highest_record($maestro_id, $player_id, $writing_id, $record, $record_date_time);
}
}
function updateAppHighestRecord($maestro_id, $player_id, $app_id) {
$record_info_array = get_best_record_record_info($maestro_id, $player_id, $app_id);
$best_record = $record_info_array["BestRecord"];
$record_date_time = $record_info_array["RecordDateTime"];
if ($best_record === null || $record_date_time === null) {
delete_app_highest_record($maestro_id, $player_id, $app_id);
return;
}
$highest_record_id = get_app_highest_record_id($maestro_id, $player_id, $app_id);
if ($highest_record_id !== null && $highest_record_id > 0) {
update_app_highest_record($highest_record_id, $best_record, $record_date_time);
} else {
insert_new_app_highest_record($maestro_id, $player_id, $app_id, $best_record, $record_date_time);
}
}
function delete_license_score($best_record_id) {
global $db_conn;
$query = "
DELETE FROM license_score
WHERE LicenseScoreID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $best_record_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function get_typing_exam_record_info($best_record_id) {
global $db_conn;
$query = "
SELECT PlayerID, WritingID
FROM typing_exam_record
WHERE TypingExamRecordID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $best_record_id);
$stmt->execute();
$stmt->bind_result($player_id, $writing_id);
$stmt->fetch();
$stmt->close();
return array("PlayerID" => $player_id, "WritingID" => $writing_id);
}
function delete_typing_exam_record($best_record_id) {
global $db_conn;
$query = "
DELETE FROM typing_exam_record
WHERE TypingExamRecordID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $best_record_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function get_typing_exam_best_record_info($maestro_id, $player_id, $writing_id) {
global $db_conn;
$query = "
SELECT Record, RecordDateTime
FROM typing_exam_record
WHERE MaestroID = ? AND PlayerID = ? AND WritingID = ? AND Record > 0
ORDER BY Record DESC
LIMIT 1
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $player_id, $writing_id);
$stmt->execute();
$stmt->bind_result($record, $record_date_time);
$stmt->fetch();
$stmt->close();
return array("Record" => $record, "RecordDateTime" => $record_date_time);
}
function get_typing_exam_highest_record_id($maestro_id, $player_id, $writing_id) {
global $db_conn;
$query = "
SELECT TypingExamHighestRecordID
FROM typing_exam_highest_record
WHERE MaestroID = ? AND PlayerID = ? AND WritingID = ? AND HighestRecord > 0
ORDER BY HighestRecord DESC
LIMIT 1
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $player_id, $writing_id);
$stmt->execute();
$stmt->bind_result($new_best_record_id);
$stmt->fetch();
$stmt->close();
return $new_best_record_id;
}
function delete_typing_exam_highest_record($maestro_id, $player_id, $writing_id)
{
global $db_conn;
$query = "
DELETE FROM typing_exam_highest_record
WHERE MaestroID = ? AND PlayerID = ? AND WritingID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $player_id, $writing_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function update_typing_exam_highest_record($highest_record_id, $record, $record_date_time) {
global $db_conn;
$query = "
UPDATE typing_exam_highest_record
SET HighestRecord = ?, RecordDateTime = ?
WHERE TypingExamHighestRecordID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("dsi", $record, $record_date_time, $highest_record_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function insert_new_typing_exam_highest_record($maestro_id, $player_id, $writing_id, $record, $record_date_time) {
global $db_conn;
$query = "
INSERT INTO typing_exam_highest_record (MaestroID, PlayerID, WritingID, HighestRecord, RecordDateTime)
VALUES (?, ?, ?, ?, ?)
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iiids", $maestro_id, $player_id, $writing_id, $record, $record_date_time);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function get_best_record_info($best_record_id) {
global $db_conn;
$query = "
SELECT PlayerID, AppID
FROM best_record
WHERE BestRecordID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $best_record_id);
$stmt->execute();
$stmt->bind_result($player_id, $app_id);
$stmt->fetch();
$stmt->close();
return array("PlayerID" => $player_id, "AppID" => $app_id);
}
function delete_best_record($best_record_id) {
global $db_conn;
$query = "
DELETE FROM best_record
WHERE BestRecordID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("i", $best_record_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function get_best_record_record_info($maestro_id, $player_id, $app_id) {
global $db_conn;
$orderStatement = is_highest_record_prefer_app($app_id) ? "ORDER BY BestRecord DESC" : "ORDER BY BestRecord ASC";
$query = "
SELECT BestRecord, RecordDateTime
FROM best_record
WHERE MaestroID = ? AND PlayerID = ? AND AppID = ?
".$orderStatement."
LIMIT 1
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $player_id, $app_id);
$stmt->execute();
$stmt->bind_result($best_record, $record_date_time);
$stmt->fetch();
$stmt->close();
return array("BestRecord" => $best_record, "RecordDateTime" => $record_date_time);
}
function get_app_highest_record_id($maestro_id, $player_id, $app_id)
{
global $db_conn;
$orderStatement = is_highest_record_prefer_app($app_id) ? "ORDER BY HighestRecord DESC" : "ORDER BY HighestRecord ASC";
$query = "
SELECT AppHighestRecordID
FROM app_highest_record
WHERE MaestroID = ? AND PlayerID = ? AND AppID = ?
".$orderStatement."
LIMIT 1
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $player_id, $app_id);
$stmt->execute();
$stmt->bind_result($highest_record_id);
$stmt->fetch();
$stmt->close();
return $highest_record_id;
}
function delete_app_highest_record($maestro_id, $player_id, $app_id)
{
global $db_conn;
$query = "
DELETE FROM app_highest_record
WHERE MaestroID = ? AND PlayerID = ? AND AppID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $player_id, $app_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function update_app_highest_record($highest_record_id, $record, $record_date_time) {
global $db_conn;
$query = "
UPDATE app_highest_record
SET HighestRecord = ?, RecordDateTime = ?
WHERE AppHighestRecordID = ?
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("dsi", $record, $record_date_time, $highest_record_id);
$result = $stmt->execute();
$stmt->close();
return $result;
}
function insert_new_app_highest_record($maestro_id, $player_id, $app_id, $record, $record_date_time) {
global $db_conn;
$query = "
INSERT INTO app_highest_record (MaestroID, PlayerID, AppID, HighestRecord, RecordDateTime)
VALUES (?, ?, ?, ?, ?)
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param('iiids', $maestro_id, $player_id, $app_id, $record, $record_date_time);
$result = $stmt->execute();
$stmt->close();
return $result;
}
?>
@@ -165,7 +165,7 @@ function get_player_record_list($maestro_id, $where_statement, $limit_count) {
global $db_conn;
$query = "
SELECT DATE(BR.RecordDateTime) AS Date, TIME(BR.RecordDateTime) AS Time,
SELECT BR.BestRecordID AS Id, 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."
@@ -181,10 +181,11 @@ function get_player_record_list($maestro_id, $where_statement, $limit_count) {
$stmt = $db_conn->prepare($query);
$stmt->bind_param('i', $maestro_id);
$stmt->execute();
$stmt->bind_result($date, $time, $player_name, $subject, $record);
$stmt->bind_result($id, $date, $time, $player_name, $subject, $record);
$record_array = array();
while($stmt->fetch()) {
$record_date['Id'] = $id;
$record_date['Date'] = $date;
$record_date['Time'] = $time;
$record_date['PlayerName'] = $player_name;
@@ -167,7 +167,7 @@ function get_player_record_list($maestro_id, $where_statement, $limit_count) {
global $db_conn;
$query = "
SELECT DATE(LS.ScoreDateTime) AS Date, TIME(LS.ScoreDateTime) AS Time,
SELECT LS.LicenseScoreID AS ID, DATE(LS.ScoreDateTime) AS Date, TIME(LS.ScoreDateTime) AS Time,
P.Name AS Name, LS.SubjectName AS Subject, LS.Score AS Record
FROM license_score LS, player P
WHERE LS.MaestroID = ? AND ".$where_statement."
@@ -183,10 +183,11 @@ function get_player_record_list($maestro_id, $where_statement, $limit_count) {
$stmt = $db_conn->prepare($query);
$stmt->bind_param('i', $maestro_id);
$stmt->execute();
$stmt->bind_result($date, $time, $player_name, $subject, $record);
$stmt->bind_result($id, $date, $time, $player_name, $subject, $record);
$record_array = array();
while($stmt->fetch()) {
$record_date['Id'] = $id;
$record_date['Date'] = $date;
$record_date['Time'] = $time;
$record_date['PlayerName'] = $player_name;
@@ -133,7 +133,7 @@ function get_player_record_list($maestro_id, $where_statement, $limit_count) {
global $db_conn;
$query = "
SELECT DATE(TE.RecordDateTime) AS Date, TIME(TE.RecordDateTime) AS Time,
SELECT TE.TypingExamRecordID as Id, DATE(TE.RecordDateTime) AS Date, TIME(TE.RecordDateTime) AS Time,
P.Name AS Name, WR.Name AS Subject, TE.Record AS Record
FROM typing_exam_record TE, player P, writing WR
WHERE TE.MaestroID = ? AND TE.WritingID=WR.WritingID AND TE.PlayerID=P.PlayerID AND ".$where_statement."
@@ -149,10 +149,11 @@ function get_player_record_list($maestro_id, $where_statement, $limit_count) {
$stmt = $db_conn->prepare($query);
$stmt->bind_param('i', $maestro_id);
$stmt->execute();
$stmt->bind_result($date, $time, $player_name, $subject, $record);
$stmt->bind_result($id, $date, $time, $player_name, $subject, $record);
$record_array = array();
while($stmt->fetch()) {
$record_date['Id'] = $id;
$record_date['Date'] = $date;
$record_date['Time'] = $time;
$record_date['PlayerName'] = $player_name;