Skip to content

Commit

Permalink
Replace Google Client JS with the Google Calendar Template link in th…
Browse files Browse the repository at this point in the history
…e book success page (#1216)
  • Loading branch information
alextselegidis committed May 10, 2022
1 parent df0b461 commit a759cb8
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 122 deletions.
30 changes: 26 additions & 4 deletions application/controllers/Appointments.php
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ public function index($appointment_hash = '')
}

$appointment = $results[0];

$appointment = [
'id' => $appointment['id'],
'hash' => $appointment['hash'],
Expand Down Expand Up @@ -303,7 +303,7 @@ public function cancel($appointment_hash)
}

/**
* GET an specific appointment book and redirect to the success screen.
* GET a specific appointment book and redirect to the success screen.
*
* @param string $appointment_hash The appointment hash identifier.
*
Expand All @@ -315,12 +315,18 @@ public function book_success($appointment_hash)

if (empty($appointments))
{
redirect('appointments'); // The appointment does not exist.
$vars = [
'message_title' => lang('appointment_not_found'),
'message_text' => lang('appointment_does_not_exist_in_db'),
'message_icon' => base_url('assets/img/error.png')
];

$this->load->view('appointments/message', $vars);

return;
}

$appointment = $appointments[0];
unset($appointment['notes']);

$customer = $this->customers_model->get_row($appointment['id_users_customer']);

Expand All @@ -330,6 +336,21 @@ public function book_success($appointment_hash)

$company_name = $this->settings_model->get_setting('company_name');

$appointment_start_instance = new DateTime($appointment['start_datetime']);

$appointment_end_instance = new DateTime($appointment['end_datetime']);

$add_to_google_url_params = [
'action' => 'TEMPLATE',
'text' => $service['name'],
'dates' => $appointment_start_instance->format('Ymd\THis\Z') . '/' . $appointment_end_instance->format('Ymd\THis\Z'),
'location' => $company_name,
'details' => 'View/Change Appointment: ' . site_url('appointments/index/' . $appointment['hash']),
'add' => $provider['email'] . ',' . $customer['email']
];

$add_to_google_url = 'https://calendar.google.com/calendar/render?' . http_build_query($add_to_google_url_params);

// Get any pending exceptions.
$exceptions = $this->session->flashdata('book_success');

Expand All @@ -354,6 +375,7 @@ public function book_success($appointment_hash)
'name' => $service['name'],
],
'company_name' => $company_name,
'add_to_google_url' => $add_to_google_url,
];

if ($exceptions)
Expand Down
14 changes: 4 additions & 10 deletions application/views/appointments/book_success.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,10 @@
<?= lang('go_to_booking_page') ?>
</a>

<?php if (config('google_sync_feature')): ?>
<button id="add-to-google-calendar" class="btn btn-primary">
<i class="fas fa-plus"></i>
<?= lang('add_to_google_calendar') ?>
</button>
<?php endif ?>
<a href="<?= $add_to_google_url ?>" id="add-to-google-calendar" class="btn btn-primary" target="_blank">
<i class="fas fa-plus"></i>
<?= lang('add_to_google_calendar') ?>
</a>

<?php if (isset($exceptions)): ?>
<div class="m-2">
Expand Down Expand Up @@ -75,7 +73,6 @@
<script src="<?= base_url('assets/ext/datejs/date.min.js') ?>"></script>
<script src="<?= asset_url('assets/ext/moment/moment.min.js') ?>"></script>
<script src="<?= asset_url('assets/ext/moment/moment-timezone-with-data.min.js') ?>"></script>
<script src="https://apis.google.com/js/client.js"></script>

<script>
var GlobalVariables = {
Expand All @@ -85,9 +82,6 @@
customerData: <?= json_encode($customer_data) ?>,
serviceData: <?= json_encode($service_data) ?>,
companyName: <?= json_encode($company_name) ?>,
googleApiKey: <?= json_encode(config('google_api_key')) ?>,
googleClientId: <?= json_encode(config('google_client_id')) ?>,
googleApiScope: 'https://www.googleapis.com/auth/calendar'
};

var EALang = <?= json_encode($this->lang->language) ?>;
Expand Down
111 changes: 3 additions & 108 deletions assets/js/frontend_book_success.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,112 +10,7 @@
* ---------------------------------------------------------------------------- */

$(document).ready(function () {
/**
* Event: Add Appointment to Google Calendar "Click"
*
* This event handler adds the appointment to the users Google Calendar Account. The event is going to
* be added to the "primary" calendar. In order to use the API the javascript client library provided by
* Google is necessary.
*/
$('#add-to-google-calendar').on('click', function () {
gapi.client.setApiKey(GlobalVariables.googleApiKey);
gapi.auth.authorize({
client_id: GlobalVariables.googleClientId,
scope: GlobalVariables.googleApiScope,
immediate: false
}, handleAuthResult);
});

/**
* Handle Authorization Result
*
* This method handles the authorization result. If the user granted access to his data, then the
* appointment is going to be added to his calendar.
*
* @param {Boolean} authResult The user's authorization result.
*/
function handleAuthResult(authResult) {
try {
if (authResult.error) {
throw new Error('Could not authorize user.');
}

// The user has granted access, add the appointment to his calendar. Before making the event.insert request
// the the event resource data must be prepared.
var providerData = GlobalVariables.providerData;

var appointmentData = GlobalVariables.appointmentData;

// Create a valid Google Calendar API resource for the new event.
var resource = {
summary: GlobalVariables.serviceData.name,
location: GlobalVariables.companyName,
start: {
dateTime: moment.tz(appointmentData.start_datetime, providerData.timezone).format()
},
end: {
dateTime: moment.tz(appointmentData.end_datetime, providerData.timezone).format()
},
attendees: [
{
email: GlobalVariables.providerData.email,
displayName: GlobalVariables.providerData.first_name + ' '
+ GlobalVariables.providerData.last_name
}
]
};

gapi.client.load('calendar', 'v3', function () {
var request = gapi.client.calendar.events.insert({
calendarId: 'primary',
resource: resource
});

request.execute(function (response) {
if (response.error) {
throw new Error('Could not add the event to Google Calendar.');
}

$('#success-frame').append(
$('<br/>'),
$('<div/>', {
'class': 'alert alert-success col-xs-12',
'html': [
$('<h4/>', {
'text': EALang.success
}),
$('<p/>', {
'text': EALang.appointment_added_to_google_calendar
}),
$('<a/>', {
'href': response.htmlLink,
'text': EALang.view_appointment_in_google_calendar
})
]
})
);
$('#add-to-google-calendar').hide();
});
});
} catch (error) {
// The user denied access or something else happened, display corresponding message on the screen.
$('#success-frame').append(
$('<br/>'),
$('<div/>', {
'class': 'alert alert-danger col-xs-12',
'html': [
$('<h4/>', {
'text': EALang.oops_something_went_wrong
}),
$('<p/>', {
'text': EALang.could_not_add_to_google_calendar
}),
$('<pre/>', {
'text': error.message
}),
]
})
);
}
}

//

});

0 comments on commit a759cb8

Please sign in to comment.