Récupérer les dates des prochaines occurrences

Bonjour,

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 :

$id=89; //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());
      		$scenario->setLog($event->nextOccurrence('start'));

	}
}

Ce que j’aimerai pouvoir récupérer c’est la deuxième, puis la troisième occurrence de chaque évènement, mais là, je ne sais pas comment faire…

Merci pour votre aide,

Bonjour,

Malgré mes recherches, je n’ai toujours pas trouvé la solution. Une idée ?
Merci

Bonjour @eppo81,

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 :

  1. 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.

  1. 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 :wink:

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