110 lines
2.9 KiB
PHP
110 lines
2.9 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../bbs/db_conn.php';
|
|
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// TODO: 실제 로그인 세션 연동 후 교체
|
|
$memberId = 'U001';
|
|
$sysCompCode = 'COMP01';
|
|
|
|
function response_json(array $data): void
|
|
{
|
|
echo json_encode($data, JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
function h(?string $str): string
|
|
{
|
|
return htmlspecialchars((string)$str, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
|
}
|
|
|
|
try {
|
|
$pdo = db_conn();
|
|
$pdo->exec("SET NAMES 'utf8mb4'");
|
|
|
|
$offerStatusMap = [
|
|
'OF10001' => '제안',
|
|
'OF10002' => '검토중',
|
|
'OF10003' => '게시완료',
|
|
'OF10004' => '게시불가',
|
|
];
|
|
|
|
$stmtCode = $pdo->prepare("
|
|
SELECT base_code, code_name
|
|
FROM edu_codes
|
|
WHERE group_code = 'OF100'
|
|
AND is_active = '1'
|
|
ORDER BY code
|
|
");
|
|
$stmtCode->execute();
|
|
|
|
foreach ($stmtCode->fetchAll(PDO::FETCH_ASSOC) as $row) {
|
|
$offerStatusMap[$row['base_code']] = $row['code_name'];
|
|
}
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
co.offer_id,
|
|
co.status_code,
|
|
co.created_at
|
|
FROM edu_content_offer co
|
|
WHERE co.member_id = :member_id
|
|
AND co.sys_comp_code = :sys_comp_code
|
|
ORDER BY
|
|
CASE co.status_code
|
|
WHEN 'OF10002' THEN 0
|
|
WHEN 'OF10001' THEN 1
|
|
WHEN 'OF10003' THEN 2
|
|
WHEN 'OF10004' THEN 3
|
|
ELSE 9
|
|
END,
|
|
co.created_at DESC
|
|
LIMIT 20
|
|
");
|
|
$stmt->execute([
|
|
':member_id' => $memberId,
|
|
':sys_comp_code' => $sysCompCode,
|
|
]);
|
|
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
ob_start();
|
|
|
|
if (!empty($rows)) {
|
|
foreach ($rows as $row) {
|
|
$statusCode = (string)($row['status_code'] ?? '');
|
|
$statusName = $offerStatusMap[$statusCode] ?? $statusCode;
|
|
$isConsider = ($statusCode === 'OF10002');
|
|
$createdAtDot = !empty($row['created_at']) ? date('y.m.d', strtotime($row['created_at'])) : '';
|
|
?>
|
|
<li class="<?= $isConsider ? 'consider' : '' ?>" data-offer-id="<?= h($row['offer_id'] ?? '') ?>">
|
|
<span class="suggest-date"><?= h($createdAtDot) ?></span>
|
|
<?php if ($isConsider): ?>
|
|
<span class="suggest-dots"></span>
|
|
<?php endif; ?>
|
|
<span class="suggest-state"><?= h($statusName) ?></span>
|
|
</li>
|
|
<?php
|
|
}
|
|
} else {
|
|
?>
|
|
<li>
|
|
<span class="suggest-date">-</span>
|
|
<span class="suggest-state">등록된 제안이 없습니다.</span>
|
|
</li>
|
|
<?php
|
|
}
|
|
|
|
$html = ob_get_clean();
|
|
|
|
response_json([
|
|
'success' => true,
|
|
'html' => $html,
|
|
]);
|
|
} catch (Throwable $e) {
|
|
response_json([
|
|
'success' => false,
|
|
'message' => '제안현황을 불러오지 못했습니다.',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|