function export_google_calendar_for_user($user) { $service = $this->connect_with_google_calendar($user); if ($user->getSync() == 1) { $calendar_feng = ExternalCalendars::findFengCalendarByExtCalUserIdValue($user->getId()); //get events starting from past 2 weeks $previous_week = strtotime("-2 week"); $time_min = date(DATE_MYSQL, $previous_week); $events = ProjectEvents::findNoSync($user->getContactId(), $time_min, 100); $events_inv = ProjectEvents::findNoSyncInvitations($user->getContactId(), $time_min, 100); try { if ($calendar_feng instanceof ExternalCalendar) { $events_and_inv = array_merge($events, $events_inv); foreach ($events_and_inv as $event) { $this->update_event_on_google_calendar($event, $calendar_feng, $user, $service); } //we ask for events in this calendar in order to prevent checking the uploaded events on the import try { $now = strtotime("now"); $time_min = date(DATE_RFC3339, $now); $optParams['timeMin'] = $time_min; $events = $service->events->listEvents($calendar_feng->getOriginalCalendarId(), $optParams); } catch (Exception $e) { Logger::log("Fail to get events from feng external calendar: " . $calendar->getId()); Logger::log($e->getMessage()); } //update the calendar token $nextSyncToken = $events->getNextSyncToken(); if ($nextSyncToken) { $calendar_feng->setExternalCalendarPropertyValue("syncToken", $nextSyncToken); } } else { //create feng calendar on google if not exists and save it on feng $instalation = explode("/", ROOT_URL); $instalation_name = end($instalation); $calendar_name = lang('feng calendar', $instalation_name); $calendar_exists = false; //check if calendar exists try { $calendarList = $service->calendarList->listCalendarList(); while (true) { foreach ($calendarList->getItems() as $calendarListEntry) { if ($calendarListEntry->getSummary() == $calendar_name) { $calendar_exists = true; $external_calendar = array('original_calendar_id' => $calendarListEntry->getId(), 'title' => $calendarListEntry->getSummary(), 'calendar_status' => 1); break; } } $pageToken = $calendarList->getNextPageToken(); if ($pageToken) { $optParams = array('pageToken' => $pageToken); $calendarList = $service->calendarList->listCalendarList($optParams); } else { break; } } } catch (Exception $e) { Logger::log("Fail to get calendars list from google: " . $user->getContactId()); throw $e; } if (!$calendar_exists) { $new_calendar = new Google_Service_Calendar_Calendar(); $new_calendar->setSummary($calendar_name); //$calendar->setTimeZone('America/Los_Angeles'); $createdCalendar = $service->calendars->insert($new_calendar); $external_calendar = array('original_calendar_id' => $createdCalendar->getId(), 'title' => $createdCalendar->getSummary(), 'calendar_status' => 1); } $calendar = new ExternalCalendar(); $calendar->setOriginalCalendarId($external_calendar['original_calendar_id']); //$calendar->setCalendarVisibility($calendar_visibility); $calendar->setCalendarName($external_calendar['title']); $calendar->setExtCalUserId($user->getId()); $calendar->setCalendarFeng(1); $calendar->setSync(1); $calendar->save(); } flash_success(lang('success add sync')); ajx_current("reload"); } catch (Exception $e) { Logger::log($e->getMessage()); } } }