45 lines
2.4 KiB
PHP
45 lines
2.4 KiB
PHP
<?php
|
|
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
|
|
|
// 💡 [참고] 이 파일은 그누보드의 write_update.php 파일이 실행되기 직전에 자동으로 실행됩니다.
|
|
// 이를 이용해 폼에서 넘어온 데이터의 유효성을 검사하거나, 특정 값을 데이터베이스에 저장하기 전에 가공할 수 있습니다.
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// 예약 기간 중복 검사 (bo_use_reservation_overlap 옵션이 켜져 있을 때만)
|
|
// -----------------------------------------------------------------------------
|
|
if ($board['bo_use_reservation_overlap'] && isset($_POST['wr_9']) && $_POST['wr_9'] == 'RESERVED') {
|
|
|
|
// 폼에서 전송된 시작일과 종료일을 가져옵니다.
|
|
$start_date = isset($_POST['wr_2']) ? trim($_POST['wr_2']) : '';
|
|
$end_date = isset($_POST['wr_3']) ? trim($_POST['wr_3']) : '';
|
|
|
|
// 두 날짜가 모두 입력되었을 때만 검사를 실행합니다.
|
|
if ($start_date && $end_date) {
|
|
|
|
// '예약 노출'로 설정된 다른 게시물 중, 날짜가 겹치는 것이 있는지 찾습니다.
|
|
// (신규 시작일 <= 기존 종료일) AND (신규 종료일 >= 기존 시작일) -> 이 조건이 참이면 겹치는 것입니다.
|
|
$sql = " SELECT wr_id, wr_subject FROM {$write_table}
|
|
WHERE wr_is_comment = 0
|
|
AND wr_9 = 'RESERVED'
|
|
AND wr_10 = '0' /* 숨김 처리되지 않은 글만 대상으로 함 */
|
|
AND (
|
|
'{$start_date}' <= wr_3 AND '{$end_date}' >= wr_2
|
|
) ";
|
|
|
|
// 글 수정($w == 'u') 시에는, 현재 수정 중인 자기 자신은 검사 대상에서 제외합니다.
|
|
if ($w == 'u' && $wr_id) {
|
|
$sql .= " AND wr_id != '{$wr_id}' ";
|
|
}
|
|
|
|
$sql .= " LIMIT 1 "; // 겹치는 것이 하나라도 있으면 바로 찾기를 중단합니다.
|
|
$row = sql_fetch($sql);
|
|
|
|
// 만약 겹치는 게시물이 발견되면, 오류 메시지를 띄우고 중단합니다.
|
|
if (isset($row['wr_id']) && $row['wr_id']) {
|
|
$colliding_subject = get_text(cut_str($row['wr_subject'], 30));
|
|
alert("선택하신 예약 기간에 이미 다른 게시물이 등록되어 있습니다.\\n\\n[중복된 게시물: {$colliding_subject}]\\n\\n날짜를 다시 확인해주세요.");
|
|
}
|
|
}
|
|
}
|
|
?>
|