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(); ?>

name) ?>

beschreibung): ?>
beschreibung)) ?>
Danke! Deine Wünsche wurden gespeichert.
Erfolgreich eingefügte IDs:
1): ?>Phase
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'); ?>

Teamer: Workshop erstellen