null], $atts);
$wahl_id = intval($atts['wahl']);
global $wpdb;
// KRITISCHER TEST: Ausgabe ganz am Anfang
//$debug_output = '
';
//$debug_output .= '
DEBUG INFO
';
//$debug_output .= 'Shortcode läuft!
';
//$debug_output .= 'REQUEST_METHOD: ' . ($_SERVER['REQUEST_METHOD'] ?? 'NICHT GESETZT') . '
';
//$debug_output .= 'POST vorhanden: ' . (empty($_POST) ? 'NEIN' : 'JA') . '
';
//$debug_output .= 'POST Inhalt:
' . print_r($_POST, true) . '
';
//$debug_output .= '
';
$wahl = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}kc_wahlen WHERE id=%d", $wahl_id));
if(!$wahl || !$wahl->freigegeben) {
return $debug_output . '';
}
// Ermittle erlaubte Workshops pro Phase für diese Wahl.
$phasen = (int)$wahl->anzahl_einheiten;
$workshops_by_phase = [];
$mapping_candidates = [
"{$wpdb->prefix}kc_wahl_workshops",
"{$wpdb->prefix}kc_workshop_wahlen",
"{$wpdb->prefix}kc_wahl_workshop"
];
$mapping_table = null;
foreach ($mapping_candidates as $t) {
$found = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $t));
if ($found === $t) { $mapping_table = $t; break; }
}
if ($mapping_table) {
$has_phase_col = (bool) $wpdb->get_var("SHOW COLUMNS FROM {$mapping_table} LIKE 'phase'");
for ($phase = 1; $phase <= $phasen; $phase++) {
if ($has_phase_col) {
$workshops_by_phase[$phase] = $wpdb->get_results($wpdb->prepare(
"SELECT w.* FROM {$wpdb->prefix}kc_workshops w
JOIN {$mapping_table} m ON w.id = m.workshop_id
WHERE m.wahl_id = %d AND m.phase = %d
ORDER BY w.name",
$wahl_id, $phase
));
} else {
$workshops_by_phase[$phase] = $wpdb->get_results($wpdb->prepare(
"SELECT w.* FROM {$wpdb->prefix}kc_workshops w
JOIN {$mapping_table} m ON w.id = m.workshop_id
WHERE m.wahl_id = %d
ORDER BY w.name",
$wahl_id
));
}
}
} else {
$all = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}kc_workshops ORDER BY name");
for ($phase = 1; $phase <= $phasen; $phase++) $workshops_by_phase[$phase] = $all;
}
// POST Verarbeitung
$error_message = null;
$success_redirect = false;
if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['kc_workshop_submit'])) {
//$debug_output .= 'POST WIRD VERARBEITET!
';
if(empty($_POST['vorname']) || empty($_POST['nachname'])) {
$error_message = 'Bitte Vor- und Nachname ausfüllen.';
} else {
$inserted_ids = [];
$vorname = sanitize_text_field($_POST['vorname']);
$nachname = sanitize_text_field($_POST['nachname']);
$norm_v = mb_strtolower(trim($vorname));
$norm_n = mb_strtolower(trim($nachname));
// Duplikatsprüfung
$exists = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->prefix}kc_teilnehmer WHERE LOWER(TRIM(vorname))=%s AND LOWER(TRIM(nachname))=%s AND wahl_id=%d",
$norm_v, $norm_n, $wahl_id
));
if ($exists && $exists > 0) {
$error_message = 'Diese Kombination aus Vorname und Nachname existiert bereits für diese Wahl.';
} else {
// Validierung und Insert
$validation_passed = true;
for ($phase = 1; $phase <= $phasen; $phase++) {
$allowed = array_map('intval', wp_list_pluck($workshops_by_phase[$phase] ?? [], 'id'));
$w1 = intval($_POST["phase{$phase}_wunsch1"] ?? 0);
$w2 = intval($_POST["phase{$phase}_wunsch2"] ?? 0);
$w3 = intval($_POST["phase{$phase}_wunsch3"] ?? 0);
if (empty($allowed) || !in_array($w1, $allowed, true) || !in_array($w2, $allowed, true) || !in_array($w3, $allowed, true)) {
$error_message = "Ungültige Workshop-Auswahl für Phase {$phase}.";
$validation_passed = false;
break;
}
// Ensure the three wishes in this phase are not duplicates
$selected = [$w1, $w2, $w3];
if (count(array_unique($selected)) !== count($selected)) {
$error_message = "Bitte wähle in Phase {$phase} drei verschiedene Workshops (keine Duplikate).";
$validation_passed = false;
break;
}
}
if ($validation_passed) {
for ($phase = 1; $phase <= $phasen; $phase++) {
$w1 = intval($_POST["phase{$phase}_wunsch1"]);
$w2 = intval($_POST["phase{$phase}_wunsch2"]);
$w3 = intval($_POST["phase{$phase}_wunsch3"]);
$result = $wpdb->insert("{$wpdb->prefix}kc_teilnehmer", [
'vorname' => $vorname,
'nachname' => $nachname,
'wahl_id' => $wahl_id,
'phase' => $phase,
'wunsch1' => $w1,
'wunsch2' => $w2,
'wunsch3' => $w3,
'deleted' => 0
]);
if ($result === false) {
$error_message = 'Datenbankfehler: ' . $wpdb->last_error;
break;
} else {
$inserted_ids[] = intval($wpdb->insert_id);
}
}
if (empty($error_message)) {
// Cookie setzen
$cookie_name = 'kc_my_part_' . intval($wahl_id);
$existing = [];
if (!empty($_COOKIE[$cookie_name])) {
$dec = json_decode(stripslashes($_COOKIE[$cookie_name]), true);
if (is_array($dec)) $existing = array_map('intval', $dec);
}
$all_ids = array_values(array_unique(array_merge($existing, $inserted_ids)));
@setcookie($cookie_name, wp_json_encode($all_ids), time() + 30*24*3600, '/');
// Erfolg
$success_redirect = true;
}
}
}
}
}
ob_start();
?>
prefix;
$msg = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['kc_teamer_create_nonce'])) {
if (empty($_POST['kc_teamer_create_nonce']) || !wp_verify_nonce($_POST['kc_teamer_create_nonce'], 'kc_teamer_create_action')) {
$msg = 'Ungültiger Request.
';
} else {
$pw = trim($_POST['kc_teamer_pw'] ?? '');
$saved_hash = get_option('kc_teamer_password_hash', '');
if (empty($saved_hash) || !wp_check_password($pw, $saved_hash)) {
$msg = 'Falsches Passwort.
';
} else {
$vorname = sanitize_text_field($_POST['vorname'] ?? '');
$nachname = sanitize_text_field($_POST['nachname'] ?? '');
$ws_name = sanitize_text_field($_POST['workshop_name'] ?? '');
if ($vorname === '' || $nachname === '' || $ws_name === '') {
$msg = 'Bitte alle Felder ausfüllen.
';
} else {
$existing = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$prefix}kc_teamer WHERE vorname=%s AND nachname=%s", $vorname, $nachname));
if ($existing) {
$tid = intval($existing->id);
} else {
$wpdb->insert("{$prefix}kc_teamer", ['vorname'=>$vorname,'nachname'=>$nachname]);
$tid = intval($wpdb->insert_id);
}
$min_t = max(0, intval($_POST['min_teilnehmer'] ?? 0));
$max_t = max(1, intval($_POST['max_teilnehmer'] ?? 10));
if ($min_t > $max_t) {
$msg = 'Die minimale Teilnehmerzahl darf nicht größer als die maximale sein.
';
} else {
$col = $wpdb->get_var("SHOW COLUMNS FROM {$prefix}kc_workshops LIKE 'min_teilnehmer'");
if (empty($col)) {
$wpdb->query("ALTER TABLE {$prefix}kc_workshops ADD COLUMN min_teilnehmer INT NOT NULL DEFAULT 0");
}
$wpdb->insert("{$prefix}kc_workshops", ['name'=>$ws_name, 'beschreibung'=>'', 'max_teilnehmer'=>$max_t, 'min_teilnehmer'=>$min_t]);
$wid = intval($wpdb->insert_id);
if ($wid) {
$wpdb->insert("{$prefix}kc_workshop_teamer", ['workshop_id'=>$wid, 'teamer_id'=>$tid]);
$msg = 'Workshop angelegt und Teamer zugeordnet.
';
} else {
$msg = 'Fehler beim Anlegen des Workshops.
';
}
}
}
}
}
}
ob_start();
$nonce = wp_create_nonce('kc_teamer_create_action');
?>