prepare( "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = :table_name" ); $stmt->execute(['table_name' => $table]); return (int)$stmt->fetchColumn() > 0; } } if (!function_exists('vacationAbsenceTableHasColumn')) { function vacationAbsenceTableHasColumn(PDO $pdo, string $table, string $column): bool { $stmt = $pdo->prepare( "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = :table_name AND COLUMN_NAME = :column_name" ); $stmt->execute([ 'table_name' => $table, 'column_name' => $column, ]); return (int)$stmt->fetchColumn() > 0; } } if (!function_exists('vacationAbsenceReasonOptions')) { function vacationAbsenceReasonOptions(): array { return [ 'urlaub' => 'Urlaub', 'krankheit_mit_atest' => 'Krankheit mit Attest', 'krankheit_ohne_atest' => 'Krankheit ohne Attest', 'berufsschule' => 'Berufsschule', 'weiterbildung' => 'Weiterbildung', 'persoenliche_gruende' => 'Persoenliche GrĂ¼nde', 'sonstiges' => 'Sonstiges', ]; } } if (!function_exists('vacationAbsenceDefaultReason')) { function vacationAbsenceDefaultReason(): string { return 'urlaub'; } } if (!function_exists('vacationAbsenceNormalizeReason')) { function vacationAbsenceNormalizeReason($reason): string { $reason = trim((string)$reason); $options = vacationAbsenceReasonOptions(); return array_key_exists($reason, $options) ? $reason : vacationAbsenceDefaultReason(); } } if (!function_exists('vacationAbsenceReasonLabel')) { function vacationAbsenceReasonLabel($reason): string { $reason = vacationAbsenceNormalizeReason($reason); $options = vacationAbsenceReasonOptions(); return $options[$reason] ?? $options[vacationAbsenceDefaultReason()]; } } if (!function_exists('vacationAbsenceCountsAgainstEntitlement')) { function vacationAbsenceCountsAgainstEntitlement($reason): bool { return vacationAbsenceNormalizeReason($reason) === 'urlaub'; } } if (!function_exists('vacationAbsenceEnsureSchema')) { function vacationAbsenceEnsureSchema(PDO $pdo): void { if (!vacationAbsenceTableExists($pdo, 'vacations')) { return; } if (!vacationAbsenceTableHasColumn($pdo, 'vacations', 'absence_reason')) { $pdo->exec("ALTER TABLE vacations ADD COLUMN absence_reason VARCHAR(50) NOT NULL DEFAULT 'urlaub'"); } $pdo->exec(" UPDATE vacations SET absence_reason = 'urlaub' WHERE absence_reason IS NULL OR TRIM(absence_reason) = '' "); } }