Google syncing also supports the provider timezones.
This commit is contained in:
parent
6858d120f6
commit
320ff37de1
1 changed files with 28 additions and 10 deletions
|
@ -149,6 +149,8 @@ class Google extends CI_Controller {
|
||||||
'company_email' => $this->settings_model->get_setting('company_email')
|
'company_email' => $this->settings_model->get_setting('company_email')
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$provider_timezone = new \DateTimeZone($provider['timezone']);
|
||||||
|
|
||||||
// Sync each appointment with Google Calendar by following the project's sync protocol (see documentation).
|
// Sync each appointment with Google Calendar by following the project's sync protocol (see documentation).
|
||||||
foreach ($appointments as $appointment)
|
foreach ($appointments as $appointment)
|
||||||
{
|
{
|
||||||
|
@ -187,10 +189,13 @@ class Google extends CI_Controller {
|
||||||
$is_different = FALSE;
|
$is_different = FALSE;
|
||||||
$appt_start = strtotime($appointment['start_datetime']);
|
$appt_start = strtotime($appointment['start_datetime']);
|
||||||
$appt_end = strtotime($appointment['end_datetime']);
|
$appt_end = strtotime($appointment['end_datetime']);
|
||||||
$event_start = strtotime($google_event->getStart()->getDateTime());
|
$event_start = new \DateTime($google_event->getStart()->getDateTime());
|
||||||
$event_end = strtotime($google_event->getEnd()->getDateTime());
|
$event_start->setTimezone($provider_timezone);
|
||||||
|
$event_end = new \DateTime($google_event->getEnd()->getDateTime());
|
||||||
|
$event_end->setTimezone($provider_timezone);
|
||||||
|
|
||||||
if ($appt_start != $event_start || $appt_end != $event_end
|
|
||||||
|
if ($appt_start != $event_start->getTimestamp() || $appt_end != $event_end->getTimestamp()
|
||||||
|| $appointment['notes'] !== $google_event->getDescription())
|
|| $appointment['notes'] !== $google_event->getDescription())
|
||||||
{
|
{
|
||||||
$is_different = TRUE;
|
$is_different = TRUE;
|
||||||
|
@ -198,8 +203,8 @@ class Google extends CI_Controller {
|
||||||
|
|
||||||
if ($is_different)
|
if ($is_different)
|
||||||
{
|
{
|
||||||
$appointment['start_datetime'] = date('Y-m-d H:i:s', $event_start);
|
$appointment['start_datetime'] = $event_start->format('Y-m-d H:i:s');
|
||||||
$appointment['end_datetime'] = date('Y-m-d H:i:s', $event_end);
|
$appointment['end_datetime'] = $event_end->format('Y-m-d H:i:s');
|
||||||
$appointment['notes'] = $google_event->getDescription();
|
$appointment['notes'] = $google_event->getDescription();
|
||||||
$this->appointments_model->add($appointment);
|
$this->appointments_model->add($appointment);
|
||||||
}
|
}
|
||||||
|
@ -220,16 +225,29 @@ class Google extends CI_Controller {
|
||||||
|
|
||||||
foreach ($events->getItems() as $event)
|
foreach ($events->getItems() as $event)
|
||||||
{
|
{
|
||||||
$results = $this->appointments_model->get_batch(['id_google_calendar' => $event->getId()]);
|
if ($event->getStatus() === 'cancelled') {
|
||||||
|
|
||||||
if (!empty($results) || empty($event)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($event->getStart() === null || $event->getEnd() === null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$results = $this->appointments_model->get_batch(['id_google_calendar' => $event->getId()]);
|
||||||
|
|
||||||
|
if (!empty($results)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$event_start = new \DateTime($event->getStart()->getDateTime());
|
||||||
|
$event_start->setTimezone($provider_timezone);
|
||||||
|
$event_end = new \DateTime($event->getEnd()->getDateTime());
|
||||||
|
$event_end->setTimezone($provider_timezone);
|
||||||
|
|
||||||
// Record doesn't exist in E!A, so add the event now.
|
// Record doesn't exist in E!A, so add the event now.
|
||||||
$appointment = [
|
$appointment = [
|
||||||
'start_datetime' => date('Y-m-d H:i:s', strtotime($event->start->getDateTime())),
|
'start_datetime' => $event_start->format('Y-m-d H:i:s'),
|
||||||
'end_datetime' => date('Y-m-d H:i:s', strtotime($event->end->getDateTime())),
|
'end_datetime' => $event_end->format('Y-m-d H:i:s'),
|
||||||
'is_unavailable' => TRUE,
|
'is_unavailable' => TRUE,
|
||||||
'location' => $event->getLocation(),
|
'location' => $event->getLocation(),
|
||||||
'notes' => $event->getSummary() . ' ' . $event->getDescription(),
|
'notes' => $event->getSummary() . ' ' . $event->getDescription(),
|
||||||
|
|
Loading…
Reference in a new issue