# Caddy - Gestionnaire de Thèmes WordPress

Caddy est un gestionnaire de thèmes WordPress moderne basé sur **Bedrock**, conçu pour simplifier le développement et le déploiement de thèmes WordPress. Il utilise Composer pour la gestion des dépendances et WP-CLI pour l'automatisation des tâches.

## 🎯 Objectifs

- Architecture WordPress moderne basée sur Bedrock
- Gestion automatisée des thèmes via scripts bash
- Support du développement local (symlinks) et production (Git)
- Installation et maintenance WordPress simplifiées
- Workflow de développement optimisé avec Composer
- Séparation claire entre environnements de développement et production

## 📋 Prérequis

- **PHP 8.3+**
- **Composer**
- **WP-CLI** (installé globalement ou via vendor)
- **MySQL 5.7+** ou **MariaDB 10.2+**
- **Git**
- Accès SSH pour les dépôts Git privés

## 🚀 Installation

### 1. Cloner le projet
```bash
git clone [URL_DU_REPO]
cd caddy
```


### 2. Authentification pour dépôts privés

Créez un fichier `auth.json` :
```json
{
  "http-basic": {
    "github.com": {
      "username": "votre-utilisateur",
      "password": "votre-token"
    }
  }
}
```


### 3. Créer le fichier d'environnement
```bash
# Créer votre fichier .env à la racine
# Configurer les variables d'environnement nécessaires
```

**Variables d'environnement requises :**
```env
WP_ENV=development
WP_HOME=http://localhost:3000
WP_SITE_TITLE="Mon Site"
WP_ADMIN_USER=admin
WP_ADMIN_PASSWORD=password
WP_ADMIN_EMAIL=admin@example.com

DB_NAME=wordpress
DB_USER=root
DB_PASSWORD=password
DB_HOST=localhost

# Clés de sécurité WordPress (générées automatiquement)
AUTH_KEY='...'
SECURE_AUTH_KEY='...'
LOGGED_IN_KEY='...'
NONCE_KEY='...'
AUTH_SALT='...'
SECURE_AUTH_SALT='...'
LOGGED_IN_SALT='...'
NONCE_SALT='...'
```

### 4. Créer la base de données
Créez manuellement votre base de données MySQL/MariaDB.

### 5. Installer WordPress et toutes les dépendances
```bash
./caddy.sh wp-install
```
*Cette commande installe automatiquement les dépendances Composer et configure WordPress.*

### 6. Installer un thème
```bash
# Mode développement (symlink local)
./caddy.sh symlink [nom_du_theme]

# Mode production (depuis Git)
./caddy.sh git [nom_du_theme]
```

## 🛠️ Structure du Projet

```
.
├── caddy.sh                 # Script principal de gestion
├── composer.json            # Dépendances PHP et WordPress
├── config/                  # Configuration du projet
│   ├── richkit/            # Scripts et configuration Caddy
│   │   ├── scripts/        # Scripts de gestion (wp-install, theme-install, etc.)
│   │   └── themes.conf     # Configuration des thèmes disponibles
│   ├── application.php      # Configuration WordPress principale
│   └── environments/       # Configurations par environnement
├── web/                    # Dossier public (document root)
│   ├── index.php          # Point d'entrée
│   ├── wp-config.php      # Configuration WordPress
│   ├── app/               # Contenu WordPress
│   │   ├── themes/        # Thèmes installés
│   │   ├── plugins/       # Plugins installés
│   │   └── uploads/       # Médias uploadés
│   └── wp/                # Core WordPress (géré par Composer)
├── vendor/                 # Dépendances Composer
└── auth.json              # Authentification pour dépôts privés
```

## 📦 Gestion des Thèmes

### Thèmes Disponibles

Les thèmes sont configurés dans `config/richkit/themes.conf` :
- **blanky** : Thème WordPress starter moderne
- **heady** : Thème avancé

### Installation d'un thème

**Mode développement (symlink) :**
```bash
./caddy.sh symlink blanky
```
- Crée un lien symbolique vers le thème local
- Idéal pour le développement
- Nécessite que le thème soit présent localement

**Mode production (Git) :**
```bash
./caddy.sh git blanky
```
- Clone le thème depuis le dépôt Git
- Ajoute le thème comme dépendance Composer
- Active automatiquement le thème

### Suppression d'un thème
```bash
./caddy.sh remove blanky
```
- Supprime les fichiers du thème
- Nettoie les références Composer
- Exécute les scripts de nettoyage du thème

## 🔄 Commandes Disponibles

### Gestion WordPress
```bash
# Vérifier l'état de l'installation
./caddy.sh status

# Installer WordPress
./caddy.sh wp-install

# Désinstaller WordPress (⚠️ destructif)
./caddy.sh wp-uninstall

# Mettre à jour WordPress, plugins et thèmes
./caddy.sh wp-update
```

### Gestion des thèmes
```bash
# Installer un thème en mode développement
./caddy.sh symlink [nom_du_theme]

# Installer un thème depuis Git
./caddy.sh git [nom_du_theme]

# Supprimer un thème
./caddy.sh remove [nom_du_theme]

# Voir les thèmes disponibles
./caddy.sh status
```

## 🔧 Configuration

### Configuration des thèmes

Le fichier `config/richkit/themes.conf` définit :

```bash
# Thèmes disponibles
declare -A THEMES=(
  [blanky]="Blanky"
  [heady]="Heady"
)

# URLs Git pour installation en production
declare -A GIT_URLS=(
  [blanky]="git@gitlab.com:myclientisrich/richkit/themes/blanky.git"
  [heady]="git@gitlab.com:myclientisrich/richkit/themes/heady.git"
)

# Chemins locaux pour développement
declare -A LOCAL_PATHS=(
  [blanky]="../caddy-themes/blanky"
  [heady]="../caddy-themes/heady"
)
```

## 🚨 Sécurité

- Mises à jour automatiques désactivées
- Éditeur de fichiers dans l'admin désactivé
- Modifications de fichiers depuis l'admin désactivées
- Clés de sécurité gérées via variables d'environnement
- Configuration séparée par environnement

## 🔍 Debug

En mode développement :
- Outils de debug WordPress activés
- Erreurs PHP affichées
- Requêtes SQL loggées
- Gestionnaire d'erreurs personnalisé

## 📚 Technologies Utilisées

- **[WordPress](https://wordpress.org/)** - CMS
- **[Bedrock](https://roots.io/bedrock/)** - Architecture WordPress moderne
- **[Composer](https://getcomposer.org/)** - Gestionnaire de dépendances PHP
- **[WP-CLI](https://wp-cli.org/)** - Interface en ligne de commande WordPress
- **[Dotenv](https://github.com/vlucas/phpdotenv)** - Gestion des variables d'environnement

## 🤝 Contribution

1. Fork le projet
2. Créer une branche (`git checkout -b feature/NouvelleFonctionnalite`)
3. Commit les changements (`git commit -m 'Ajout d'une nouvelle fonctionnalité'`)
4. Push sur la branche (`git push origin feature/NouvelleFonctionnalite`)
5. Ouvrir une Pull Request

## 👥 Auteurs

- **MyClientisRich** - *Développement initial* - [MyClientisRich](https://myclientisrich.com)

---

*Made with ☕ et passion par l'équipe dev de MyClientisRich*