/** * Tarsform Vtiger Records to Google Records * @param <array> $vtContacts * @return <array> tranformed vtiger Records */ public function transformToTargetRecord($vtContacts) { $records = array(); foreach ($vtContacts as $vtContact) { $gdataContact = new Zend_Gdata_Contacts($this->apiInstance); if ($vtContact->getMode() == WSAPP_SyncRecordModel::WSAPP_UPDATE_MODE || $vtContact->getMode() == WSAPP_SyncRecordModel::WSAPP_DELETE_MODE) { try { $entry = $gdataContact->getContactListEntry($vtContact->get('_id')); } catch (Exception $e) { continue; } } else { $entry = $gdataContact->newContactEntry(); } $entry->name = $gdataContact->newName($vtContact->get('firstname') . " " . $vtContact->get('lastname')); $primaryEmail = $gdataContact->newEmail($vtContact->get('email')); $addressArray = array(); $mailingstreet = $vtContact->get('mailingstreet'); if (!empty($mailingstreet)) { $postalAddress = $gdataContact->newStructuredPostalAddress("Postal Address"); $postalAddress->street = $gdataContact->newStreet(implode(' ', array($vtContact->get('mailingstreet'), $vtContact->get('mailingcity'), $vtContact->get('mailingstate'), $vtContact->get('mailingcountry')))); $addressArray[] = $postalAddress; } $phoneArray = array(); $phone = $vtContact->get('mobile'); if (!empty($phone)) { $phoneArray[] = $gdataContact->newPhoneNumber($phone); } $entry->emails = array($primaryEmail); $entry->phones = $phoneArray; $entry->addresses = $addressArray; $recordModel = Google_Contacts_Model::getInstanceFromValues(array('entity' => $entry)); $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode($vtContact->getMode())->setSyncIdentificationKey($vtContact->get('_syncidentificationkey')); $recordModel = $this->performBasicTransformations($vtContact, $recordModel); $recordModel = $this->performBasicTransformationsToTargetRecords($recordModel, $vtContact); $records[] = $recordModel; } return $records; }
/** * Pull the events from google * @param <object> $SyncState * @return <array> google Records */ public function getCalendar($SyncState) { $calendars = new Zend_Gdata_Calendar($this->apiInstance); $query = $calendars->newEventQuery($query); $query->setVisibility('private'); $query->setMaxResults($this->maxResults); $query->setStartIndex(1); $query->setOrderBy('lastmodified'); $query->setsortorder('ascending'); if (Google_Utils_Helper::getSyncTime('Calendar')) { $query->setUpdatedMin(Google_Utils_Helper::getSyncTime('Calendar')); } $feed = $calendars->getCalendarEventFeed($query); $this->totalRecords = $feed->totalResults->text; $calendarRecords = array(); if (count($feed->entry) > 0) { $maxModifiedTime = date('Y-m-d H:i:s', strtotime(Google_Contacts_Model::vtigerFormat(end($feed->entry)->updated->text)) + 1); if ($this->totalRecords > $this->maxResults) { if (!Google_Utils_Helper::getSyncTime('Calendar')) { $query->setUpdatedMin(date('Y-m-d H:i:s', strtotime(Google_Contacts_Model::vtigerFormat(end($feed->entry)->updated->text)))); $query->setStartIndex($this->maxResults); } $query->setMaxResults(500); $query->setUpdatedMax($maxModifiedTime); $extendedFeed = $calendars->getCalendarEventFeed($query); $calendarRecords = array_merge($feed->entry, $extendedFeed->entry); } else { $calendarRecords = $feed->entry; } } $googleRecords = array(); foreach ($calendarRecords as $i => $calendar) { $recordModel = Google_Calendar_Model::getInstanceFromValues(array('entity' => $calendar)); $deleted = false; if (end(explode('.', $calendar->eventstatus->value)) == 'canceled') { $deleted = true; } if (!$deleted) { $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode(WSAPP_SyncRecordModel::WSAPP_UPDATE_MODE); } else { $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode(WSAPP_SyncRecordModel::WSAPP_DELETE_MODE); } $googleRecords[$calendar->id->text] = $recordModel; } $this->createdRecords = count($googleRecords); if (isset($maxModifiedTime)) { Google_Utils_Helper::updateSyncTime('Calendar', $maxModifiedTime); } else { Google_Utils_Helper::updateSyncTime('Calendar'); } return $googleRecords; }
/** * Pull the events from google * @param <object> $SyncState * @return <array> google Records */ public function getCalendar($SyncState, $user = false) { if ($this->apiConnection->isTokenExpired()) { $this->apiConnection->refreshToken(); $this->client->setAccessToken($this->apiConnection->getAccessToken()); $this->service = new Google_Service_Calendar($this->client); } $query = array('maxResults' => $this->maxResults, 'orderBy' => 'updated', 'singleEvents' => true); if (Google_Utils_Helper::getSyncTime('Calendar', $user)) { $query['updatedMin'] = $this->googleFormat(Google_Utils_Helper::getSyncTime('Calendar', $user)); //shows deleted by default } try { $feed = $this->service->events->listEvents('primary', $query); } catch (Exception $e) { if ($e->getCode() == 410) { $query['showDeleted'] = false; $feed = $this->service->events->listEvents('primary', $query); } } $calendarRecords = array(); if ($feed) { $calendarRecords = $feed->getItems(); if ($feed->getNextPageToken()) { $this->totalRecords = $this->maxResults + 1; } } if (count($calendarRecords) > 0) { $maxModifiedTime = date('Y-m-d H:i:s', strtotime(Google_Contacts_Model::vtigerFormat(end($calendarRecords)->getUpdated())) + 1); } $googleRecords = array(); foreach ($calendarRecords as $i => $calendar) { $recordModel = Google_Calendar_Model::getInstanceFromValues(array('entity' => $calendar)); $deleted = false; if ($calendar->getStatus() == 'cancelled') { $deleted = true; } if (!$deleted) { $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode(WSAPP_SyncRecordModel::WSAPP_UPDATE_MODE); } else { $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode(WSAPP_SyncRecordModel::WSAPP_DELETE_MODE); } $googleRecords[$calendar->getId()] = $recordModel; } $this->createdRecords = count($googleRecords); if (isset($maxModifiedTime)) { Google_Utils_Helper::updateSyncTime('Calendar', $maxModifiedTime, $user); } else { Google_Utils_Helper::updateSyncTime('Calendar', false, $user); } return $googleRecords; }
/** * Tarsform Vtiger Records to Google Records * @param <array> $vtContacts * @return <array> tranformed vtiger Records */ public function transformToTargetRecord($vtContacts) { $records = array(); foreach ($vtContacts as $vtContact) { $recordModel = Google_Contacts_Model::getInstanceFromValues(array('entity' => $vtContact)); $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode($vtContact->getMode())->setSyncIdentificationKey($vtContact->get('_syncidentificationkey')); $recordModel = $this->performBasicTransformations($vtContact, $recordModel); $recordModel = $this->performBasicTransformationsToTargetRecords($recordModel, $vtContact); $records[] = $recordModel; } return $records; }