From 746bd05d648780cff2dc476b0522619b3f9d89aa Mon Sep 17 00:00:00 2001 From: horus Date: Thu, 1 Jan 2026 23:19:05 +0100 Subject: init --- .gitignore | 4 + api_cocktail.php | 14 + api_cocktails.php | 44 ++++ api_kategorien.php | 15 ++ dark-mode.css | 83 ++++++ db_config.php | 13 + index.php | 753 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 926 insertions(+) create mode 100644 .gitignore create mode 100644 api_cocktail.php create mode 100644 api_cocktails.php create mode 100644 api_kategorien.php create mode 100644 dark-mode.css create mode 100644 db_config.php create mode 100644 index.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8fc8538 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +db_passwd.php + +*.swp +*~ diff --git a/api_cocktail.php b/api_cocktail.php new file mode 100644 index 0000000..2a75754 --- /dev/null +++ b/api_cocktail.php @@ -0,0 +1,14 @@ +prepare("SELECT * FROM cocktails WHERE id = ?"); +$stmt->execute([$id]); +$cocktail = $stmt->fetch(PDO::FETCH_ASSOC); + +$stmtZutaten = $pdo->prepare("SELECT * FROM zutaten WHERE cocktail_id = ? ORDER BY menge_ml DESC, id"); +$stmtZutaten->execute([$id]); +$cocktail['zutaten'] = $stmtZutaten->fetchAll(PDO::FETCH_ASSOC); + +echo json_encode($cocktail); diff --git a/api_cocktails.php b/api_cocktails.php new file mode 100644 index 0000000..3ccde2b --- /dev/null +++ b/api_cocktails.php @@ -0,0 +1,44 @@ +query(" + SELECT + c.*, + z.menge_ml, z.menge_anteil, z.einheit, z.original_text, + z.zutat, z.zutat_de, z.kategorie, z.id as zutat_id + FROM cocktails c + LEFT JOIN zutaten z ON c.id = z.cocktail_id + WHERE hide = 0 + ORDER BY c.seite, c.name, z.menge_ml DESC, z.id ASC +"); + +$cocktails = []; +$currentCocktail = null; + +foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { + $cocktailId = $row['id']; + + if ($currentCocktail !== $cocktailId) { + $currentCocktail = $cocktailId; + $row['zutaten'] = []; + $cocktails[] = $row; + } + + // Zutat zu aktuellem Cocktail hinzufügen + if (!empty($row['zutat_id'])) { + $zutat = [ + 'menge_ml' => $row['menge_ml'], + 'menge_anteil' => $row['menge_anteil'], + 'einheit' => $row['einheit'], + 'original_text' => $row['original_text'], + 'zutat' => $row['zutat'], + 'zutat_de' => $row['zutat_de'], + 'kategorie' => $row['kategorie'], + 'id' => $row['zutat_id'] + ]; + $cocktails[array_key_last($cocktails)]['zutaten'][] = $zutat; + } +} + +echo json_encode($cocktails); diff --git a/api_kategorien.php b/api_kategorien.php new file mode 100644 index 0000000..d2e9b86 --- /dev/null +++ b/api_kategorien.php @@ -0,0 +1,15 @@ +prepare("SELECT DISTINCT kategorie FROM zutaten WHERE kategorie != '' ORDER BY kategorie"); + $stmt->execute(); + $kategorien = $stmt->fetchAll(PDO::FETCH_COLUMN); + + echo json_encode($kategorien); +} catch(PDOException $e) { + echo json_encode(['error' => 'DB Fehler ' . $e->getMessag() ]); +} diff --git a/dark-mode.css b/dark-mode.css new file mode 100644 index 0000000..6688fb9 --- /dev/null +++ b/dark-mode.css @@ -0,0 +1,83 @@ +/* Dark Mode Basis */ +body.dark-mode { + background-color: #1a1a1a !important; + color: #e9ecef !important; +} + +/* Cards */ +.dark-mode .card, +.dark-mode .cocktail-card { + background-color: #2d2d2d !important; + border-color: #404040 !important; + color: #e9ecef !important; +} +.dark-mode .card-body { + background-color: #2d2d2d !important; +} + +/* Suchformular */ +.dark-mode .card.shadow { + background-color: #2c2c2c !important; + border: 1px solid #404040 !important; +} +.dark-mode .form-control, +.dark-mode .form-control-lg { + background-color: #3a3a3a !important; + border-color: #555 !important; + color: #e9ecef !important; +} +.dark-mode .form-control::placeholder { + color: #888 !important; +} +.dark-mode .input-group-text { + background-color: #404040 !important; + border-color: #555 !important; + color: #e9ecef !important; +} + +/* Buttons */ +.dark-mode .btn-warning { + background-color: #e0a800 !important; + border-color: #d39e00 !important; +} +.dark-mode .btn-outline-primary { + color: #ffc107 !important; + border-color: #ffc107 !important; +} +.dark-mode .btn-outline-primary.active { + background-color: #ffc107 !important; + color: #000 !important; +} + +/* Modal */ +.dark-mode .modal-content { + background-color: #2d2d2d !important; + color: #e9ecef !important; +} +.dark-mode .modal-header { + border-bottom: 1px solid #404040 !important; +} +.dark-mode .modal-body { + background-color: #2d2d2d !important; +} + +/* Zutaten */ +.dark-mode .zutat-item { + border-bottom-color: #404040 !important; +} +.dark-mode .text-muted { + color: #adb5bd !important; +} + +/* Container */ +.dark-mode .container { + background-color: #1a1a1a !important; +} + +/* Hover-Effekte */ +.dark-mode .card:hover { + background-color: #363636 !important; + border-color: #555 !important; + transform: translateY(-2px); +} + diff --git a/db_config.php b/db_config.php new file mode 100644 index 0000000..d674004 --- /dev/null +++ b/db_config.php @@ -0,0 +1,13 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +} catch(PDOException $e) { + die("DB-Verbindung fehlgeschlagen: " . $e->getMessage()); +} diff --git a/index.php b/index.php new file mode 100644 index 0000000..e51ad61 --- /dev/null +++ b/index.php @@ -0,0 +1,753 @@ + + + + + + Savoy Cocktail Database + + + + + + + +
+ +
+
+

Savoy Cocktail Book

+

Die klassische Cocktail-Bibel von Harry Craddock (1930)

+
+
+ + +
+ +
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+ UND +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
+

Alle Cocktails

+ 0 Ergebnisse +
+
+
+ + +
+
+
+ Laden... +
+

Cocktails werden geladen...

+
+
+ + + + + + +
+ + + + + + + + + + + -- cgit v1.2.3