From acd9ec696638ce03f084cdb5ee998ace8c7003c3 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Wed, 26 Dec 2018 19:49:01 +0100 Subject: add multiple shifts: Fix hour regex and sorting, cleanup and formatting --- includes/pages/admin_shifts.php | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/includes/pages/admin_shifts.php b/includes/pages/admin_shifts.php index 8ef713a1..8ff2f226 100644 --- a/includes/pages/admin_shifts.php +++ b/includes/pages/admin_shifts.php @@ -114,7 +114,7 @@ function admin_shifts() if ( $request->has('change_hours') && preg_match( - '/^((\d{2}(:\d{2})?(,|$))*)/', + '/^(\d{1,2}(:\d{2})?(,|$))+$/', trim(str_replace(' ', '', $request->input('change_hours'))) ) ) { @@ -180,6 +180,7 @@ function admin_shifts() $needed_angel_types[$type['angel_type_id']] = $type['count']; } } + $shifts = []; if ($mode == 'single') { $shifts[] = [ @@ -212,22 +213,28 @@ function admin_shifts() $shift_start = $shift_end; } while ($shift_end < $end); } elseif ($mode == 'variable') { - rsort($change_hours); + array_walk($change_hours, function (&$value) { + if (!preg_match('/^\d{1,2}:\d{2}$/', $value)) { + $value .= ':00'; + } + }); + + usort($change_hours, function ($a, $b) { + return str_replace(':', '', $a) > str_replace(':', '', $b) ? -1 : 1; + }); + $day = parse_date('Y-m-d H:i', date('Y-m-d', $start) . ' 00:00'); $change_index = 0; // Ersten/nächsten passenden Schichtwechsel suchen foreach ($change_hours as $i => $change_time) { - if (!preg_match('/\d{2}:\d{2}/', $change_time)) { - $change_time = $change_time . ":00"; - } - $change_time = explode(':', $change_time); $change_hour = $change_time[0]; $change_minute = $change_time[1]; - if ($start < $day + $change_hour * 60 * 60 + $change_minute * 60) { + $shift_end = $day + $change_hour * 60 * 60 + $change_minute * 60; + if ($start < $shift_end) { $change_index = $i; - } elseif ($start == $day + $change_hour * 60 * 60 + $change_minute * 60) { + } elseif ($start == $shift_end) { // Start trifft Schichtwechsel $change_index = ($i + count($change_hours) - 1) % count($change_hours); break; @@ -241,18 +248,12 @@ function admin_shifts() $day = parse_date('Y-m-d H:i', date('Y-m-d', $shift_start) . ' 00:00'); $change_time = $change_hours[$change_index]; - if (!preg_match('/\d{2}:\d{2}/', $change_time)) { - $change_time = $change_time . ":00"; - } - $change_time = explode(':', $change_time); $change_hour = $change_time[0]; $change_minute = $change_time[1]; - $shift_end = $day + $change_hour * 60 * 60 + $change_minute * 60; - if ($shift_end > $end) { $shift_end = $end; } -- cgit v1.2.3-54-g00ecf