# Landing page TPI — Ton stage en Média

## 1. Organisation du projet

```text
landing_page_tpi_structuree/
│
├── app/
│   ├── bootstrap.php
│   ├── mailer.php
│   ├── validation.php
│   └── partials/
│       ├── header.php
│       ├── hero.php
│       ├── stages.php
│       ├── programme.php
│       ├── application-form.php
│       ├── practical-info.php
│       └── footer.php
│
├── config/
│   └── .env.example
│
├── public/                 ← dossier à définir comme racine web
│   ├── index.php
│   ├── submit.php
│   ├── .htaccess
│   └── assets/
│       ├── css/style.css
│       ├── js/main.js
│       ├── images/
│       └── video/
│
├── composer.json
└── README.md
```

## 2. Pourquoi index.php et pas index.html ?

La page d'accueil crée une session et un jeton CSRF côté serveur. Un fichier `.html` statique ne peut pas exécuter directement ce PHP. Le fichier principal est donc `public/index.php`. Il contient la structure HTML et inclut des morceaux PHP séparés pour garder le code lisible.

## 3. Rôle des fichiers

- `public/index.php` : assemble les sections de la page.
- `app/partials/` : contient les parties visuelles de la landing page.
- `public/assets/css/style.css` : mise en forme et responsive design.
- `public/assets/js/main.js` : menu mobile, carrousels et interaction du formulaire.
- `public/submit.php` : reçoit le formulaire et orchestre le traitement.
- `app/bootstrap.php` : session, réponse JSON, CSRF et limitation simple des envois.
- `app/validation.php` : nettoyage des champs, contrôle des PDF et choix des destinataires.
- `app/mailer.php` : envoi des candidatures via SMTP.
- `config/.env.example` : exemple des paramètres nécessaires. Ce fichier ne contient aucun vrai mot de passe.

## 4. Routage des candidatures

Le navigateur transmet uniquement un choix parmi trois valeurs :
- `pao`
- `multimedia`
- `both`

Le serveur vérifie cette valeur et choisit lui-même les destinataires :
- PAO → responsable PAO ;
- Multimédia → responsable Multimédia ;
- Les deux → les deux responsables.

Les adresses e-mail ne sont jamais codées dans le JavaScript ou dans le formulaire HTML.

## 5. Installation technique

Conditions à vérifier avec le CPNV :
- Hébergement avec PHP 8.1 ou supérieur recommandé.
- Extensions PHP `fileinfo` et `mbstring`.
- Sessions PHP autorisées.
- Accès SMTP institutionnel avec TLS.
- Possibilité d'installer les dépendances Composer.

À la racine du projet, exécuter :

```bash
composer install
```

Définir ensuite les variables d'environnement SMTP et les deux destinataires sur le serveur. Ne pas placer de vrais secrets dans le dépôt de code ni dans le dossier public.

La racine web du site doit pointer vers le dossier `public/`, pas vers la racine complète du projet. Ainsi, les fichiers internes `app/` et `config/` ne sont pas directement accessibles depuis Internet.

## 6. Images et vidéo à ajouter

Les médias de la maquette ne sont pas intégrés au PDF. Ajouter les fichiers autorisés suivants :

```text
public/assets/video/hero.mp4
public/assets/images/hero-poster.jpg
public/assets/images/pao-01.jpg
public/assets/images/pao-02.jpg
public/assets/images/pao-03.jpg
public/assets/images/multimedia-01.jpg
public/assets/images/multimedia-02.jpg
public/assets/images/multimedia-03.jpg
```

## 7. Mesures de sécurité prévues

- Jeton CSRF lié à la session.
- Cookies de session `HttpOnly` et `SameSite=Lax`, avec attribut `Secure` si HTTPS est actif.
- Champ piège anti-robot.
- Limitation simple du nombre d'envois par session.
- Validation côté serveur des champs et du choix de stage.
- Contrôle du type MIME réel des pièces jointes avec `fileinfo`.
- CV obligatoire ; lettre de motivation et portfolio facultatifs.
- Limite cumulée de 20 Mo.
- Pièces jointes traitées depuis le dossier temporaire PHP, sans stockage dans un dossier public.
- Identifiants SMTP et adresses des responsables fournis par variables d'environnement.
- Adresse du candidat définie comme adresse de réponse, et non comme expéditeur SMTP.

Ces mesures constituent une base technique, pas une garantie absolue de sécurité ni une certification de conformité légale.

## 8. Vérifications avant une vraie utilisation

1. Faire valider le formulaire, les destinataires et le traitement des CV par le CPNV.
2. Ajouter une information de confidentialité complète : responsable du traitement, finalité, personnes ayant accès, durée de conservation, droits et contact.
3. Définir une procédure de suppression des candidatures à la fin du processus.
4. Vérifier les limites PHP `upload_max_filesize` et `post_max_size` pour permettre 20 Mo de fichiers plus les données du formulaire.
5. Ajouter une protection anti-abus adaptée à l'hébergement (limitation par IP, WAF ou solution institutionnelle). La limite par session seule ne suffit pas.
6. Tester les trois scénarios avec des adresses de test et des PDF non sensibles.
7. Tester les erreurs : absence de CV, mauvais format, fichier trop volumineux, choix invalide, jeton expiré et échec SMTP.
8. Activer HTTPS et vérifier les journaux serveur sans y enregistrer le contenu des candidatures ou les mots de passe.

## 9. Point important pour le TPI

Ne collecte pas de vraies candidatures tant que le CPNV n'a pas confirmé l'hébergement, les adresses des responsables, la configuration SMTP et les règles de protection des données. Pour les tests, utilise des données fictives et des fichiers PDF de test.
