nhance/app/Libraries/MyGoogleDrive.php
2024-09-24 14:06:43 +05:30

132 lines
5.1 KiB
PHP

<?php
namespace App\Libraries;
use CodeIgniter\CLI\CLI;
use Google_Client;
use Google_Service_Drive;
class MyGoogleDrive
{
private $client;
private $myLogger;
public function __construct()
{
$this->myLogger = \Config\Services::mylogger();
$this->client = new Google_Client();
$this->client->setAuthConfig(ROOTPATH . 'nhance-app-google-drive.json'); // App credentials
// putenv('GOOGLE_APPLICATION_CREDENTIALS=' . ROOTPATH . 'nhance-app-google-drive.json');
$this->client->useApplicationDefaultCredentials();
$this->client->addScope(Google_Service_Drive::DRIVE); // Full access to Google Drive
}
public function getDriveService()
{
return new Google_Service_Drive($this->client);
}
// this function serve no purpose on anywhere, just for test purpose
public function listFiles(string $searchQuery = '')
{
$service = $this->getDriveService();
// $searchQuery = "name contains 'test' and 'vitvelz@gmail.com' in readers";
$searchQuery = "name contains 'test' or name contains 'new'";
// $searchQuery = "name contains 'test' and mimeType = 'application/vnd.google-apps.folder' or name contains 'new' and mimeType = 'application/vnd.ms-excel'";
// List the files
$files = $service->files->listFiles([
'q' => $searchQuery,
// 'supportsAllDrives' => true,
// 'includeItemsFromAllDrives' => true,
'fields' => 'nextPageToken, files(id, name, mimeType, size, createdTime, modifiedTime, owners, shared, permissions, webViewLink, thumbnailLink)',
'pageSize' => 20,
]);
// print_r($files);
echo "\n**************\n";
foreach ($files->getFiles() as $file) {
echo 'File ID: ' . $file->getID() . "\n";
echo 'File Name: ' . $file->getName() . "\n";
// echo 'MIME Type: ' . $file->getMimeType() . "\n";
// echo 'Size: ' . $file->getSize() . " bytes\n";
// echo 'Created Time: ' . $file->getCreatedTime() . "\n";
// echo 'Modified Time: ' . $file->getModifiedTime() . "\n";
// echo 'Owner: ' . $file->getOwners()[0]->getEmailAddress() . "\n";
// echo 'Shared: ' . ($file->getShared() ? 'Yes' : 'No') . "\n";
// echo 'Permissions: ' . json_encode($file->getPermissions()) . "\n";
// echo 'Web View Link: ' . $file->getWebViewLink() . "\n";
// echo 'Thumbnail Link: ' . $file->getThumbnailLink() . "\n";
echo 'parents: ' .$file->getParents()."\n";
echo "-----\n";
}
}
// this fucntion is not generating any new token, just for testing purpose
public function generateNewToken()
{
// $this->uploadFile();die();
$this->listFiles();die();
// dd('called');
if (!is_cli()) {
throw new \RuntimeException('This method can only be accessed via the command line.');
}
if (php_sapi_name() != 'cli') {
throw new Exception('This application must be run on the command line.');
}
$authUrl = $this->client->createAuthUrl();
CLI::write('Open the following link in your browser');
CLI::write("\n");
CLI::write($authUrl);
// printf ("Open the following link in your browser:\n%s\n", $authUrl);
CLI::write('Enter verification code: ');
// print 'Enter verification code: ';
$authCode = trim(fgets(STDIN));
$accessToken = $this->client->fetchAccessTokenWithAuthCode($authCode);
if (array_key_exists('error', $accessToken)) {
$this->myLogger->logme('error', 'Error in getting access token from authCode' . join(', ', $accessToken));
throw new \Exception(join(', ', $accessToken));
}
$this->storeToken($accessToken);
$this->myLogger->logme('error', 'New token generated and stored in the writepath for google drive.');
print 'New token generated and stored in the writepath for google drive.';
}
/**
* Upload a file to Google Drive
* this function not used in anywhere
*/
public function uploadFile($filePath = '', $fileName= '')
{
$service = $this->getDriveService();
// $file = new \Google_Service_Drive_DriveFile();
// $file->setName('tata.xlsx');
// $file->setParents('TEST');
// Create a new file metadata object
$file = new \Google_Service_Drive_DriveFile([
'name' => 'mypdf.pdf',
'parents' => ['1M0GH3GbNUOYZLNeHXA5U7C_P2NSx7F7O'] // Specify the folder ID here
]);
$data = file_get_contents('C:\Users\Venba\Desktop\nhance_bpf.pdf');
$createdFile = $service->files->create($file, [
'data' => $data,
'mimeType' => 'application/octet-stream',
'uploadType' => 'multipart',
'fields' => 'id' // Specify fields to return
]);
echo $createdFile->id;
}
}