prefix;
kc_admin_tabs('kc_workshops');
// Liste aller Teamer für Multi-Select (sortiert wie in Teamer-Übersicht: Vorname A-Z)
$teamer_liste = $wpdb->get_results("SELECT * FROM {$prefix}kc_teamer ORDER BY vorname ASC");
// Liste aller Wahlen für Auswahl
$wahlen_liste = $wpdb->get_results("SELECT * FROM {$prefix}kc_wahlen ORDER BY id DESC");
// Phasen werden pro Wahl über die Spalte `anzahl_einheiten` in `kc_wahlen` bestimmt.
// Eine separate Tabelle `kc_phasen` wird nicht benötigt.
$phasen_liste = [];
// Workshop löschen
if (isset($_GET['delete_workshop'])) {
$wid = intval($_GET['delete_workshop']);
$wpdb->delete("{$prefix}kc_workshops", ['id' => $wid]);
echo '
Workshop gelöscht!
';
}
// Workshop speichern (neu/ändern)
if (isset($_POST['kc_workshop_save'])) {
$wid = !empty($_POST['wid']) ? intval($_POST['wid']) : null;
// Nur Workshop-Daten speichern, wenn Name übergeben wurde (nicht bei reiner Teamer-Bearbeitung)
if (!empty($_POST['name'])) {
// Ensure DB has min_teilnehmer column
$col = $wpdb->get_results($wpdb->prepare("SHOW COLUMNS FROM {$prefix}kc_workshops LIKE %s", 'min_teilnehmer'));
if (empty($col)) {
$wpdb->query("ALTER TABLE {$prefix}kc_workshops ADD COLUMN min_teilnehmer INT DEFAULT 0");
}
$data = [
'name' => sanitize_text_field($_POST['name']),
'beschreibung' => sanitize_text_field($_POST['beschreibung']),
'max_teilnehmer' => intval($_POST['max_teilnehmer']),
'min_teilnehmer' => intval($_POST['min_teilnehmer'] ?? 0)
];
if ($wid) {
$wpdb->update("{$prefix}kc_workshops", $data, ['id'=> $wid]);
echo '
';
}
}
// Teamer-Zuordnungen speichern mit Wahl/Phase (auch für neue Workshops)
if (!empty($wid)) {
// Stelle sicher, dass wahl_id und phase Spalten existieren
$columns = $wpdb->get_col("SHOW COLUMNS FROM {$prefix}kc_workshop_teamer");
if (!in_array('wahl_id', $columns)) {
$wpdb->query("ALTER TABLE {$prefix}kc_workshop_teamer ADD COLUMN wahl_id INT(11) NULL DEFAULT NULL");
}
if (!in_array('phase', $columns)) {
$wpdb->query("ALTER TABLE {$prefix}kc_workshop_teamer ADD COLUMN phase INT(11) NULL DEFAULT NULL");
}
$is_feste = !empty($_POST['edit_feste']);
$wahl_id = !empty($_POST['select_wahl_id']) ? intval($_POST['select_wahl_id']) : null;
$phase = !empty($_POST['select_phase']) ? intval($_POST['select_phase']) : null;
// Lösche alte Zuordnungen (nur wenn Teamer vorhanden sind, für neue Workshops)
if (!empty($_POST['teamer_ids'])) {
if ($is_feste) {
$wpdb->query($wpdb->prepare(
"DELETE FROM {$prefix}kc_workshop_teamer WHERE workshop_id=%d AND wahl_id IS NULL AND phase IS NULL",
$wid
));
} elseif ($wahl_id !== null) {
if ($phase !== null) {
$wpdb->delete("{$prefix}kc_workshop_teamer", [
'workshop_id' => $wid,
'wahl_id' => $wahl_id,
'phase' => $phase
]);
} else {
$wpdb->query($wpdb->prepare(
"DELETE FROM {$prefix}kc_workshop_teamer WHERE workshop_id=%d AND wahl_id=%d AND phase IS NULL",
$wid, $wahl_id
));
}
}
}
// Neue Zuordnungen einfügen
if (!empty($_POST['teamer_ids']) && is_array($_POST['teamer_ids'])) {
foreach ($_POST['teamer_ids'] as $tid) {
$tid = intval($tid);
if ($tid > 0) {
if ($is_feste) {
$wpdb->insert("{$prefix}kc_workshop_teamer", [
'workshop_id' => $wid,
'teamer_id' => $tid,
'wahl_id' => null,
'phase' => null
]);
} else {
$wpdb->insert("{$prefix}kc_workshop_teamer", [
'workshop_id' => $wid,
'teamer_id' => $tid,
'wahl_id' => $wahl_id,
'phase' => $phase
]);
}
}
}
}
// Redirect nach Speichern von festen Teamern zur Gesamtübersicht
if ($is_feste && empty($_POST['name'])) {
echo '
Feste Teamer gespeichert!
';
echo "";
return;
}
// Redirect nach Speichern von wahl-spezifischen Teamern zurück zur Workshop-Bearbeitung
if ($wahl_id !== null && empty($_POST['name'])) {
echo '
Teamer-Zuordnung gespeichert!
';
echo "";
return;
}
}
}
// Workshop bearbeiten
if (isset($_GET['edit_workshop'])) {
$wid = intval($_GET['edit_workshop']);
$ws = $wpdb->get_row("SELECT * FROM {$prefix}kc_workshops WHERE id=$wid");
if (!$ws) {
echo '
';
// Hole alle Wahlen, die diesem Workshop zugeordnet sind
$wahlen_for_workshop = $wpdb->get_results($wpdb->prepare(
"SELECT DISTINCT ww.wahl_id, w.name, w.anzahl_einheiten
FROM {$prefix}kc_wahl_workshops ww
JOIN {$prefix}kc_wahlen w ON ww.wahl_id=w.id
WHERE ww.workshop_id=%d
ORDER BY w.id",
$wid
));
if (empty($wahlen_for_workshop)) {
echo '
Dieser Workshop ist noch keiner Wahl zugeordnet.
';
} else {
foreach($wahlen_for_workshop as $w) {
// Sammle Teamer für diese Wahl
if ($has_wahl && $has_phase) {
// Prüfe ob es wahl-spezifische Teamer gibt
$wahl_teamer = $wpdb->get_results($wpdb->prepare(
"SELECT DISTINCT t.vorname, t.nachname FROM {$prefix}kc_workshop_teamer wt
JOIN {$prefix}kc_teamer t ON wt.teamer_id=t.id
WHERE wt.workshop_id=%d AND wt.wahl_id=%d
ORDER BY t.vorname",
$wid, $w->wahl_id
));
// Wenn keine wahl-spezifischen Teamer, nutze die Festen Teamer
if (empty($wahl_teamer) && !empty($feste_teamer)) {
$teamer = $feste_teamer;
} else {
$teamer = $wahl_teamer;
}
} else {
$teamer = [];
}
$teamer_names = array_map(function($t) { return $t->vorname.' '.$t->nachname; }, $teamer);
$teamer_str = !empty($teamer_names) ? implode(', ', array_map('esc_html', $teamer_names)) : 'Keine';
echo '
';
// Wenn Feste Teamer bearbeitet werden sollen
if (isset($_GET['edit_feste'])) {
echo '
Feste Teamer (gelten für alle Wahlen)
';
}
// Wenn eine Wahl ausgewählt wurde, zeige Phase-Auswahl oder direkt Teamer-Bearbeitung
elseif (isset($_GET['select_wahl']) && !isset($_GET['edit_wahl'])) {
$select_wahl_id = intval($_GET['select_wahl']);
$wahl_info = $wpdb->get_row($wpdb->prepare("SELECT name, anzahl_einheiten FROM {$prefix}kc_wahlen WHERE id=%d", $select_wahl_id));
if (!$wahl_info) {
echo '
Wahl nicht gefunden.
';
echo 'Abbrechen';
return;
}
if (intval($wahl_info->anzahl_einheiten) > 1) {
// Mehrere Phasen: Frage stellen unter Berücksichtigung der tatsächlichen Zuordnung
// Ermittle, welchen Phasen dieser Workshop in dieser Wahl zugeordnet ist
$assigned_phases = $wpdb->get_col($wpdb->prepare(
"SELECT DISTINCT phase FROM {$prefix}kc_wahl_workshops WHERE workshop_id=%d AND wahl_id=%d AND phase IS NOT NULL",
$wid, $select_wahl_id
));
$assigned_phases = array_map('intval', (array)$assigned_phases);
sort($assigned_phases);
echo '
';
echo '
Teamer für: '.esc_html($wahl_info->name).'
';
echo '
Sollen die Teamer für eine bestimmte Phase gelten?';
echo ' (Dieser Workshop ist zugeordnet: '.(!empty($assigned_phases) ? 'Phase '.esc_html(implode(', ', $assigned_phases)) : 'keiner Phase').')
';
echo '
';
// "Für alle Phasen" nur anbieten, wenn wirklich allen Phasen dieser Wahl zugeordnet
if (!empty($assigned_phases) && count($assigned_phases) === intval($wahl_info->anzahl_einheiten)) {
echo 'Für alle Phasen';
}
// Buttons nur für tatsächlich zugeordnete Phasen
foreach ($assigned_phases as $p) {
echo 'Phase '.$p.'';
}
if (empty($assigned_phases)) {
echo 'Dieser Workshop ist in dieser Wahl aktuell keiner Phase zugeordnet.';
}
echo '
';
} else {
// Nur eine Phase: direkt weiterleiten
echo "";
return;
}
}
// Wenn eine Wahl ausgewählt wurde (mit oder ohne Phase), zeige Bearbeitung
elseif (isset($_GET['edit_wahl'])) {
$edit_wahl_id = intval($_GET['edit_wahl']);
$edit_phase = isset($_GET['edit_phase']) ? intval($_GET['edit_phase']) : null;
$edit_wahl = $wpdb->get_row($wpdb->prepare("SELECT name FROM {$prefix}kc_wahlen WHERE id=%d", $edit_wahl_id));
if (!$edit_wahl) {
echo '
Wahl nicht gefunden.
';
echo 'Abbrechen';
return;
}
if ($edit_phase !== null) {
$title = 'Teamer für '.esc_html($edit_wahl->name).' Phase '.$edit_phase;
} else {
$title = 'Teamer für '.esc_html($edit_wahl->name).' (Alle Phasen)';
}
echo '