forked from mirrors/easyappointments
Further fixes on the google synyc activation (#890).
This commit is contained in:
parent
4c10b5a173
commit
068a3995b0
4 changed files with 56 additions and 33 deletions
|
@ -82,29 +82,37 @@ class Google extends CI_Controller {
|
|||
*/
|
||||
public function oauth_callback()
|
||||
{
|
||||
if ($this->input->get('code'))
|
||||
$code = $this->input->get('code');
|
||||
|
||||
if (empty($code))
|
||||
{
|
||||
$this->load->library('Google_sync');
|
||||
$token = $this->google_sync->authenticate($this->input->get('code'));
|
||||
$this->output->set_output('Code authorization failed.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Store the token into the database for future reference.
|
||||
$oauth_provider_id = $this->session->userdata('oauth_provider_id');
|
||||
$this->load->library('Google_sync');
|
||||
|
||||
if ($oauth_provider_id)
|
||||
{
|
||||
$this->load->model('providers_model');
|
||||
$this->providers_model->set_setting('google_sync', TRUE, $oauth_provider_id);
|
||||
$this->providers_model->set_setting('google_token', $token, $oauth_provider_id);
|
||||
$this->providers_model->set_setting('google_calendar', 'primary', $oauth_provider_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output->set_output('<h1>Sync provider id not specified!</h1>');
|
||||
}
|
||||
$token = $this->google_sync->authenticate($code);
|
||||
|
||||
if (empty($token))
|
||||
{
|
||||
$this->output->set_output('Token authorization failed.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Store the token into the database for future reference.
|
||||
$oauth_provider_id = $this->session->userdata('oauth_provider_id');
|
||||
|
||||
if ($oauth_provider_id)
|
||||
{
|
||||
$this->load->model('providers_model');
|
||||
$this->providers_model->set_setting('google_sync', TRUE, $oauth_provider_id);
|
||||
$this->providers_model->set_setting('google_token', json_encode($token), $oauth_provider_id);
|
||||
$this->providers_model->set_setting('google_calendar', 'primary', $oauth_provider_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->output->set_output('<h1>Authorization Failed!</h1>');
|
||||
$this->output->set_output('Sync provider id not specified.');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -62,7 +62,11 @@ class Google_Sync {
|
|||
$this->client->setClientSecret($this->framework->config->item('google_client_secret'));
|
||||
$this->client->setDeveloperKey($this->framework->config->item('google_api_key'));
|
||||
$this->client->setRedirectUri(site_url('google/oauth_callback'));
|
||||
$this->client->setScopes('https://www.googleapis.com/auth/calendar');
|
||||
$this->client->setAccessType('offline');
|
||||
$this->client->addScope([
|
||||
Google_Service_Calendar::CALENDAR,
|
||||
Google_Service_Calendar::CALENDAR_READONLY
|
||||
]);
|
||||
|
||||
$this->service = new Google_Service_Calendar($this->client);
|
||||
}
|
||||
|
@ -88,12 +92,22 @@ class Google_Sync {
|
|||
* provided. Using this code, we can authenticate the API usage and store the
|
||||
* token information to the database.
|
||||
*
|
||||
* @see Google Controller
|
||||
* @param $code
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function authenticate($auth_code)
|
||||
public function authenticate($code)
|
||||
{
|
||||
$this->client->authenticate($auth_code);
|
||||
return $this->client->getAccessToken();
|
||||
$response = $this->client->fetchAccessTokenWithAuthCode($code);
|
||||
|
||||
if (isset($response['error']))
|
||||
{
|
||||
throw new Exception('Google Authentication Error (' . $response['error'] . '): ' . $response['error_description']);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -250,12 +250,12 @@ window.BackendCalendarDefaultView = window.BackendCalendarDefaultView || {};
|
|||
|
||||
// If the user has already the sync enabled then apply the proper style changes.
|
||||
if ($('#select-filter-item option:selected').attr('google-sync') === 'true') {
|
||||
$('#enable-sync').addClass('btn-danger enabled');
|
||||
$('#enable-sync span:eq(1)').text(EALang.disable_sync);
|
||||
$('#enable-sync').removeClass('btn-light').addClass('btn-danger enabled');
|
||||
$('#enable-sync span').text(EALang.disable_sync);
|
||||
$('#google-sync').prop('disabled', false);
|
||||
} else {
|
||||
$('#enable-sync').removeClass('btn-danger enabled');
|
||||
$('#enable-sync span:eq(1)').text(EALang.enable_sync);
|
||||
$('#enable-sync').removeClass('btn-danger enabled').addClass('btn-light');
|
||||
$('#enable-sync span').text(EALang.enable_sync);
|
||||
$('#google-sync').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,8 +53,8 @@ window.BackendCalendarGoogleSync = window.BackendCalendarGoogleSync || {};
|
|||
// The user has granted access to his data.
|
||||
windowHandle.close();
|
||||
window.clearInterval(authInterval);
|
||||
$('#enable-sync').addClass('btn-danger enabled');
|
||||
$('#enable-sync span:eq(1)').text(EALang.disable_sync);
|
||||
$('#enable-sync').addClass('btn-danger enabled').removeClass('btn-light');
|
||||
$('#enable-sync span').text(EALang.disable_sync);
|
||||
$('#google-sync').prop('disabled', false);
|
||||
$('#select-filter-item option:selected').attr('google-sync', 'true');
|
||||
|
||||
|
@ -71,8 +71,9 @@ window.BackendCalendarGoogleSync = window.BackendCalendarGoogleSync || {};
|
|||
$.post(url, data)
|
||||
.done(function (response) {
|
||||
$('#google-calendar').empty();
|
||||
response.forEach(response, function (event) {
|
||||
$('#google-calendar').append(new Option(event.summary, event.id));
|
||||
|
||||
response.forEach(function (calendar) {
|
||||
$('#google-calendar').append(new Option(calendar.summary, calendar.id));
|
||||
});
|
||||
|
||||
$('#select-google-calendar').modal('show');
|
||||
|
@ -94,7 +95,7 @@ window.BackendCalendarGoogleSync = window.BackendCalendarGoogleSync || {};
|
|||
var providerId = $('#select-filter-item').val();
|
||||
|
||||
var provider = GlobalVariables.availableProviders.find(function (availableProvider) {
|
||||
return Number(provider.id) === Number(providerId);
|
||||
return Number(availableProvider.id) === Number(providerId);
|
||||
});
|
||||
|
||||
provider.settings.google_sync = '0';
|
||||
|
@ -102,8 +103,8 @@ window.BackendCalendarGoogleSync = window.BackendCalendarGoogleSync || {};
|
|||
|
||||
disableProviderSync(provider.id);
|
||||
|
||||
$('#enable-sync').removeClass('btn-danger enabled');
|
||||
$('#enable-sync span:eq(1)').text(EALang.enable_sync);
|
||||
$('#enable-sync').removeClass('btn-danger enabled').addClass('btn-light');
|
||||
$('#enable-sync span').text(EALang.enable_sync);
|
||||
$('#google-sync').prop('disabled', true);
|
||||
$('#select-filter-item option:selected').attr('google-sync', 'false');
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue