admin: make phase select dependent on chosen Wahl (dynamic phases)
All checks were successful
Deploy Workshop-Wahlen (DEV / PROD) / deploy (push) Successful in 12s

This commit is contained in:
Blitz08
2026-01-31 11:23:23 +01:00
parent 1c08324b24
commit 8fca38f6fe

View File

@@ -32,7 +32,7 @@ function kc_force_zuteilung_page() {
// Listen f<>r Dropdowns
$teilnehmer_liste = $wpdb->get_results("SELECT * FROM {$prefix}kc_teilnehmer ORDER BY nachname, vorname");
$workshop_liste = $wpdb->get_results("SELECT * FROM {$prefix}kc_workshops ORDER BY name");
$wahlen = $wpdb->get_results("SELECT id, name FROM {$prefix}kc_wahlen WHERE deleted=0 ORDER BY name");
$wahlen = $wpdb->get_results("SELECT id, name, COALESCE(anzahl_einheiten,1) AS anzahl_einheiten FROM {$prefix}kc_wahlen WHERE deleted=0 ORDER BY name");
// Bearbeiten
if (isset($_GET['edit_force'])) {
@@ -106,11 +106,46 @@ function kc_force_zuteilung_page() {
echo '</form>';
echo '</div>';
// Prepare JS mapping of wahl_id -> number of phases
$wahl_phases = [];
foreach ($wahlen as $w) $wahl_phases[intval($w->id)] = intval($w->anzahl_einheiten);
echo '<script>var kcWahlPhases = ' . wp_json_encode($wahl_phases) . ';</script>';
echo '<script>
jQuery(function($){
$("#kc-force-teilnehmer-dropdown").select2({placeholder:"Teilnehmer auswählen…",allowClear:true});
$("#kc-force-wahl-dropdown").select2({placeholder:"Wahl auswählen…",allowClear:true});
$("#kc-force-workshop-dropdown").select2({placeholder:"Workshop auswählen…",allowClear:true});
function refreshPhaseSelect($wahlSelect, $phaseSelect, current) {
var wid = parseInt($wahlSelect.val(),10);
var max = (wid && kcWahlPhases[wid]) ? parseInt(kcWahlPhases[wid],10) : 1;
$phaseSelect.empty();
for(var i=1;i<=max;i++){
var opt = $('<option>').val(i).text(i + (i===1? ' (Phase)':' (Phase)'));
$phaseSelect.append(opt);
}
if (current) {
$phaseSelect.val(current);
}
$phaseSelect.prop('disabled', false);
}
// Bind change for all existing wahl selects on the page
$(document).on('change', '#kc-force-wahl-dropdown', function(){
var $w = $(this);
var $phase = $w.closest('form').find('[name="phase"]');
refreshPhaseSelect($w, $phase);
});
// Initialize existing phase selects based on their selected wahl
$('[name="phase"]').each(function(){
var $phase = $(this);
var $form = $phase.closest('form');
var $wahl = $form.find('#kc-force-wahl-dropdown');
var current = $phase.val();
refreshPhaseSelect($wahl, $phase, current);
});
});
</script>';
echo '</div>';