# Event Bilder Upload

<p align="center">
  <img src="preview.png" alt="App Preview" width="500">
</p>

Ein einfacher, moderner und responsiver Web-Service zum datumsgenauen Hochladen von Bildern für beliebige Events.

## Organisatorische Details

- **Zweck**: Sammeln von Bildern von Teilnehmern eines Events.
- **Limitierungen**:
  - Maximale Dateigröße pro Bild: 15 MB
  - Erlaubte Formate: JPG, JPEG, PNG, GIF, WEBP, TIFF, HEIC
- **Deadline**: Ein Upload-Zeitraum kann festgelegt werden. Nach Ablauf der Deadline sind keine Uploads mehr möglich. Der Countdown wird live auf der Seite angezeigt.
- **Dateibenennung**: Die hochgeladenen Dateien werden serverseitig automatisch umbenannt. Das Format ist `Datum - Beschreibung.Endung`. Das Datum wird dabei intelligent aus den EXIF-Daten (Erstellungsdatum) des Bildes ausgelesen.
- **Speicherort**: Alle Bilder werden im Unterordner `images/` abgelegt.

## Technische Details

- **Technologie-Stack**:
  - Backend: PHP (Einzelne Datei `index.php`)
  - Frontend: HTML5, Vanilla JavaScript, Vanilla CSS
- **Architektur**:
  - Keine Datenbank erforderlich.
  - Asynchrone Uploads via AJAX inklusive Fortschrittsbalken und Einzelstatus pro Bild.
  - Client-seitige und Server-seitige Validierung (Dateityp, Größe, Deadline).
- **Abhängigkeiten**:
  - Webserver (z. B. Nginx, Apache oder Lighttpd)
  - PHP 8.x
  - PHP-Erweiterungen: `session`, `json`, `exif` (für das Auslesen des Aufnahmedatums), `mbstring`

## Konfiguration

Das Skript ist neutral gestaltet und kann für jedes beliebige Event genutzt werden. Alle Anpassungen können direkt im Kopfbereich der Datei `index.php` vorgenommen werden. Es sind keine weiteren Änderungen im HTML-Code nötig.

```php
// EVENT CONFIGURATION
const EVENT_NAME = 'Event Bilder Upload';
const EVENT_SUBTITLE = 'Speichere deine Momente datumsgerecht.';

// DEADLINE CONFIGURATION
// Format: YYYY-MM-DD HH:MM:SS
const UPLOAD_DEADLINE = '2026-11-30 23:59:59';
```

## Installation auf einem frischen Alpine Linux

Die folgende Anleitung beschreibt die schnelle Einrichtung auf einem frisch installierten Alpine Linux System unter Verwendung des integrierten PHP-Webservers.

1. **System aktualisieren**:
   ```sh
   apk update
   apk upgrade
   ```

2. **PHP und benötigte Erweiterungen installieren**:
   ```sh
   apk add php php-json php-exif php-mbstring php-session
   ```

3. **Projektdateien bereitstellen**:
   Legen Sie die Datei `index.php` in das gewünschte Verzeichnis auf dem Server (z. B. `/var/www/imgsender`).

4. **Verzeichnisrechte anpassen**:
   Damit das Skript den Ordner `images/` anlegen und die hochgeladenen Bilder speichern kann, benötigt der ausführende Nutzer Schreibrechte in dem Verzeichnis.
   ```sh
   cd /var/www/imgsender
   chmod 777 .
   ```
   *(Hinweis: Für den dauerhaften produktiven Einsatz mit einem echten Webserver wie Nginx oder Lighttpd sollten die Rechte restriktiver auf den jeweiligen Webserver-Nutzer, z. B. `nobody`, angepasst werden: `chown -R nobody:nobody .`)*

5. **Server starten**:
   Für Testzwecke oder simple Deployments kann der integrierte PHP-Server genutzt werden:
   ```sh
   php -S 0.0.0.0:8080 -t .
   ```
   Die Anwendung ist nun über den Browser unter `http://<server-ip>:8080` erreichbar.
