diff --git a/assets/frontend-form.css b/assets/frontend-form.css deleted file mode 100644 index 5c44038..0000000 --- a/assets/frontend-form.css +++ /dev/null @@ -1,105 +0,0 @@ -.kc-form-container { - box-sizing: border-box; - width: 100%; - max-width: 680px; - margin: 28px auto; - background: #f8fbe7; - border-left: 8px solid #b6d333; - border-radius: 14px; - box-shadow: 0 5px 22px #8eae291a; - padding: 28px 22px; - font-family: 'Segoe UI', Arial, sans-serif; -} - -.kc-form-container h2 { - color: #3b5323; - font-family: 'Montserrat', Arial, sans-serif; - font-size: 2em; - margin-top: 0; - margin-bottom: 0.5em; - letter-spacing: -1px; -} - -.kc-form-row { - margin-bottom: 22px; -} - -.kc-form-row label { - display: block; - font-weight: 700; - color: #1c3866; - margin-bottom: 7px; - font-size: 1.07em; -} - -.kc-form-row select, -.kc-form-row input[type="text"], -.kc-form-row input[type="email"], -.kc-form-row input[type="number"] { - box-sizing: border-box; - width: 100%; - padding: 10px; - border: 1.7px solid #d6e39f; - border-radius: 5px; - background: #fcffe9; - font-size: 1.09em; - margin-top: 3px; - transition: border .2s; -} - -.kc-form-row input[type="text"]:focus, -.kc-form-row select:focus { - outline: none; - border-color: #b6d333; - background: #fffde8; -} - -.kc-form-row input[type="submit"] { - background: #2f5393; - color: #fff; - padding: 13px 28px; - font-weight: bold; - font-size: 1.13em; - border: 0; - border-radius: 7px; - cursor: pointer; - margin-top: 6px; - box-shadow: 0 2px 8px #1c38661a; - transition: background .2s; -} -.kc-form-row input[type="submit"]:hover { - background: #1c3866; -} - -.kc-required { - color: #e42626; - font-weight: bold; -} -.kc-success-msg { - color: #288830; - background: #f2fbe2; - border-left: 4px solid #b6d333; - padding: 15px 15px 15px 22px; - margin-bottom: 25px; - font-size: 1.1em; - border-radius: 7px; -} -.kc-error-msg { - color: #a80000; - background: #ffeaea; - border-left: 4px solid #e12b2b; - padding: 15px 15px 15px 22px; - margin-bottom: 25px; - font-size: 1.1em; - border-radius: 7px; -} -@media (max-width: 900px) { - .kc-form-container {padding:20px 14px;} -} - -@media (max-width: 520px) { - .kc-form-container {padding:14px 10px;border-radius:10px;margin:14px 10px;} - .kc-form-container h2 {font-size:1.4em} - .kc-form-row {margin-bottom:14px} -} -[Diese Datei ist leer.] diff --git a/assets/kc-admin-style.css b/assets/kc-admin-style.css deleted file mode 100644 index 8648401..0000000 --- a/assets/kc-admin-style.css +++ /dev/null @@ -1,204 +0,0 @@ -.kc-admin-tabs { - margin-bottom: 28px; - border-bottom: 2px solid #e0e6ef; - background: #f8fbe7; - border-radius: 18px 18px 0 0; - box-shadow: 0 1px 10px #b6d33321; - padding: 8px 18px 0 18px; -} -.kc-tabnav { - display: inline-block; - padding: 12px 32px 11px 32px; - border-radius: 12px 12px 0 0; - font-weight: 700; - font-size: 1.12em; - margin-right: 7px; - box-shadow: 0 2px 11px #b6d33318; - text-decoration: none; - background: #f8fbe7; - color: #4176be; - border: none; - outline: none; - transition: all .18s; - letter-spacing: 0.5px; -} -.kc-tabnav-active, -.kc-tabnav:focus, -.kc-tabnav:hover { - background: linear-gradient(90deg, #326dd2 0%, #b6d333 100%); - color: #fff !important; - box-shadow: 0 6px 24px #326dd241; - font-weight: 800; - letter-spacing: 1px; -} -.kc-admin-table-wrap { - box-sizing: border-box; - background: #fff; - border-radius: 17px; - box-shadow: 0 4px 28px #326dd21c, 0 1.5px 7px #b6d33324; - padding: 28px 22px 30px 22px; - margin: 28px 0; - /* allow children to overflow (tables may scroll), don't clip action buttons */ - overflow: visible; -} - -/* Collapsible details styling for admin Zuteilungen */ -details.kc-wahl-details, details.kc-phase-details { - background: #fff; - border: 1px solid #e9eef6; - border-radius: 10px; - padding: 8px; - margin-bottom: 12px; -} -details.kc-wahl-details > summary, details.kc-phase-details > summary { - list-style: none; - cursor: pointer; - padding: 8px 10px; -} -details.kc-wahl-details[open] > summary, details.kc-phase-details[open] > summary { - background: linear-gradient(90deg,#f2f9ff 0%, #f6fff5 100%); - border-radius: 8px; -} -/* Wahl summary layout */ -details.kc-wahl-details > summary { display: flex; align-items: center; justify-content: space-between; } -details.kc-wahl-details > summary .kc-wahl-title { font-weight:700; color:#2b5f9a; } -details.kc-wahl-details > summary .kc-wahl-actions { margin-left: 12px; } -details.kc-wahl-details .kc-wahl-actions .kc-btn { margin-left:8px; } - -/* Workshop card inside phase */ -.kc-workshop-card { - background: #f9f9f9; - padding: 10px; - margin: 8px 0; - border-radius: 8px; - box-shadow: 0 1px 6px #00000012; -} -.kc-workshop-card table { margin-top:8px; } -.kc-workshop-card b { font-size: 1.05em; } -.kc-workshop-card .kc-count { color:#555; font-size:0.92em; } - -.kc-unassigned { - background: #fff6f6; - border-left: 4px solid #f2b0b0; - padding: 10px; - margin-top: 8px; - border-radius: 6px; -} - -/* Smaller tweaks for details summaries inside admin area */ -details summary { outline: none; } -details summary::-webkit-details-marker { display: none; } -details summary:before { content: '\25B6'; display:inline-block; transform:rotate(90deg); margin-right:8px; } -details[open] summary:before { transform: rotate(0deg); } -.kc-admin-table { - width: 100%; - border-collapse: separate; - border-spacing: 0; - margin-bottom: 28px; - background: #fafdff; - border-radius: 13px; - overflow: auto; /* horizontal scroll on small screens */ - box-shadow: 0 2px 12px #b6d33313; -} -.kc-admin-table th, .kc-admin-table td { - padding: 13px 18px; - text-align: left; - font-size: 1.07em; - vertical-align: middle; -} -.kc-admin-table thead { - background: #eaf6ff; - color: #4176be; - font-weight: 800; -} -.kc-admin-table tbody tr { - border-bottom: 1px solid #eef3fa; -} -.kc-admin-table tbody tr:nth-child(even) { - background: #f8fbe7; -} -.kc-admin-table tbody tr:hover { - background: #e0ebf6; - transition: background 0.2s; -} -.kc-admin-table th { - font-weight: bold; - border-bottom: 2px solid #b6d33342; -} -.kc-admin-table .kc-actions { - white-space: nowrap; - display: flex; - gap: 8px; - align-items: center; - justify-content: flex-end; - flex-wrap: wrap; /* allow buttons to wrap on very small widths */ -} -.kc-btn { - background: linear-gradient(90deg,#4176be 40%, #b6d333 100%); - color: #fff; - padding: 10px 25px; - border-radius: 8px; - border: 0; - margin: 0 5px; - font-weight: 700; - cursor: pointer; - display: inline-block; - text-decoration: none; - font-size: 1.04em; - box-shadow: 0 1.5px 6px #b6d33321; - transition: background .17s, box-shadow .19s; -} -.kc-btn.del { - background: #e12b2b !important; - color: #fff; -} -.kc-btn.edit { - background: #ff9800 !important; - color: #fff; -} -.kc-btn:hover { - opacity: 0.91; - background: linear-gradient(90deg,#26529e 40%, #97b321 100%); - color: #fff; - box-shadow: 0 3px 10px #4176be29; -} -.notice-success { - background: #f6ffed; - border-left: 6px solid #b6d333; - color: #1c5322; - padding: 13px 20px; - margin: 0 0 22px 0; - border-radius: 9px; - font-size: 1.08em; - font-weight: 500; -} -.notice-error { - background: #fff3f3; - border-left: 6px solid #e12b2b; - color: #9d1d2e; - padding: 13px 20px; - margin: 0 0 22px 0; - border-radius: 9px; - font-size: 1.08em; - font-weight: 500; -} -.kc-required { - color: #e42626; - font-weight: bold; - margin-left: 2px; -} -@media (max-width: 800px) { - .kc-admin-table-wrap {padding: 12px;} - .kc-admin-table th, .kc-admin-table td {padding: 8px 6px;} - .kc-btn {padding: 8px 13px;} -} - -@media (max-width: 600px) { - /* Make tables readable on mobile by switching to block rows */ - .kc-admin-table thead { display: none; } - .kc-admin-table, .kc-admin-table tbody, .kc-admin-table tr, .kc-admin-table td { display: block; width: 100%; } - .kc-admin-table tr { margin-bottom: 12px; border-bottom: 1px solid #eef3fa; } - .kc-admin-table td { text-align: left; padding: 10px 12px; white-space: normal; } - .kc-admin-table td:before { content: attr(data-label); font-weight:700; display:block; margin-bottom:6px; color:#4176be; } -} -[Diese Datei ist leer.] diff --git a/install.php b/install.php index 1ed9c2f..590d075 100644 --- a/install.php +++ b/install.php @@ -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'); - // Tables definitions + // --- 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, @@ -26,6 +26,7 @@ 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, @@ -35,6 +36,7 @@ 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, @@ -42,6 +44,7 @@ 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, @@ -51,10 +54,11 @@ 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, @@ -63,6 +67,7 @@ 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, @@ -73,6 +78,7 @@ 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, @@ -84,26 +90,27 @@ function kc_install_tables() { 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"; + // 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); } - // Post-creation migration guard: ensure min_teilnehmer exists for older installs + // 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)) { - // 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 + // Plugin-Version speichern add_option('kc_workshopwahl_db_version', '1.0'); }