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; ?>