# Trekking Packliste Eine moderne, webbasierte Anwendung zur Verwaltung von Packlisten für Wanderungen, Trekking-Touren und Reisen. Die Anwendung hilft dir, deine Ausrüstung zu organisieren, das Gewicht zu optimieren und nichts Wichtiges zu vergessen. Besonderer Fokus liegt auf der Zusammenarbeit in **Haushalten** und einer hierarchischen Packstruktur (z.B. *Inhalt im Kulturbeutel* im *Rucksack*). ## Inhaltsverzeichnis 1. [Features](#funktionen) 2. [Installation & Einrichtung](#installation) 3. [Bedienungsanleitung](#bedienungsanleitung) * [Erste Schritte & Haushalte](#1-erste-schritte--haushalte) * [Ausrüstung verwalten (Artikel)](#2-ausrüstung-verwalten-artikel) * [Stammdaten (Kategorien, Orte, Hersteller)](#3-stammdaten-kategorien-orte-hersteller) * [Packlisten erstellen & bearbeiten](#4-packlisten-erstellen--bearbeiten) * [Drucken & Export](#5-drucken--export) * [Profil & Einstellungen](#6-profil--einstellungen) 4. [Technologie](#technologie) 5. [Changelog](#changelog) --- ## Funktionen * **Artikeldatenbank:** Erfasse deine gesamte Ausrüstung mit Bild, Gewicht, Hersteller und Kategorie. * **Rucksack-Management:** Definiere deine Rucksäcke inkl. Fächern (Deckelfach, Bodenfach, etc.). * **Intelligente Packlisten:** * **Drag & Drop Editor:** Ziehe Artikel einfach aus deinem Bestand in die Liste. * **Container-Logik:** Weise Trägern Rucksäcke zu. Die Fächer erscheinen automatisch als Ordner, in die du packen kannst. * **Verschachtelung (Nesting):** Organisiere deine Liste logisch (z.B. Erste-Hilfe-Set im Deckelfach). * **Haushalts-Modus:** Teile deinen Artikelbestand und deine Listen mit Familie oder Freunden. * **Gewichtskalkulation:** Sieh sofort, wie schwer dein Rucksack ist und wie viel Gewicht auf welche Kategorie (z.B. "Kochen", "Schlafen") entfällt. * **Druck-Optimierung:** Generiere eine übersichtliche PDF/Druckansicht zum Abhaken. * **Modernes UI:** Responsive Oberfläche mit Dark-Glass-Effekten. --- ## Installation ### Voraussetzungen * Webserver (Apache mit `mod_rewrite` empfohlen, oder Nginx) * PHP 8.0 oder höher * MariaDB / MySQL Datenbank * PHP-Erweiterungen: `mysqli`, `gd` (für Bildbearbeitung) ### Neuinstallation 1. **Dateien hochladen:** Kopiere alle Dateien aus diesem Repository in das Web-Verzeichnis deines Servers (z.B. `/var/www/html/packliste`). 2. **Datenbank einrichten:** * Erstelle eine leere Datenbank (z.B. `packliste`). * Importiere die Datei `packliste.sql` in diese Datenbank (z.B. via phpMyAdmin oder Konsole). 3. **Konfiguration:** * Erstelle eine Datei `config.ini` **außerhalb** des öffentlichen Web-Verzeichnisses (z.B. ein Verzeichnis höher als `index.php`). * Inhalt der `config.ini`: ```ini servername = localhost username = dein_db_benutzer password = dein_db_passwort dbname = packliste ``` * *Hinweis:* Die Anwendung sucht standardmäßig unter `../config.ini`. ### Docker Deployment (Empfohlen) Die Anwendung wird bei jedem Push ins Git automatisch gebaut und in der internen Registry `172.30.1.213` als Docker-Image zur Verfügung gestellt. Du kannst sie ganz bequem per Docker Compose bereitstellen. 1. **Konfigurieren:** Kopiere die beiliegende `.env.example` zu `.env` und trage dort deine Datenbank-Zugangsdaten ein: ```bash cp .env.example .env nano .env ``` 2. **Starten:** Führe im Verzeichnis den folgenden Befehl aus: ```bash docker compose up -d ``` 3. **Update (Aktualisierung):** Wenn ein neues Update verfügbar ist, reicht dieser Einzeiler: ```bash docker compose pull && docker compose up -d ``` (Die alten Container werden automatisch ersetzt, das Volume mit den hochgeladenen Bildern bleibt erhalten.) --- ## Bedienungsanleitung ### 1. Erste Schritte & Haushalte Nach der Registrierung landest du auf dem Dashboard. Die App ist darauf ausgelegt, dass man Ausrüstung teilen kann. * **Haushalt gründen:** Unter dem Menüpunkt **"Haushalt"** kannst du einen neuen Haushalt erstellen (z.B. "WG Müller" oder "Familie Schmidt"). * **Mitglieder einladen:** Als Admin des Haushalts kannst du andere registrierte Benutzer per Benutzernamen einladen. Diese sehen nach dem Login eine Einladung, die sie annehmen können. * **Vorteil:** Alle Artikel, die als "Für Haushalt freigegeben" markiert sind, können von allen Mitgliedern in deren Packlisten verwendet werden. ### 2. Ausrüstung verwalten (Artikel & Rucksäcke) * **Artikel:** Pfleg deinen Bestand unter "Artikel". Du kannst Bilder hochladen, eine URL angeben oder Bilder per Copy & Paste einfügen. * **Rucksäcke:** Unter **"Rucksäcke"** legst du deine Transportmittel an. Definiere hier auch die **Fächer** (z.B. Hauptfach, Deckelfach, Hüftgurt). Diese dienen später als Container in deinen Listen. ### 3. Packlisten erstellen & bearbeiten Dies ist das Herzstück der Anwendung. 1. Gehe zu **"Packlisten"** und erstelle eine neue Liste. 2. **Rucksack-Zuweisung:** Wähle direkt beim Erstellen (oder später unter "Details bearbeiten"), wer welchen Rucksack trägt. 3. **Vorlagen nutzen:** Wähle optional eine Vorlage aus, um deine Liste mit vordefinierten Artikeln und Strukturen zu starten. 4. Klicke in der Übersicht auf **"Artikel verwalten"** (das Box-Icon). #### Packlisten-Vorlagen (Templates) Du kannst jede existierende Packliste als Vorlage speichern, um sie später wiederzuverwenden. * **Vorlage erstellen:** Klicke in der Übersicht "Packlisten" bei einer deiner Listen auf das gelbe "Speichern"-Icon ("Als Vorlage speichern"). * **Vorlagen verwalten:** Wechsle in der Übersicht oben auf den Tab **"Vorlagen"**. Hier kannst du deine Vorlagen bearbeiten oder löschen. * **Liste aus Vorlage:** Beim Erstellen einer neuen Packliste kannst du im Dropdown "Vorlage verwenden" eine deiner gespeicherten Vorlagen auswählen. Der gesamte Inhalt (Artikel, Fächer, Träger) wird in die neue Liste kopiert. #### Der Packlisten-Editor (Drag & Drop) Der Editor ist zweigeteilt: * **Links:** Dein verfügbarer Artikelbestand (filterbar). * **Rechts:** Deine Packliste, gruppiert nach Trägern und deren Rucksäcken/Fächern. **Bedienung:** * **Packen:** Ziehe Artikel in die entsprechenden Fächer deines Rucksacks. * **Verschachteln:** Du kannst Artikel auch in andere Artikel ziehen (z.B. "Socken" in "Packbeutel"). * **Sortieren:** Ziehe Artikel nach oben oder unten, um die Reihenfolge zu ändern. ### 4. Drucken & Export Klicke in der Packlisten-Übersicht auf **"Details ansehen"** (Augen-Icon). * **Ansicht:** Du siehst eine hierarchische Baumstruktur deiner Liste. Rucksäcke sind grün hinterlegt. * **Drucken:** Klicke auf "Drucken". Die Ansicht ist speziell für Papier optimiert (fettgedruckte Fächer, Checkboxen für Artikel). ### 5. Profil & Einstellungen Unter **"Profil"** kannst du dein Passwort ändern und App-Einstellungen vornehmen. --- ## Technologie Das Projekt basiert auf bewährten Web-Standards: * **Backend:** PHP 8.2 (Natives PHP, keine schweren Frameworks) * **Frontend:** HTML5, CSS3 (Custom Theme), Bootstrap 5 * **Datenbank:** MariaDB / MySQL * **JavaScript:** Vanilla JS + Sortable.js (für Drag & Drop) + Chart.js (für Diagramme). --- ## Changelog ### 08.12.2025 * **Feature: Packlisten-Templates** * Neue Funktion zum Speichern von Packlisten als Vorlagen. * Separater Tab "Vorlagen" in der Übersicht. * Erstellen von neuen Listen auf Basis von Vorlagen (kopiert Artikel, Hierarchie und Trägerzuordnung). * Zentrale Kopier-Logik implementiert (Fix für `duplicate_packing_list.php`: Rucksäcke werden nun korrekt mitkopiert). ### 06.12.2025 * **Rucksäcke:** * Neues Feld für Hersteller-Link (Product URL) hinzugefügt. * "Info"-Button in der Übersicht öffnet den hinterlegten Link (Design angepasst auf Grün). * Fix: Eingabefeld für neue Hersteller erscheint nun zuverlässig. * **Artikel:** * Komfort-Funktion: Auswahl aus den letzten 24 hochgeladenen Bildern beim Erstellen neuer Artikel hinzugefügt. * **Packlisten:** * **Editor:** Filter-Optionen ("Alle Kategorien", "Alle Hersteller") korrigiert und erweitert. * **Erstellung:** * Validierung hinzugefügt, die verhindert, dass ein Rucksack mehrfach zugewiesen wird. * **Critical Fix:** Browser-Freeze durch Endlosschleife bei der Validierung behoben. * **Details:** * Design-Update: Diagramme verwenden nun kontrastreiche Grüntöne passend zum Thema (ohne weiße Rahmen). * Statistik: Klickbare Trägernamen öffnen ein Modal mit detaillierten Gewichtsstatistiken pro Kategorie. * **Modulare Rucksack-Erweiterung:** * Fächer können nun direkt mit Artikeln verknüpft werden (z.B. "Hüftgurttasche"). * Diese "Zusatztaschen" werden in der Packliste automatisch als Container angelegt. * Das Gewicht der Zusatztaschen wird automatisch zum Rucksack-Gesamtgewicht addiert. * **Rucksack-Kategorie:** Rucksäcke können nun einer Kategorie (z.B. "Transport") zugewiesen werden, damit sie in der Statistik korrekt auftauchen. * **Fixes:** * Datenbank-Selbstheilung (`Auto-Migration`) in `backpacks.php` und `edit_backpack.php` integriert. * `packliste.sql` aktualisiert. * Anzeige-Probleme bei Dropdowns behoben. * SQL-Fehler in der Statistik-Berechnung korrigiert. ### 11.05.2026 * **Fixes:** * Fehler bei der Artikelanzahl behoben: Wenn ein Artikel mehrfach im Bestand vorhanden ist (z.B. 5 Stück), verschwindet er nicht mehr aus der Auswahlliste, nachdem das erste Stück in einen Rucksack gezogen wurde. * Bugfix für Session-Timeouts ("Headers already sent"): Die PHP-Sitzung wird nun korrekt überprüft und verarbeitet, bevor HTML-Header gesendet werden (z.B. in `backpacks.php`). * Session Timeout (Ausloggen) auf 24 Stunden verlängert (per `.htaccess`). ### 13.05.2026 * **Features:** * ToDo-Listen können nun direkt bei der Erstellung einer neuen Packliste verknüpft werden. * **Fixes:** * "Tisch"-Artikel (nicht zugewiesene Artikel) werden nun konsequent aus Statistiken, Druckansichten und Detailansichten ausgeblendet. Es wird stattdessen ein prominenter Warnhinweis angezeigt. * Verschieben von Artikeln zurück auf den Tisch (Phase 2) fasst diese nun mit bestehenden Artikeln desselben Typs auf dem Tisch zusammen. * Die Überprüfung auf doppelte Benutzernamen beim Ändern des Benutzernamens (Groß-/Kleinschreibung) wurde korrigiert. * Das Layout der ToDo-Listen-Verwaltung wurde an das restliche moderne App-Design (Cards) angeglichen. * PHP-Warning beim Deaktivieren von Checkboxen in ToDo-Listen behoben. * JavaScript-Standardmeldungen (`confirm()`) für das Löschen von Artikeln in Phase 1 durch moderne Bootstrap-Modals ersetzt. * Styling der aktiven ToDo-Liste verbessert (grüner Hintergrund statt schwarzem Rand). * Fatal Error auf der Hilfe-Seite (`help.php`) beim Aufruf ohne bestehende DB-Verbindung behoben. * CSV-Export Funktion für alle Artikel im Bestand hinzugefügt (mit Abfrage, ob alle oder nur aktuell gefilterte exportiert werden sollen). * Neue Kachelansicht für die Artikel-Übersicht inklusive Toggle-Button zwischen Listen- und Kachelansicht. * Bearbeiten-Funktion für bestehende ToDo-Listen Titel und deren Einträge implementiert. * Anzeige in der Haushaltsverwaltung nutzt nun den Anzeigenamen (Display Name) anstatt des Loginnamens, sofern vorhanden.