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