/** * rearrange the current list of events in a optimized way * * @param bool $new_mode use the new mode * * @return null */ function rearrange($new_mode = false) { $events = array(); //days foreach ($this->events_sorted as $_events_by_day) { $intervals = array(); // tab foreach ($_events_by_day as $_events_by_hour) { foreach ($_events_by_hour as $_event) { //used as background, skip the rearrange if ($_event->below) { $_event->width = 0.9; $_event->offset = 0.1; continue; } $intervals[$_event->internal_id] = array("lower" => $_event->start, "upper" => $_event->end); $events[$_event->internal_id] = $_event; } } if ($new_mode) { $lines = CMbRange::rearrange2($intervals); foreach ($lines as $guid => $_line) { /** @var CPlanningEvent $event */ $event = $events[$guid]; $event->offset = $_line["start"] / $_line["total"] + 0.1; $event->width = ($_line["end"] - $_line["start"]) / $_line["total"] - 0.1; } } else { $lines = CMbRange::rearrange($intervals); $lines_count = count($lines); foreach ($lines as $_line_number => $_line) { foreach ($_line as $_event_id) { $event = $events[$_event_id]; //get the event $event->height = $_line_number; //global = first line $event->width = 1 / $lines_count; $event->offset = $_line_number / $lines_count; if ($this->allow_superposition) { $event->offset += 0.05; } if ($lines_count == 1 && $this->allow_superposition) { $event->width = $event->width - 0.1; } //the line is not the first if ($_line_number >= 1 && $this->allow_superposition) { $event->width = 1 / $lines_count + 0.05; $event->offset = $_line_number / $lines_count - 0.1; } } } } } }