# GUIDE DE MISE À JOUR - MediRecrut Application

## 📋 Vue d'ensemble

Ce guide vous accompagne dans la mise à jour de votre application MediRecrut actuelle vers la nouvelle version avec toutes les fonctionnalités avancées.

## ✨ Nouvelles fonctionnalités ajoutées

1. **Profil candidat enrichi**
   - Sélection multiple de fonctions recherchées
   - Sélection multiple de départements souhaités
   - Gestion de la disponibilité et du salaire souhaité
   - Upload de CV amélioré

2. **Moteur de recherche avancé**
   - Recherche par fonction
   - Recherche par département
   - Filtres d'expérience

3. **Gestion complète des offres d'emploi**
   - Création d'offres avec tous les détails
   - Fourchette de salaire
   - Urgence de la recherche
   - Gestion du type de contrat

4. **Système de matching intelligent**
   - Score de correspondance automatique (0-100%)
   - Calcul basé sur 5 critères pondérés
   - Affichage visuel des scores

5. **Validation des candidatures**
   - Validation/rejet par les recruteurs
   - Commentaires sur les candidatures
   - Historique des actions

6. **Système d'autorisations**
   - Managers peuvent autoriser l'accès aux candidats
   - Gestion fine des permissions

## 🚀 ÉTAPE 1 : Préparation et sauvegarde

### 1.1 Sauvegarde complète

**IMPORTANT** : Avant toute manipulation, faites une sauvegarde complète !

```bash
# Via cPanel ou en ligne de commande
# Sauvegarder la base de données
mysqldump -u votre_user -p wynter_medirecrut > backup_medirecrut_$(date +%Y%m%d).sql

# Sauvegarder les fichiers
tar -czf backup_files_$(date +%Y%m%d).tar.gz /chemin/vers/app.medirecrut.com
```

### 1.2 Vérifier les prérequis

- PHP 7.4 ou supérieur
- MySQL 5.7 ou supérieur
- Extension PDO activée
- mod_rewrite Apache activé
- Quota espace disque suffisant (minimum 500 Mo pour les CV)

## 🗄️ ÉTAPE 2 : Mise à jour de la base de données

### 2.1 Connexion à phpMyAdmin

1. Connectez-vous à votre cPanel O2switch
2. Accédez à phpMyAdmin
3. Sélectionnez la base `wynter_medirecrut`

### 2.2 Exécuter le script SQL

Copiez et exécutez le contenu du fichier `sql/database_schema.sql` dans l'onglet SQL.

**Note** : Ce script utilise `CREATE TABLE IF NOT EXISTS`, donc il ne supprimera pas vos données existantes.

### 2.3 Vérification des tables créées

Vérifiez que toutes ces tables sont présentes :
- ✅ users
- ✅ candidats
- ✅ fonctions
- ✅ departements
- ✅ candidat_fonctions
- ✅ candidat_departements
- ✅ offres
- ✅ candidatures
- ✅ autorisations_acces
- ✅ activity_logs

### 2.4 Migration des données existantes (si applicable)

Si vous avez déjà des données dans l'ancienne structure :

```sql
-- Exemple : Migrer les candidats existants vers la nouvelle structure
-- (Adaptez selon votre structure actuelle)

-- Si vous aviez une table "cv" séparée
INSERT INTO candidats (user_id, cv_filename, cv_path, cv_uploaded_at)
SELECT user_id, filename, path, uploaded_at
FROM ancienne_table_cv
WHERE NOT EXISTS (SELECT 1 FROM candidats WHERE candidats.user_id = ancienne_table_cv.user_id);

-- Marquez les migrations dans les logs
INSERT INTO activity_logs (user_id, action, details, created_at)
VALUES (NULL, 'migration_donnees', 'Migration vers nouvelle structure', NOW());
```

## 📁 ÉTAPE 3 : Upload des nouveaux fichiers

### 3.1 Structure des dossiers à créer

Via le gestionnaire de fichiers cPanel, créez cette structure :

```
/home/votre_user/public_html/app.medirecrut.com/
├── config/
│   └── database.php
├── includes/
│   ├── functions.php
│   ├── matching.php
│   ├── header.php
│   └── sidebar.php
├── assets/
│   └── css/
│       └── style.css
├── uploads/
│   └── cv/          (chmod 755)
├── sql/
│   └── database_schema.sql
├── .htaccess
├── login.php
├── logout.php
├── dashboard.php
├── profil.php
├── offres_create.php
├── offres_list.php
├── offre_detail.php
├── candidats_search.php
└── ... (autres fichiers)
```

### 3.2 Configuration des permissions

```bash
# Permissions recommandées
chmod 755 uploads/
chmod 755 uploads/cv/
chmod 644 config/database.php
chmod 644 .htaccess
```

### 3.3 Upload des fichiers

1. **Via FTP/SFTP** :
   - Utilisez FileZilla ou le client FTP de votre choix
   - Connectez-vous à votre serveur O2switch
   - Uploadez tous les fichiers en respectant la structure

2. **Via cPanel File Manager** :
   - Compressez tous les fichiers en .zip
   - Uploadez le .zip
   - Extrayez dans le bon répertoire

## ⚙️ ÉTAPE 4 : Configuration

### 4.1 Configurer database.php

Éditez `/config/database.php` :

```php
<?php
define('DB_HOST', 'localhost');  // Généralement localhost chez O2switch
define('DB_NAME', 'wynter_medirecrut');
define('DB_USER', 'wynter_user');  // Votre utilisateur MySQL
define('DB_PASS', 'votre_mot_de_passe');  // Votre mot de passe MySQL
define('DB_CHARSET', 'utf8mb4');
```

### 4.2 Vérifier le .htaccess

Le fichier `.htaccess` doit être à la racine de votre application.

### 4.3 Créer un compte manager (premier utilisateur)

Connectez-vous à phpMyAdmin et exécutez :

```sql
-- Créer un compte manager pour démarrer
INSERT INTO users (email, password, user_type, nom, prenom, active)
VALUES (
    'admin@medirecrut.com',
    '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',  -- password = "password"
    'manager',
    'Admin',
    'MediRecrut',
    1
);

-- IMPORTANT : Changez le mot de passe après la première connexion !
```

**Identifiants temporaires** :
- Email : `admin@medirecrut.com`
- Mot de passe : `password`

## 🧪 ÉTAPE 5 : Tests

### 5.1 Test de connexion

1. Accédez à `https://app.medirecrut.com/login.php`
2. Connectez-vous avec le compte admin créé
3. Vérifiez que le dashboard s'affiche

### 5.2 Test des fonctionnalités candidat

1. Créez un compte candidat via l'inscription
2. Complétez le profil :
   - Uploadez un CV (PDF test)
   - Sélectionnez des fonctions
   - Sélectionnez des départements
3. Vérifiez que les données sont sauvegardées

### 5.3 Test des fonctionnalités recruteur

1. Créez un compte recruteur
2. Créez une offre d'emploi complète
3. Vérifiez l'affichage des candidats avec scores de matching
4. Testez la validation d'une candidature

### 5.4 Vérification des logs

```sql
-- Vérifier que les actions sont bien loguées
SELECT * FROM activity_logs ORDER BY created_at DESC LIMIT 20;
```

## 🔧 ÉTAPE 6 : Optimisations et ajustements

### 6.1 Configuration PHP (php.ini ou .htaccess)

Vérifiez/ajustez ces paramètres :

```ini
upload_max_filesize = 5M
post_max_size = 6M
max_execution_time = 300
memory_limit = 128M
```

### 6.2 Indexation de la base de données

Pour de meilleures performances :

```sql
-- Vérifier les index
SHOW INDEX FROM candidats;
SHOW INDEX FROM offres;
SHOW INDEX FROM candidatures;

-- Ajouter des index si manquants (déjà dans le schema.sql)
-- Ils sont normalement déjà créés
```

### 6.3 Configuration du cache

Dans le .htaccess, le cache est déjà configuré pour les ressources statiques.

## 📊 ÉTAPE 7 : Migration des utilisateurs existants

Si vous avez des utilisateurs dans l'ancienne version :

### 7.1 Audit des données existantes

```sql
-- Compter les utilisateurs existants
SELECT user_type, COUNT(*) as count FROM users GROUP BY user_type;

-- Vérifier les candidats sans profil
SELECT u.id, u.email 
FROM users u 
LEFT JOIN candidats c ON u.id = c.user_id 
WHERE u.user_type = 'candidat' AND c.id IS NULL;
```

### 7.2 Créer les profils manquants

```sql
-- Créer un profil candidat pour chaque user candidat sans profil
INSERT INTO candidats (user_id)
SELECT u.id 
FROM users u 
LEFT JOIN candidats c ON u.id = c.user_id 
WHERE u.user_type = 'candidat' AND c.id IS NULL;
```

### 7.3 Notification aux utilisateurs

Envoyez un email à vos utilisateurs pour :
- Les informer des nouvelles fonctionnalités
- Leur demander de compléter leur profil
- Leur indiquer comment utiliser le nouveau système de matching

## 🛡️ ÉTAPE 8 : Sécurisation

### 8.1 Changer les mots de passe par défaut

```sql
-- Changer le mot de passe admin
UPDATE users 
SET password = '$2y$10$VotreNouveauHashIci'
WHERE email = 'admin@medirecrut.com';
```

Générez un hash sécurisé :
```php
<?php
echo password_hash('VotreNouveauMotDePasse', PASSWORD_BCRYPT);
?>
```

### 8.2 Sécuriser les fichiers sensibles

```bash
# Interdire l'accès direct aux fichiers de config
chmod 600 config/database.php
```

### 8.3 Activer HTTPS

Dans le .htaccess, décommentez ces lignes :

```apache
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
```

## 📈 ÉTAPE 9 : Monitoring et maintenance

### 9.1 Surveiller les logs

Consultez régulièrement :
- Logs d'erreur PHP : `/var/log/php_errors.log`
- Logs d'activité : Table `activity_logs`

```sql
-- Actions suspectes récentes
SELECT * FROM activity_logs 
WHERE action IN ('connexion_echouee', 'tentative_acces_interdit')
ORDER BY created_at DESC 
LIMIT 50;
```

### 9.2 Backup automatique

Configurez un CRON pour sauvegarder quotidiennement :

```bash
# Dans cPanel > Cron Jobs
# Chaque jour à 3h du matin
0 3 * * * mysqldump -u user -p password wynter_medirecrut > /backups/db_$(date +\%Y\%m\%d).sql
```

### 9.3 Nettoyage périodique

```sql
-- Supprimer les vieux logs (> 6 mois)
DELETE FROM activity_logs 
WHERE created_at < DATE_SUB(NOW(), INTERVAL 6 MONTH);

-- Archiver les offres anciennes
UPDATE offres 
SET statut = 'archivee' 
WHERE statut = 'active' 
AND created_at < DATE_SUB(NOW(), INTERVAL 3 MONTH);
```

## 🐛 ÉTAPE 10 : Dépannage

### Problème : Page blanche

```bash
# Activer l'affichage des erreurs temporairement
# Dans .htaccess
php_flag display_errors On
```

### Problème : Erreur de connexion base de données

1. Vérifier les identifiants dans `config/database.php`
2. Vérifier que l'utilisateur a les droits sur la base
3. Vérifier que MySQL est actif

```bash
# Tester la connexion MySQL
mysql -u wynter_user -p wynter_medirecrut
```

### Problème : Upload de CV ne fonctionne pas

```bash
# Vérifier les permissions
ls -la uploads/cv/
# Doit afficher drwxr-xr-x

# Corriger si nécessaire
chmod 755 uploads/cv/
```

### Problème : Sessions expirées trop vite

Dans .htaccess ou php.ini :

```ini
php_value session.gc_maxlifetime 7200  ; 2 heures
php_value session.cookie_lifetime 0
```

## 📝 ÉTAPE 11 : Documentation utilisateur

### 11.1 Guide candidat

Créez une page d'aide pour les candidats :
- Comment créer un profil
- Comment sélectionner les fonctions/départements
- Comment postuler à une offre
- Comment suivre ses candidatures

### 11.2 Guide recruteur

Créez une page d'aide pour les recruteurs :
- Comment créer une offre
- Comment interpréter les scores de matching
- Comment valider/rejeter des candidatures
- Comment gérer les autorisations (managers)

## ✅ CHECKLIST FINALE

Avant de mettre en production :

- [ ] Backup complet effectué
- [ ] Base de données mise à jour
- [ ] Tous les fichiers uploadés
- [ ] Configuration database.php correcte
- [ ] Permissions des dossiers OK (755 pour uploads)
- [ ] Compte admin créé et testé
- [ ] Tests de toutes les fonctionnalités OK
- [ ] HTTPS activé
- [ ] Mots de passe par défaut changés
- [ ] Logs d'erreur configurés
- [ ] Backup automatique configuré
- [ ] Documentation utilisateur prête

## 🎉 Félicitations !

Votre application MediRecrut est maintenant mise à jour avec toutes les nouvelles fonctionnalités !

## 📞 Support

En cas de problème :
1. Consultez les logs d'erreur
2. Vérifiez la table `activity_logs`
3. Consultez ce guide de dépannage
4. Restaurez le backup en cas de problème majeur

## 🔄 Mises à jour futures

Pour les futures mises à jour :
1. Toujours faire un backup avant
2. Tester sur un environnement de dev si possible
3. Lire attentivement les notes de version
4. Mettre à jour la base de données en premier
5. Puis les fichiers

---

**Version du guide** : 1.0
**Date** : Février 2026
**Application** : MediRecrut v2.0
