From 5e765f0ff54cbbe90e1a53f20725f8cf926120ce Mon Sep 17 00:00:00 2001 From: ProgrammGamer Date: Wed, 25 Feb 2026 18:28:13 +0100 Subject: [PATCH] Finalase Export --- includes/admin-teilnehmer.php | 177 +++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 78 deletions(-) diff --git a/includes/admin-teilnehmer.php b/includes/admin-teilnehmer.php index ab3d04b..1a1a929 100644 --- a/includes/admin-teilnehmer.php +++ b/includes/admin-teilnehmer.php @@ -1,4 +1,103 @@ prefix; + + $all_wahlen = $wpdb->get_results("SELECT id, name FROM {$prefix}kc_wahlen WHERE deleted=0 ORDER BY id DESC"); + $all_workshops = $wpdb->get_results("SELECT id, name FROM {$prefix}kc_workshops ORDER BY name"); + + $wahl_name_map = []; + if (!empty($all_wahlen)) { + foreach ($all_wahlen as $w) { + $wahl_name_map[intval($w->id)] = $w->name; + } + } + + $workshops_map = []; + if (!empty($all_workshops)) { + foreach ($all_workshops as $ws) { + $workshops_map[intval($ws->id)] = $ws->name; + } + } + + $export_wahl_id = isset($_GET['wahl_id']) ? intval($_GET['wahl_id']) : 0; + $export_phase = isset($_GET['phase']) ? intval($_GET['phase']) : 0; + + $sql = "SELECT * FROM {$prefix}kc_teilnehmer"; + if ($export_wahl_id > 0 && $export_phase > 0) { + $sql .= $wpdb->prepare(" WHERE wahl_id=%d AND phase=%d", $export_wahl_id, $export_phase); + } elseif ($export_wahl_id > 0) { + $sql .= $wpdb->prepare(" WHERE wahl_id=%d", $export_wahl_id); + } elseif ($export_phase > 0) { + $sql .= $wpdb->prepare(" WHERE phase=%d", $export_phase); + } + $sql .= " ORDER BY wahl_id, phase, nachname, vorname"; + $export_rows = $wpdb->get_results($sql); + + $filename_suffix = '_alle'; + if ($export_wahl_id > 0) { + $wahl_name_for_file = isset($wahl_name_map[$export_wahl_id]) ? $wahl_name_map[$export_wahl_id] : ('wahl_'.$export_wahl_id); + $wahl_slug = sanitize_title($wahl_name_for_file); + if ($wahl_slug === '') { + $wahl_slug = 'wahl_'.$export_wahl_id; + } + $filename_suffix = '_'.$wahl_slug; + if ($export_phase > 0) { + $filename_suffix .= '_phase_'.$export_phase; + } + } elseif ($export_phase > 0) { + $filename_suffix = '_phase_'.$export_phase; + } + + header('Content-Type: text/csv; charset=utf-8'); + header('Content-Disposition: attachment; filename="kc_teilnehmer'.$filename_suffix.'.csv"'); + echo "\xEF\xBB\xBF"; + + $output = fopen('php://output', 'w'); + $delimiter = ';'; + fputcsv($output, ['Vorname','Nachname','Wahl','Phase','Wunsch 1','Wunsch 2','Wunsch 3'], $delimiter); + + $csv_clean = function($value) { + $text = html_entity_decode((string)$value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); + $text = wp_strip_all_tags($text, true); + $text = preg_replace('/\s+/u', ' ', $text); + return trim($text); + }; + + foreach ($export_rows as $tn) { + $w1_id = intval($tn->wunsch1); + $w2_id = intval($tn->wunsch2); + $w3_id = intval($tn->wunsch3); + + $w1_disp = $w1_id && isset($workshops_map[$w1_id]) ? $workshops_map[$w1_id] : ($w1_id ? strval($w1_id) : ''); + $w2_disp = $w2_id && isset($workshops_map[$w2_id]) ? $workshops_map[$w2_id] : ($w2_id ? strval($w2_id) : ''); + $w3_disp = $w3_id && isset($workshops_map[$w3_id]) ? $workshops_map[$w3_id] : ($w3_id ? strval($w3_id) : ''); + + $wahl_name = isset($wahl_name_map[intval($tn->wahl_id)]) ? $wahl_name_map[intval($tn->wahl_id)] : ''; + + $vorname = $csv_clean($tn->vorname); + $nachname = $csv_clean($tn->nachname); + $wahl_name_clean = $csv_clean($wahl_name); + $w1_clean = $csv_clean($w1_disp); + $w2_clean = $csv_clean($w2_disp); + $w3_clean = $csv_clean($w3_disp); + + fputcsv($output, [ + $vorname, + $nachname, + $wahl_name_clean, + intval($tn->phase), + $w1_clean, + $w2_clean, + $w3_clean + ], $delimiter); + } + + fclose($output); + exit; +} + function kc_teilnehmer_page() { global $wpdb; $prefix = $wpdb->prefix; @@ -23,84 +122,6 @@ function kc_teilnehmer_page() { } } - // CSV-Export (alle Teilnehmer oder gefiltert nach Wahl/Phase) - if (isset($_GET['export_teilnehmer_csv']) && current_user_can('manage_options')) { - $export_wahl_id = isset($_GET['wahl_id']) ? intval($_GET['wahl_id']) : 0; - $export_phase = isset($_GET['phase']) ? intval($_GET['phase']) : 0; - - $sql = "SELECT * FROM {$prefix}kc_teilnehmer"; - if ($export_wahl_id > 0 && $export_phase > 0) { - $sql .= $wpdb->prepare(" WHERE wahl_id=%d AND phase=%d", $export_wahl_id, $export_phase); - } elseif ($export_wahl_id > 0) { - $sql .= $wpdb->prepare(" WHERE wahl_id=%d", $export_wahl_id); - } elseif ($export_phase > 0) { - $sql .= $wpdb->prepare(" WHERE phase=%d", $export_phase); - } - $sql .= " ORDER BY wahl_id, phase, nachname, vorname"; - $export_rows = $wpdb->get_results($sql); - - $filename_suffix = '_alle'; - if ($export_wahl_id > 0) { - $wahl_name_for_file = isset($wahl_name_map[$export_wahl_id]) ? $wahl_name_map[$export_wahl_id] : ('wahl_'.$export_wahl_id); - $wahl_slug = sanitize_title($wahl_name_for_file); - if ($wahl_slug === '') { - $wahl_slug = 'wahl_'.$export_wahl_id; - } - $filename_suffix = '_'.$wahl_slug; - if ($export_phase > 0) { - $filename_suffix .= '_phase_'.$export_phase; - } - } elseif ($export_phase > 0) { - $filename_suffix = '_phase_'.$export_phase; - } - header('Content-Type: text/csv; charset=utf-8'); - header('Content-Disposition: attachment; filename="kc_teilnehmer'.$filename_suffix.'.csv"'); - echo "\xEF\xBB\xBF"; - - $output = fopen('php://output', 'w'); - $delimiter = ';'; - fputcsv($output, ['Vorname','Nachname','Wahl','Phase','Wunsch 1','Wunsch 2','Wunsch 3'], $delimiter); - - $csv_clean = function($value) { - $text = html_entity_decode((string)$value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); - $text = wp_strip_all_tags($text, true); - $text = preg_replace('/\s+/u', ' ', $text); - return trim($text); - }; - - foreach ($export_rows as $tn) { - $w1_id = intval($tn->wunsch1); - $w2_id = intval($tn->wunsch2); - $w3_id = intval($tn->wunsch3); - - $w1_disp = $w1_id && isset($workshops_map[$w1_id]) ? $workshops_map[$w1_id] : ($w1_id ? strval($w1_id) : ''); - $w2_disp = $w2_id && isset($workshops_map[$w2_id]) ? $workshops_map[$w2_id] : ($w2_id ? strval($w2_id) : ''); - $w3_disp = $w3_id && isset($workshops_map[$w3_id]) ? $workshops_map[$w3_id] : ($w3_id ? strval($w3_id) : ''); - - $wahl_name = isset($wahl_name_map[intval($tn->wahl_id)]) ? $wahl_name_map[intval($tn->wahl_id)] : ''; - - $vorname = $csv_clean($tn->vorname); - $nachname = $csv_clean($tn->nachname); - $wahl_name_clean = $csv_clean($wahl_name); - $w1_clean = $csv_clean($w1_disp); - $w2_clean = $csv_clean($w2_disp); - $w3_clean = $csv_clean($w3_disp); - - fputcsv($output, [ - $vorname, - $nachname, - $wahl_name_clean, - intval($tn->phase), - $w1_clean, - $w2_clean, - $w3_clean - ], $delimiter); - } - - fclose($output); - exit; - } - // Build map of wahl -> phases + workshops (for JS) $wahl_map = []; foreach($all_wahlen as $w) {