# 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`).
