get('access_token'); log_message('error', '////////////// --- G-Drive Access Token {data}', ['data' => $accessToken]); // Initialize Google Client $client = new GoogleClient(); $client->setApplicationName($appName); $client->setClientId($clientID); $client->setClientSecret($clientSecret); $client->setRedirectUri($redirectUri); $client->addScope($scopes); // $client->setApprovalPrompt('force'); $client->setPrompt('consent'); $client->setAccessType('offline'); if ($accessToken) { $client->setAccessToken($accessToken); log_message('error', '////////////// --- G-Drive Access Token expired : {data}', ['data' => $client->isAccessTokenExpired()]); if ($client->isAccessTokenExpired()) { $refreshToken = session()->get('refresh_token'); log_message('error', '////////////// --- G-Drive Refresh Token : {data}', ['data' => $refreshToken]); if ($refreshToken) { $client->fetchAccessTokenWithRefreshToken($refreshToken); $token = $client->getAccessToken(); if (isset($token['access_token'])) { session()->set('access_token', $token['access_token']); // $client->setAccessToken($token); log_message('error', '////////////// --- G-Drive Access Token refreshed and stored successfully.'); } else { log_message('error', '////////////// --- G-Drive Access Token not available after refresh.'); } if (isset($token['refresh_token'])) { session()->set('refresh_token', $token['refresh_token']); log_message('error', '////////////// --- G-Drive Refresh Token updated successfully.'); } else { log_message('error', '////////////// --- G-Drive Refresh Token not available after refresh.'); } } else { log_message('error', '////////////// --- G-Drive Refresh Token Not Available'); redirect()->to(filter_var($client->createAuthUrl(), FILTER_SANITIZE_URL)); } } else { log_message('error', '////////////// --- G-Drive Access Token is still valid.'); } try { $driveService = new Drive($client); $folderName = 'New Folder'; // Check if the folder already exists $response = $driveService->files->listFiles([ 'q' => "mimeType='application/vnd.google-apps.folder' and name='{$folderName}' and trashed=false", 'fields' => 'files(id, name)' ]); $filesList = $response->getFiles(); $folderId = null; if (count($filesList) > 0) { // Folder already exists $folderId = $filesList[0]->getId(); } else { // Create a new folder $folder = new Drive\DriveFile(); $folder->setName($folderName); $folder->setMimeType('application/vnd.google-apps.folder'); $createdFolder = $driveService->files->create($folder, [ 'fields' => 'id' ]); $folderId = $createdFolder->id; } $uploadedFiles = []; foreach ($files as $key => $file) { if (!empty($file)) { $dname = $doc_name[$key]; $driveFile = new Drive\DriveFile(); $driveFile->setName($file->getClientName()); $driveFile->setParents([$folderId]); $result = $driveService->files->create( $driveFile, [ 'data' => file_get_contents($file->getTempName()), 'mimeType' => $file->getClientMimeType(), 'uploadType' => 'multipart' ] ); $uploadedFiles[] = [ 'file_name' => $file->getClientName(), 'drive_id' => $result->id, 'doc_name' => $dname, 'pt_id' => $pt_id, 'created_by' => get_session_userid(), 'url' => "https://drive.google.com/file/d/{$result->id}/view", ]; } } return $uploadedFiles; } catch (\Exception $e) { $errorDetails = [ 'status' => 'error', 'error_message' => 'Error uploading files: ' . $e->getMessage(), 'error_code' => $e->getCode(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString() ]; return $errorDetails; } } else { $url = $client->createAuthUrl(); return redirect()->to(filter_var($url, FILTER_SANITIZE_URL)); } } }