Finalase Export
All checks were successful
Deploy Workshop-Wahlen (DEV / PROD) / deploy (push) Successful in 13s
All checks were successful
Deploy Workshop-Wahlen (DEV / PROD) / deploy (push) Successful in 13s
This commit is contained in:
@@ -1,4 +1,103 @@
|
|||||||
<?php
|
<?php
|
||||||
|
// CSV Export Handler: früh ausführen, damit kein HTML in der CSV landet
|
||||||
|
if (isset($_GET['export_teilnehmer_csv']) && current_user_can('manage_options')) {
|
||||||
|
global $wpdb;
|
||||||
|
$prefix = $wpdb->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() {
|
function kc_teilnehmer_page() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$prefix = $wpdb->prefix;
|
$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)
|
// Build map of wahl -> phases + workshops (for JS)
|
||||||
$wahl_map = [];
|
$wahl_map = [];
|
||||||
foreach($all_wahlen as $w) {
|
foreach($all_wahlen as $w) {
|
||||||
|
|||||||
Reference in New Issue
Block a user