Martine et Olivier ALLAIS Chambres d'hôtes Corbières

Chambres et table d'hôtes dans les Hautes Corbières - Aude

Accueil Chambres Hotes

Insertion d'un événement dans un google calendar en PHP

Francais   English  

Les Jourdets

Chambres d'hôtes
Table d'hôtes

Martine & Olivier ALLAIS

Les Jourdets
11330 Lairière, France

mail
Email
mallais@free.fr

phone
Tel GSM
04 68 70 04 76 06 08 33 60 32

Hautes Corbières - Aude

les Jourdets

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.

Exemple de code

<?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();
	}


?>
Retour aux codes