Create CSV export for Teilnehmr
All checks were successful
Deploy Workshop-Wahlen (DEV / PROD) / deploy (push) Successful in 14s
All checks were successful
Deploy Workshop-Wahlen (DEV / PROD) / deploy (push) Successful in 14s
This commit is contained in:
@@ -7,6 +7,14 @@ function kc_teilnehmer_page() {
|
||||
$all_wahlen = $wpdb->get_results("SELECT id, name, anzahl_einheiten 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");
|
||||
|
||||
// Map of wahl id => name for quick lookup
|
||||
$wahl_name_map = [];
|
||||
if (!empty($all_wahlen)) {
|
||||
foreach ($all_wahlen as $w) {
|
||||
$wahl_name_map[intval($w->id)] = $w->name;
|
||||
}
|
||||
}
|
||||
|
||||
// Map of workshop id => name for quick lookup in overview
|
||||
$workshops_map = [];
|
||||
if (!empty($all_workshops)) {
|
||||
@@ -15,6 +23,59 @@ function kc_teilnehmer_page() {
|
||||
}
|
||||
}
|
||||
|
||||
// CSV-Export (alle Teilnehmer oder gefiltert nach Wahl)
|
||||
if (isset($_GET['export_csv']) && current_user_can('manage_options')) {
|
||||
$export_wahl_id = isset($_GET['wahl_id']) ? intval($_GET['wahl_id']) : 0;
|
||||
|
||||
$sql = "SELECT * FROM {$prefix}kc_teilnehmer";
|
||||
if ($export_wahl_id > 0) {
|
||||
$sql .= $wpdb->prepare(" WHERE wahl_id=%d", $export_wahl_id);
|
||||
}
|
||||
$sql .= " ORDER BY wahl_id, phase, nachname, vorname";
|
||||
$export_rows = $wpdb->get_results($sql);
|
||||
|
||||
$filename_suffix = $export_wahl_id > 0 ? '_wahl_'.$export_wahl_id : '_alle';
|
||||
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);
|
||||
|
||||
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 = preg_replace('/<[^>]*>/', '', $tn->vorname);
|
||||
$nachname = preg_replace('/<[^>]*>/', '', $tn->nachname);
|
||||
$wahl_name_clean = preg_replace('/<[^>]*>/', '', $wahl_name);
|
||||
$w1_clean = preg_replace('/<[^>]*>/', '', $w1_disp);
|
||||
$w2_clean = preg_replace('/<[^>]*>/', '', $w2_disp);
|
||||
$w3_clean = preg_replace('/<[^>]*>/', '', $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) {
|
||||
@@ -222,13 +283,10 @@ function kc_teilnehmer_page() {
|
||||
}
|
||||
|
||||
// Übersicht
|
||||
// Map für Wahl-ID => Name
|
||||
$wahl_name_map = [];
|
||||
foreach($all_wahlen as $w) {
|
||||
$wahl_name_map[intval($w->id)] = $w->name;
|
||||
}
|
||||
// Map für Wahl-ID => Name ist bereits oben aufgebaut
|
||||
echo '<div class="kc-admin-table-wrap">';
|
||||
echo '<h2 style="margin-top:0;">Alle Teilnehmer</h2>';
|
||||
echo '<a class="kc-btn" style="float:right;margin-right:8px;margin-bottom:12px;background:#2da66a;color:#fff;" href="?page=kc_teilnehmer&export_csv=1">CSV Export</a>';
|
||||
echo '<a class="kc-btn" style="float:right;margin-bottom:12px;" href="?page=kc_teilnehmer&new=1">+ Neuer Teilnehmer</a>';
|
||||
|
||||
// Wahl-Filter-Buttons sortiert nach KC1, KC2, KC3, dann Rest
|
||||
@@ -271,11 +329,19 @@ function kc_teilnehmer_page() {
|
||||
|
||||
foreach ($gruppen as $wid => $phasen) {
|
||||
$wahl_disp = isset($wahl_name_map[$wid]) ? esc_html($wahl_name_map[$wid]) : $wid;
|
||||
$csv_wahl_url = add_query_arg([
|
||||
'page' => 'kc_teilnehmer',
|
||||
'export_csv' => 1,
|
||||
'wahl_id' => intval($wid)
|
||||
], admin_url('admin.php'));
|
||||
// Gesamtanzahl Teilnehmer für diese Wahl berechnen
|
||||
$gesamt = 0;
|
||||
foreach ($phasen as $tns) $gesamt += count($tns);
|
||||
echo '<details style="margin:10px 0 18px 0;border:1px solid #eaeaea;border-radius:6px;padding:8px;">';
|
||||
echo '<summary style="font-weight:700;cursor:pointer;">'. $wahl_disp . ' <span style="color:#555;font-weight:600;">(' . $gesamt . ' TN)</span></summary>';
|
||||
echo '<div style="text-align:right;margin:8px 0 4px 0;">';
|
||||
echo '<a class="kc-btn" style="background:#2da66a;color:#fff;" href="'.esc_url($csv_wahl_url).'">CSV Export dieser Wahl</a>';
|
||||
echo '</div>';
|
||||
foreach ($phasen as $phase => $tns) {
|
||||
echo '<details style="margin:10px 0 10px 0;border:1px solid #f0f0f0;border-radius:6px;padding:8px;">';
|
||||
echo '<summary style="font-weight:600;">Phase '.intval($phase).' <span style="color:#555;font-weight:600;">('.count($tns).' TN)</span></summary>';
|
||||
|
||||
Reference in New Issue
Block a user