# Installation du Système de Cours SQL

Ce document explique comment configurer le système de cours SQL dynamique pour votre application.

## Architecture du Système

Le système utilise une architecture **dynamique basée sur une base de données** :
- **Un seul fichier PHP** : `cours.php` charge le contenu dynamiquement
- **Base de données Oracle** : Stocke tous les cours, exemples et exercices
- **Navigation par slug** : URLs propres de type `cours.php?slug=select-basics`

## Étapes d'Installation

### 1. Configurer la Base de Données

Assurez-vous que votre connexion Oracle est configurée dans `/api/config/database.php`

### 2. Exécuter les Scripts SQL

Exécutez les scripts dans l'ordre suivant :

#### A. Créer le schéma PL/SQL (si pas déjà fait)
```bash
sqlplus votre_user/votre_password@votre_db @sql/plsql_schema.sql
```

#### B. Créer le schéma des cours
```bash
sqlplus votre_user/votre_password@votre_db @sql/cours_sql_schema.sql
```

Ce script crée :
- `COURS_MODULES` : Les modules de cours (Module 1, 2, 3, etc.)
- `COURS_LECONS` : Les leçons individuelles
- `COURS_EXEMPLES` : Les exemples de code SQL
- `COURS_EXERCICES` : Les exercices pratiques

#### C. Ajouter les données supplémentaires
```bash
sqlplus votre_user/votre_password@votre_db @sql/cours_sql_data.sql
```

### 3. Vérifier l'Installation

Connectez-vous à votre base de données et vérifiez :

```sql
-- Vérifier les modules
SELECT * FROM COURS_MODULES ORDER BY ordre_affichage;

-- Vérifier les leçons
SELECT m.titre AS module, l.titre AS lecon, l.slug
FROM COURS_LECONS l
JOIN COURS_MODULES m ON l.module_id = m.module_id
ORDER BY m.ordre_affichage, l.ordre_affichage;

-- Vérifier les exemples et exercices
SELECT 'LECONS' AS type, COUNT(*) AS nombre FROM COURS_LECONS
UNION ALL
SELECT 'EXEMPLES', COUNT(*) FROM COURS_EXEMPLES
UNION ALL
SELECT 'EXERCICES', COUNT(*) FROM COURS_EXERCICES;
```

### 4. Tester le Système

Accédez à : `http://localhost/app/html/page/cours.php?slug=select-basics`

Vous devriez voir la leçon "SELECT de Base" avec :
- Le titre et sous-titre
- Le contenu HTML
- Les objectifs
- Les exemples de code
- Les exercices pratiques

## Structure des Tables

### COURS_MODULES
Contient les 13 modules de cours (Fondamentaux SELECT, Filtrage et Tri, etc.)

### COURS_LECONS
Chaque leçon appartient à un module et contient :
- `slug` : Identifiant unique pour l'URL (ex: "select-basics")
- `titre` : Titre de la leçon
- `contenu_html` : Contenu principal en HTML
- `objectifs` : Liste des objectifs pédagogiques
- `duree_minutes` : Durée estimée
- `difficulte` : DEBUTANT, INTERMEDIAIRE, AVANCE

### COURS_EXEMPLES
Exemples de code SQL pour illustrer les concepts

### COURS_EXERCICES
Exercices pratiques avec solutions et indices

## Ajouter de Nouvelles Leçons

### Via SQL

```sql
-- 1. Trouver l'ID du module
SELECT module_id, titre FROM COURS_MODULES WHERE numero_module = 1;

-- 2. Insérer une nouvelle leçon
INSERT INTO COURS_LECONS (
    lecon_id, module_id, slug, titre, sous_titre,
    contenu_html, objectifs, ordre_affichage,
    duree_minutes, difficulte
) VALUES (
    SEQ_COURS_LECON.NEXTVAL,
    1,  -- ID du module
    'nouvelle-lecon',
    'Titre de la Leçon',
    'Sous-titre descriptif',
    '<h2>Contenu</h2><p>Votre contenu HTML ici...</p>',
    '<ul><li>Objectif 1</li><li>Objectif 2</li></ul>',
    10,  -- Ordre d'affichage
    20,  -- Durée en minutes
    'DEBUTANT'
);

COMMIT;
```

### Ajouter des Exemples

```sql
INSERT INTO COURS_EXEMPLES (
    exemple_id, lecon_id, titre,
    code_sql, resultat_attendu, explication,
    ordre_affichage
) VALUES (
    SEQ_COURS_EXEMPLE.NEXTVAL,
    123,  -- ID de la leçon
    'Exemple de SELECT',
    'SELECT * FROM EMPLOYES;',
    'Toutes les lignes de la table EMPLOYES',
    'Cette requête récupère toutes les données',
    1
);
```

### Ajouter des Exercices

```sql
INSERT INTO COURS_EXERCICES (
    exercice_id, lecon_id, titre, enonce,
    solution_sql, indice, difficulte, ordre_affichage
) VALUES (
    SEQ_COURS_EXERCICE.NEXTVAL,
    123,  -- ID de la leçon
    'Exercice : Lister les départements',
    'Écrivez une requête pour afficher tous les départements.',
    'SELECT * FROM DEPARTEMENTS;',
    'Utilisez SELECT * FROM ...',
    'FACILE',
    1
);
```

## Mettre à Jour le Sidebar

Les liens sont déjà configurés dans `/html/page/layout/sidebar.php` :

```php
<a href="cours.php?slug=nom-du-slug" class="menu-link">
    <div data-i18n="Titre">Titre de la Leçon</div>
</a>
```

Pour ajouter une nouvelle leçon au menu :
1. Ouvrez `sidebar.php`
2. Trouvez le module approprié
3. Ajoutez un nouveau `<li>` avec le bon slug

## Personnalisation

### Modifier le Style

Les styles des cours sont définis à la fin de `/html/page/cours.php` dans la balise `<style>`.

Vous pouvez modifier :
- Les couleurs des titres
- Le style des blocs de code
- Les alertes et encadrés
- La mise en page générale

### Ajouter des Fonctionnalités

Le fichier `cours.php` peut être étendu pour ajouter :
- Un système de progression utilisateur
- Des quiz interactifs
- Un éditeur SQL en ligne
- Des commentaires et discussions
- Un système de notation

## Résolution des Problèmes

### "Leçon non trouvée"
- Vérifiez que le slug existe dans la table COURS_LECONS
- Vérifiez que la leçon est active (`actif = 'O'`)
- Vérifiez les logs d'erreur PHP

### Erreur de connexion à la BDD
- Vérifiez le fichier `.env` à la racine
- Testez la connexion avec un script simple
- Vérifiez les credentials Oracle

### Contenu HTML cassé
- Vérifiez que les guillemets simples dans le HTML sont échappés
- Utilisez `CLOB` pour les contenus longs
- Validez votre HTML avant insertion

## Prochaines Étapes

1. Ajoutez plus de contenu pour tous les modules (13 modules au total)
2. Créez des exercices interactifs
3. Ajoutez un système de suivi de progression
4. Implémentez un éditeur SQL en ligne
5. Ajoutez des vidéos et des ressources supplémentaires

## Support

Pour toute question ou problème, consultez les logs dans :
- `/path/to/php/error.log`
- Oracle alert log
- Console navigateur (F12)
