FEAT_GOOGLE_CALENDER
This commit is contained in:
parent
05b12413aa
commit
0ee6977395
@ -990,16 +990,24 @@ class TestingController extends BaseController
|
||||
|
||||
// 🔐 Move this to .env in real projects
|
||||
$METABASE_SECRET_KEY = getenv('METABASE_SECRET_KEY');
|
||||
$policy_id = $this->request->getGet('client_policy');
|
||||
$database_id = (int)$this->request->getGet('database_id') ?? 2;
|
||||
$policy_id = $this->request->getGet('client_policy') ?? null;
|
||||
$tpa_url = 'https://nsights.nhanceindia.in/public/dashboard/4babf324-6c1e-4c5a-adbb-1c80a0f545b1';
|
||||
$policy_id = $policy_id ? $policy_id : 4687;
|
||||
$payload = [
|
||||
'resource' => [
|
||||
// 'dashboard' => 1
|
||||
'dashboard' => 2
|
||||
'dashboard' => $database_id
|
||||
],
|
||||
'params' => (object)['client_policy' => $policy_id], // MUST be object for Metabase
|
||||
'exp' => time() + (10 * 60) // 10 minutes
|
||||
];
|
||||
|
||||
if(!empty($policy_id)){
|
||||
$payload['params'] = (object)['client_policy' => $policy_id]; // MUST be object for Metabase
|
||||
}else{
|
||||
$payload['params'] = (object)[]; // MUST be object for Metabase
|
||||
}
|
||||
|
||||
// dd($payload);
|
||||
$token = JWT::encode($payload, $METABASE_SECRET_KEY, 'HS256');
|
||||
|
||||
@ -1025,6 +1033,31 @@ class TestingController extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
public function testingquerys1(){
|
||||
|
||||
}
|
||||
|
||||
public function testingquerys()
|
||||
{
|
||||
$calendar = new \App\Libraries\GoogleCalendarService();
|
||||
|
||||
// Check if user is authenticated without passing tokens manually
|
||||
if (!$calendar->isReady()) {
|
||||
return $this->respond(['status' => 'failed', 'code' => '404' , 'message' => 'Google Access Token Expired'], 200);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'summary' => 'Client Follow up',
|
||||
'meeting_date' => '2026-02-22 10:00:00',
|
||||
'description' => 'Visit Client place',
|
||||
'emails' => ['surendarsuri30@gmail.com', 'vitvelz@gmail.com', 'venbalap2026@gmail.com', 'gowthamceline46@gmail.com']
|
||||
];
|
||||
|
||||
try {
|
||||
$response = $calendar->createEvent($data);
|
||||
return $this->respond(['status' => 'success', 'code' => '200' , 'message' => 'Follow-up Saved', 'response' => $response], 200);
|
||||
} catch (\Exception $e) {
|
||||
return $this->respond(['status' => 'failed', 'code' => '500' , 'message' => 'Error: ' . $e->getMessage()], 200);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
205
app/Libraries/GoogleCalendarService.php
Normal file
205
app/Libraries/GoogleCalendarService.php
Normal file
@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries;
|
||||
|
||||
use Google\Client;
|
||||
use Google\Service\Calendar;
|
||||
use Google\Service\Calendar\Event;
|
||||
|
||||
class GoogleCalendarService
|
||||
{
|
||||
protected $client;
|
||||
protected $service;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$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 = getenv('GOOGLE_OAUTH_SCOPES');
|
||||
|
||||
$scopesArray = explode(',', $scopes);
|
||||
|
||||
$this->client = new Client();
|
||||
$this->client->setApplicationName($appName);
|
||||
$this->client->setClientId($clientID);
|
||||
$this->client->setClientSecret($clientSecret);
|
||||
$this->client->setRedirectUri($redirectUri);
|
||||
$this->client->addScope($scopesArray);
|
||||
$this->client->setPrompt('consent');
|
||||
$this->client->setAccessType('offline');
|
||||
|
||||
$accessToken = session()->get('access_token');
|
||||
$refreshToken = session()->get('refresh_token'); // Session-la irunthu refresh token-a edukkurom
|
||||
|
||||
if ($accessToken) {
|
||||
$this->client->setAccessToken($accessToken);
|
||||
|
||||
if ($this->client->isAccessTokenExpired()) {
|
||||
if ($refreshToken) {
|
||||
// Ippo session-la iruntha refresh token-a vechu puthu access token vaangurom
|
||||
$newToken = $this->client->fetchAccessTokenWithRefreshToken($refreshToken);
|
||||
|
||||
// Romba mukkiyam: Puthu token-la refresh token thirumba varaathu,
|
||||
// so pazhaya refresh token-aiye namma retain pannanum.
|
||||
if (!isset($newToken['refresh_token'])) {
|
||||
$newToken['refresh_token'] = $refreshToken;
|
||||
}
|
||||
|
||||
session()->set('access_token', $newToken);
|
||||
$this->client->setAccessToken($newToken);
|
||||
} else {
|
||||
// Refresh token illana, user marubadiyum login panna sollanum
|
||||
return redirect()->to('/google-login');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function isReady()
|
||||
{
|
||||
return $token = session()->get('access_token') && !$this->client->isAccessTokenExpired();
|
||||
}
|
||||
|
||||
public function createEventForOrganizerOnly(array $data)
|
||||
{
|
||||
$this->service = new Calendar($this->client);
|
||||
|
||||
// Date kuda '10:00' add panrathu safe
|
||||
$meeting_start = preg_match('/^\d{4}-\d{2}-\d{2}$/', $data['meeting_date']) ? $data['meeting_date'] . ' 10:00:00' : $data['meeting_date'];
|
||||
|
||||
$event = new Event([
|
||||
'summary' => $data['summary'],
|
||||
'description' => $data['description'] ?? '',
|
||||
'start' => [
|
||||
'dateTime' => date('c', strtotime($meeting_start)), // Ippo 10 AM-nu fix aagidum
|
||||
'timeZone' => 'Asia/Kolkata',
|
||||
],
|
||||
'end' => [
|
||||
'dateTime' => date('c', strtotime($meeting_start . ' +30 minutes')),
|
||||
'timeZone' => 'Asia/Kolkata',
|
||||
],
|
||||
'reminders' => [
|
||||
'useDefault' => false,
|
||||
'overrides' => [
|
||||
['method' => 'email', 'minutes' => 1440], // Munthuna naal 10 AM
|
||||
['method' => 'popup', 'minutes' => 60], // Event annaki 9 AM
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
return $this->service->events->insert('primary', $event);
|
||||
}
|
||||
|
||||
public function createEvent(array $data)
|
||||
{
|
||||
$this->service = new Calendar($this->client);
|
||||
$responses = [];
|
||||
|
||||
try {
|
||||
|
||||
$meetingStartRaw = (preg_match('/^\d{4}-\d{2}-\d{2}$/', $data['meeting_date']))
|
||||
? $data['meeting_date'] . ' 10:00:00'
|
||||
: $data['meeting_date'];
|
||||
|
||||
$startTime = date('c', strtotime($meetingStartRaw));
|
||||
$endTime = date('c', strtotime(date('Y-m-d', strtotime($meetingStartRaw)) . ' 23:59:59'));
|
||||
|
||||
// 2. Prepare Attendees
|
||||
$attendees = [];
|
||||
if (!empty($data['emails']) && is_array($data['emails'])) {
|
||||
foreach ($data['emails'] as $email) {
|
||||
$attendees[] = ['email' => $email];
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Define the Event
|
||||
$event = new Event([
|
||||
'summary' => $data['summary'],
|
||||
'description' => $data['description'] ?? '',
|
||||
'start' => ['dateTime' => $startTime, 'timeZone' => 'Asia/Kolkata'],
|
||||
'end' => ['dateTime' => $endTime, 'timeZone' => 'Asia/Kolkata'],
|
||||
'attendees' => $attendees,
|
||||
'reminders' => [
|
||||
'useDefault' => false,
|
||||
'overrides' => [
|
||||
['method' => 'email', 'minutes' => 1440],
|
||||
['method' => 'popup', 'minutes' => 60],
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
$optParams = ['sendUpdates' => 'all'];
|
||||
|
||||
$calendarId = 'primary';
|
||||
$result = $this->service->events->insert($calendarId, $event, $optParams);
|
||||
|
||||
$responses['status'] = 'success';
|
||||
$responses['event_id'] = $result->getId();
|
||||
$responses['raw_response'] = $result;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
|
||||
$error_data = [
|
||||
'error' => $e->getMessage(),
|
||||
'data' => $data,
|
||||
'trace' => $e->getTraceAsString()
|
||||
];
|
||||
|
||||
// Log only on failure
|
||||
log_message('error', 'Google Calendar Event Creation Failed' . json_encode($error_data ?? []));
|
||||
|
||||
$responses['status'] = 'error';
|
||||
$responses['message'] = $e->getMessage();
|
||||
$responses['error_data'] = $error_data;
|
||||
}
|
||||
|
||||
return $responses;
|
||||
}
|
||||
|
||||
public function createStaffEvent(array $data)
|
||||
{
|
||||
$results = [];
|
||||
|
||||
$meetingStartRaw = (preg_match('/^\d{4}-\d{2}-\d{2}$/', $data['meeting_date']))
|
||||
? $data['meeting_date'] . ' 10:00:00'
|
||||
: $data['meeting_date'];
|
||||
|
||||
$startTime = date('c', strtotime($meetingStartRaw));
|
||||
$endTime = date('c', strtotime(date('Y-m-d', strtotime($meetingStartRaw)) . ' 23:59:59'));
|
||||
|
||||
|
||||
// Event Object create panrom (Common for all staff)
|
||||
$event = new Event([
|
||||
'summary' => $data['summary'],
|
||||
'description' => $data['description'] ?? '',
|
||||
'start' => ['dateTime' => $startTime, 'timeZone' => 'Asia/Kolkata'],
|
||||
'end' => ['dateTime' => $endTime, 'timeZone' => 'Asia/Kolkata'],
|
||||
'reminders' => [
|
||||
'useDefault' => false,
|
||||
'overrides' => [
|
||||
['method' => 'email', 'minutes' => 1440],
|
||||
['method' => 'popup', 'minutes' => 60],
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
// Loop through each staff email in the array
|
||||
foreach ($data['emails'] as $email) {
|
||||
try {
|
||||
|
||||
$this->client->setSubject($email);
|
||||
|
||||
$staffService = new Calendar($this->client);
|
||||
|
||||
$results[$email] = $staffService->events->insert('primary', $event);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$results[$email] = 'Error: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user