(NB: sujet déplacé dans le Salon Développeurs)
Bonjour, j’ai comme beaucoup d’autres le besoin de savoir si un Event d’un Calendar aura lieu Demain (cas classique, allumer le chauffage la veille si demain on sera là, sous-entendu on arrivera tard dans la soirée de la veille)
j’ai vu plusieurs sujets sur le forum qui n’ont pas abouti.
Après avoir longuement parcouru le code plugin-calendar/core/class/calendar.class.php at beta · jeedom/plugin-calendar · GitHub je viens à l’idée que un bout de code comme celui qui suit pourrait faire l’affaire:
L’idée est de rechercher les occurrences de l’event sur une page de temps qui correspond à demain, et chance, le plugin fournit déjà une fonction qui fait cela (
public static function isTomorrow($_id) {
$event = calendar_event::byId($_id);
$startDate = (new DateTime('tomorrow'))->format('Y-m-d H:i:s');
$endDate = (new DateTime('tomorrow +1 day - 1 second'))->format('Y-m-d H:i:s');
$results = $event->calculOccurrence($startDate, $endDate);
return count($results)
}
$_id étant l’id d’un event de calendar (id, pas eqLogic_id sinon il faudrait utiliser byEqLogicId()
Bon attention, calculOccurence() est une grosse fonction récursive donc il ne s’agit pas de faire tourner ça en boucle.
Est-ce que les « expérimentés » en jeedom et Php peuvent donner un avis sur cette proposition ?
NB: je suis débutant en php…
un bloc code de scénario qui teste le principe:
$event = calendar_event::byId(69);
if (!is_object($event)) {
$scenario->setLog("unkown event");
return;
}
$startDate = (new DateTime('tomorrow'))->format('Y-m-d H:i:s');
$endDate = (new DateTime('tomorrow +1 day - 1 second'))->format('Y-m-d H:i:s');
$scenario->setLog($startDate);
$scenario->setLog($endDate);
$results = $event->calculOccurrence($startDate, $endDate);
$scenario->setLog($results);
if (count($results) == 0) {
$scenario->setLog("pas d'occurence");
} else {
$scenario->setLog( count($results) . " occurence(s)");
for ($i = 0; $i < count($results); $i++) {
$scenario->setLog($results[$i]['start']);
$scenario->setLog($results[$i]['end']);
}
}



