# Site institutionnel — Te Litho Tenge Didier

Site institutionnel, historique et visuel consacré au parcours de Te Litho Tenge Didier
(application Laravel 12 + Tailwind CSS v4 + Vite).

Documentation associée :

- [docs/recherches-et-sources.md](docs/recherches-et-sources.md) — recherche documentaire et fiabilité des informations.
- [docs/audit-des-images.md](docs/audit-des-images.md) — audit du fonds photographique.
- [docs/rapport-final-site-tenge-te-litho.md](docs/rapport-final-site-tenge-te-litho.md) — rapport final du projet.
- [docs/rapport-mediatheque-admin.md](docs/rapport-mediatheque-admin.md) — médiathèque d'administration (upload, corbeille, albums, audit).

## Installation locale (Laragon / Windows)

```bash
composer install
npm install
copy .env.example .env   # puis ajuster si besoin (DB_CONNECTION=sqlite est déjà préconfiguré)
php artisan key:generate
type nul > database\database.sqlite   # si le fichier n'existe pas encore
php artisan migrate
php artisan storage:link
```

### Dossier des archives originales

Par défaut, les photos et documents originaux vivent dans `images/` à la racine du projet. Ce
chemin est configurable (jamais codé en dur dans le code) via la variable d'environnement :

```
MEDIA_ARCHIVE_PATH=D:/archives/photos   # optionnel — par defaut images/ a la racine du projet
```

Voir [config/media.php](config/media.php).

### Construire le catalogue de médias (obligatoire au premier lancement)

```bash
php artisan media:scan       # scanne images/, genere data/media-manifest.json et docs/audit-des-images.md
php artisan media:import     # importe le manifeste en base (table media_items / documents)
php artisan db:seed          # chronologie, domaines d'action, citations, vidéos, admin, retouches manuelles
php artisan media:optimize   # genere les variantes thumb/medium/large (JPEG + WebP) dans storage/app/public/media
```

`media:optimize` traite environ 4 100 images et peut prendre 20 à 35 minutes selon la machine.
Il priorise automatiquement les images mises en avant (`featured`, `hero_candidate`, `curated`).
Pour ne traiter qu'un sous-ensemble : `php artisan media:optimize --ids=img-00001,img-00002`.

Pour régénérer proprement les variantes d'une image précise ou de tout le catalogue, sans jamais
toucher aux originaux :

```bash
php artisan media:rebuild img-00001   # une seule image
php artisan media:rebuild             # tout le catalogue
```

### Assets front-end

```bash
npm run build   # ou `npm run dev` pendant le développement
```

> Remarque environnement : ce projet a été développé avec PHP 8.3 / Composer fournis par Laragon
> (`D:\laragon\bin\php`, `D:\laragon\bin\composer`) et Node 22 (`D:\laragon\bin\nodejs\node-v22`).
> Si `npm run build` échoue avec une erreur de binding natif `rolldown`, vérifiez la version de
> Node (>= 20.19 ou 22+ requis par Vite 8).

## Ajouter de nouvelles photos

**Depuis le navigateur (recommandé)** : `/admin/media/create` — glisser-déposer ou sélection
multiple, catégorie/date communes optionnelles, doublons détectés automatiquement. Aucune
manipulation manuelle de dossier n'est nécessaire.

**En masse, en déposant des fichiers directement dans le dossier d'archives** :

1. Déposez les nouveaux fichiers dans un sous-dossier du dossier configuré par
   `MEDIA_ARCHIVE_PATH` (le nom du dossier sert de catégorie/évènement par défaut).
2. Relancez :
   ```bash
   php artisan media:scan
   php artisan media:import
   php artisan media:optimize
   ```
   Les images déjà retouchées manuellement (`curated = true`), archivées ou mises à la corbeille
   ne sont **jamais écrasées ni republiées automatiquement** par `media:import`.

## Espace d'administration

URL : `/admin` — compte créé par `AdminUserSeeder` :

- email : `admin@telithotenge.cd`
- mot de passe : `changeme-tlt-2026` **(à changer immédiatement après la mise en production)**

Médiathèque complète (voir [docs/rapport-mediatheque-admin.md](docs/rapport-mediatheque-admin.md)) :
grille/tableau avec filtres, upload multiple, publication/dépublication, archivage, corbeille
(suppression réversible), suppression définitive protégée (super-admin uniquement,
`is_super_admin`), actions groupées, gestion d'albums, protection des dépendances (chronologie,
albums), journal d'audit complet (`/admin/media/activity`).

## Tests

```bash
php artisan test
```

42 tests (pages publiques, formulaire de contact avec anti-spam, médiathèque et cycle de vie
complet des médias, permissions super-admin, journal d'audit, modèle MediaItem). Les tests de la
médiathèque écrivent dans un dossier d'archives temporaire isolé — ils ne touchent jamais au
dossier `images/` réel.

## Lancer le site en local

```bash
php artisan serve
```

Ou via Laragon en accédant à `http://tlt.test` si le virtual host est configuré.
