Initial commit: 교육 프로젝트 배포
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
//마이클래스 영상모달 관련영상 리스트 API - 목표코드(goal_code) 기반
|
||||
declare(strict_types=1);
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../db_conn.php';
|
||||
|
||||
$memberId = (string)($_SESSION['member_id'] ?? '');
|
||||
$sysCompCode = (string)($_SESSION['sys_comp_code'] ?? '');
|
||||
|
||||
if ($memberId === '') {
|
||||
http_response_code(401);
|
||||
echo json_encode(['success' => false, 'message' => 'not_logged_in'], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$contentId = trim((string)($_GET['content_id'] ?? ''));
|
||||
if ($contentId === '') {
|
||||
http_response_code(400);
|
||||
echo json_encode(['success' => false, 'message' => 'content_id_required'], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
try {
|
||||
$pdo = db_conn();
|
||||
|
||||
$stmtCurrent = $pdo->prepare(
|
||||
"SELECT content_id, goal_code
|
||||
FROM edu_contents
|
||||
WHERE content_id = ?
|
||||
AND is_active = 1
|
||||
LIMIT 1"
|
||||
);
|
||||
$stmtCurrent->execute([$contentId]);
|
||||
$current = $stmtCurrent->fetch(PDO::FETCH_ASSOC) ?: null;
|
||||
|
||||
if (!$current) {
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'mode' => 'goal_code',
|
||||
'goal_code' => null,
|
||||
'keywords' => [],
|
||||
'videos' => [],
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$goalCode = trim((string)($current['goal_code'] ?? ''));
|
||||
if ($goalCode === '') {
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'mode' => 'goal_code',
|
||||
'goal_code' => '',
|
||||
'keywords' => [],
|
||||
'videos' => [],
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmtVideos = $pdo->prepare(
|
||||
"SELECT
|
||||
c.content_id,
|
||||
c.title,
|
||||
c.content_url,
|
||||
c.thumbnail_url,
|
||||
c.category_code,
|
||||
c.category_group,
|
||||
c.description,
|
||||
COALESCE(ec.code_name, c.category_code) AS category_name,
|
||||
COALESCE(ec_grp.code_name, c.category_group) AS category_group_name,
|
||||
c.goal_code
|
||||
FROM edu_contents c
|
||||
LEFT JOIN edu_codes ec
|
||||
ON TRIM(UPPER(ec.base_code)) = TRIM(UPPER(c.category_code))
|
||||
LEFT JOIN edu_codes ec_grp
|
||||
ON TRIM(UPPER(ec_grp.base_code)) = TRIM(UPPER(c.category_group))
|
||||
WHERE c.is_active = 1
|
||||
AND c.goal_code = ?
|
||||
AND c.content_id <> ?
|
||||
ORDER BY
|
||||
COALESCE(NULLIF(c.sort_order, 0), 9999) ASC,
|
||||
c.updated_at DESC,
|
||||
c.content_id DESC
|
||||
LIMIT 6"
|
||||
);
|
||||
$stmtVideos->execute([$goalCode, $contentId]);
|
||||
$rows = $stmtVideos->fetchAll(PDO::FETCH_ASSOC) ?: [];
|
||||
|
||||
$videos = [];
|
||||
foreach ($rows as $row) {
|
||||
$raw = trim((string)($row['content_url'] ?? ''));
|
||||
$videoId = '';
|
||||
if (preg_match('/(?:v=|youtu\.be\/)([A-Za-z0-9_-]{11})/', $raw, $m)) {
|
||||
$videoId = $m[1];
|
||||
} elseif (preg_match('/^[A-Za-z0-9_-]{11}$/', $raw)) {
|
||||
$videoId = $raw;
|
||||
}
|
||||
|
||||
$thumbFromDb = trim((string)($row['thumbnail_url'] ?? ''));
|
||||
$thumbnail = $thumbFromDb !== ''
|
||||
? $thumbFromDb
|
||||
: ($videoId !== '' ? "https://img.youtube.com/vi/{$videoId}/sddefault.jpg" : '');
|
||||
|
||||
$catCode = (string)($row['category_code'] ?? '');
|
||||
$subcate = trim((string)($row['category_group_name'] ?? $row['category_group'] ?? ''));
|
||||
$catName = trim((string)($row['category_name'] ?? $catCode));
|
||||
|
||||
$videos[] = [
|
||||
'content_id' => $row['content_id'] ?? '',
|
||||
'title' => (string)($row['title'] ?? ''),
|
||||
'content_url' => $videoId !== '' ? "https://www.youtube.com/watch?v={$videoId}" : $raw,
|
||||
'thumbnail' => $thumbnail,
|
||||
'category_code' => $catCode,
|
||||
'category' => $catName,
|
||||
'category_name' => $catName,
|
||||
'subcate' => $subcate,
|
||||
'description' => (string)($row['description'] ?? ''),
|
||||
'goal_code' => (string)($row['goal_code'] ?? ''),
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'mode' => 'goal_code',
|
||||
'goal_code' => $goalCode,
|
||||
'keywords' => [],
|
||||
'videos' => $videos,
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
} catch (Throwable $e) {
|
||||
error_log('[get_recommend_videos] ' . $e->getMessage());
|
||||
http_response_code(500);
|
||||
echo json_encode(['success' => false, 'message' => 'server_error'], JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
Reference in New Issue
Block a user