Je cherche à récupérer les dates de débuts des prochaines occurrences des évènements d’un agenda.
En recherchant sur le forum, j’arrive à récupérer la date de début de la prochaine occurrences de chaque évènement présent dans mon agenda :
Je ne sais pas si tu as encore ce besoin mais je me suis heurté au même souci et je suis tombé sur le script que tu as proposé. Je l’ai modifié pour qu’il puisse récupérer les 3 premières occurrences de l’agenda et mettre dans un virtuel le nom, la date de début et la date de fin de chaque.
Voici la démarche :
Créer un virtuel qui stockera les informations et créer les commandes suivantes
* Nom : EVENT_NAME_1
* Type : Autre
* Nom : EVENT_DATE_START_1
* Type : Autre
* Nom : EVENT_DATE_END_1
* Type : Autre
* Nom : EVENT_NAME_2
* Type : Autre
* Nom : EVENT_DATE_START_2
* Type : Autre
* Nom : EVENT_DATE_END_2
* Type : Autre
* Nom : EVENT_NAME_3
* Type : Autre
* Nom : EVENT_DATE_START_3
* Type : Autre
* Nom : EVENT_DATE_END_3
* Type : Autre
Puis sauvegarder pour le commandes soient bien créées.
Créer un scénario qui se lancera selon une programmation (une récurrence journalière par exemple)
Dans le scénario, il faut donc créer un Bloc Code dans lequel on copie/colle le code php suivant. J’ai volontairement commenté toutes les lignes pour la compréhension.
$id=76; //Mettre ici l'ID du calendrier
$events=[]; // On crée un variable de type liste pour y stocker les événements récupérés
$calendar=eqLogic::byId($id); // On récupère le calendrier que l'on stock dans une variable
$scenario->setLog("id :".$id); // On affiche dans les logs du scénario l'ID du calendrier
for ($i = 1; $i <= 3; $i++) { // On fait une boucle pour effacer les événements du virtuel pour ne pas avoir des restes d'informations.
cmd::byString("#[XXXX][XXXX][EVENT_NAME_$i]#")->event('Aucun');// Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_NAME avec Aucun. On remarque que le compteur $i nous est utile pour itérer.
cmd::byString("#[XXXX][XXXX][EVENT_DATE_START_$i]#")->event('Aucune');// Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_START avec Aucune. On remarque que le compteur $i nous est utile pour itérer.
cmd::byString("#[XXXX][XXXX][EVENT_DATE_END_$i]#")->event('Aucune');// Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_END avec Aucune. On remarque que le compteur $i nous est utile pour itérer.
}
$i=1; // On crée un compteur qui permettra d'itérer les commandes par la suite
if(isset($calendar)) { // On vérifie si le calendrier existe bien
$events=$calendar->getEvents(); // S'il existe on récupère les événements que l'on mets dans une variable
}
if(isset($events) && is_array($events) && count($events)>0) { // On vérifie qu'il y a bien des événements
foreach ($events as $event) { // Pour chaque événement trouvé
$scenario->setLog($event->getName()); // On récupère dans les logs le nom de l'événement
cmd::byString("#[XXXX][XXXX][EVENT_NAME_$i]#")->event($event->getName()); // Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_NAME avec le nom de l'événement. On remarque que le compteur $i nous est utile pour itérer.
$scenario->setLog($event->nextOccurrence('start')); // On récupère dans les logs la date de début de l'événement
cmd::byString("#[XXXX][XXXX][EVENT_DATE_START_$i]#")->event($event->nextOccurrence('start')); // Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_START avec la date de début de l'événement. On remarque que le compteur $i nous est utile pour itérer.
$scenario->setLog($event->nextOccurrence('end')); // On récupère dans les logs la date de fin de l'événement
cmd::byString("#[Maison][AGENDA 3 EVENTS][EVENT_DATE_END_$i]#")->event($event->nextOccurrence('end')); // Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_END avec la date de fin de l'événement. On remarque que le compteur $i nous est utile pour itérer.
if($i != 3){ // Si le compteur n'est pas égale à 3
$i += 1; // On invente le compteur et on repart dans la boucle pour l'événement suivant
} else { // Si le compteur est égale à 3
break; // On sort de la boucle
}
}
}
Normalement, le virtuel devrait se peupler et afficher les informations utiles
bonjour,
j’essaye de mettre en place le script pour recupere les dates de debut et fin de mes évènements mais EVENT_DATE_START_
et
EVENT_DATE_END_1
ne me renvoient aucune données (enfin si un 0)
sur les logs j’ai deux lignes vides apres chaque EVENT_NAME
d’ou peut venir mon erreur?
merci de votre aide
wouah c’est génial ca marche, je nai pas trouvé d’autre moyen de le faire. je ne comprends pas pourquoi le plugin agenda ne propose rien de plus que de pouvoir récupérer facilement « en cours » et rien d’autre…
attention petite erreur dans le bloc code, tu as laissé un chemin vers le virtuel (le dernier chemin du bloc code), qu’il faut évidemment remplacer pas son propre chemin
Je souhaiterais aussi récupérer les éléments futurs d’un agenda.
J’ai créé un virtuel sans changer les noms, et le scénario en remplaçant les chemins des commandes par celles de mon virtuel, mais cela ne fonctionne que partiellement.
En effet, le premier event du virtuel ressort une date, mais pas la prochaine échéance, et les 2 second events sont incohérents, et n’ont pas les dates de début et de fin.
je pencherais pour un problème/typo dans le code… tu as la possibilité de le coller par ici?
tu peux également le soumettre à une IA pour une première analyse ; pour moi ca a fonctionné avec gemini dans l’autre sens, quand j’ai eu besoin d’un bloc code pour du calcul avec formules php…
Merci pour ton retour.
Je pense aussi que c’est un problème de code, mais ma maitrise est limitée…
Le voici :
$id=382; //Mettre ici l'ID du calendrier
$events=[]; // On crée un variable de type liste pour y stocker les événements récupérés
$calendar=eqLogic::byId($id); // On récupère le calendrier que l'on stock dans une variable
$scenario->setLog("id :".$id); // On affiche dans les logs du scénario l'ID du calendrier
for ($i = 1; $i <= 3; $i++) { // On fait une boucle pour effacer les événements du virtuel pour ne pas avoir des restes d'informations.
cmd::byString("#[Maison][vProchain créneaux ménage][EVENT_NAME_$i]#")->event('Aucun');// Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_NAME avec Aucun. On remarque que le compteur $i nous est utile pour itérer.
cmd::byString("#[Maison][vProchain créneaux ménage][EVENT_DATE_START_$i]#")->event('Aucune');// Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_START avec Aucune. On remarque que le compteur $i nous est utile pour itérer.
cmd::byString("#[Maison][vProchain créneaux ménage][EVENT_DATE_END_$i]#")->event('Aucune');// Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_END avec Aucune. On remarque que le compteur $i nous est utile pour itérer.
}
$i=1; // On crée un compteur qui permettra d'itérer les commandes par la suite
if(isset($calendar)) { // On vérifie si le calendrier existe bien
$events=$calendar->getEvents(); // S'il existe on récupère les événements que l'on mets dans une variable
}
if(isset($events) && is_array($events) && count($events)>0) { // On vérifie qu'il y a bien des événements
foreach ($events as $event) { // Pour chaque événement trouvé
$scenario->setLog($event->getName()); // On récupère dans les logs le nom de l'événement
cmd::byString("#[Maison][vProchain créneaux ménage][EVENT_NAME_$i]#")->event($event->getName()); // Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_NAME avec le nom de l'événement. On remarque que le compteur $i nous est utile pour itérer.
$scenario->setLog($event->nextOccurrence('start')); // On récupère dans les logs la date de début de l'événement
cmd::byString("#[Maison][vProchain créneaux ménage][EVENT_DATE_START_$i]#")->event($event->nextOccurrence('start')); // Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_START avec la date de début de l'événement. On remarque que le compteur $i nous est utile pour itérer.
$scenario->setLog($event->nextOccurrence('end')); // On récupère dans les logs la date de fin de l'événement
cmd::byString("#[Maison][vProchain créneaux ménage][EVENT_DATE_END_$i]#")->event($event->nextOccurrence('end')); // Ici il faut remplacer les XXXX par le chemin de la commande du virtuel. On renseigne la commande EVENT_DATE_END avec la date de fin de l'événement. On remarque que le compteur $i nous est utile pour itérer.
if($i != 3){ // Si le compteur n'est pas égale à 3
$i += 1; // On invente le compteur et on repart dans la boucle pour l'événement suivant
} else { // Si le compteur est égale à 3
break; // On sort de la boucle
}
}
}
ma maitrise est également limitée mais gemini semble conduire sur une piste qui m’avait aussi posé problème sauf erreur (j’ai changé de système entretemps, je t’en parlerai si tu veux, mais cela ne convient que si tu ne désires pas avoir des actions & notifs longtemps à l’avance, dans mon cas, on est sur du 6-7 jours à l’avance max…)
bref, d’abord gemini parle des accents et des espaces, cela peut etre une raison… mais je crois pas que ca m’avait impacté. mais surtout gemini mentionne la partie de la boucle, et qui semble correspondre aux symptomes dont tu parlais:
En fait le programme est correct, mais il donne la prochaine échéance des 3 premiers évènements de l’ID, et non pas les 3 prochaines échéances.
Dans mon cas, j’ai 14 événements, et seulement le 1er et le 7eme comporte actuellement des occurrences, donc le code ne trouvait rien pour les événements 2 et 3… Ce qui est normal !
J’ai donc modifié le code pour avoir 14 boucles (et rajouté les commandes qui vont bien dans le virtuel), ce qui me permet d’avoir la prochaine échéance de chaque évènement.
Mon besoin était de savoir si une occurrence a lieu le lendemain. Donc j’ai rajouté 14 tests pour savoir si une des 14 prochaines échéances a lieu demain.