Open Event Web app allows organizers to add a feature which enables the users to add any session to their google calendar. The organizer is required to generate an API key and client ID on Google developers console and add the generated credentials to web app generator. The credentials are added to the generated application and every session is added with an Add to calendar button, which on click makes the request to add the corresponding session to the calendar.
Creating Client ID and API key
Enable the Google calendar API from Google developers console. Go to `Create Credentials` tab and generate an API key and client ID for your app. While creating the client ID, an input field is present which requires Authorised javascript origins, mention the domains where the generated application would be deployed.
Adding Client ID and API key to the generator
The Client ID and API key obtained from the developer console is added to the web app generator. The event generated uses these credentials to make a request to the server for adding any session to the calendar.
The added credentials are used to initialise the client in the procedure `initClient()` –
function initClient() { let id = document.getElementById('gcalendar-id').value; let key = document.getElementById('gcalendar-key').value; let CLIENT_ID = id; let API_KEY = key; let DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest"]; let SCOPES = "https://www.googleapis.com/auth/calendar"; gapi.client.init({ apiKey: API_KEY, clientId: CLIENT_ID, discoveryDocs: DISCOVERY_DOCS, scope: SCOPES }) }
Adding session to the Google calendar
Every Google calendar enabled event is provided a button with every session, so that corresponding session can be added to the calendar. A procedure named `handleAuthClick` is called with the details of session being passed as parameter when the user clicks on the button. This function handles the authentication required for adding session to the calendar.
function handleAuthClick(title, location, calendarStart, calendarEnd, timezone, description) { let isSignedIn = gapi.auth2.getAuthInstance().isSignedIn.get(); if (!isSignedIn) { gapi.auth2.getAuthInstance().signIn().then(function() { main.listUpcomingEvents(title, location, calendarStart, calendarEnd, timezone, description); }); } else { main.listUpcomingEvents(title, location, calendarStart, calendarEnd, timezone, description); } }
A function named `listUpcomingEvents` makes the request to insert the event object with details of the session to the calendar.
function listUpcomingEvents(title, location, calendarStart, calendarEnd, timezone, description) { let event = { ... // Event details ... // Code for notifications ... ... 'colorId': '5' }; let request = gapi.client.calendar.events.insert({ 'calendarId': 'primary', 'resource': event }); request.execute(function(event) { // Success notification }); }
When the session with the corresponding data is added to calendar, an alert box notifying successful addition of session is shown up on the screen.
Resources
- Open Event Webapp Repository: https://github.com/fossasia/open-event-webapp
- Pull Request: https://github.com/fossasia/open-event-webapp/pull/1967
- Issue: https://github.com/fossasia/open-event-webapp/issues/1513
- Additional Resources: https://developers.google.com/calendar/quickstart/js, https://developers.google.com/calendar/