Roomify\Bat\Event\EventItemizer::createDayGranural PHP Method

createDayGranural() private method

Based on the start and end dates of the event it creates the appropriate granular events and adds them to an array suitable for manipulating easily or storing in the database.
private createDayGranural ( array $itemized = [] ) : array
$itemized array
return array
    private function createDayGranural($itemized = array())
    {
        $interval = new \DateInterval('PT1M');
        $sy = $this->event->getStartDate()->format('Y');
        $sm = $this->event->getStartDate()->format('n');
        $sd = $this->event->getStartDate()->format('j');
        $ey = $this->event->getEndDate()->format('Y');
        $em = $this->event->getEndDate()->format('n');
        $ed = $this->event->getEndDate()->format('j');
        // Clone the dates otherwise changes will change the event dates themselves
        $start_date = clone $this->event->getStartDate();
        $end_date = clone $this->event->getEndDate();
        if ($this->event->isSameDay()) {
            if (!($this->event->getStartDate()->format('H:i') == '00:00' && $this->event->getEndDate()->format('H:i') == '23:59')) {
                $period = new \DatePeriod($start_date, $interval, $end_date->add(new \DateInterval('PT1M')));
                $itemized_same_day = $this->createHourlyGranular($period, $start_date);
                $itemized[EventItemizer::BAT_DAY][$sy][$sm]['d' . $sd] = -1;
                $itemized[EventItemizer::BAT_HOUR][$sy][$sm]['d' . $sd] = $itemized_same_day[EventItemizer::BAT_HOUR][$sy][$sm]['d' . $sd];
                $itemized[EventItemizer::BAT_MINUTE][$sy][$sm]['d' . $sd] = $itemized_same_day[EventItemizer::BAT_MINUTE][$sy][$sm]['d' . $sd];
            }
        } else {
            // Deal with the start day unless it starts on midnight precisely at which point the whole day is booked
            if (!($this->event->getStartDate()->format('H:i') == '00:00')) {
                $start_period = new \DatePeriod($start_date, $interval, new \DateTime($start_date->format("Y-n-j 23:59:59")));
                $itemized_start = $this->createHourlyGranular($start_period, $start_date);
                $itemized[EventItemizer::BAT_DAY][$sy][$sm]['d' . $sd] = -1;
                $itemized[EventItemizer::BAT_HOUR][$sy][$sm]['d' . $sd] = $itemized_start[EventItemizer::BAT_HOUR][$sy][$sm]['d' . $sd];
                $itemized[EventItemizer::BAT_MINUTE][$sy][$sm]['d' . $sd] = $itemized_start[EventItemizer::BAT_MINUTE][$sy][$sm]['d' . $sd];
            } else {
                // Just set an empty hour and minute
                $itemized[EventItemizer::BAT_HOUR][$sy][$sm]['d' . $sd] = array();
                $itemized[EventItemizer::BAT_MINUTE][$sy][$sm]['d' . $sd] = array();
            }
            // Deal with the end date unless it ends just before midnight at which point we don't need to go further
            if ($this->event->getEndDate()->format('H:i') == '23:59') {
                $itemized[EventItemizer::BAT_HOUR][$ey][$em]['d' . $ed] = array();
                $itemized[EventItemizer::BAT_MINUTE][$ey][$em]['d' . $ed] = array();
            } else {
                $end_period = new \DatePeriod(new \DateTime($end_date->format("Y-n-j 00:00:00")), $interval, $end_date->add(new \DateInterval('PT1M')));
                $itemized_end = $this->createHourlyGranular($end_period, new \DateTime($end_date->format("Y-n-j 00:00:00")));
                $itemized[EventItemizer::BAT_DAY][$ey][$em]['d' . $ed] = -1;
                $itemized[EventItemizer::BAT_HOUR][$ey][$em]['d' . $ed] = $itemized_end[EventItemizer::BAT_HOUR][$ey][$em]['d' . $ed];
                $itemized[EventItemizer::BAT_MINUTE][$ey][$em]['d' . $ed] = $itemized_end[EventItemizer::BAT_MINUTE][$ey][$em]['d' . $ed];
            }
        }
        return $itemized;
    }