# 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

Die Anwendung ist vollständig containerisiert ("Dockerized"). Du kannst sie direkt als Container starten und mit einer beliebigen externen MySQL/MariaDB-Datenbank verbinden.

1.  **Image bauen:**
    ```bash
    docker build -t packliste-app .
    ```

2.  **Container starten:**
    (Ersetze die Platzhalter durch deine Datenbank-Zugangsdaten)
    ```bash
    docker run -d \
      -p 8080:80 \
      -e DB_HOST="deine-datenbank-ip" \
      -e DB_USER="dein_db_user" \
      -e DB_PASSWORD="dein_db_passwort" \
      -e DB_NAME="packliste" \
      -v packliste_uploads:/var/www/html/uploads \
      --name packliste-container \
      packliste-app
    ```
    *Hinweis:* Bilder werden im Volume `packliste_uploads` gespeichert. Das Git-Repository enthält keine Nutzer-Bilder.

3.  **Update & Rebuild (Aktualisierung):**
    Wenn du Änderungen aus dem Git ziehen ("den Rotz ziehen") und die App aktualisieren willst:

    ```bash
    # 1. Neuesten Code holen
    git pull origin master

    # 2. Container stoppen und löschen (Datenbank & Uploads bleiben im Volume erhalten!)
    docker stop packliste-container
    docker rm packliste-container

    # 3. Image neu bauen
    docker build -t packliste-app .

    # 4. Neuen Container starten (gleicher Befehl wie oben)
    docker run -d ... (siehe oben)
    ```
    Die App ist anschließend unter `http://localhost:8080` erreichbar.

---

## 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.  Klicke in der Übersicht auf **"Artikel verwalten"** (das Box-Icon).

#### 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

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