first commit 2
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 리스트 루프 내에서 include 되어야 함 ($list[$i] 사용)
|
||||
|
||||
$is_reserved = isset($list[$i]['wr_is_reserved']) && $list[$i]['wr_is_reserved'] == 1;
|
||||
$status_html = '';
|
||||
|
||||
if ($is_reserved) {
|
||||
$today = G5_TIME_YMDHIS;
|
||||
$start_date = $list[$i]['wr_reserved_start'];
|
||||
$end_date = $list[$i]['wr_reserved_end'];
|
||||
|
||||
if ($today < $start_date) {
|
||||
$status_class = 'reserved-waiting';
|
||||
$status_text = '예약대기';
|
||||
$status_desc = '시작: '.substr($start_date, 5, 11);
|
||||
} elseif ($today >= $start_date && $today <= $end_date) {
|
||||
$status_class = 'reserved-active';
|
||||
$status_text = '예약진행';
|
||||
$status_desc = '종료: '.substr($end_date, 5, 11);
|
||||
} else {
|
||||
$status_class = 'reserved-expired';
|
||||
$status_text = '예약종료';
|
||||
$status_desc = '종료됨';
|
||||
}
|
||||
|
||||
$status_html = '<span class="reservation-badge '.$status_class.'" title="'.$status_desc.'">'.$status_text.'</span>';
|
||||
} else {
|
||||
// 즉시 노출 상태
|
||||
$status_html = '<span class="reservation-badge immediate">즉시노출</span>';
|
||||
}
|
||||
|
||||
echo $status_html;
|
||||
?>
|
||||
<style>
|
||||
.reservation-badge {
|
||||
display: inline-block;
|
||||
padding: 2px 6px;
|
||||
font-size: 11px;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
line-height: 1.2;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.reservation-badge.immediate { background-color: #555; } /* 즉시노출: 회색 */
|
||||
.reservation-badge.reserved-waiting { background-color: #f0ad4e; } /* 예약대기: 주황색 */
|
||||
.reservation-badge.reserved-active { background-color: #5cb85c; } /* 예약진행: 초록색 */
|
||||
.reservation-badge.reserved-expired { background-color: #d9534f; } /* 예약종료: 빨간색 */
|
||||
</style>
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 예약 노출 설정 처리
|
||||
$wr_is_reserved = isset($_POST['wr_is_reserved']) ? (int)$_POST['wr_is_reserved'] : 0;
|
||||
$wr_reserved_start = isset($_POST['wr_reserved_start']) ? trim($_POST['wr_reserved_start']) : '';
|
||||
$wr_reserved_end = isset($_POST['wr_reserved_end']) ? trim($_POST['wr_reserved_end']) : '';
|
||||
|
||||
if ($wr_is_reserved == 1) {
|
||||
if (!$wr_reserved_start || !$wr_reserved_end) {
|
||||
alert('예약 노출 시작일시와 종료일시를 모두 입력해주세요.');
|
||||
}
|
||||
if ($wr_reserved_start > $wr_reserved_end) {
|
||||
alert('예약 종료일시는 시작일시보다 이후여야 합니다.');
|
||||
}
|
||||
|
||||
// 💡 [핵심 수정] 게시판 설정에 따른 중복 검사
|
||||
if (isset($board['bo_use_reservation_overlap']) && $board['bo_use_reservation_overlap']) {
|
||||
$overlap_limit = isset($board['bo_reservation_overlap_count']) ? (int)$board['bo_reservation_overlap_count'] : 0;
|
||||
|
||||
// 💡 [변경] 0보다 클 때만 개수 제한 체크 (0이면 무제한 허용)
|
||||
if ($overlap_limit > 0) {
|
||||
// 겹치는 게시물 수 조회
|
||||
$sql = " SELECT count(*) as cnt FROM {$write_table}
|
||||
WHERE wr_is_comment = 0
|
||||
AND wr_is_reserved = 1
|
||||
AND wr_id != '{$wr_id}'
|
||||
AND (
|
||||
'{$wr_reserved_start}' <= wr_reserved_end AND '{$wr_reserved_end}' >= wr_reserved_start
|
||||
) ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 허용 개수보다 많으면 차단 (현재 등록하려는 글 포함이므로 >= 사용하거나, 이미 등록된 글 수와 비교)
|
||||
// 이미 등록된 글 수($row['cnt'])가 제한 개수($overlap_limit) 이상이면, 더 이상 등록 불가
|
||||
if ($row['cnt'] >= $overlap_limit) {
|
||||
$msg = "선택하신 기간에 예약 가능한 게시물 수({$overlap_limit}개)를 초과했습니다.";
|
||||
$msg .= "\\n(현재 {$row['cnt']}개 예약됨)";
|
||||
alert($msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// 예약 미사용 시 날짜 초기화
|
||||
$wr_reserved_start = '0000-00-00 00:00:00';
|
||||
$wr_reserved_end = '0000-00-00 00:00:00';
|
||||
}
|
||||
|
||||
// DB 업데이트
|
||||
$sql = " UPDATE {$write_table}
|
||||
SET wr_is_reserved = '{$wr_is_reserved}',
|
||||
wr_reserved_start = '{$wr_reserved_start}',
|
||||
wr_reserved_end = '{$wr_reserved_end}'
|
||||
WHERE wr_id = '{$wr_id}' ";
|
||||
sql_query($sql);
|
||||
?>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if ($view['wr_is_reserved'] == 1) {
|
||||
$today = G5_TIME_YMDHIS;
|
||||
$status_text = '예약 대기';
|
||||
$status_class = 'reserved';
|
||||
|
||||
if ($today >= $view['wr_reserved_start'] && $today <= $view['wr_reserved_end']) {
|
||||
$status_text = '노출 중';
|
||||
$status_class = 'active';
|
||||
} elseif ($today > $view['wr_reserved_end']) {
|
||||
$status_text = '노출 종료';
|
||||
$status_class = 'expired';
|
||||
}
|
||||
?>
|
||||
<div class="view_reservation_info">
|
||||
<span class="status_badge <?php echo $status_class; ?>"><?php echo $status_text; ?></span>
|
||||
<span class="period"><?php echo $view['wr_reserved_start']; ?> ~ <?php echo $view['wr_reserved_end']; ?></span>
|
||||
</div>
|
||||
<?php } ?>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// jQuery UI Datepicker 로드 (이미 로드되어 있을 수 있음)
|
||||
add_stylesheet('<link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">', 0);
|
||||
add_javascript('<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>', 0);
|
||||
?>
|
||||
|
||||
<div class="write_div">
|
||||
<label class="frm_label">노출 방식</label>
|
||||
<div class="option_group">
|
||||
<label>
|
||||
<input type="radio" name="wr_is_reserved" value="0" <?php echo ($write['wr_is_reserved'] != 1) ? 'checked' : ''; ?>>
|
||||
<span class="custom-radio"></span> 즉시 노출
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="wr_is_reserved" value="1" <?php echo ($write['wr_is_reserved'] == 1) ? 'checked' : ''; ?>>
|
||||
<span class="custom-radio"></span> 예약 노출
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="reservation_fields" class="write_div" style="display: <?php echo ($write['wr_is_reserved'] == 1) ? 'block' : 'none'; ?>;">
|
||||
<div class="date_picker_group">
|
||||
<div class="date_item">
|
||||
<label for="wr_reserved_start" class="frm_label">시작일시</label>
|
||||
<input type="text" name="wr_reserved_start" value="<?php echo $write['wr_reserved_start']; ?>" id="wr_reserved_start" class="frm_input datepicker" maxlength="19" placeholder="YYYY-MM-DD HH:mm:ss">
|
||||
</div>
|
||||
<span class="date_divider">~</span>
|
||||
<div class="date_item">
|
||||
<label for="wr_reserved_end" class="frm_label">종료일시</label>
|
||||
<input type="text" name="wr_reserved_end" value="<?php echo $write['wr_reserved_end']; ?>" id="wr_reserved_end" class="frm_input datepicker" maxlength="19" placeholder="YYYY-MM-DD HH:mm:ss">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
// 라디오 버튼 변경 시 입력 필드 토글
|
||||
$('input[name="wr_is_reserved"]').change(function(){
|
||||
if($(this).val() == '1') {
|
||||
$('#reservation_fields').show();
|
||||
} else {
|
||||
$('#reservation_fields').hide();
|
||||
}
|
||||
});
|
||||
|
||||
// Datepicker 설정 (시간 선택이 필요하다면 datetimepicker 라이브러리 필요, 여기서는 기본 datepicker 사용 후 시간은 수동 입력 가정)
|
||||
// 실제로는 datetimepicker 플러그인을 사용하는 것이 좋습니다.
|
||||
$(".datepicker").datepicker({
|
||||
dateFormat: "yy-mm-dd",
|
||||
onSelect: function(dateText) {
|
||||
// 시간까지 입력하도록 유도하거나 기본값 설정
|
||||
if(this.value.length <= 10) {
|
||||
this.value = dateText + " 00:00:00";
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user