public function fixCalendarDateOrdering($sessions)
{
$return = array();
foreach (array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') as $day) {
if (isset($sessions[$day])) {
$return[$day] = $sessions[$day];
}
}
$max = 0;
$datelist = array();
$dayn = 0;
$day_lookup = array();
$session_lookup = array();
foreach ($return as $day => $dates) {
foreach ($dates as $date => $session) {
$datelist[$dayn][] = $date;
$session_lookup[$date] = $session;
if ($date > $max) {
$max = $date;
}
}
$day_lookup[$dayn] = $day;
++$dayn;
}
while (1) {
$changed = false;
$datelist2 = array();
foreach ($datelist as $day => $dates) {
foreach ($dates as $i => $date) {
if ($date < $max && isset($datelist[$day + 1][$i]) && $date > $datelist[$day + 1][$i]) {
// fill in missing day
if (!isset($datelist2[$day]) || !in_array(date('Y-m-d', strtotime($date) - 86400 * 7), $datelist2[$day])) {
$datelist2[$day][] = date('Y-m-d', strtotime($date) - 86400 * 7);
$session_lookup[date('Y-m-d', strtotime($date) - 86400 * 7)] = array('status' => 'blank');
$changed = true;
}
}
if (!isset($datelist2[$day]) || !in_array($date, $datelist2[$day])) {
$datelist2[$day][] = $date;
}
}
}
if (!$changed) {
break;
}
$datelist = $datelist2;
}
$sessions = array();
foreach ($datelist2 as $dayn => $dates) {
foreach ($dates as $date) {
$sessions[$day_lookup[$dayn]][$date] = $session_lookup[$date];
}
}
return $sessions;
}