150 lines
6.5 KiB
PHP
Executable File
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));
|
|
}
|
|
}
|
|
} |