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

View File

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

View File

@@ -309,7 +309,7 @@ function kc_teilnehmer_page() {
echo '</details>';
}
// 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>
(function() {
var btns = Array.prototype.slice.call(document.querySelectorAll(".kc-wahl-filter-btn"));

View File

@@ -8,12 +8,12 @@ function kc_install_tables() {
global $wpdb;
$prefix = $wpdb->prefix;
$charset_collate = $wpdb->get_charset_collate();
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
// --- Tabellen-Definitionen ---
// Tables definitions
$tables_sql = [];
// Wahl-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahlen (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(191) NOT NULL,
@@ -26,7 +26,6 @@ function kc_install_tables() {
PRIMARY KEY (id)
) $charset_collate";
// Workshop-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshops (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(191) NOT NULL,
@@ -36,7 +35,6 @@ function kc_install_tables() {
PRIMARY KEY (id)
) $charset_collate";
// Teamer-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_teamer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
vorname varchar(191) DEFAULT NULL,
@@ -44,7 +42,6 @@ function kc_install_tables() {
PRIMARY KEY (id)
) $charset_collate";
// Teilnehmer-Tabelle
$tables_sql[] = "CREATE TABLE {$prefix}kc_teilnehmer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
vorname varchar(191) DEFAULT NULL,
@@ -54,11 +51,10 @@ function kc_install_tables() {
wunsch1 bigint(20) unsigned DEFAULT NULL,
wunsch2 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)
) $charset_collate";
// Zuordnungstabelle Wahl <-> Workshops
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahl_workshops (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
@@ -67,7 +63,6 @@ function kc_install_tables() {
PRIMARY KEY (id)
) $charset_collate";
// Manuelle (Force-)Zuteilungen
$tables_sql[] = "CREATE TABLE {$prefix}kc_force_zuteilung (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
@@ -78,7 +73,6 @@ function kc_install_tables() {
PRIMARY KEY (id)
) $charset_collate";
// Ergebnis-Zuteilungen
$tables_sql[] = "CREATE TABLE {$prefix}kc_zuteilung (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
@@ -91,26 +85,25 @@ function kc_install_tables() {
PRIMARY KEY (id)
) $charset_collate";
// Zuordnung Workshop <-> Teamer
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshop_teamer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
workshop_id bigint(20) unsigned DEFAULT NULL,
teamer_id bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (id)
) $charset_collate";
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshop_teamer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
workshop_id bigint(20) unsigned DEFAULT NULL,
teamer_id bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (id)
) $charset_collate";
// Tabellen anlegen
foreach ($tables_sql as $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'));
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");
}
// Plugin-Version speichern
// Optionally store plugin version
add_option('kc_workshopwahl_db_version', '1.0');
}

View File

@@ -1,24 +1,22 @@
<?php
/**
* Plugin Name: Workshop-Wahlen
* Description: Workshop-Wahl-System für Konfi-Castle.com
* Version: 1.1 - dev
* Author: Linus Maximilian Nilson
*/
* Plugin Name: Workshop-Wahlen
* Description: Workshop-Wahl-System für Konfi-Castle.com
* Version: 1.0
* Author: Linus Maximilian Nilson
*/
if (!defined('ABSPATH')) exit;
// Stylesheet einbinden
add_action('admin_enqueue_scripts', function($hook) {
// Nur auf den Plugin-Seiten laden (optional: prüfe $hook!)
if (strpos($hook, 'kc_') !== false) {
wp_enqueue_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() {
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
add_action('admin_menu', function() {
add_menu_page('Wahlen', 'Wahlen', 'manage_options', 'kc_wahlen', 'kc_wahlen_page');