Files
sam-kd/steelcut/write_form.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

601 lines
19 KiB
PHP

<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/load_GoogleDrive.php'; // 세션 등 여러가지 포함됨 파일 포함
if(!isset($_SESSION["level"]) || $_SESSION["level"]>8) {
sleep(1);
header("Location:" . $WebSite . "login/login_form.php");
exit;
}
include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php';
$mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : '';
$num = isset($_REQUEST["num"]) ? $_REQUEST["num"] : "";
$tablename = isset($_REQUEST["tablename"]) ? $_REQUEST["tablename"] : "";
require_once $_SERVER['DOCUMENT_ROOT'] . '/load_GoogleDriveSecond.php'; // attached, image에 대한 정보 불러오기
$title_message = "절곡 작업 " ;
?>
<title><?=$title_message?></title>
<style>
textarea {
overflow: hidden;
resize: none; /* 사용자 크기 조절을 방지 */
}
/* 기본 스타일 설정 */
input[type="checkbox"],
input[type="radio"] {
transform: scale(1.2); /* 크기 확대 */
margin: 3px; /* 여백 추가 */
}
/* "readonly" 상태일 때 스타일 설정 */
.readonly-checkbox,
.readonly-radio {
pointer-events: none; /* 사용자 상호작용 비활성화 */
opacity: 1; /* 불투명도 설정 */
color: red;
}
label {
font-size: 1.5em; /* 글꼴 크기 확대 */
display: inline-block;
margin: 5px 0;
}
.w-40{
width: 40%!important;
}
.w-60{
width: 60%!important;
}
</style>
</head>
<?php
include $_SERVER['DOCUMENT_ROOT'] . '/mymodal.php';
// 첨부 이미지에 대한 부분
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
$today = date("Y-m-d"); // 현재일자 변수지정
try{
$sql = "select * from $DB.$tablename where num = ? ";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1,$num,PDO::PARAM_STR);
$stmh->execute();
$count = $stmh->rowCount();
$row = $stmh->fetch(PDO::FETCH_ASSOC); // $row 배열로 DB 정보를 불러온다.
if($count<1){
print "검색결과가 없습니다.<br>";
}else{
include $_SERVER['DOCUMENT_ROOT'] . "/output/_row.php";
}
}catch (PDOException $Exception) {
print "오류: ".$Exception->getMessage();
}
// print $bend_state;
$eList = json_decode($estimateList, true);
// 행의 수는 배열의 크기와 동일하므로, count() 함수를 사용하여 구합니다.
if(!empty($eList) and $eList !== '[]')
{
$surang = count($eList);
if($surang > 0 )
$screenorslat = '스크린' ;
}
else {
$eList = json_decode($estimateSlatList, true);
if(!empty($eList) and $eList !== '[]')
{
$surang_slat = count($eList);
if($surang_slat > 0 )
$screenorslat = '철재스라트' ;
}
}
// print '$screenorslat' . $screenorslat;
?>
<form id="board_form" name="board_form" method="post" enctype="multipart/form-data" >
<input type="hidden" id="mode" name="mode" value="<?= isset($mode) ? $mode : '' ?>">
<input type="hidden" id="num" name="num" value="<?= isset($num) ? $num : '' ?>">
<input type="hidden" id="user_name" name="user_name" value="<?= isset($user_name) ? $user_name : '' ?>">
<input type="hidden" id="update_log" name="update_log" value="<?= isset($update_log) ? $update_log : NULL ?>">
<input type="hidden" id="tablename" name="tablename" value="<?= isset($tablename) ? $tablename : '' ?>">
<input type="hidden" id="is_deleted" name="is_deleted" value="<?= isset($is_deleted) ? $is_deleted : '0' ?>">
<input type="hidden" id="screenorslat" name="screenorslat" value="<?= isset($screenorslat) ? $screenorslat : '' ?>">
<div class="container">
<div class="row justify-content-center align-items-center ">
<div class="card align-middle " style="width: 55rem;">
<div class="card-body text-center">
<div class="row d-flex justify-content-center align-items-center mb-3" >
<div class="col-sm-10" >
<div class="d-flex p-1 mb-1 justify-content-center align-items-center ">
<h3> <?=$title_message?> </h3> &nbsp; &nbsp; &nbsp; &nbsp;
<?php if($mode!=='view') { ?>
<button id="saveBtn" class="btn btn-dark btn-sm me-1 " type="button">
<? if((int)$num>0) print ' <i class="bi bi-hdd-fill"></i> 저장'; else print ' <i class="bi bi-hdd-fill"></i> 저장'; ?></button>
<? } ?>
<button type="button" class="btn btn-outline-dark btn-sm me-2" id="showlogBtn" > H
</div>
</div>
<div class="col-sm-2" >
<button type="button" class="btn btn-outline-dark btn-sm " onclick="self.close();" > <i class="bi bi-box-arrow-left"></i> 창닫기 </button> &nbsp;
</div>
</div>
<div class="row text-center justify-content-center">
<span class="text-primary fs-6">
관리자가 아래의 라디오버튼을 클릭하면 상태가 변경됩니다.
</span>
</div>
<div class="row text-center justify-content-center">
<div class="d-flex justify-content-center align-items-center w-75">
<table class="table table-bordered">
<tbody>
<tr class="text-center">
<td class="text-center" style="width:120px;">
<span class="badge bg-dark fs-6">절곡 진행상태</span>
</td>
<td colspan="2" style="width:350px;">
<?php
$states = ["등록", "접수", "제작중", "완료"];
$is_admin = ($user_name === '두진호' || $user_name === '개발자');
?>
<?php foreach ($states as $state): ?>
&nbsp; <?= $state ?>
<input type="radio" class="readonly-radio" name="bend_state" value="<?= $state ?>" <?= ($bend_state === $state) ? "checked" : "" ?> <?= $is_admin ? "" : "readonly" ?> style="pointer-events: <?= $is_admin ? 'auto' : 'none' ?>;">
<?php endforeach; ?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<button id="saveBtn" type="button" style="display:none;"></button>
</div>
</div>
</div>
</div>
<?php include $_SERVER['DOCUMENT_ROOT'] . '/output/common/output_write_form.php'; // 공통으로 들어가는 부분 ?>
</form>
<div class="card align-middle " >
<div class="card-body text-center">
<div class="row text-center justify-content-center">
<div class="d-flex justify-content-center align-items-center w-75">
<button type='button' id="loadBendingWorkBtn_slat" class='btn btn-success-emphasis bg-success-subtle border border-success-subtle rounded-pill btn-sm fw-bold me-2' ><i class="bi bi-card-text"></i> 절곡 작업일지 </button>
<button type='button' id="loadmidInspectBendingBtn_slat" class='btn btn-danger-emphasis bg-danger-subtle border border-danger-subtle rounded-pill btn-sm fw-bold me-2' ><i class="bi bi-card-text"></i> 절곡-중간검사 </button>
</div>
</div>
</div>
</div>
<script>
function captureReturnKey(e) {
if(e.keyCode==13 && e.srcElement.type != 'textarea')
return false;
}
function recaptureReturnKey(e) {
if (e.keyCode==13)
exe_search();
}
function Enter_Check(){
// 엔터키의 코드는 13입니다.
if(event.keyCode == 13){
exe_search(); // 실행할 이벤트
}
}
function exe_search()
{
var postData = changeUri(document.getElementById("outworkplace").value);
var sendData = $(":input:radio[name=root]:checked").val();
$("#displaysearch").show();
if(sendData=='주일')
$("#displaysearch").load("./search.php?mode=search&search=" + postData);
if(sendData=='경동')
$("#displaysearch").load("./searchkd.php?mode=search&search=" + postData);
}
$(document).ready(function() {
$(document).on('click', '.fetch_receiverBtn', function() {
callreceiver();
});
$('#receiver').on('keypress', function(event) {
if (event.keyCode === 13) { // 엔터키의 코드는 13입니다.
callreceiver();
}
});
});
ajaxRequest_write=null;
function callreceiver() {
var search = $('#receiver').val(); // 검색어를 가져옴
console.log("Search term:", search); // 전달되는 값 확인
// AJAX 요청을 통해 데이터 가져오기
if (ajaxRequest_write !== null) {
ajaxRequest_write.abort();
}
ajaxRequest_write = $.ajax({
url: 'fetch_receiver.php',
type: 'POST',
data: { search: search },
dataType: 'json',
success: function(data) {
console.log("Response data:", data); // 서버로부터의 응답을 콘솔에 출력
var tbody = $('#ModalBody');
tbody.empty(); // 기존 데이터를 지움
if (Array.isArray(data) && data.length > 0) {
data.forEach(function(row, index) {
var tr = $('<tr>').append(
$('<td>').addClass('text-center').text(index + 1),
$('<td>').addClass('text-center').html('<a href="#" onclick="intovaltel(\'' + row.phone + '\', \'' + row.receiver + '\'); return false;">' + row.receiver + '</a>'),
$('<td>').addClass('text-center').text(row.phone),
$('<td>').addClass('text-center').text(row.outputplace)
);
tbody.append(tr);
});
} else if (data.length === 0) {
var tr = $('<tr>').append(
$('<td>').attr('colspan', '4').addClass('text-center').text('No data available')
);
tbody.append(tr);
} else {
console.error('Unexpected data format:', data);
var tr = $('<tr>').append(
$('<td>').attr('colspan', '4').addClass('text-center').text('Error loading data')
);
tbody.append(tr);
}
$('#telModal').modal('show'); // 모달 띄우기
},
error: function(jqXHR, textStatus, errorThrown) {
console.error('AJAX request failed:', textStatus, errorThrown);
var tbody = $('#ModalBody');
var tr = $('<tr>').append(
$('<td>').attr('colspan', '4').addClass('text-center').text('Error loading data')
);
tbody.append(tr);
}
});
}
</script>
<script>
// 페이지 로딩
$(document).ready(function(){
var loader = document.getElementById('loadingOverlay');
loader.style.display = 'none';
});
</script>
<script>
var mode = '<?php echo $mode; ?>';
var ajaxRequest_write = null;
</script>
<script>
var dataTable; // DataTables 인스턴스 전역 변수
var feeviewpageNumber; // 현재 페이지 번호 저장을 위한 전역 변수
var ajaxRequest_write = null;
$(document).ready(function() {
// DataTables 초기 설정
dataTable = $('#myTable').DataTable({
"paging": true,
"ordering": true,
"searching": true,
"pageLength": 500,
"lengthMenu": [25, 50, 100, 200, 500, 1000],
"language": {
"lengthMenu": "Show _MENU_ entries",
"search": "Live Search:"
},
"order": [[0, 'asc']]
});
// 페이지 번호 복원 (초기 로드 시)
var savedPageNumber = getCookie('feeviewpageNumber');
if (savedPageNumber) {
dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
}
// 페이지 변경 이벤트 리스너
dataTable.on('page.dt', function() {
var feeviewpageNumber = dataTable.page.info().page + 1;
setCookie('feeviewpageNumber', feeviewpageNumber, 10); // 쿠키에 페이지 번호 저장
});
// 페이지 길이 셀렉트 박스 변경 이벤트 처리
$('#myTable_length select').on('change', function() {
var selectedValue = $(this).val();
dataTable.page.len(selectedValue).draw(); // 페이지 길이 변경 (DataTable 파괴 및 재초기화 없이)
// 변경 후 현재 페이지 번호 복원
savedPageNumber = getCookie('feeviewpageNumber');
if (savedPageNumber) {
dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
}
});
});
function restorePageNumber() {
var savedPageNumber = getCookie('feeviewpageNumber');
// if (savedPageNumber) {
// dataTable.page(parseInt(savedPageNumber) - 1).draw('page');
// }
location.reload(true);
}
$(document).ready(function() {
$("input[name='bend_state']").change(function() {
if ($(this).is(":checked")) {
$("#saveBtn").click();
}
});
$("#saveBtn").click(function() {
var form = $('#board_form')[0];
var data = new FormData(form);
// Log the form data to the console for debugging
for (var pair of data.entries()) {
console.log(pair[0] + ': ' + pair[1]);
}
Fninsert();
});
// 화면이 시작된 후
hideOverlay();
});
function Fninsert() {
// $("#mode").val('modify');
// 폼데이터 전송시 사용함 Get form
var form = $('#board_form')[0];
// Create an FormData object
var data = new FormData(form);
// Iterate over the FormData entries and log them
for (var pair of data.entries()) {
console.log(pair[0] + ': ' + pair[1]);
}
$("button").prop("disabled", true); // 모든 버튼 비활성화
showMsgModal(2); // 파일저장중
if ((typeof ajaxRequest_write !== 'undefined' && ajaxRequest_write) || ajaxRequest_write !== null) {
ajaxRequest_write.abort();
}
ajaxRequest_write = $.ajax({
enctype: 'multipart/form-data', // file을 서버에 전송하려면 이렇게 해야 함 주의
processData: false,
contentType: false,
cache: false,
timeout: 600000,
url: "insert.php",
type: "post",
data: data,
dataType: "json",
success: function(data) {
// console.log(data);
console.log(data.num);
setTimeout(function() {
if (window.opener && !window.opener.closed) {
if (typeof window.opener.restorePageNumber === 'function') {
hideMsgModal();
window.opener.restorePageNumber(); // 함수가 있으면 실행
}
}
setTimeout(function() {
if (data && data.num) {
hideMsgModal();
// 저장된 데이터 번호를 사용하여 새로운 페이지로 이동
window.location.href = 'write_form.php?mode=view&tablename=' + $('#tablename').val() + '&num=' + data.num;
}
}, 1000);
}, 1500);
},
error: function(jqxhr, status, error) {
console.log(jqxhr, status, error);
hideMsgModal();
}
});
}
</script>
<!-- mode == 'view' 조회 화면일때 사용금지 시키는 구문 -->
<script>
$(document).ready(function() {
var mode = '<?php echo $mode; ?>';
if (mode === 'view') {
$('input, textarea').prop('readonly', true); // Disable all input, textarea, and select elements
$('input[type=hidden]').prop('readonly', false);
$('.viewon').prop('readonly', true);
$('.viewNoBtn').prop('readonly', true);
$('input[type=hidden]').prop('readonly', false);
$('.viewon').each(function() {
$(this).addClass('readonly-checkbox readonly-radio');
});
$('input[type=file]').prop('disabled', true);
$('label').css('font-size', '1.2em');
// select 속성 readonly 효과 내기
$('select[data-readonly="true"]').on('mousedown', function(event) {
event.preventDefault();
});
// checkbox 속성 readonly 효과 내기
$('input[type="checkbox"][data-readonly="true"]').on('click', function(event) {
event.preventDefault();
});
}
});
</script>
<script>
function adjustTextareaHeight(textarea) {
textarea.style.height = 'auto';
textarea.style.height = (textarea.scrollHeight) + 'px';
}
$(document).ready(function() {
var $comment = $('#comment');
if ($comment.length) {
adjustTextareaHeight($comment[0]); // 초기 높이 조정
$comment.on('input', function() {
adjustTextareaHeight(this);
});
}
var $updatecomment = $('#updatecomment');
if ($updatecomment.length) {
adjustTextareaHeight($updatecomment[0]); // 초기 높이 조정
$updatecomment.on('input', function() {
adjustTextareaHeight(this);
});
}
});
$(document).ready(function() {
// Log 파일보기
$("#showlogBtn").click( function() {
var num = '<?php echo $num; ?>'
// table 이름을 넣어야 함
var workitem = 'output' ;
// 버튼 비활성화
var btn = $(this);
popupCenter("../Showlog.php?num=" + num + "&workitem=" + workitem , '로그기록', 500, 500);
btn.prop('disabled', false);
});
// 모달창 닫기
$(document).on('click', '.Modalclose', function(e) {
$("#telModal").modal("hide");
});
});
</script>
<script>
$(document).ready(function () {
displayFileLoad(); // 기존파일 업로드 보이기
});
// 기존 파일 불러오기 (Google Drive에서 가져오기)
function displayFileLoad() {
$('#displayFile').show();
var data = <?php echo json_encode($savefilename_arr); ?>;
$("#displayFile").html(''); // 기존 내용 초기화
if (Array.isArray(data) && data.length > 0) {
data.forEach(function (fileData, i) {
const realName = fileData.realname || '다운로드 파일';
const link = fileData.link || '#';
const fileId = fileData.fileId || null;
if (!fileId) {
console.error("fileId가 누락되었습니다. index: " + i, fileData);
return;
}
$("#displayFile").append(
"<div class='row mb-3'>" +
"<div class='d-flex mb-3 align-items-center justify-content-start'>" +
"<span id='file" + i + "'>" +
"<a href='#' onclick=\"downloadFile('" + fileId + "', '" + realName + "'); return false;\">" +
"<span class='fw-bold text-primary'>" + realName + "</span>" +
"</a>" +
"</span> &nbsp;&nbsp;" +
"</div>" +
"</div>"
);
});
} else {
$("#displayFile").append(
"<div class='text-center text-muted'>No files</div>"
);
}
}
// 철재스라트 절곡 작업일지 버튼 클릭 시
$(document).on('click', '#loadBendingWorkBtn_slat', function() {
var num = $("#num").val();
var screenorslat = $("#screenorslat").val();
if(screenorslat =='스크린')
var url = '/output/viewBendingWork.php?num=' + num ;
else
var url = '/output/viewBendingWork_slat.php?num=' + num ;
customPopup(url, '절곡작업일지', 800, 900);
});
// 철재스라트 절곡-중간검사 버튼 클릭 시
$(document).on('click', '#loadmidInspectBendingBtn_slat', function() {
var num = $("#num").val();
var screenorslat = $("#screenorslat").val();
if(screenorslat =='스크린')
var url = '/output/viewMidInspectBending.php?num=' + num ;
else
var url = '/output/viewMidInspectBending_slat.php?num=' + num ;
// 팝업 호출
customPopup(url, '절곡-중간검사', 800, 900);
});
</script>
</body>
</html>