summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2018-12-26 19:49:01 +0100
committerIgor Scheller <igor.scheller@igorshp.de>2018-12-26 19:49:01 +0100
commitacd9ec696638ce03f084cdb5ee998ace8c7003c3 (patch)
treefdd64ebbdb518de88e67c9f51d188d7780a71fd7
parent36830c43e7cd1bf277564a60ef1dcc7c69b7ea9c (diff)
add multiple shifts: Fix hour regex and sorting, cleanup and formatting
-rw-r--r--includes/pages/admin_shifts.php29
1 files 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;
}