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; } }