Upload files to "/"

add root files
This commit is contained in:
2026-01-30 14:27:33 +00:00
parent 1af97ad3a3
commit 8b3e8ba9ba
2 changed files with 207 additions and 0 deletions

139
install.php Normal file
View File

@@ -0,0 +1,139 @@
<?php
if (!defined('ABSPATH')) exit;
/**
* Create plugin database tables on activation and remove them on deactivation.
*/
function kc_install_tables() {
global $wpdb;
$prefix = $wpdb->prefix;
$charset_collate = $wpdb->get_charset_collate();
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
// Tables definitions
$tables_sql = [];
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahlen (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(191) NOT NULL,
beschreibung text DEFAULT NULL,
anzahl_einheiten tinyint NOT NULL DEFAULT 1,
min_kapazitaet int NOT NULL DEFAULT 0,
max_kapazitaet int NOT NULL DEFAULT 0,
freigegeben tinyint(1) NOT NULL DEFAULT 0,
deleted tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (id)
) $charset_collate";
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshops (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(191) NOT NULL,
beschreibung text DEFAULT NULL,
max_teilnehmer int NOT NULL DEFAULT 0,
min_teilnehmer int NOT NULL DEFAULT 0,
PRIMARY KEY (id)
) $charset_collate";
$tables_sql[] = "CREATE TABLE {$prefix}kc_teamer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
vorname varchar(191) DEFAULT NULL,
nachname varchar(191) DEFAULT NULL,
PRIMARY KEY (id)
) $charset_collate";
$tables_sql[] = "CREATE TABLE {$prefix}kc_teilnehmer (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
vorname varchar(191) DEFAULT NULL,
nachname varchar(191) DEFAULT NULL,
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
phase tinyint NOT NULL DEFAULT 1,
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,
PRIMARY KEY (id)
) $charset_collate";
$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,
workshop_id bigint(20) unsigned NOT NULL DEFAULT 0,
phase tinyint NOT NULL DEFAULT 1,
PRIMARY KEY (id)
) $charset_collate";
$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,
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
phase tinyint NOT NULL DEFAULT 1,
workshop_id bigint(20) unsigned DEFAULT NULL,
kommentar text DEFAULT NULL,
PRIMARY KEY (id)
) $charset_collate";
$tables_sql[] = "CREATE TABLE {$prefix}kc_zuteilung (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
vorname varchar(191) DEFAULT NULL,
nachname varchar(191) DEFAULT NULL,
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
phase tinyint NOT NULL DEFAULT 1,
workshop_id bigint(20) unsigned DEFAULT NULL,
wunsch_rang tinyint 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";
foreach ($tables_sql as $sql) {
dbDelta($sql);
}
// 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");
}
// Optionally store plugin version
add_option('kc_workshopwahl_db_version', '1.0');
}
function kc_uninstall_tables() {
global $wpdb;
$prefix = $wpdb->prefix;
$tables = [
"{$prefix}kc_zuteilung",
"{$prefix}kc_force_zuteilung",
"{$prefix}kc_wahl_workshops",
"{$prefix}kc_teilnehmer",
"{$prefix}kc_teamer",
"{$prefix}kc_workshops",
"{$prefix}kc_wahlen",
"{$prefix}kc_workshop_teamer"
];
foreach ($tables as $t) {
$wpdb->query("DROP TABLE IF EXISTS $t");
}
delete_option('kc_workshopwahl_db_version');
}
// Backwards-compat wrapper for register_activation_hook usage
if (!function_exists('kc_register_hooks_internal')) {
function kc_register_hooks_internal() {
// intentionally left blank
}
}
?>

View File

@@ -0,0 +1,68 @@
<?php
/*
Plugin Name: Workshopwahl
Description: Workshop wahl plugin mit zuteilungsfunktion
Version: 1.0
Author: Linus 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-style.css',
[],
filemtime(plugin_dir_path(__FILE__) . 'assets/kc-admin-style.css')
);
}
});
add_action('admin_enqueue_scripts', function($hook) {
// Nur für unser Plugin-Menü!
if (strpos($hook, 'kc_') === false) return;
wp_enqueue_script('select2', 'https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js', ['jquery'], null, true);
wp_enqueue_style('select2', 'https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css');
});
add_action('wp_enqueue_scripts', function() {
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');
add_submenu_page('kc_wahlen', 'Teamer', 'Teamer', 'manage_options', 'kc_teamer', 'kc_teamer_page');
add_submenu_page('kc_wahlen', 'Workshops', 'Workshops', 'manage_options', 'kc_workshops', 'kc_workshops_page');
add_submenu_page('kc_wahlen', 'Teilnehmer', 'Teilnehmer', 'manage_options', 'kc_teilnehmer', 'kc_teilnehmer_page');
add_submenu_page('kc_wahlen', 'Force-Zuteilung', 'Force-Zuteilung', 'manage_options', 'kc_force_zuteilung', 'kc_force_zuteilung_page');
add_submenu_page('kc_wahlen', 'Zuteilungen', 'Zuteilungen', 'manage_options', 'kc_zuteilungen', 'kc_zuteilungen_page');
// Data management (test data) - visible only to super-admin (we'll check inside page)
add_submenu_page('kc_wahlen', 'Datenverwaltung', 'Datenverwaltung', 'manage_options', 'kc_data', 'kc_data_page');
});
// Includes  jede Admin-Seite ruft oben kc_admin_tabs() auf!
require_once plugin_dir_path(__FILE__).'includes/admin-wahlen.php';
require_once plugin_dir_path(__FILE__).'includes/admin-workshops.php';
require_once plugin_dir_path(__FILE__).'includes/admin-teilnehmer.php';
require_once plugin_dir_path(__FILE__).'includes/admin-teamer.php';
require_once plugin_dir_path(__FILE__).'includes/force-zuteilung.php';
require_once plugin_dir_path(__FILE__).'includes/admin-zuteilungen.php';
require_once plugin_dir_path(__FILE__).'includes/frontend-form.php';
require_once plugin_dir_path(__FILE__).'includes/frontend-ergebnis.php';
require_once plugin_dir_path(__FILE__).'includes/zuteilungslogik.php';
require_once plugin_dir_path(__FILE__).'includes/admin-data.php';
require_once plugin_dir_path(__FILE__).'install.php';