# NetUp Africa — Net Hosting Company (PHP natif)

Réécriture en PHP natif (≥ 8.4, testé en 8.5) du site WordPress netupafrica.com, avec un nouveau design.
Les contenus, les produits, les prix, les promotions, les images et les URL sont les mêmes que sur l'ancien site.
Le site reste branché sur l'API ResellersPanel (duoservers) avec les mêmes commandes que le plugin d'origine.

## Ce qui a été repris à l'identique

- **300 pages** (textes, titres, balises meta SEO, hiérarchie et URL `/%postname%/`), exportées de la base WordPress.
  Les ~270 brouillons d'anciennes installations qui contenaient des `{{placeholders}}` non résolus n'ont pas été repris.
- **Catalogue en direct** depuis `api.duoservers.com` : hébergement mutualisé, VPS OpenVZ/KVM, semi-dédiés,
  serveurs dédiés (avec vérification du stock et périodes 1/3/6 mois), domaines (163 extensions), SSL,
  protection WHOIS, options (cPanel, IP, sauvegardes…), promotions, conditions générales (18 documents).
- **Tous les shortcodes** du plugin ResellersPanel et du thème (`[rp_plans]`, `[rp_plans_short]`,
  `[domain_search_box]`, `[rp_domain_results]`, `[rp_terms]`, `[contactus_form]`, `[rp_order_form]`…),
  réimplémentés avec un moteur compatible WordPress (même regex, mêmes attributs).
- **Commande** : le formulaire hébergé `https://<boutique>.duoservers.com/hosting-order/` est intégré
  côté serveur, et ses scripts / appels `ajax.php` passent par le même proxy qu'avant (`rp_proxy.php`).
- **Endpoints conservés** : `/wp-admin/admin-ajax.php?action=domain_check|quick_domain_check`,
  `…/stockcheck.php`, liens `?page_id=`, anciennes images `/wp-content/themes/pro-hosting/…` (redirection 301).
- Formulaire de contact envoyé via l'API (`mail/send`, modèle `feedback_form`) avec captcha.

## Structure

```
public/            racine web (index.php, .htaccess, assets/)
  assets/theme/    images d'origine du thème (mêmes fichiers)
src/               code applicatif (namespace NetUp\)
  ResellersPanel/  client API + cache fichier + catalogue (portage de _rp_info_fetch, promos…)
  Shortcode/       moteur de shortcodes compatible WordPress
  Shortcodes/      implémentation des shortcodes du plugin
templates/         gabarits (layout, pages, composants)
storage/content/   pages et réglages exportés (générés par bin/import-legacy.php)
storage/cache/     cache des réponses API
bin/               import-legacy.php (export depuis WordPress), warm-cache.php (cron)
```

## Installation

1. PHP **8.4 ou plus récent** avec les extensions `curl`, `mbstring`, `gd` (captcha ; une version SVG est utilisée sans gd).
2. Faire pointer la racine du domaine vers le dossier `public/` (Apache + `mod_rewrite` ; le `.htaccess` est fourni).
   Avec Nginx : `try_files $uri /index.php?$query_string;`.
3. Copier `.env.example` en `.env` et renseigner `RP_API_USER` / `RP_API_PASS`.
4. Rendre `storage/cache/` inscriptible par PHP.
5. Ajouter la tâche cron qui garde le cache API chaud :
   `0 0-23/2 * * *  php /chemin/vers/site/bin/warm-cache.php`

Serveur de développement : `php -S 127.0.0.1:8085 -t public public/router.php`

## Sécurité — important

L'ancienne installation WordPress est **compromise** (webshells dans `wp-content/uploads/*.php`, extensions
aux noms aléatoires, mu-plugins malveillants, code injecté dans `wp-config.php`). Aucun fichier PHP de
l'ancien site n'a été réutilisé ni exécuté. Avant la mise en production :

- supprimer complètement l'ancien WordPress du serveur (ne pas le laisser dans un sous-dossier accessible) ;
- **changer le mot de passe API ResellersPanel** et celui de la base de données : ils étaient lisibles par les pirates ;
- changer les mots de passe d'hébergement / FTP / panneau de contrôle.
