# ATEN — site web et CRM

Nouvelle version du site de l'**Association Tunisienne d'Économie Numérique** (www.aten.tn), en **Laravel 13** et **PHP 8.5**.

- **Site public bilingue** français / anglais (`/fr/...`, `/en/...`), avec sélecteur de langue et balises `hreflang`.
  Accueil, présentation, actualités, conférences ICDEc, publications, adhésion en ligne, contact, newsletter, recherche.
- **CRM** sur `/admin` : adhérents (demandes, validation, numéro d'adhérent, historique d'interactions, export CSV),
  frais d'adhésion par catégorie, messages de contact, abonnés newsletter,
  gestion du contenu traduit (actualités, conférences, pages, comité, partenaires), utilisateurs et réglages.

## Prérequis

- PHP 8.4 ou plus récent (développé et testé avec **PHP 8.5**), avec les extensions `mbstring`, `intl`, `pdo_mysql`,
  `dom`, `xml`, `curl`, `fileinfo`, `zip`, `gd`
- MySQL 8 (ou MariaDB 10.6+)
- Composer

Aucun build front-end n'est nécessaire : Bootstrap 5, Bootstrap Icons, TinyMCE, SortableJS et flatpickr sont dans `public/vendor`.

> Sur cette machine, `php` lance le PHP 8.4 de Herd Lite : utilisez `php8.5` pour ce projet.

## Installation

```bash
php8.5 /usr/local/bin/composer install
cp .env.example .env            # si besoin
php8.5 artisan key:generate     # si besoin
```

Renseigner dans `.env` : `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD`, et éventuellement
`ADMIN_EMAIL` / `ADMIN_PASSWORD` pour le premier compte administrateur.

```sql
CREATE DATABASE aten_v2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE aten_v2_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- pour les tests
```

```bash
php8.5 artisan migrate --seed          # tables + contenu du site actuel + menus + compte admin
php8.5 artisan db:seed --class=DemoSeeder   # (facultatif) adhérents, messages et abonnés fictifs
php8.5 artisan storage:link
php8.5 artisan serve
```

Site : http://127.0.0.1:8000 — CRM : http://127.0.0.1:8000/admin

Toutes les tables sont préfixées par `cms_` (`DB_PREFIX` dans `.env`, `cms_` par défaut).
Pour une base créée avant ce préfixe : `php8.5 artisan db:prefix-tables` (une seule fois ; `--dry-run` pour simuler).

Mot de passe oublié : `php8.5 artisan user:password admin@aten.tn`.

Si `ADMIN_PASSWORD` est vide, le mot de passe généré est affiché une seule fois par `db:seed`.

## Rôles

| Rôle | Accès |
|---|---|
| Administrateur | tout, y compris utilisateurs et réglages |
| Gestionnaire | CRM (adhérents, frais d'adhésion, messages, newsletter) et contenu |
| Rédacteur | contenu du site uniquement |

## Fonctionnement

- **Traductions** : les textes de l'interface sont dans `lang/fr` et `lang/en` ; le contenu saisi dans le CRM est stocké
  en JSON par langue (spatie/laravel-translatable). Une traduction anglaise vide reprend le français.
- **Éditeur WYSIWYG** (TinyMCE 6, licence MIT, dans `public/vendor/tinymce`) pour les contenus : pages, actualités,
  conférences. Les images collées ou insérées sont envoyées dans `storage/app/public/editor`. Le HTML est nettoyé
  à l'enregistrement par HTMLPurifier (`app/Support/Html.php`) : pas de script ni d'attribut `on*` ;
  seules les vidéos YouTube et Vimeo et les cartes Google Maps sont acceptées en iframe.
- **Pages** : création, modification et suppression depuis le CRM, publiées à l'adresse `/{langue}/{slug}`.
  Les pages « Présentation » et « Adhésion » sont des pages système : elles ne peuvent pas être supprimées.
- **Menus** (CRM → Menus) : menu principal, avec un niveau de sous-menu déroulant, et deux colonnes de pied de page.
  On y ajoute des pages, des rubriques du site ou des liens personnalisés, on les réordonne par glisser-déposer,
  et chaque libellé peut être traduit.
- **Documents des actualités** : PDF, Word, Excel, PowerPoint, OpenDocument, CSV, ZIP ou images (20 Mo maximum),
  avec titre FR/EN facultatif et ordre réglable, affichés en bas de l'actualité. La taille réellement acceptée dépend
  aussi de PHP (`upload_max_filesize`, `post_max_size`) : `public/.user.ini` les règle pour PHP-FPM ; pour
  `php artisan serve`, il faut les modifier dans `/etc/php/8.1/cli/php.ini`.
- **Publications** : frise chronologique des actes ICDEc, avec un lien vers chaque livre Springer
  (champ « Lien vers les actes » d'une conférence).
- **Adhésions** : une demande faite sur le site arrive « en attente » dans le CRM. En l'acceptant, l'adhérent
  devient « actif » et reçoit un numéro `ATEN-AAAA-NNNN`. Les catégories et leurs frais se gèrent dans
  « Frais d'adhésion ». L'ancien suivi des cotisations a été retiré ; la table `contributions` reste en base.
- **E-mails** : nouveaux messages et demandes d'adhésion notifiés à l'adresse « E-mail de notification » des réglages.
  `MAIL_MAILER=log` en local : configurer SMTP en production.
- Formulaires publics protégés par limitation de débit et champ « pot de miel » anti-spam.

## Tests

```bash
php8.5 artisan test     # utilise la base aten_v2_test
```

## Production

- `APP_ENV=production`, `APP_DEBUG=false`, SMTP configuré, `php8.5 artisan config:cache route:cache view:cache`.
