function import_google_calendar_for_user($user)
 {
     if ($user instanceof ExternalCalendarUser) {
         $calendars = ExternalCalendars::findByExtCalUserId($user->getId());
         $service = $this->connect_with_google_calendar($user);
         $contact = Contacts::findById($user->getContactId());
         try {
             //update or insert events for calendars
             foreach ($calendars as $calendar) {
                 if ($calendar->getSync() == 0) {
                     continue;
                 }
                 $optParams = array();
                 $syncToken = $calendar->getExternalCalendarPropertyValue("syncToken");
                 //if syncToken is not present we have to make a full sync
                 if ($syncToken) {
                     //incremental sync get events created or updated from las check
                     $optParams['syncToken'] = $syncToken;
                 } else {
                     //full sync get events starting from past 2 weeks
                     $previous_week = strtotime("-2 week");
                     $time_min = date(DATE_RFC3339, $previous_week);
                     $optParams['timeMin'] = $time_min;
                 }
                 //Try to get events for this calendar
                 try {
                     $events = $service->events->listEvents($calendar->getOriginalCalendarId(), $optParams);
                 } catch (Exception $e) {
                     Logger::log("Fail to get events from external calendar: " . $calendar->getId());
                     Logger::log($e->getMessage());
                     //remove the syncToken for this calendar so the next time we do a full sync
                     $syncTokenProp = $calendar->getExternalCalendarProperty("syncToken");
                     if ($syncTokenProp) {
                         $syncTokenProp->delete();
                     }
                     //go to the next calendar
                     continue;
                 }
                 //Working with events
                 while (true) {
                     foreach ($events->getItems() as $event) {
                         //check if is a cancelled event
                         if ($event->getStatus() == "cancelled") {
                             $cancelled_event = ProjectEvents::findBySpecialId($event->getId(), $calendar->getId());
                             //delete ProjectEvent
                             if ($cancelled_event instanceof ProjectEvent) {
                                 $cancelled_event->delete();
                             }
                             continue;
                         }
                         //check if is a recurrent event
                         if (is_array($event->getRecurrence())) {
                             continue;
                         }
                         //check if is a recurrent event instance
                         if (!is_null($event->getRecurringEventId()) && $event->getRecurringEventId() != '') {
                             continue;
                         }
                         //get all the data that we need from google event
                         $event_id = $event->getId();
                         $event_name = $event->getSummary();
                         $event_desc = $event->getDescription();
                         $event_start_date = ExternalCalendarController::date_google_to_sql($event->getStart());
                         $event_end_date = ExternalCalendarController::date_google_to_sql($event->getEnd());
                         $event_type = 1;
                         if ($event->getStart()->getDate()) {
                             $event_type = 2;
                             //set this times because we have a bug with all day events times
                             $event_start_date = DateTimeValueLib::dateFromFormatAndString(DATE_MYSQL, $event_start_date);
                             $event_start_date->advance(12 * 3600);
                             $event_start_date = $event_start_date->toMySQL();
                             $event_end_date = DateTimeValueLib::dateFromFormatAndString(DATE_MYSQL, $event_start_date);
                             $event_end_date->advance(1 * 3600);
                             $event_end_date = $event_end_date->toMySQL();
                         }
                         $event_updated_date = EMPTY_DATETIME;
                         if (!is_null($event->getUpdated()) && $event->getUpdated() != '') {
                             $event_updated_date_str = strtotime($event->getUpdated());
                             $event_updated_date = date(DATE_MYSQL, $event_updated_date_str);
                         }
                         //Save event
                         try {
                             DB::beginWork();
                             //if event exist update it
                             $new_event = ProjectEvents::findBySpecialId($event_id, $calendar->getId());
                             if (!$new_event instanceof ProjectEvent) {
                                 //Create ProjectEvent from google event
                                 $new_event = new ProjectEvent();
                             }
                             $new_event->setSpecialID($event_id);
                             $new_event->setStart($event_start_date);
                             $new_event->setDuration($event_end_date);
                             $new_event->setTypeId($event_type);
                             $new_event->setObjectName($event_name);
                             $new_event->setDescription($event_desc);
                             $new_event->setUpdateSync($event_updated_date);
                             $new_event->setExtCalId($calendar->getId());
                             $new_event->save();
                             //Invitation insert only if not exists
                             $conditions = array('event_id' => $new_event->getId(), 'contact_id' => $user->getContactId());
                             if (EventInvitations::findById($conditions) == null) {
                                 $invitation = new EventInvitation();
                                 $invitation->setEventId($new_event->getId());
                                 $invitation->setContactId($user->getContactId());
                                 $invitation->setInvitationState(1);
                                 $invitation->setUpdateSync();
                                 $invitation->setSpecialId($event_id);
                                 $invitation->save();
                             }
                             //Subscription insert only if not exists
                             if (ObjectSubscriptions::findBySubscriptions($new_event->getId(), $contact) == null) {
                                 $subscription = new ObjectSubscription();
                                 $subscription->setObjectId($new_event->getId());
                                 $subscription->setContactId($user->getContactId());
                                 $subscription->save();
                             }
                             $member = array();
                             if ($calendar->getRelatedTo()) {
                                 $member_ids = explode(",", $calendar->getRelatedTo());
                                 foreach ($member_ids as $member_id) {
                                     $member[] = $member_id;
                                 }
                             }
                             $object_controller = new ObjectController();
                             $object_controller->add_to_members($new_event, $member, $contact);
                             DB::commit();
                         } catch (Exception $e) {
                             DB::rollback();
                             Logger::log("Fail to save event for external calendar user: "******"syncToken", $nextSyncToken);
                         }
                         break;
                     }
                 }
             }
             //foreach calendars
         } catch (Exception $e) {
             Logger::log("Fail to get events for external calendar user: " . $user->getId());
             Logger::log($e->getMessage());
         }
     }
 }