null], $atts); $wahl_id = intval($atts['wahl']); global $wpdb; $wahl = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}kc_wahlen WHERE id=$wahl_id"); if(!$wahl) return ''; // Zeige Ergebnisse nur, wenn die Wahl NICHT freigegeben ist. // Ist die Wahl freigegeben, soll das Ergebnis-Shortcode nichts ausgeben (Formular wird stattdessen angezeigt). if (!empty($wahl->freigegeben)) { return ''; } // Workshops für diese Wahl holen $workshops = $wpdb->get_results( "SELECT ws.id, ws.name FROM {$wpdb->prefix}kc_workshops ws JOIN {$wpdb->prefix}kc_wahl_workshops ww ON ws.id = ww.workshop_id WHERE ww.wahl_id = ".intval($wahl_id) ); $ws_names = []; $ws_ids = []; foreach($workshops as $ws) { $ws_names[$ws->id] = $ws->name; $ws_ids[] = intval($ws->id); } // Zuteilungen holen $rows = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}kc_zuteilung WHERE wahl_id=".intval($wahl_id) ); // Gruppieren nach Workshop, sortieren nach Teilnehmerzahl $workshop_groups = []; $nicht_zugeteilt = []; $phases = []; foreach($rows as $row) { // Einträge ohne Phase komplett ignorieren if ($row->phase === null || $row->phase === '') { continue; } $phaseNum = intval($row->phase); $phases[$phaseNum] = true; if ($row->workshop_id && isset($ws_names[$row->workshop_id])) { $workshop_groups[$row->workshop_id][] = $row; } else { $nicht_zugeteilt[] = $row; } } uasort($workshop_groups, function($a, $b) { return count($a) - count($b); }); $phases = array_keys($phases); sort($phases, SORT_NUMERIC); // Teamer pro Workshop und Phase laden (mit Hierarchie: Phase-spezifisch > Wahl-weit > Feste) $ws_teamers = []; if (!empty($ws_ids)) { // Für JEDEN Workshop einzeln laden foreach($ws_ids as $ws_id) { foreach($phases as $phase) { // 1. Versuche Phase-spezifische Teamer zu laden $trows = $wpdb->get_results($wpdb->prepare( "SELECT t.vorname, t.nachname FROM {$wpdb->prefix}kc_workshop_teamer wt JOIN {$wpdb->prefix}kc_teamer t ON wt.teamer_id = t.id WHERE wt.workshop_id = %d AND wt.wahl_id = %d AND wt.phase = %d", $ws_id, $wahl_id, $phase )); // 2. Falls nicht: Versuche Wahl-weite Teamer zu laden if (empty($trows)) { $trows = $wpdb->get_results($wpdb->prepare( "SELECT t.vorname, t.nachname FROM {$wpdb->prefix}kc_workshop_teamer wt JOIN {$wpdb->prefix}kc_teamer t ON wt.teamer_id = t.id WHERE wt.workshop_id = %d AND wt.wahl_id = %d AND wt.phase IS NULL", $ws_id, $wahl_id )); } // 3. Falls nicht: Lade Feste Teamer if (empty($trows)) { $trows = $wpdb->get_results($wpdb->prepare( "SELECT t.vorname, t.nachname FROM {$wpdb->prefix}kc_workshop_teamer wt JOIN {$wpdb->prefix}kc_teamer t ON wt.teamer_id = t.id WHERE wt.workshop_id = %d AND wt.wahl_id IS NULL AND wt.phase IS NULL", $ws_id )); } if (!empty($trows)) { $key = intval($ws_id) . '_' . intval($phase); $ws_teamers[$key] = []; foreach ($trows as $tr) { $ws_teamers[$key][] = trim($tr->vorname.' '.$tr->nachname); } } } } } // Versuche, Teilnehmer-IDs aus Cookie zu lesen (falls vorhanden) $my_ids = []; $cookie_name = 'kc_my_part_' . intval($wahl_id); if (!empty($_COOKIE[$cookie_name])) { $decoded = json_decode(stripslashes($_COOKIE[$cookie_name]), true); if (is_array($decoded)) $my_ids = array_map('intval', $decoded); } ob_start(); // Inline styles, angepasst an konfi-castle.com Look (dezent, grün/türkis Akzent) echo ''; echo '