Register
Submit a solution
The challenge is finished.

Challenge Overview

The purpose of this tool is to allow an end user to add addional attributes to a Google Calendar event. The event details and the additional attributes should be synced with an external web service. 

  1. When a user opens an event from the Google Calendar UI, the chrome extension should add a new page element called “IRIS” (highlighted in yellow below):

  2. This extension should include a few options, as follows:
    IRIS Category
        This should be a picklist with a few options, as set in a config file
    Priority Service
        This should be a picklist with a few options, as set in a config file
    Main Contact
        This is based upon the attendee list of the event, detailed below.
    Submit to IRIS
        This will POST a JSON message to a web service, details below.

  3. Main Contact picklist:
    There should be a “home domain” variable set within a config file. Only those event attendees with email addresses outside of “home domain” should be listed here.
    a. If there are zero attendees outside of “home domain”, hide this field.
    b. If there is one attendee outside of “home domain”, display this field as read-only with that attendee pre-populated.
    c. If there are multiple attendees outside of “home domain”, display an editable picklist.

    Example (assumes home domain is set to topcoder.com):
    a. Event is owned by mary@topcoder.com, with an attendee of user@topcoder.com. Do not display this picklist.
    b. Event is owned by mary@topcoder.com, with attendees of user@topcoder.com and user1@domain1.com. This should display a read-only field with user1@domain1.com pre-populated.
    c. Event is owned by mary@topcoder.com, with attendees of user@topcoder.com, user1@domain1.com, and user2@domain2.com. This should dispaly a picklist prompting the user to choose either user1@domain1.com or user2@domain2.com. 

  4. Submit to IRIS button:
    Submit to IRIS will POST a JSON message containing Event object (from the Calendar v3 API) and the IRIS specific attributes. POST URL will be configured in the config file.

  5. Upon submit, using the Google Calendar v3 API, save these values into the event’s extendedProperties.shared object. Include all three IRIS attributes and also an activity ID which is returned from the POST.

  6. Once submitted (and extendedProperties stored), the button label changes from “Submit to IRIS” to “Resubmit to IRIS”. The IRIS attributes become fixed (grayed out), but event details can obviously change.

  7. Resubmit to IRIS button:
    Resubmit will POST a JSON message containing changed information in the Event object. The IRIS attributes and activity ID will remain the same.

  8. This UI should only be displayed for users who have read/write or owner access to the meeting’s primary calendar. Otherwise, this section of the page should remain blank.


 

Tips and reusable code:

  • Use OAuth 2.0 to authorize all requests to the Google Calendar API.

  • You may pull the event’s ID out of the DOM from the data-eid value. This contains a base-64 encoded string including the event ID and event primary calendar. Do not scrape the the DOM for any additional information or use it to update the event in any way. Other details should be retrieved from and pushed to the Calendar API (v3).

  • For testing purposes, you may use Node.js or a similar tool to act as the web service. It should be freely available and easy to implement for testing.

  • Thie IRIS sync functionality has previously been implemented as a Calendar Sidebar Gadget. You'll find the source for this attached as a reference. Feel free to use parts of this, but note that it is not fully working in present state.

  • I've also attached the source for a similarly implemented Chrome extension. Feel free to reuse any of this code, but if you do, please ensure that any bugs listed at http://www.topcoder.com/challenge-details/30046482 are corrected or not brought across.



Final Submission Guidelines

Submission Deliverable:

  • Source code
  • Detailed design document and deployment guide

ELIGIBLE EVENTS:

2015 topcoder Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30046527