147 lines
5.0 KiB
PHP
147 lines
5.0 KiB
PHP
<?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');
|
|
|
|
// --- Tabellen-Definitionen ---
|
|
$tables_sql = [];
|
|
|
|
// Wahl-Tabelle
|
|
$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";
|
|
|
|
// Workshop-Tabelle
|
|
$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";
|
|
|
|
// Teamer-Tabelle
|
|
$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";
|
|
|
|
// Teilnehmer-Tabelle
|
|
$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";
|
|
|
|
// 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,
|
|
workshop_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
|
phase tinyint NOT NULL DEFAULT 1,
|
|
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,
|
|
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";
|
|
|
|
// 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,
|
|
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";
|
|
|
|
// 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";
|
|
|
|
// Tabellen anlegen
|
|
foreach ($tables_sql as $sql) {
|
|
dbDelta($sql);
|
|
}
|
|
|
|
// Migration: min_teilnehmer nachziehen, falls bei Update nötig
|
|
$col = $wpdb->get_var($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 NOT NULL DEFAULT 0");
|
|
}
|
|
|
|
// Plugin-Version speichern
|
|
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
|
|
}
|
|
}
|
|
|
|
?>
|