nhance-enrollment/app/Helpers/drive_helper.php

150 lines
6.5 KiB
PHP
Executable File

<?php
use Google\Client as GoogleClient;
use Google\Service\Drive;
if (!function_exists('uploadFilesToGoogleDrive')) {
function uploadFilesToGoogleDrive(array $files, $doc_name, $pt_id)
{
$appName = getenv('GOOGLE_OAUTH_APP_NAME');
$clientID = getenv('GOOGLE_OAUTH_CLIENT_ID');
$clientSecret = getenv('GOOGLE_OAUTH_CLIENT_SECRET');
$redirectUri = getenv('GOOGLE_OAUTH_REDIRECT_URI');
$scopes = explode(',', getenv('GOOGLE_OAUTH_SCOPES'));
$accessToken = session()->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));
}
}
}