Bonjour, j’ai configuré avec succès le plugin Google Agenda !
J’ai alors coché les 2 calendriers à surveiller.
J’aimerais récupérer dans un bloc code les calendriers cochés + les événements correspondants des 4 prochaines semaines (comme je l’ai fait pour le plugin « Agenda » non Google)
Mais ce plugin :
Cumul tous les événements de tous les calendriers cochés
Permet de lister les événements du jour et du lendemain, sans détail (date de début, date de fin …)
[EDIT]Une bonne soirée de dev et j’ai réussi à faire ce que je voulais
Je mets donc le code, ça peut servir à quelqu’un.
Il me reste plus qu’à trouver le nom du calendrier, parce que l’ID sur 50 caractères c’est moyen
Voici mon code :
$tags = $scenario->getTags();
$current_month = date('m');
$gcalendar = eqLogic::byId($tags['#calid#']); // Récupération de l'ID de l'agenda Google en paramètre
$calindex = 0;
if(isset($gcalendar)) {
// Liste des calendriers sélectionnés
$calendarList = $gcalendar->getConfiguration('calendars');
foreach ($calendarList as $calendarId => $value){
if ($value == 0) {
continue;
}
// Variable test pour chaque calendrier
$calindex += 1;
$var = "read_calendar_test_" . $calindex;
$calendarStr = "";
try {
$eventsG = getEvents4weeks($gcalendar, $calendarId);
$events = array();
// Lecture des occurences ... et regroupement par événement du même nom
foreach ($eventsG as $eventG) {
$event = array();
$event['start'] = (isset($eventG['start']['date'])) ? $eventG['start']['date'] : date('Y-m-d', strtotime($eventG['start']['dateTime']));
$event['end'] = (isset($eventG['end']['date'])) ? $eventG['end']['date'] : date('Y-m-d', strtotime($eventG['end']['dateTime']));
$events[$eventG['summary']][] = $event;
}
// Lecture des événements
foreach ($events as $evenement => $occurences) {
if(count($occurences) > 0){
if($calendarStr != "") $calendarStr .= '||';
$calendarStr .= $evenement.'|'.count($occurences);
}
// Tri des occurences par date
asort($occurences);
// Lecture des occurences de chaque événement + mise en forme
foreach ($occurences as $occurence){
$start = date_create($occurence['start']);
$startStr = date_format($start, 'd/m');
$startMonth = substr($startStr, -2);
$end = date_create($occurence['end']);
$endStr = date_format($end, 'd/m');
$endMonth = substr($endStr, -2);
if($current_month == $startMonth && $startMonth == $endMonth){
$startStr = substr($startStr,0,2);
$endStr = substr($endStr,0,2);
}
$calendarStr .= '|'.$startStr;
if($endStr != $startStr)
$calendarStr .= '-'.$endStr;
}
}
// Variable test pour chaque calendrier
$scenario->setData($var, $calendarStr);
} catch (Exception $e) {
log::add('gCalendar', 'error', __('Erreur sur : ', __FILE__) . $calendarId . ' => ' . $e->getMessage());
}
}
}
else {
$calendarStr = "Non trouvé";
}
// Commande info cible
if($tags['#calinfo#'] == 'test'){
$scenario->setData("read_calendar_test", $calendarStr);
}
else{
$cmd = cmd::byId($tags['#calinfo#']);
$cmd->event($calendarStr);
}
// Lectures des événements pour les 4 prochaines semaines
function getEvents4weeks($gcalendar, $_calendarId) {
$result = $gcalendar->request('GET', '/calendars/' . $_calendarId . '/events?singleEvents=true&timeMin=' . urlencode(date(DATE_RFC3339)) . '&timeMax=' . urlencode(date(DATE_RFC3339, strtotime('+4 weeks'))));
return (isset($result['items'])) ? $result['items'] : array();
}
Bonjour sACLe,
Intéressant
Tu l’insères dans un bloc « code » ?
Si oui peux tu me dire comment tu l’utilises pour pouvoir le mettre dans ton désign et comment interagir avec pour lancer une action ?
D’avance merci
Un scénario en bloc code qui sert de fonction pour lire un agenda dans le plugin officiel et stocke le résultat dans une info virtuelle (tag d’entrée : id du calendrier et id du virtuel)
Un scénario en bloc code qui sert de fonction pour lire un agenda Google et stocke le résultat dans des variables au nom gcal_[id_objet_calendrier_google]_[Nom du calendrier google] (tag d’entrée : id du calendrier)
Et mon 3ième scénario : appelle les fonctions citées plus haut, et récupère les variables gcal_* vers un virtuel
J’ai stocké les informations de cette manière :
[Evénément] | [Nombre d’occurences] | Dates …
Exemple : Poubelles|4|20|27|04/10|11/10
Chaque info a un paramètre widget « cal_icon » pour définir l’icone qui sera affiché dans le widget
Merci pour ce tuto, il fonctionne vraiment parfaitement ! J’ai téléchargé le plugin, créé mon virtuel, collé le code et… tadaaam tout roule
J’ai juste une petite question supplémentaire, comme tu as l’air de bien manipuler le code php, est ce que tu penses qu’il y a moyen de récupérer l’heure des évènements aussi ? J’aimerais les afficher à côté des dates.
Merci beaucoup pour ton partage.
Je m’en suit fortement inspiré pour récupérer des infos en particulier dans mon Google Agenda.
J’ai juste un blocage pour transformer/découper ma valeur de retour (du même format que toi: [Evénément] | [Nombre d’occurences] | Dates …) vers ce type de résultat:
Peut-être peux-tu m’expliquer succinctement comment tu as fait ? Ou un Screenshot me permettant de comprendre comment tu as fait ?
Effectivement il manque ici toute la mise en forme, qui est faite dans un widget.
Si tu as fait comme moi, le virtuels contients les différentes informations séparées par des " | "
Dans la partie script du widget, je découpe la valeur de l’équipement avec ces " | " et je pars du principe que je trouverai :
En première position, le nom de l’événement (ici « Poubelles »)
En seconde position, le nom d’occurrences
Puis chaque date, je dois en trouver aucun que le nombre d’occurrence
A noter aussi que je peux choisir l’icone affichée à gauche (ici une maison)
Le widget attend un paramètre #cal_icon# et va chercher l’image ici :
data/customTemplates/dashboard/cmd.info.string.V4_Design_Calendrier_Mois/#cal_icon#.png
Pour renseigner le paramètre, ça se passe dans le virtuel, section « Paramètres optionnels widget » :