Possible bug dans le plugin agenda

Bonjour, il me semble que j’ai peut-être bien trouvé un bug dans la fonction calendar_event::calculOccurrence() du plugin Agenda.

Suite à la discussion Occurrence d'event dans calendar à la date de Demain pour anticiper si un event « aura lieu demain » (e.g. pour rallumer le chauffage la veille :slight_smile: , j’ai implémenté:

	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);
	}

et je peux l’utiliser dans un bloc-code:

require_once dirname(__FILE__) . '/../../data/php/user.function.class.php';

$result= userFunction::isTomorrow(76);

Il me semble que cette fonction ne fonctionne pas correctement si on l’appelle avec un event qui inclue des dates comme l’exemple suivant:

Mon constat est que la fonction ne tient pas compte dns ce cas des paramètres startDate/endDate ; Dans l’exemple, si vous l’appellez sur la date du 21/12 elle renvoie les 8 dates comprises entre le 24 et le 31 décembre.

Je suis allé voir le code de plugin-calendar/core/class/calendar.class.php at beta · jeedom/plugin-calendar · GitHub
Je suis loin d’être un expert en php, ni sur le code de jeedom, aussi je sollicite la communauté et/ou les devs de jeedom pour valider une proposition de modif:

Il me semble que dans:
630 public function calculOccurrence($_startDate, $_endDate, $_max = 9999999999, $_recurence = 0) {

à la ligne 845, dans la boucle qui traite les includeDate il faudrait rajouter un test: 

845 foreach ($includeDate as $date) {

pour ne pas ajouter quand ce n’est pas dans la plage de dates, sous cette forme par exemple

        if ((strtotime($date) > strtotime($_endDate)) || (strtotime($date) < strtotime($_startDate)))  {
          	continue;
        }


			foreach ($return as $value) {
				if ($value['start'] == $date . ' ' . $initStartTime && $value['end'] == $date . ' ' . $initEndTime) {
					continue (2);
				}
			}
			if ($diff_day > 0) {
				$return[] = array(
					'start' => $date . ' ' . $initStartTime,
					'end' => date('Y-m-d H:i:s', strtotime($date . ' ' . $initEndTime) + ($diff_day * 86400)),
				);
			} else {
				$return[] = array(
					'start' => $date . ' ' . $initStartTime,
					'end' => $date . ' ' . $initEndTime,
				);
			}
		}

Je veux bien des avis sur la proposition avant d’essayer de faire une PR sur le plugin.

PS: Merci à @kiboost pour sa doc Jeedom v4 Petits codes entre amis | Jeedom by KiboOst