This commit is contained in:
@@ -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.]
|
|
||||||
@@ -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.]
|
|
||||||
31
install.php
31
install.php
@@ -8,12 +8,12 @@ function kc_install_tables() {
|
|||||||
global $wpdb;
|
global $wpdb;
|
||||||
$prefix = $wpdb->prefix;
|
$prefix = $wpdb->prefix;
|
||||||
$charset_collate = $wpdb->get_charset_collate();
|
$charset_collate = $wpdb->get_charset_collate();
|
||||||
|
|
||||||
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
||||||
|
|
||||||
// Tables definitions
|
// --- Tabellen-Definitionen ---
|
||||||
$tables_sql = [];
|
$tables_sql = [];
|
||||||
|
|
||||||
|
// Wahl-Tabelle
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahlen (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahlen (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
name varchar(191) NOT NULL,
|
name varchar(191) NOT NULL,
|
||||||
@@ -26,6 +26,7 @@ function kc_install_tables() {
|
|||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Workshop-Tabelle
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshops (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshops (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
name varchar(191) NOT NULL,
|
name varchar(191) NOT NULL,
|
||||||
@@ -35,6 +36,7 @@ function kc_install_tables() {
|
|||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Teamer-Tabelle
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_teamer (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_teamer (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
vorname varchar(191) DEFAULT NULL,
|
vorname varchar(191) DEFAULT NULL,
|
||||||
@@ -42,6 +44,7 @@ function kc_install_tables() {
|
|||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Teilnehmer-Tabelle
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_teilnehmer (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_teilnehmer (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
vorname varchar(191) DEFAULT NULL,
|
vorname varchar(191) DEFAULT NULL,
|
||||||
@@ -51,10 +54,11 @@ function kc_install_tables() {
|
|||||||
wunsch1 bigint(20) unsigned DEFAULT NULL,
|
wunsch1 bigint(20) unsigned DEFAULT NULL,
|
||||||
wunsch2 bigint(20) unsigned DEFAULT NULL,
|
wunsch2 bigint(20) unsigned DEFAULT NULL,
|
||||||
wunsch3 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)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Zuordnungstabelle Wahl <-> Workshops
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahl_workshops (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_wahl_workshops (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
wahl_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
||||||
@@ -63,6 +67,7 @@ function kc_install_tables() {
|
|||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Manuelle (Force-)Zuteilungen
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_force_zuteilung (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_force_zuteilung (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
||||||
@@ -73,6 +78,7 @@ function kc_install_tables() {
|
|||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Ergebnis-Zuteilungen
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_zuteilung (
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_zuteilung (
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
teilnehmer_id bigint(20) unsigned NOT NULL DEFAULT 0,
|
||||||
@@ -85,25 +91,26 @@ function kc_install_tables() {
|
|||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) $charset_collate";
|
) $charset_collate";
|
||||||
|
|
||||||
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshop_teamer (
|
// Zuordnung Workshop <-> Teamer
|
||||||
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
$tables_sql[] = "CREATE TABLE {$prefix}kc_workshop_teamer (
|
||||||
workshop_id bigint(20) unsigned DEFAULT NULL,
|
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
teamer_id bigint(20) unsigned DEFAULT NULL,
|
workshop_id bigint(20) unsigned DEFAULT NULL,
|
||||||
PRIMARY KEY (id)
|
teamer_id bigint(20) unsigned DEFAULT NULL,
|
||||||
) $charset_collate";
|
PRIMARY KEY (id)
|
||||||
|
) $charset_collate";
|
||||||
|
|
||||||
|
// Tabellen anlegen
|
||||||
foreach ($tables_sql as $sql) {
|
foreach ($tables_sql as $sql) {
|
||||||
dbDelta($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'));
|
$col = $wpdb->get_var($wpdb->prepare("SHOW COLUMNS FROM {$prefix}kc_workshops LIKE %s", 'min_teilnehmer'));
|
||||||
if (empty($col)) {
|
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");
|
$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');
|
add_option('kc_workshopwahl_db_version', '1.0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user