Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Calendar API - PHP - set event's color

How do we set a color when inserting an event with Google Calendar API (PHP)?

like image 581
Jess Avatar asked Jul 05 '12 14:07

Jess


2 Answers

Here is a PHP function I wrote and the portions of the PHP client library I extracted to allow me to create events in my calendar, delete events and so forth but the code is just to show you where the colorId needs to be set and the syntax to make it work.

The colors Google will show for each of the first 11 integers you can set colorId to.

1 blue

2 green

3 purple

4 red

5 yellow

6 orange

7 turquoise

8 gray

9 bold blue

10 bold green

11 bold red

function calendar_update($heading,$details,$address,$calendar_name,$start_time,$end_time,$event_id = "")
{
    $client = get_google_client($calendar_name); // ID of your Google calendar
    $capi = new GoogleCalendarApi($client);

    $event['event_time']['start_time'] = $start_time; // Start time of event
    $event['event_time']['end_time'] = $end_time;     // End time of the event
    $event['summary'] = $heading;                     // The title of the event
    $event['location'] = $address;                    // Address field of event
    $event['description'] = $details;                 // Body of the event
    $event['colorId'] = 3;                            // colorId of event (see above)
    $event['attendees'] = $calendar_name;

    try 
    {
        $event_id = $capi->CreateCalendarEvent($calendar_name, $event, 0,
             $event['event_time'], "Australia/Sydney", $_SESSION['access_token']);
    }
    catch(Exception $e) 
    {
        $result = $e->getMessage();
        return("ERROR\t$e");
    }
    return($event_id);
}



class GoogleCalendarApi
{
    public function GetAccessToken($client_id, $redirect_uri, $client_secret, $code) {    
        $url = 'https://accounts.google.com/o/oauth2/token';            

        $curlPost = 'client_id=' . $client_id . '&redirect_uri=' . $redirect_uri . '&client_secret=' . $client_secret . '&code='. $code . '&grant_type=authorization_code';
        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
        curl_setopt($ch, CURLOPT_POST, 1);        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);    
        $data = json_decode(curl_exec($ch), true);
        $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);        
        if($http_code != 200) 
            throw new Exception('Error : Failed to receieve access token');

        return $data;
    }

    public function GetUserCalendarTimezone($access_token) {
        $url_settings = 'https://www.googleapis.com/calendar/v3/users/me/settings/timezone';

        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url_settings);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token));    
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    
        $data = json_decode(curl_exec($ch), true); //echo '<pre>';print_r($data);echo '</pre>';
        $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);        
        if($http_code != 200) 
            throw new Exception('Error : Failed to get timezone');

        return $data['value'];
    }

    public function GetCalendarsList($access_token) {
        $url_parameters = array();

        $url_parameters['fields'] = 'items(id,summary,timeZone)';
        $url_parameters['minAccessRole'] = 'owner';

        $url_calendars = 'https://www.googleapis.com/calendar/v3/users/me/calendarList?'. http_build_query($url_parameters);

        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url_calendars);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token));    
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    
        $data = json_decode(curl_exec($ch), true); //echo '<pre>';print_r($data);echo '</pre>';
        $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);        
        if($http_code != 200) 
            throw new Exception('Error : Failed to get calendars list');

        return $data['items'];
    }

    public function CreateCalendarEvent($calendar_id, $summary, $all_day, $event_time, $event_timezone, $access_token) {
        $url_events = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events';

        $curlPost = $summary;
//        $curlPost = array('summary' => $summary);
        if($all_day == 1) {
            $curlPost['start'] = array('date' => $event_time['event_date']);
            $curlPost['end'] = array('date' => $event_time['event_date']);
        }
        else {
            $curlPost['start'] = array('dateTime' => $event_time['start_time'], 'timeZone' => $event_timezone);
            $curlPost['end'] = array('dateTime' => $event_time['end_time'], 'timeZone' => $event_timezone);
        }
        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url_events);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
        curl_setopt($ch, CURLOPT_POST, 1);        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token, 'Content-Type: application/json'));    
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlPost));    
        $data = json_decode(curl_exec($ch), true);
        $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);        
        if($http_code != 200) 
            throw new Exception('Error : Failed to create event');

        return $data['id'];
    }

    public function UpdateCalendarEvent($event_id, $calendar_id, $summary, $all_day, $event_time, $event_timezone, $access_token) {
        $url_events = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events/' . $event_id;

        $curlPost = $summary;
//        $curlPost = array('summary' => $summary);
        if($all_day == 1) {
            $curlPost['start'] = array('date' => $event_time['event_date']);
            $curlPost['end'] = array('date' => $event_time['event_date']);
        }
        else {
            $curlPost['start'] = array('dateTime' => $event_time['start_time'], 'timeZone' => $event_timezone);
            $curlPost['end'] = array('dateTime' => $event_time['end_time'], 'timeZone' => $event_timezone);
        }
        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url_events);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token, 'Content-Type: application/json'));    
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlPost));    
        $data = json_decode(curl_exec($ch), true);
        $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);        
        if($http_code != 200) 
            throw new Exception('Error : Failed to update event Code: ' . $http_code);
    }

    public function DeleteCalendarEvent($event_id, $calendar_id, $access_token) {
        $url_events = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events/' . $event_id;

        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url_events);        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token, 'Content-Type: application/json'));        
        $data = json_decode(curl_exec($ch), true);
        $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        if($http_code != 204) 
            throw new Exception('Error : Failed to delete event');
    }
}
like image 157
David Crawford Avatar answered Sep 28 '22 02:09

David Crawford


You can set the optional colorId property when creating an event. You can retrieve the list of colours from the colors endpoint.

like image 34
user247702 Avatar answered Sep 28 '22 03:09

user247702