diff --git a/install.php b/install.php new file mode 100644 index 0000000..1ed9c2f --- /dev/null +++ b/install.php @@ -0,0 +1,139 @@ +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 + } +} + +?> diff --git a/konficastle-workshopwahl.php b/konficastle-workshopwahl.php new file mode 100644 index 0000000..8e71ad4 --- /dev/null +++ b/konficastle-workshopwahl.php @@ -0,0 +1,68 @@ +