row $scheduleMap = []; foreach ($scheduleRows as $row) { $scheduleMap[$row->weekday] = $row; } // Calendar math $firstDay = mktime(0, 0, 0, $month, 1, $year); $daysInMonth = (int)date('t', $firstDay); // day-of-week of 1st (0=Sun, so Mon=1) $startDow = (int)date('w', $firstDay); // 0=Sun..6=Sat // Convert to Mon-based: Mon=0 .. Sun=6 $startOffset = ($startDow + 6) % 7; $today = date('Y-m-d'); $monthNames = ['január','február','március','április','május','június','július','augusztus','szeptember','október','november','december']; $monthLabel = $year . ' ' . $monthNames[$month - 1]; $prevMonth = $month == 1 ? 12 : $month - 1; $prevYear = $month == 1 ? $year - 1 : $year; $nextMonth = $month == 12 ? 1 : $month + 1; $nextYear = $month == 12 ? $year + 1 : $year; $prevParam = $prevYear . '-' . str_pad($prevMonth, 2, '0', STR_PAD_LEFT); $nextParam = $nextYear . '-' . str_pad($nextMonth, 2, '0', STR_PAD_LEFT); $workerId = $selectedWorker->worker_id; ?>
← Előző Következő →
Munkanap
Szabad nap
Napiszabadság
Szabadság
Betegszabadság
Egyedi munkaidő
Egyéb
Ebédszünet (auto)
PHP weekday=1, ... Sun=6 -> PHP=0 echo ''; // Empty cells before first day for ($i = 0; $i < $startOffset; $i++) { echo ''; $cell++; } while ($day <= $daysInMonth) { if ($cell % 7 === 0 && $cell > 0) { echo ''; } $colIndex = $cell % 7; // 0=Mon .. 6=Sun $phpWeekday = $phpDow[$colIndex]; // PHP weekday number $dateStr = $year . '-' . str_pad($month, 2, '0', STR_PAD_LEFT) . '-' . str_pad($day, 2, '0', STR_PAD_LEFT); $isToday = ($dateStr === $today); // Determine status $override = isset($overridesByDate[$dateStr]) ? $overridesByDate[$dateStr] : null; $hasSchedule = isset($scheduleMap[$phpWeekday]); $badgeHtml = ''; $cellTitle = ''; $overrideJson = 'null'; if ($override) { $absType = $override->absence_type ?? null; if ($absType === 'vacation') { $badgeHtml = 'Szabadság'; $cellTitle = 'Szabadság'; } elseif ($absType === 'sick') { $badgeHtml = 'Beteg'; $cellTitle = 'Betegszabadság'; } elseif ($absType === 'custom') { $st = substr($override->start_time, 0, 5); $et = substr($override->end_time, 0, 5); $badgeHtml = ''.$st.'–'.$et.''; $cellTitle = 'Egyedi: '.$st.'–'.$et; } elseif ($absType === 'other') { $badgeHtml = 'Egyéb'; $cellTitle = 'Egyéb'; } else { // is_day_off=1, no absence_type = plain day off $badgeHtml = 'Szabad'; $cellTitle = 'Napi szabadság'; } $overrideJson = json_encode([ 'is_day_off' => (int)$override->is_day_off, 'absence_type' => $override->absence_type, 'start_time' => $override->start_time ? substr($override->start_time, 0, 5) : '', 'end_time' => $override->end_time ? substr($override->end_time, 0, 5) : '', 'note' => $override->note ?? '', ]); } elseif ($hasSchedule) { $sch = $scheduleMap[$phpWeekday]; $st = substr($sch->start_time, 0, 5); $et = substr($sch->end_time, 0, 5); $badgeHtml = ''.$st.'–'.$et.''; $cellTitle = 'Munkanap: '.$st.'–'.$et; } else { $badgeHtml = 'Szabad'; $cellTitle = 'Nem dolgozik'; } $todayClass = $isToday ? ' cal-today' : ''; $encodedDate = htmlspecialchars(json_encode($dateStr), ENT_QUOTES); $encodedWid = htmlspecialchars(json_encode($workerId), ENT_QUOTES); $encodedOver = htmlspecialchars($overrideJson, ENT_QUOTES); echo ''; $day++; $cell++; } // Pad remaining cells while ($cell % 7 !== 0) { echo ''; $cell++; } echo ''; ?>
HKSzCsPSzV
'; echo '
'.$day.'
'; echo $badgeHtml; if (isset($lunchByDate[$dateStr])) { $lb = $lunchByDate[$dateStr]; echo '🍴 '.$lb['start'].'–'.$lb['end'].''; } echo '

Nap szerkesztése