/** * Get weekly shedule for a particular day * * @param $timestamp * @return array */ function getSchedule($timestamp) { if (!$this->zermelo->token) { return 403; } $subjects = (array) json_decode(file_get_contents('lib/Assets/subjects.json')); $tz = timezone_open('Europe/Amsterdam'); $tz_offset = timezone_offset_get($tz, new \DateTime('@' . $timestamp, timezone_open('UTC'))); $timestamp += $tz_offset + 4; $weekstart = $this->getFirstDayOfWeek(date('Y', $timestamp), date('W', $timestamp)); $weekend = strtotime('this Friday', $weekstart); $result = array('week_timestamp' => $weekstart, 'days' => array()); $curday = $weekstart; while ($curday <= $weekend) { $curwd = (int) date('w', $curday); $result['days'][$curwd] = array('day_title' => $this->dutchDayName($curday), 'day_ofweek' => (int) date('w', $curday), 'items' => array()); $start = $curday; $end = $curday + 86399; $data = $this->zermelo->getStudentGrid($start, $end); foreach ($data as $item) { $item = (object) $item; $start = (int) $item->start; $vakname = isset($subjects[$item->subjects[0]]) ? $subjects[$item->subjects[0]] : $item->subjects[0]; $teacher = $item->teachers[0]; $cancelled = $item->cancelled; $moved = $item->moved; $teacher = preg_replace('/^.*-\\s*/', '', $teacher); if (empty($item->locations)) { $item->locations = array('onbekend'); } $result['days'][$curwd]['items'][] = array('title' => $vakname, 'subtitle' => 'Lokaal ' . $item->locations[0], 'teacher' => strtoupper($teacher), 'cancelled' => $cancelled, 'moved' => $moved, 'start' => $start, 'start_str' => date('H:i', $start + $tz_offset)); } $curday += 86400; } return $result; }
/** * Get weekly shedule for a particular day * * @param $timestamp * @return array */ public function getSchedule($timestamp) { if (!$this->zermelo->token) { return 403; } $times = array('08:30', '09:30', '11:00', '12:00', '13:30', '14:30', '15:30'); $break_times = array('10:30', '13:00'); $subjects = (array) json_decode(file_get_contents('lib/Assets/subjects.json')); $tz = timezone_open('Europe/Amsterdam'); $tz_offset = timezone_offset_get($tz, new \DateTime('@' . $timestamp, timezone_open('UTC'))); $timestamp += $tz_offset + 4; $weekstart = $this->getFirstDayOfWeek(date('Y', $timestamp), date('W', $timestamp)); $weekend = strtotime('this Friday', $weekstart); $result = array('week_timestamp' => $weekstart, 'days' => array()); $curday = $weekstart; while ($curday <= $weekend) { $curwd = (int) date('w', $curday); $result['days'][$curwd] = array('day_title' => $this->dutchDayName($curday), 'day_ofweek' => (int) date('w', $curday), 'items' => array()); $start = $curday; $end = $curday + 86399; $data = $this->zermelo->getStudentGrid($start, $end); foreach ($data as $item) { $item = (object) $item; $start = (int) $item->start; $vakname = isset($subjects[$item->subjects[0]]) ? $subjects[$item->subjects[0]] : $item->subjects[0]; $teacher = isset($item->teachers[0]) ? $item->teachers[0] : "Onbekend"; $cancelled = $item->cancelled; $moved = $item->moved; $cancelled = $item->cancelled; $changed = $item->modified; $changedDesc = isset($item->changeDescription) ? $item->changeDescription : null; $teacher = preg_replace('/^.*-\\s*/', '', $teacher); if (empty($item->locations)) { $item->locations = array('onbekend'); } $explode = explode("gewijzigd naar ", $changedDesc); if (isset($explode[1])) { $changedLocation = explode(".", $explode[1]); $item->locations[0] = str_replace(" ", "", $changedLocation[0]); } $result['days'][$curwd]['items'][] = array('title' => $vakname, 'subtitle' => 'Lokaal ' . $item->locations[0], 'teacher' => strtoupper($teacher), 'cancelled' => $cancelled, 'moved' => $moved, 'description' => $changedDesc, 'start' => $start, 'start_str' => date('H:i', $start)); } $curday += 86400; } // Free hours. foreach ($result['days'] as $i => $day) { $count = count($day['items']); $new_items = array(); if (!$count === 0) { $j = 0; $last_str = ''; foreach ($times as $time) { $start_str = $day['items'][$j]['start_str']; // Double entry workaround. while ($start_str == $last_str) { $j++; if ($j == $count) { goto endloop; } $start_str = $day['items'][$j]['start_str']; } if ($time != $start_str) { $timestampStart = isset($day['items'][$j]['start']) ? strtotime(date('d-m-Y', $day['items'][$j]['start']) . ' ' . $time) : null; $free_hour = array('title' => 'Geen les', 'start' => $timestampStart, 'start_str' => $time); $new_items[] = $free_hour; $last_str = ''; } else { $new_items[] = $day['items'][$j]; $last_str = $start_str; $j++; } if ($j == $count) { break; } } endloop: $result['days'][$i]['items'] = $new_items; } } // Breaks. foreach ($result['days'] as $i => $day) { $day_items = array(); $prev_time = '00:00'; $j = 0; foreach ($day['items'] as $item) { if ($j < count($break_times) && $prev_time < $break_times[$j] && $item['start_str'] > $break_times[$j]) { $timestampStart = isset($item['start']) ? strtotime(date('d-m-Y', $item['start']) . ' ' . $break_times[$j]) : null; $day_items[] = array('title' => 'Pauze', 'start' => $timestampStart, 'start_str' => $break_times[$j]); $j++; } $day_items[] = $item; } $result['days'][$i]['items'] = $day_items; } return $result; }