public function createGoogleEvent($action) { // Google Calendar Libraries $timezone = date_default_timezone_get(); require_once 'protected/integration/Google/google-api-php-client/src/Google/autoload.php'; date_default_timezone_set($timezone); $googleCalendar = $this->getGoogleCalendar(); $event = new Event(); $event->setSummary($action->actionDescription); if ($action->allDay) { $start = new EventDateTime(); $start->setDate(date('Y-m-d', $action->dueDate)); $event->setStart($start); if (!$action->completeDate) { $action->completeDate = $action->dueDate + 86400; } $end = new EventDateTime(); $end->setDate(date('Y-m-d', $action->completeDate)); $event->setEnd($end); } else { $start = new EventDateTime(); $start->setDateTime(date('c', $action->dueDate)); $event->setStart($start); if (!$action->completeDate) { $action->completeDate = $action->dueDate + 3600; } // if no end time specified, make event 1 hour long $end = new EventDateTime(); $end->setDateTime(date('c', $action->completeDate)); $event->setEnd($end); } if ($action->color && $action->color != '#3366CC') { $colorTable = array(10 => 'Green', 11 => 'Red', 6 => 'Orange', 8 => 'Black'); if (($key = array_search($action->color, $colorTable)) != false) { $event->setColorId($key); } } $googleCalendar->events->insert($this->googleCalendarId, $event); }
public function syncActionToGoogleCalendar($action) { try { // catch google exceptions so the whole app doesn't crash if google has a problem syncing $admin = Yii::app()->params->admin; if ($admin->googleIntegration) { if (isset($this->syncGoogleCalendarId) && $this->syncGoogleCalendarId) { // Google Calendar Libraries $timezone = date_default_timezone_get(); require_once "protected/extensions/google-api-php-client/src/apiClient.php"; require_once "protected/extensions/google-api-php-client/src/contrib/apiCalendarService.php"; date_default_timezone_set($timezone); $client = new apiClient(); $client->setClientId($admin->googleClientId); $client->setClientSecret($admin->googleClientSecret); $client->setDeveloperKey($admin->googleAPIKey); $client->setAccessToken($this->syncGoogleCalendarAccessToken); $googleCalendar = new apiCalendarService($client); // check if the access token needs to be refreshed // note that the google library automatically refreshes the access token if we need a new one, // we just need to check if this happend by calling a google api function that requires authorization, // and, if the access token has changed, save this new access token $testCal = $googleCalendar->calendars->get($this->syncGoogleCalendarId); if ($this->syncGoogleCalendarAccessToken != $client->getAccessToken()) { $this->syncGoogleCalendarAccessToken = $client->getAccessToken(); $this->update(); } $summary = $action->actionDescription; if ($action->associationType == 'contacts' || $action->associationType == 'contact') { $summary = $action->associationName . ' - ' . $action->actionDescription; } $event = new Event(); $event->setSummary($summary); if ($action->allDay) { $start = new EventDateTime(); $start->setDate(date('Y-m-d', $action->dueDate)); $event->setStart($start); if (!$action->completeDate) { $action->completeDate = $action->dueDate; } $end = new EventDateTime(); $end->setDate(date('Y-m-d', $action->completeDate + 86400)); $event->setEnd($end); } else { $start = new EventDateTime(); $start->setDateTime(date('c', $action->dueDate)); $event->setStart($start); if (!$action->completeDate) { $action->completeDate = $action->dueDate; } // if no end time specified, make event 1 hour long $end = new EventDateTime(); $end->setDateTime(date('c', $action->completeDate)); $event->setEnd($end); } if ($action->color && $action->color != '#3366CC') { $colorTable = array(10 => 'Green', 11 => 'Red', 6 => 'Orange', 8 => 'Black'); if (($key = array_search($action->color, $colorTable)) != false) { $event->setColorId($key); } } $newEvent = $googleCalendar->events->insert($this->syncGoogleCalendarId, $event); $action->syncGoogleCalendarEventId = $newEvent['id']; } } } catch (Exception $e) { } }