Initial commit

This commit is contained in:
Porawit Dongwang
2026-09-16 23:20:08 +07:00
commit 0041668dbb
32577 changed files with 3687927 additions and 0 deletions
@@ -0,0 +1,235 @@
<?php
session_start();
require_once 'config/db.php';
require_once 'includes/functions.php';
check_login();
$action = $_REQUEST['action'] ?? '';
if ($action === 'create' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$topic = trim($_POST['topic']);
$meet_date = $_POST['meet_date'];
$start_time = $_POST['start_time'];
$end_time = $_POST['end_time'];
// Google Calendar API Integration
$meet_link = "";
$google_event_id = null;
$refresh_token = get_setting($pdo_sys, 'google_refresh_token');
$client_id = get_setting($pdo_sys, 'google_client_id');
$client_secret = get_setting($pdo_sys, 'google_client_secret');
if (!empty($refresh_token) && !empty($client_id) && !empty($client_secret) && file_exists('vendor/autoload.php')) {
require_once 'vendor/autoload.php';
try {
$client = new Google\Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->refreshToken($refresh_token);
$service = new Google\Service\Calendar($client);
// Prepare DateTime RFC3339
$startDateTime = date('c', strtotime("$meet_date $start_time"));
$endDateTime = date('c', strtotime("$meet_date $end_time"));
$event = new Google\Service\Calendar\Event(array(
'summary' => $topic,
'description' => 'จองห้องประชุมออนไลน์ผ่านระบบ',
'start' => array(
'dateTime' => $startDateTime,
'timeZone' => 'Asia/Bangkok',
),
'end' => array(
'dateTime' => $endDateTime,
'timeZone' => 'Asia/Bangkok',
),
'conferenceData' => array(
'createRequest' => array(
'requestId' => uniqid(),
'conferenceSolutionKey' => array(
'type' => 'hangoutsMeet'
)
)
)
));
$calendarId = 'primary';
$optParams = array('conferenceDataVersion' => 1);
$createdEvent = $service->events->insert($calendarId, $event, $optParams);
$google_event_id = $createdEvent->getId();
if ($createdEvent->getConferenceData()) {
$entryPoints = $createdEvent->getConferenceData()->getEntryPoints();
foreach ($entryPoints as $entryPoint) {
if ($entryPoint->getEntryPointType() === 'video') {
$meet_link = $entryPoint->getUri();
break;
}
}
}
} catch (Exception $e) {
// Log error but we might still insert empty link or fallback
error_log("Google API Error: " . $e->getMessage());
}
}
// Fallback if API fails or not connected
if (empty($meet_link)) {
function generateRandomString($length = 3) {
return substr(str_shuffle(str_repeat($x='abcdefghijklmnopqrstuvwxyz', ceil($length/strlen($x)) )),1,$length);
}
$meet_link = "https://meet.google.com/" . generateRandomString(3) . "-" . generateRandomString(4) . "-" . generateRandomString(3) . " (Mock)";
}
$sql = "INSERT INTO meet_requests (topic, meet_date, start_time, end_time, meet_link, google_event_id, created_by)
VALUES (:topic, :meet_date, :start_time, :end_time, :link, :event_id, :created_by)";
try {
$stmt = $pdo_sys->prepare($sql);
$stmt->execute([
'topic' => $topic,
'meet_date' => $meet_date,
'start_time' => $start_time,
'end_time' => $end_time,
'link' => $meet_link,
'event_id' => $google_event_id,
'created_by' => $_SESSION['fullname']
]);
add_log($pdo_sys, $_SESSION['cid'], $_SESSION['fullname'], 'Create Request', "Created meet request: $topic");
header("location: requests.php?msg=success");
exit;
} catch (PDOException $e) {
die("Error: " . $e->getMessage());
}
} elseif ($action === 'edit' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'] ?? 0;
$topic = trim($_POST['topic']);
$meet_date = $_POST['meet_date'];
$start_time = $_POST['start_time'];
$end_time = $_POST['end_time'];
if ($id) {
try {
// Check for Google Event ID and permissions
$stmt_old = $pdo_sys->prepare("SELECT google_event_id, created_by FROM meet_requests WHERE id = :id");
$stmt_old->execute(['id' => $id]);
$old_req = $stmt_old->fetch();
if (!$old_req || ($_SESSION['role'] !== 'superadmin' && $old_req['created_by'] !== $_SESSION['fullname'])) {
die("คุณไม่มีสิทธิ์แก้ไขรายการนี้");
}
if (!empty($old_req['google_event_id'])) {
$refresh_token = get_setting($pdo_sys, 'google_refresh_token');
$client_id = get_setting($pdo_sys, 'google_client_id');
$client_secret = get_setting($pdo_sys, 'google_client_secret');
if (!empty($refresh_token) && file_exists('vendor/autoload.php')) {
require_once 'vendor/autoload.php';
try {
$client = new Google\Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->refreshToken($refresh_token);
$service = new Google\Service\Calendar($client);
$event = $service->events->get('primary', $old_req['google_event_id']);
$event->setSummary($topic);
$startDateTime = date('c', strtotime("$meet_date $start_time"));
$endDateTime = date('c', strtotime("$meet_date $end_time"));
$start = new Google\Service\Calendar\EventDateTime();
$start->setDateTime($startDateTime);
$start->setTimeZone('Asia/Bangkok');
$event->setStart($start);
$end = new Google\Service\Calendar\EventDateTime();
$end->setDateTime($endDateTime);
$end->setTimeZone('Asia/Bangkok');
$event->setEnd($end);
$optParams = array('conferenceDataVersion' => 1);
$service->events->update('primary', $old_req['google_event_id'], $event, $optParams);
} catch (Exception $e) {
error_log("Google API Update Error: " . $e->getMessage());
}
}
}
$sql = "UPDATE meet_requests SET topic = :topic, meet_date = :meet_date, start_time = :start_time, end_time = :end_time WHERE id = :id";
$stmt = $pdo_sys->prepare($sql);
$stmt->execute([
'topic' => $topic,
'meet_date' => $meet_date,
'start_time' => $start_time,
'end_time' => $end_time,
'id' => $id
]);
add_log($pdo_sys, $_SESSION['cid'], $_SESSION['fullname'], 'Edit Request', "Edited meet request ID: $id ($topic)");
header("location: requests.php?msg=success");
exit;
} catch (PDOException $e) {
die("Error: " . $e->getMessage());
}
}
} elseif ($action === 'delete') {
$id = $_GET['id'] ?? 0;
if ($id) {
try {
// Get info for log, Google Event ID, and check permissions
$stmt = $pdo_sys->prepare("SELECT topic, google_event_id, created_by FROM meet_requests WHERE id = :id");
$stmt->execute(['id' => $id]);
$row = $stmt->fetch();
if (!$row || ($_SESSION['role'] !== 'superadmin' && $row['created_by'] !== $_SESSION['fullname'])) {
die("คุณไม่มีสิทธิ์ลบรายการนี้");
}
$topic = $row['topic'];
if (!empty($row['google_event_id'])) {
$refresh_token = get_setting($pdo_sys, 'google_refresh_token');
$client_id = get_setting($pdo_sys, 'google_client_id');
$client_secret = get_setting($pdo_sys, 'google_client_secret');
if (!empty($refresh_token) && file_exists('vendor/autoload.php')) {
require_once 'vendor/autoload.php';
try {
$client = new Google\Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->refreshToken($refresh_token);
$service = new Google\Service\Calendar($client);
$service->events->delete('primary', $row['google_event_id']);
} catch (Exception $e) {
error_log("Google API Delete Error: " . $e->getMessage());
}
}
}
$delStmt = $pdo_sys->prepare("DELETE FROM meet_requests WHERE id = :id");
$delStmt->execute(['id' => $id]);
add_log($pdo_sys, $_SESSION['cid'], $_SESSION['fullname'], 'Delete Request', "Deleted meet request ID: $id ($topic)");
header("location: requests.php?msg=success");
exit;
} catch (PDOException $e) {
die("Error: " . $e->getMessage());
}
}
}
header("location: requests.php");
exit;
?>