Pour insérer, modifier et détruire des événements dans un google calendar depuis votre appli web en PHP, il n'est pas obligatoire d'utiliser les protocoles d'identification ( OAUth ... ) complexes.
Il suffit de se connecter à votre calendrier avec votre compte google en utilisant les classe gdata du Zend Framework. Dernière version à télécharger ici.
<?php
function inc_jour($jour) // aaaa-mm-jj
{
$j = (int)substr($jour, 8, 2);
$m = (int)substr($jour, 5, 2);
$a = (int)substr($jour, 0, 4);
if (checkdate($m, $j + 1, $a))
$j++;
else
{
$j = 1;
$m++;
if ( $m > 12 )
{
$m=1;
$a++;
}
}
return ajout_zero($j, $m, $a);
}
// fonction permetant de retourner la date au format aaaa-mm-jj
function ajout_zero($jj, $mm, $aa){
// ajoute un 0 quand le jour ne contient pas de 0 et qu'il est inferieur à 10 (8 donne 08)
if($jj <= 9 && substr($jj, 0, 1)!= 0){
$jj = "0".$jj;
}
// ajoute un 0 quand le mois ne contient pas de 0 et qu'il est inferieur à 10 (8 donne 08)
if ( $mm <= 9 && substr($mm, 0, 1)!= 0 ){
$mm = "0".$mm;
}
// on retourne le tout sous la forme aaaa-mm-jj
$retour = (string)$aa.'-'.$mm.'-'.$jj;
return $retour;
}
// insertion d'un événement
function gdata_insert_event($arrivee,$njours,$infos)
{
global $service,$idcal;
// reflexion google calendar
$event= $service->newEventEntry();
$event->title = $service->newTitle("Occupé");
$event->where = array($service->newWhere("Les Jourdets")); // pas indispensable ...
$event->content = $service->newContent($infos);
$startDate = $arrivee;
$endDate = $arrivee;
for ( $i = 0 ; $i < $njours ; $i++ )
$endDate = inc_jour($endDate);
// Set When ( pas d'heure = full day )
$when = $service->newWhen();
$when->startTime = "{$startDate}";
$when->endTime = "{$endDate}";
$event->when = array($when);
$uri = 'https://www.google.com/calendar/feeds/'.$idcal.'/private/full';
$newEvent = $service->insertEvent($event,$uri);
$gurl = $newEvent->getEditLink()->href; // ->id ?
return $gurl; // l'url de modification de l'event
}
if ( $_SERVER['SERVER_NAME'] == 'localhost' )
$path = '... votre install de test local .../ZendFramework-1.11.5/library';
else
$path = '... votre domaine public .../ZendFramework-1.11.5/library';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_HttpClient');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_App') ;
Zend_Loader::loadClass('Zend_Gdata_Extension_Who');
// Google User account
$email = '... votre mail gmail ....@gmail.com';
$passwd = '... votre password google ...';
$idcal = 'p91v91v3.... votre calendrier ....rkc16k@group.calendar.google.com';
// connection google calendar
try {
$client = Zend_Gdata_ClientLogin::getHttpClient($email, $passwd, 'cl');
} catch (Zend_Gdata_App_CaptchaRequiredException $cre) {
echo 'CAPTCHA Image URL: ' . $cre->getCaptchaUrl() . "\n";
echo 'Tokken ID: ' . $cre->getCaptchaToken() . "\n";
} catch (Zend_Gdata_App_AuthException $ae) {
echo 'Failed: ' . $ae->exception() . "\n";
}
try {
$service = new Zend_Gdata_Calendar($client);
} catch (Zend_Gdata_App_Exception $e) {
echo "Error: " . $e->getResponse();
}
$gurl = gdata_insert_event('2011-05-25',3,'M & Mme trucmuch tel : 0677854332 ');
// $gurl permet en suite de récupérer l'event
$event = $service->getCalendarEventEntry($gurl);
// par exemple pour le modifier
$startDate = $arrivee;
$endDate = $arrivee;
$njours = 4; // finalement ils restent 4 jours
for ( $i = 0 ; $i < $njours ; $i++ )
$endDate = inc_jour($endDate);
$when = $service->newWhen();
$when->startTime = "{$startDate}";
$when->endTime = "{$endDate}";
$event->when = array($when);
try {
$event->save();
} catch (Zend_Gdata_App_Exception $e) {
echo "Error: " . $e->getMessage();
}
// ou pour le détruire
try {
$event = $service->getCalendarEventEntry($gurl);
$service->delete($event->getEditLink()->href); // finalement ils ne viennent pas !
} catch (Zend_Gdata_App_Exception $e) {
echo "Error: " . $e->getMessage();
}
?>