$loopBlock) {
// check for overlap with existing overlap block
if (($loopBlock["blockStart"] < $drawTimes["draw_end"]) and ($loopBlock["blockEnd"] > $drawTimes["draw_start"])) {
$newOverlapBlock = FALSE;
// if necessary adjust start and end times of overlap block
if ($loopBlock["blockStart"] > $drawTimes["draw_start"]) $overlap_array[($ol_start_date)][($loopBlockKey)]["blockStart"] = $drawTimes["draw_start"];
if ($loopBlock["blockEnd"] < $drawTimes["draw_end"]) $overlap_array[($ol_start_date)][($loopBlockKey)]["blockEnd"] = $drawTimes["draw_end"];
// add the new event to the array of events
// $overlap_array[($ol_start_date)][($loopBlockKey)]["events"][] = array ("time" => $newMasterTime, "key" => $newMasterEventKey);
$overlap_array[($ol_start_date)][($loopBlockKey)]["events"][] = array ("time" => $newMasterTime, "key" => $ol_uid);
// check if the adjusted overlap block must be merged with an existing overlap block
reset($overlap_array[($ol_start_date)]);
do {
$compBlockKey = key(current($overlap_array[($ol_start_date)]));
// only compare with other blocks
if ($compBlockKey != $loopBlockKey) {
// check if blocks overlap
if (($overlap_array[($ol_start_date)][($compBlockKey)]["blockStart"] < $overlap_array[($ol_start_date)][($loopBlockKey)]["blockEnd"]) and ($overlap_array[($ol_start_date)][($compBlockKey)]["blockEnd"] > $overlap_array[($ol_start_date)][($loopBlockKey)]["blockStart"])) {
// define start and end of merged overlap block
if ($loopBlock["blockStart"] > $overlap_array[($ol_start_date)][($compBlockKey)]["blockStart"]) $overlap_array[($ol_start_date)][($loopBlockKey)]["blockStart"] = $overlap_array[($ol_start_date)][($compBlockKey)]["blockStart"];
if ($loopBlock["blockEnd"] < $overlap_array[($ol_start_date)][($compBlockKey)]["blockEnd"]) $overlap_array[($ol_start_date)][($loopBlockKey)]["blockEnd"] = $overlap_array[($ol_start_date)][($compBlockKey)]["blockEnd"];
$overlap_array[($ol_start_date)][($loopBlockKey)]["events"] = array_merge($overlap_array[($ol_start_date)][($loopBlockKey)]["events"],$overlap_array[($ol_start_date)][($compBlockKey)]["events"]);
$overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"] = array_merge($overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"],$overlap_array[($ol_start_date)][($compBlockKey)]["overlapRanges"]);
unset($overlap_array[($ol_start_date)][($compBlockKey)]);
reset($overlap_array[($ol_start_date)]);
}
}
} while (next($overlap_array[($ol_start_date)]));
// insert new event to appropriate overlap range
$newOverlapRange = TRUE;
foreach ($overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"] as $keyOverlap => $overlapRange) {
if (($overlapRange["start"] < $drawTimes["draw_end"]) and ($overlapRange["end"] > $drawTimes["draw_start"])) {
$overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"][($keyOverlap)]["count"]++;
if ($overlapRange["start"] < $drawTimes["draw_start"]) $overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"][($keyOverlap)]["start"] = $drawTimes["draw_start"];
if ($overlapRange["end"] > $drawTimes["draw_end"]) $overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"][($keyOverlap)]["end"] = $drawTimes["draw_end"];
$newOverlapRange = FALSE;
// break;
}
}
if ($newOverlapRange) {
foreach ($loopBlock["events"] as $blockEvents) {
$eventDrawTimes = drawEventTimes($master_array[($ol_start_date)][($blockEvents["time"])][($blockEvents["key"])]["event_start"], $master_array[($ol_start_date)][($blockEvents["time"])][($blockEvents["key"])]["event_end"]);
if ((isset($eventDrawTimes["draw_start"]) && isset($eventDrawTimes["draw_end"]) && isset($drawTimes["draw_end"]) && isset($drawTimes["draw_start"])) && ($eventDrawTimes["draw_start"] < $drawTimes["draw_end"]) and ($eventDrawTimes["draw_end"] > $drawTimes["draw_start"])) {
// define start time of overlap range and overlap block
if ($eventDrawTimes["draw_start"] < $drawTimes["draw_start"]) $overlap_start = $drawTimes["draw_start"];
else $overlap_start = $eventDrawTimes["draw_start"];
// define end time of overlap range and overlap block
if ($eventDrawTimes["draw_end"] > $drawTimes["draw_end"]) $overlap_end = $drawTimes["draw_end"];
else $overlap_end = $eventDrawTimes["draw_end"];
$newOverlapRange2 = TRUE;
foreach ($overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"] as $keyOverlap => $overlapRange) {
if (($overlapRange["start"] < $overlap_end) and ($overlapRange["end"] > $overlap_start)) {
$overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"][($keyOverlap)]["count"]++;
if ($overlapRange["start"] < $overlap_start) $overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"][($keyOverlap)]["start"] = $overlap_start;
if ($overlapRange["end"] > $overlap_end) $overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"][($keyOverlap)]["end"] = $overlap_end;
$newOverlapRange2 = FALSE;
// break;
}
}
if ($newOverlapRange2) {
array_push($overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"], array ("count" => 1,"start" => $overlap_start, "end" => $overlap_end));
}
}
}
}
// determine the maximum overlaps for the current overlap block
foreach ($overlap_array[($ol_start_date)][($loopBlockKey)]["overlapRanges"] as $overlapRange) {
if ($overlapRange["count"] > $maxOverlaps) $maxOverlaps = $overlapRange["count"];
}
$overlap_array[($ol_start_date)][($loopBlockKey)]["maxOverlaps"] = $maxOverlaps;
foreach ($overlap_array[($ol_start_date)][($loopBlockKey)]["events"] as $updMasterEvent) {
//if (($updMasterEvent["time"] != $newMasterTime) or ($updMasterEvent["key"] != $newMasterEventKey)) {
if (($updMasterEvent["time"] != $newMasterTime) or ($updMasterEvent["key"] != $ol_uid)) {
$master_array[($ol_start_date)][($updMasterEvent["time"])][($updMasterEvent["key"])]["event_overlap"] = $maxOverlaps;
}
}
$newEventAdded = TRUE;
break;
}
}
}
if (!$newEventAdded) {
if (isset($master_array[($ol_start_date)])) {
foreach ($master_array[($ol_start_date)] as $keyTime => $eventTime) {
foreach ($eventTime as $keyEvent => $event) {
if ($keyTime != '-1') $entryDrawTimes = drawEventTimes($event["event_start"], $event["event_end"]);
if ((isset($entryDrawTimes["draw_start"]) && isset($entryDrawTimes["draw_end"]) && isset($drawTimes["draw_end"]) && isset($drawTimes["draw_start"])) && ($entryDrawTimes["draw_start"] < $drawTimes["draw_end"]) and ($entryDrawTimes["draw_end"] > $drawTimes["draw_start"])) {
// define start time of overlap range and overlap block
if ($entryDrawTimes["draw_start"] < $drawTimes["draw_start"]) {
$overlap_start = $drawTimes["draw_start"];
$overlapBlock_start = $entryDrawTimes["draw_start"];
} else {
$overlap_start = $entryDrawTimes["draw_start"];
$overlapBlock_start = $drawTimes["draw_start"];
}
// define end time of overlap range and overlap block
if ($entryDrawTimes["draw_end"] > $drawTimes["draw_end"]) {
$overlap_end = $drawTimes["draw_end"];
$overlapBlock_end = $entryDrawTimes["draw_end"];
} else {
$overlap_end = $entryDrawTimes["draw_end"];
$overlapBlock_end = $drawTimes["draw_end"];
}
if (!isset($newBlockKey)) {
// $overlap_array[($ol_start_date)][] = array ("blockStart" => $overlapBlock_start, "blockEnd" => $overlapBlock_end, "maxOverlaps" => 1, "events" => array (array ("time" => $keyTime, "key" => $keyEvent), array ("time" => $newMasterTime, "key" => $newMasterEventKey)), "overlapRanges" => array (array ("count" => 1, "start" => $overlap_start, "end" => $overlap_end)));
$overlap_array[($ol_start_date)][] = array ("blockStart" => $overlapBlock_start, "blockEnd" => $overlapBlock_end, "maxOverlaps" => 1, "events" => array (array ("time" => $keyTime, "key" => $keyEvent), array ("time" => $newMasterTime, "key" => $ol_uid)), "overlapRanges" => array (array ("count" => 1, "start" => $overlap_start, "end" => $overlap_end)));
$maxOverlaps = 1;
end($overlap_array[($ol_start_date)]);
$newBlockKey = key($overlap_array[($ol_start_date)]);
} else {
if ($overlap_array[($ol_start_date)][($newBlockKey)]["blockStart"] > $overlapBlock_start) $overlap_array[($ol_start_date)][($newBlockKey)]["blockStart"] = $overlapBlock_start;
if ($overlap_array[($ol_start_date)][($newBlockKey)]["blockEnd"] < $overlapBlock_end) $overlap_array[($ol_start_date)][($newBlockKey)]["blockEnd"] = $overlapBlock_end;
$overlap_array[($ol_start_date)][($newBlockKey)]["events"][] = array ("time" => $keyTime, "key" => $keyEvent);
$overlap_array[($ol_start_date)][($newBlockKey)]["overlapRanges"][] = array ("count" => 1, "start" => $overlap_start, "end" => $overlap_end);
}
// update master_array
$master_array[($ol_start_date)][($keyTime)][($keyEvent)]["event_overlap"] = $maxOverlaps;
}
}
}
}
}
// for debugging the checkOverlap function
//print 'Date: ' . $ol_start_date . ' / New Time: ' . $newMasterTime . ' / New Key: ' . $newMasterEventKey . '
';
//print '
'; //print_r($overlap_array); //print ''; return $maxOverlaps; } // drei 20021126: function for checking and removing overlapping events //function removeOverlap($ol_start_date, $ol_start_time, $ol_key = 0) { function removeOverlap($ol_start_date, $ol_start_time, $ol_key) { global $master_array, $overlap_array; if (isset($overlap_array[$ol_start_date])) { if (sizeof($overlap_array[$ol_start_date]) > 0) { $ol_end_time = $master_array[$ol_start_date][$ol_start_time][$ol_key]["event_end"]; foreach ($overlap_array[$ol_start_date] as $keyBlock => $blockId) { // if (($blockId["blockStart"] <= $ol_start_time) or ($blockId["blockEnd"] >= $ol_start_time)) { if (($blockId["blockStart"] <= $ol_start_time) and ($blockId["blockEnd"] > $ol_start_time)) { foreach ($blockId["events"] as $keyEvent => $ol_event) { $master_array[$ol_start_date][$ol_event["time"]][$ol_event["key"]]["event_overlap"] -= 1; if (($ol_event["time"] == $ol_start_time) and ($ol_event["key"] == $ol_key)) { unset ($overlap_array[$ol_start_date][$keyBlock]["events"][$keyEvent]); } } if ($blockId["maxOverlaps"] == 1) { unset ($overlap_array[$ol_start_date][$keyBlock]); } else { $overlap_array[$ol_start_date][$keyBlock]["maxOverlaps"] -= 1; //$blockId["maxOverlaps"] -= 1; // SJBO: Shouldn't something be done with [overlapRanges] as well? } } } } } } ?>