Bonjour
Tout d'abord merci à @Karamel d'avoir mis la coloration syntaxique, cela rend ton code plus lisible et donc augmente tes chances qu'un bénévole ne le lise.
Voir https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code pour tes prochains post.
Ensuite, et toujours pour la lisibilité, pense à indenter ton code, ça permet de repérer facilement les blocs.
Enfin, je ne code pas en PHP, mais comme personne ne t'as répondu depuis hier après midi, je me permets une analyse à défaut d'une solution.
Ton code est entièrement tourné vers la recherche d'événements qui ont un nom prédéfini, ce n'est pas juste la ligne 2 qui entre en ligne de compte,
Déjà le commentaire donne une piste, les noms à chercher sont séparés pas des virgules. Donc on peut chercher plusieurs événements.
A la ligne 13, on voit un foreach sur la liste de noms, comme il y a un foreach juste au dessus sur la liste d'événements, on s'attend à ce qu'il y ait une comparaison entre les 2.
Ce qui est fait à la ligne 14, où l'on cherche l'événement dont le nom est exactement celui de la liste à rechercher.
Si tu veux chercher n'importe quel événement, il faut enlever
Bonjour,
Merci beaucoup en tout cas d'avoir répondu !! C'est une bonne analyse, je vais regarder
Merci encore,
Arnaud
Je viens de tester, le code fonctionne mais au lieu de me récupérer le prochain évènement à partir de maintenant, il me récupère le premier évènement de mon agenda. Suivant vos préconisation, le code est devenu le suivant :
$id=42; //ID du calendrier $events=[]; $calendar=eqLogic::byId($id); $scenario->setLog("id :".$id); if(isset($calendar)) { $events=$calendar->getEvents(); } if(isset($events) && is_array($events) && count($events)>0) { foreach ($events as $event) { $EvtName=str_replace(" ","_",$event->getName()); $nextstart=$event->nextOccurrence('start'); $nextend=$event->nextOccurrence('end'); $scenario->setLog("Check ID=".$event->getID()." : ".$EvtName); $scenario->setData($EvtName."_start", ""); $scenario->setData($EvtName."_stop", ""); if(isset($nextend)) { $nextstart=(isset($nextstart)) ? $nextstart : "En cours"; $scenario->setData($EvtName."_start", $nextstart); $scenario->setData($EvtName."_stop", $nextend); $scenario->setLog("Next : ".$EvtName." ".$nextstart." to ".$nextend); unset($event_names[array_search($event_name,$event_names)]); } break ; } }
Donc, au final, si je lui spécifie le nom de l'évènement (premier code), il me récupère bien le prochain à partir de maintenant. Si je ne précise pas le nom de l'évènement (deuxième code suivant vos préconisations), il me récupère le premier évènement de mon agenda.
Le résultat pour mon premier code est :
[2023-12-30 10:27:19][SCENARIO] -- Start : Scenario lance manuellement.
[2023-12-30 10:27:19][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-12-30 10:27:19][SCENARIO] Exécution d'un bloc code
[2023-12-30 10:27:19][SCENARIO] id :42
[2023-12-30 10:27:19][SCENARIO] Check ID=28 : TEST3
[2023-12-30 10:27:19][SCENARIO] Check ID=32 : TEST3
[2023-12-30 10:27:19][SCENARIO] Next : TEST3 2023-12-31 09:30:00 to 2023-12-31 10:30:00
[2023-12-30 10:27:19][SCENARIO] Fin correcte du scénario
il me détecte bien tous les évènements de mon agenda intitulés "TEST3" mais sur la ligne Next en résultat, il me ressort bien uniquement le prochain à partir de maintenant (ID évènement 32)
Le résultat pour le deuxième code (vos préconisations) est :
[2023-12-30 10:27:44][SCENARIO] -- Start : Scenario lance manuellement.
[2023-12-30 10:27:44][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-12-30 10:27:44][SCENARIO] Exécution d'un bloc code
[2023-12-30 10:27:45][SCENARIO] id :42
[2023-12-30 10:27:45][SCENARIO] Check ID=28 : TEST3
[2023-12-30 10:27:45][SCENARIO] Fin correcte du scénario
Il me récupère le premier évènement de mon agenda intitulé "TEST3" (Evenement ID28) alors que le prochain evenement à partir de maintenant est l'evenement "TEST3" également mais avec l'ID32. De plus, je n'ai plus la ligne Next en résultat.
Je ne comprend pas pourquoi il me sort plus la ligne Next ?
Il faudrait que je précise en code la notion de recherche "à partir de maintenant" mais mes compétences et connaissance en PHP sont bien insuffisantes malheureusement, j'ai tenté de nombreux tests depuis des semaines sans succès.
Merci à vous pour votre aide,
Je t'ai demandé d'utiliser la coloration syntaxique pour poster ton code.
Et comme, je te l'ai dit, je ne code pas en PHP. Mais dans le code d'origine, il ne semble rien qui spécifie une date ultérieure.
Par contre, il me semble (sans l'indentation pas certain) que le break (qui stoppe le foreach) était dans le if qui testait les noms.
Je pense qu'il faut l'enlever
A la réflexion, il faudrait remplacer le if qui cherche un nom, par un if qui cherche une date ultérieure
Bonjour
l'API Google calendar permet de filtrer les recherches par rapport à une date min.
https://developers.google.com/calendar/api/v3/reference/events/list?hl=fr