diff --git a/src/CalendarEvent.php b/src/CalendarEvent.php index 0e42a96..9393ce9 100644 --- a/src/CalendarEvent.php +++ b/src/CalendarEvent.php @@ -22,9 +22,17 @@ class CalendarEvent extends BaseDTO /** @var Carbon */ public $start_date; + /** @var Carbon */ + // Added by me + public $start_date_searched; + /** @var Carbon */ public $end_date; + /** @var Carbon */ + // Added by me + public $end_date_searched; + /** @var string */ public $start_time; @@ -133,7 +141,9 @@ private function applyCount(Rule $rule, $numberOfOccurrences = null): Rule */ private function applyStartDate(Rule $rule): Rule { - $startDate = Carbon::parse($this->start_date)->setTimeFromTimeString($this->start_time); + // $date= $this->start_date_searched?$this->start_date_searched:$this->start_date; + $date = $this->start_date; + $startDate = Carbon::parse($date)->setTimeFromTimeString($this->start_time); $rule->setStartDate($startDate); return $rule; @@ -260,15 +270,33 @@ public function getNextEvents($numberOfEvents = null): array $events = []; foreach ($nextOccurrences as $nextOccurrence) { - $event = clone $this; - $event->start_date = Carbon::parse($nextOccurrence->getStart())->setTimeFromTimeString($this->start_time); - $event->end_date = Carbon::parse($nextOccurrence->getEnd())->setTimeFromTimeString($this->end_time); - $events[] = $event; + + // Vuol dire che ho usato la funzione getEventsBetween + if ($this->start_date_searched && $this->end_date_searched) { + // Controllo se l'evento รจ compreso tra le date cercate + $event = $this->cloneAndUpdateDatesOfEvent($nextOccurrence); + if ($event->start_date->between($this->start_date_searched, $this->end_date_searched) && $event->end_date->between($this->start_date_searched, $this->end_date_searched)) { + $events[] = $event; + } + } else { + $event = $this->cloneAndUpdateDatesOfEvent($nextOccurrence); + $events[] = $event; + } } return $events; } + + private function cloneAndUpdateDatesOfEvent($occurrence) + { + $event = clone $this; + $event->start_date = Carbon::parse($occurrence->getStart())->setTimeFromTimeString($this->start_time); + $event->end_date = Carbon::parse($occurrence->getEnd())->setTimeFromTimeString($this->end_time); + + return $event; + } + /** * @param Carbon|\DateTime|string $startDate * @param Carbon|\DateTime|string $endDate @@ -282,13 +310,18 @@ public function getEventsBetween($startDate, $endDate, $numberOfEvents = null): { $orgEvent = clone $this; + $this->start_date_searched = Carbon::parse($startDate); + $this->end_date_searched = Carbon::parse($endDate); + + + if ($this->start_date > $endDate or !empty($this->end_date) and $startDate > $this->end_date) { return []; } - if ($startDate > $this->start_date) { - $this->start_date = Carbon::parse($startDate); - } + // if ($startDate > $this->start_date) { + // $this->start_date = Carbon::parse($startDate); + // } if (empty($this->end_date)) { $this->end_date = Carbon::parse($endDate);