Files
dnssash/theme/rd.dnssash/skin/board/reviews/write_update.head.skin.php
T
2026-06-11 18:47:38 +09:00

68 lines
3.4 KiB
PHP

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
/*
|--------------------------------------------------------------------------
| 💡 [핵심] 메인 비주얼 게시판 전용 백엔드 유효성 검사
|--------------------------------------------------------------------------
| 이 파일은 그누보드의 write_update.php 파일이 실행되기 직전에 자동으로
| 실행되어, 우리가 원하는 추가 규칙을 검사할 수 있게 해줍니다.
*/
// -----------------------------------------------------------------------------
// 규칙 1: 하루 최대 등록 개수 제한 (새 글 작성 시에만 적용)
// -----------------------------------------------------------------------------
if ($w == '') { // $w가 ''이면 '새 글 작성'을 의미합니다.
$daily_limit = 3; // 하루 최대 등록 개수를 3으로 설정합니다.
// 오늘 날짜(00:00:00 ~ 23:59:59)를 기준으로 작성된 게시물 수를 센다.
$sql = " SELECT count(*) as cnt FROM {$write_table}
WHERE wr_is_comment = 0
AND wr_datetime BETWEEN '".G5_TIME_YMD." 00:00:00' AND '".G5_TIME_YMD." 23:59:59' ";
$row = sql_fetch($sql);
// 만약 오늘 작성된 글이 3개 이상이면, 오류 메시지를 띄우고 중단합니다.
if ($row['cnt'] >= $daily_limit) {
alert("하루에 등록 가능한 비주얼은 최대 {$daily_limit}개입니다. 내일 다시 시도해주세요.");
}
}
// -----------------------------------------------------------------------------
// 규칙 2: 예약 기간 중복 검사
// -----------------------------------------------------------------------------
// '예약 노출'을 선택했을 때만 검사합니다.
if (isset($_POST['wr_1']) && $_POST['wr_1'] == '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_1 = 'RESERVED'
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날짜를 다시 확인해주세요.");
}
}
}
?>