Sync: Inhalte aus origin/main in develop übernommen; .gitea und .github unverändert belassen (falls vorhanden).
All checks were successful
Deploy Workshop-Wahlen (DEV / PROD) / deploy (push) Successful in 13s

This commit is contained in:
ProgrammGamer
2026-01-30 21:30:23 +01:00
parent 64546f3b62
commit 7fc12ba7bb
5 changed files with 84 additions and 99 deletions

View File

@@ -1,4 +1,4 @@
# Workshop-Wahlen Entwickler-Übersicht # Workshop-Wahlen
## Überblick ## Überblick

View File

@@ -14,10 +14,8 @@ function kc_teamer_page() {
delete_option('kc_teamer_password_hash'); delete_option('kc_teamer_password_hash');
echo '<div class="notice notice-success">Teamer-Passwort entfernt.</div>'; echo '<div class="notice notice-success">Teamer-Passwort entfernt.</div>';
} else { } else {
// Sichere Speicherung mit password_hash update_option('kc_teamer_password_hash', wp_hash_password($pw));
$hash = password_hash($pw, PASSWORD_DEFAULT); echo '<div class="notice notice-success">Teamer-Passwort gespeichert.</div>';
update_option('kc_teamer_password_hash', $hash);
echo '<div class="notice notice-success">Teamer-Passwort gespeichert.</div>';
} }
} }
} }

View File

@@ -309,7 +309,7 @@ function kc_teilnehmer_page() {
echo '</details>'; echo '</details>';
} }
// JS für Wahl- und Phasen-Filter // JS für Wahl- und Phasen-Filter
// CSS moved to admin-teilnehmer.css echo '<style>.kc-wahl-filter-btn.active{background:#4CAF50;color:#fff;} .kc-phase-filter-btn.active{background:#1976d2;color:#fff;}</style>';
echo '<script> echo '<script>
(function() { (function() {
var btns = Array.prototype.slice.call(document.querySelectorAll(".kc-wahl-filter-btn")); var btns = Array.prototype.slice.call(document.querySelectorAll(".kc-wahl-filter-btn"));

View File

@@ -8,12 +8,12 @@ function kc_install_tables() {
global $wpdb; global $wpdb;
$prefix = $wpdb->prefix; $prefix = $wpdb->prefix;
$charset_collate = $wpdb->get_charset_collate(); $charset_collate = $wpdb->get_charset_collate();
require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
// --- Tabellen-Definitionen --- // Tables definitions
$tables_sql = []; $tables_sql = [];
// Wahl-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahlen ( $tables_sql[] = "CREATE TABLE {$prefix}kc_wahlen (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(191) NOT NULL, name varchar(191) NOT NULL,
@@ -26,7 +26,6 @@ function kc_install_tables() {
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Workshop-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshops ( $tables_sql[] = "CREATE TABLE {$prefix}kc_workshops (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(191) NOT NULL, name varchar(191) NOT NULL,
@@ -36,7 +35,6 @@ function kc_install_tables() {
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Teamer-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_teamer ( $tables_sql[] = "CREATE TABLE {$prefix}kc_teamer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
vorname varchar(191) DEFAULT NULL, vorname varchar(191) DEFAULT NULL,
@@ -44,7 +42,6 @@ function kc_install_tables() {
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Teilnehmer-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_teilnehmer ( $tables_sql[] = "CREATE TABLE {$prefix}kc_teilnehmer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
vorname varchar(191) DEFAULT NULL, vorname varchar(191) DEFAULT NULL,
@@ -54,11 +51,10 @@ function kc_install_tables() {
wunsch1 bigint(20) unsigned DEFAULT NULL, wunsch1 bigint(20) unsigned DEFAULT NULL,
wunsch2 bigint(20) unsigned DEFAULT NULL, wunsch2 bigint(20) unsigned DEFAULT NULL,
wunsch3 bigint(20) unsigned DEFAULT NULL, wunsch3 bigint(20) unsigned DEFAULT NULL,
deleted tinyint(1) NOT NULL DEFAULT 0, deleted tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Zuordnungstabelle Wahl <-> Workshops
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahl_workshops ( $tables_sql[] = "CREATE TABLE {$prefix}kc_wahl_workshops (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0, wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
@@ -67,7 +63,6 @@ function kc_install_tables() {
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Manuelle (Force-)Zuteilungen
$tables_sql[] = "CREATE TABLE {$prefix}kc_force_zuteilung ( $tables_sql[] = "CREATE TABLE {$prefix}kc_force_zuteilung (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0, teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
@@ -78,7 +73,6 @@ function kc_install_tables() {
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Ergebnis-Zuteilungen
$tables_sql[] = "CREATE TABLE {$prefix}kc_zuteilung ( $tables_sql[] = "CREATE TABLE {$prefix}kc_zuteilung (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0, teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
@@ -91,26 +85,25 @@ function kc_install_tables() {
PRIMARY KEY (id) PRIMARY KEY (id)
) $charset_collate"; ) $charset_collate";
// Zuordnung Workshop <-> Teamer $tables_sql[] = "CREATE TABLE {$prefix}kc_workshop_teamer (
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshop_teamer ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
id bigint(20) unsigned NOT NULL AUTO_INCREMENT, workshop_id bigint(20) unsigned DEFAULT NULL,
workshop_id bigint(20) unsigned DEFAULT NULL, teamer_id bigint(20) unsigned DEFAULT NULL,
teamer_id bigint(20) unsigned DEFAULT NULL, PRIMARY KEY (id)
PRIMARY KEY (id) ) $charset_collate";
) $charset_collate";
// Tabellen anlegen
foreach ($tables_sql as $sql) { foreach ($tables_sql as $sql) {
dbDelta($sql); dbDelta($sql);
} }
// Migration: min_teilnehmer nachziehen, falls bei Update nötig // Post-creation migration guard: ensure min_teilnehmer exists for older installs
$col = $wpdb->get_var($wpdb->prepare("SHOW COLUMNS FROM {$prefix}kc_workshops LIKE %s", 'min_teilnehmer')); $col = $wpdb->get_var($wpdb->prepare("SHOW COLUMNS FROM {$prefix}kc_workshops LIKE %s", 'min_teilnehmer'));
if (empty($col)) { if (empty($col)) {
// try to add the column (no-op on newer installs)
$wpdb->query("ALTER TABLE {$prefix}kc_workshops ADD COLUMN min_teilnehmer INT NOT NULL DEFAULT 0"); $wpdb->query("ALTER TABLE {$prefix}kc_workshops ADD COLUMN min_teilnehmer INT NOT NULL DEFAULT 0");
} }
// Plugin-Version speichern // Optionally store plugin version
add_option('kc_workshopwahl_db_version', '1.0'); add_option('kc_workshopwahl_db_version', '1.0');
} }

View File

@@ -1,24 +1,22 @@
<?php <?php
/** /**
* Plugin Name: Workshop-Wahlen * Plugin Name: Workshop-Wahlen
* Description: Workshop-Wahl-System für Konfi-Castle.com * Description: Workshop-Wahl-System für Konfi-Castle.com
* Version: 1.1 - dev * Version: 1.0
* Author: Linus Maximilian Nilson * Author: Linus Maximilian Nilson
*/ */
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
// Stylesheet einbinden // Stylesheet einbinden
add_action('admin_enqueue_scripts', function($hook) { add_action('admin_enqueue_scripts', function($hook) {
// Nur auf den Plugin-Seiten laden (optional: prüfe $hook!) // Nur auf den Plugin-Seiten laden (optional: prüfe $hook!)
if (strpos($hook, 'kc_') !== false) { if (strpos($hook, 'kc_') !== false) {
wp_enqueue_style( wp_enqueue_style(
'kc-admin-style', 'kc-admin-style',
plugin_dir_url(__FILE__) . 'assets/kc-admin.css', plugin_dir_url(__FILE__) . 'assets/kc-admin-style.css',
[], [],
filemtime(plugin_dir_path(__FILE__) . 'assets/kc-admin.css') filemtime(plugin_dir_path(__FILE__) . 'assets/kc-admin-style.css')
); );
} }
}); });
@@ -33,14 +31,10 @@ add_action('admin_enqueue_scripts', function($hook) {
add_action('wp_enqueue_scripts', function() { add_action('wp_enqueue_scripts', function() {
wp_enqueue_style('kc-workshopwahl-frontend', plugins_url('assets/frontend.css', __FILE__)); wp_enqueue_style('kc-workshopwahl-form', plugins_url('assets/frontend-form.css', __FILE__));
}); });
// Zentrale Admin-Menüstruktur // Zentrale Admin-Menüstruktur
add_action('admin_menu', function() { add_action('admin_menu', function() {
add_menu_page('Wahlen', 'Wahlen', 'manage_options', 'kc_wahlen', 'kc_wahlen_page'); add_menu_page('Wahlen', 'Wahlen', 'manage_options', 'kc_wahlen', 'kc_wahlen_page');