prepare("INSERT INTO system_logs (user_id, action_type, module, description, ip_address) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$user_id, $action_type, $module, $description, $ip]); } // ========================================= // 2. ฟังก์ชันจัดการ Google Drive API // ========================================= /* ข้อกำหนด: ต้องใช้ Service Account (JSON key) ในการเชื่อมต่อ และแชร์โฟลเดอร์เป้าหมายให้กับอีเมลของ Service Account ด้วยสิทธิ์ Editor */ function getGoogleClient() { // ต้องติดตั้ง: composer require google/apiclient if (!class_exists('Google_Client')) { return null; // จำลองการทำงานกรณีไม่ได้ติดตั้งไลบรารี } $client = new Google_Client(); $client->setAuthConfig(__DIR__ . '/credentials/google-service-account.json'); $client->addScope(Google_Service_Drive::DRIVE_FILE); return $client; } function uploadToGoogleDrive($fileTmpPath, $fileName, $mimeType) { $folderId = getSetting('drive_folder_id'); // ดึง ID จาก DB (ที่ตั้งค่าใน CMS) $client = getGoogleClient(); if (!$client) { // หากไม่มี Library จำลองการคืนค่า ID เพื่อใช้ทดสอบ return ['id' => 'mock_drive_id_' . time(), 'url' => 'https://drive.google.com/file/d/mock/view']; } try { $driveService = new Google_Service_Drive($client); $fileMetadata = new Google_Service_Drive_DriveFile([ 'name' => $fileName, 'parents' => [$folderId] ]); $content = file_get_contents($fileTmpPath); $file = $driveService->files->create($fileMetadata, [ 'data' => $content, 'mimeType' => $mimeType, 'uploadType' => 'multipart', 'fields' => 'id, webViewLink' ]); // แก้ไขสิทธิ์ให้ทุกคนที่มีลิงก์สามารถดูได้ $permission = new Google_Service_Drive_Permission(['type' => 'anyone', 'role' => 'reader']); $driveService->permissions->create($file->id, $permission); return [ 'id' => $file->id, 'url' => 'https://drive.google.com/thumbnail?sz=s1024&id=' . $file->id ]; } catch (Exception $e) { // หากอัปโหลดไม่สำเร็จ หรือ Folder ID ผิดพลาด ให้บันทึก error หรือคืนค่าเป็น null error_log("Google Drive Upload Error: " . $e->getMessage()); return [ 'id' => null, 'url' => null ]; } } function deleteFromGoogleDrive($fileId) { if (!$fileId || strpos($fileId, 'mock_') === 0) return true; // สำหรับการทดสอบ $client = getGoogleClient(); if ($client) { $driveService = new Google_Service_Drive($client); try { $driveService->files->delete($fileId); return true; } catch (Exception $e) { return false; } } return false; } // ========================================= // 3. ฟังก์ชันแจ้งเตือน (Flash Messages) // ========================================= function setFlash($type, $message) { $_SESSION['flash'] = ['type' => $type, 'message' => $message]; } function displayFlash() { if (isset($_SESSION['flash'])) { $type = $_SESSION['flash']['type']; $msg = $_SESSION['flash']['message']; $color = $type === 'success' ? 'emerald' : ($type === 'error' ? 'red' : 'blue'); echo "
{$msg}