# Développement Moodle
## Navigation
### Menu Nanigation Global (custommenuitems)
Atoo-Sync GesCom
-Atoo-Sync GesCom Débutant|/course/index.php?categoryid=6
-1 🖥️ Présentation du logiciel Atoo-Sync GesCom|/course/view.php?id=11
-2🔧 Installer Atoo-Sync GesCom|/course/view.php?id=3
-3⚡ Connecter Atoo-Sync GesCom|/course/view.php?id=12
-4📦 Gestion des Articles|/course/view.php?id=14
-5👥 Gestion des Clients|/course/view.php?id=13
-6🛒 Gestion des Commandes|/course/view.php?id=15
-7🚀 Evaluation Atoo-Sync GesCom|/course/view.php?id=21
-Wiki Atoo-Sync GesCom 💡|/mod/glossary/view.php?id=164
Wise Up Skate
-Wise Up Skate Débutant|/course/index.php?categoryid=11
-1 🖥️ Présentation du logiciel Wise Up Skate|/course/view.php?id=23
-2 🔧 Installer Wise Up Skate|/course/view.php?id=24
-3 📦 Les Données d’Articles Sage|/course/view.php?id=25
-4 👥 Les Données Clients Sage|/course/view.php?id=26
-5 🚚 Les Données Fournisseurs Sage|/course/view.php?id=27
-6 🧪 Cas Pratiques |/course/view.php?id=28
-7 🚀 Evaluation Finale Débutant|/course/view.php?id=45
-Wiki Wise Up Skate 💡|/mod/glossary/view.php?id=165
Wise Up Papyrus
-Wise Up Papyrus Débutant|/course/index.php?categoryid=14
-1 🖥️ Présentation du logiciel Wise Up Papyrus|/course/view.php?id=38
-2 🔧 Installer et Connecter Wise Up Papyrus|/course/view.php?id=39
-3 ⚙️ Paramétrage de Wise Up Papyrus|/course/view.php?id=40
-4 📱 Utilisation manuelle de Wise Up Papyrus|/course/view.php?id=41
-5 🤖 Automatiser les actions dans Wise Up Papyrus|/course/view.php?id=42
-6 🎨 Editeur de Mise en Page|/course/view.php?id=43
-7 🚀 Evaluation Finale Débutant|/course/view.php?id=44
-Wiki Wise Up Papyrus💡|/mod/glossary/view.php?id=166
📖 Doc|https://docs.atoo-next.net/\" target=\"_blank\
🛟 Support|https://docs.atoo-next.net/\" target=\"_blank\

### Menu Utilisateur (customusermenuitems) /local/managerdashboard/index.php
profile,moodle|/user/profile.php
Mon Profil|/local/profile_enhanced/index.php
Ma Progression|/local/userdashboard/index.php
Mes Statistiques|/local/userstats/index.php
Espace Manager|/local/managerdashboard/index.php

## Nagivation Salarié
|_ Mon Profil
    |_Ma Progression /local/userdashboard/index.php
    |_Mes Statistiques /local/userstats/index.php
    |_Mes Préférences /user/preferences.php
    |_Espace Manager /local/managerdashboard/index.php (uniquement pour les rôles manager)

## Page Accueil
- HTML dans le bloc image + texte de la page d'accueil 
> /local/userdashboard/home.php
> http://formation.atoonext.local/?redirect=0
- CSSS dans le règlage avancée du thème
> http://formation.atoonext.local/admin/settings.php?section=themesettingmoove#theme_moove_advanced


http://formation.atoonext.local/course/index.php?categoryid=6

## Modules
### Module profile_enhanced
> Salarié > rôle student > Mon Profil
**Objectif: Suivre ses Plans de Formation**

1. Statistiques Globales de l'Utilisateur
- Progression Globales du Salarié
- Badges Obtenus pas le Salarié
- Compétences Globales acquises par le Salarié
- Activités Globales effectuées par le Salarié
2. Statistiques par Plan de Formation
- Progression Globales du Salarié
- Badges Obtenus pas le Salarié
- Compétences Globales acquises par le Salarié
- Activités Globales effectuées par le Salarié
3. Obtention de Badges
4. Prochaine étape
5. Formations suggérées
5. Evaluation à Réussir
- Test dont la note de réussite n'est pas atteinte
- Demande d'ouverture d'une seconde tenative avec commentaire au Manager

Ajout table  `mdl_local_profile_enhanced_retry` pour stocker les notifications de réévaluation
CREATE TABLE IF NOT EXISTS `mdl_local_profile_enhanced_retry` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `userid` int(10) NOT NULL DEFAULT 0,
    `quizid` int(10) NOT NULL DEFAULT 0,
    `courseid` int(10) NOT NULL DEFAULT 0,
    `message` longtext DEFAULT NULL,
    `status` varchar(20) NOT NULL DEFAULT 'pending',
    `timecreated` int(10) NOT NULL DEFAULT 0,
    `timemodified` int(10) NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`),
    KEY `userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `mdl_local_profile_enhanced_retry` 
ADD COLUMN `manager_response` longtext DEFAULT NULL AFTER `message`,
ADD COLUMN `manager_response_time` int(10) DEFAULT 0 AFTER `manager_response`;

### Module userdashboard
> Salarié > rôle student > Ma Progression
**Objectif: Suivre sa Progression**

1. Statistiques Globales de l'Utilisateur
- Progression Globales du Salarié
- Badges Obtenus pas le Salarié
- Compétences Globales acquises par le Salarié
- Activités Globales effectuées par le Salarié
2. Détail Progession de l'Utilisateur
- Statistiques Globales du Salarié
- Progression Globale des Plans de Formation
- Progression par Plan de Formation, Niveau, Cours
- Détail de la Progression par Cours

### Module userstats
> Salarié > rôle student > Mes Statistiques
**Objectif: Suivre son Temps de Formation**

1. Suivi du Temps de Formation
- Temps global
- Temps du jour
- Temps de la semaine
- Temps du mois
- Dernière connexion
- Temps moyen par session
2. Derniers cours suivis
- 8 Derniers cours suivis
- Progression dans le cours
- Temps passé sur le cours

### Module managerdashboard
> Manager > rôle manager_service > Espace Manager
**Objectif: Suivre la progression des Salariés de son Service**

1. Statistiques Globales du Service 
- Progression Globales du Service
- Badges Obtenus pas le Service
- Compétences Globales acquises par le Service
- Activités Globales effectuées par le Service
2. Détail Progession par Utilisateur
- Statistiques Globales du Salarié
- Progression Globale des Plans de Formation
- Progression par Plan de Formation, Niveau, Cours
- Détail de la Progression par Cours
3. Demandes de Réévaluation pour les tests non réussis
- Accpeter / Refuser une nouvelle tenatative
- Envoyer un commentaire au Salarié
4. Utilisateurs en Difficulté 
- Échec aux quiz : Score < 60% aux quiz
- Inactivité : Pas de connexion depuis 30 jours
- Progression faible : Moins de 30% d'activités terminées
5. Top Performers 
6. Progression par cohorte
7. Activités récentes de l'équipe
8. Actions rapides (menu d'outils)

> Requêtes SQL
- Lister les salariés d'un Service - ici Service Client (id =1) 
```
SELECT u.id, u.firstname, u.lastname, u.email
FROM mdl_user u
JOIN mdl_cohort_members cm ON cm.userid = u.id
WHERE cm.cohortid = 1  -- Remplacez 1 par l'ID de votre service
AND u.deleted = 0
AND u.suspended = 0
ORDER BY u.lastname, u.firstname;
```
---
| id | firstname | lastname     | email                      |
|---:|-----------|--------------|----------------------------|
|  9 | Formateur | Atoo Next    | formateur@test.fr          |
|  4 | Emilie    | CARION       | e.carion@atoo-next.net     |
| 10 | Kareen    | GALLIGANI    | k.galligani@atoo-next.net  |
| 13 | Cédric    | PIETTE       | c.piette@atoo-next.net     |
| 21 | Dimitri   | SPASOJEVIC   | d.spasojevic@atoo-next.net |
|  6 | Test      | Support      | t.support@atoo-next.net    |
| 11 | Guillaume | VERGIER      | g.vergier@atoo-next.net    |
| 15 | Mickaël   | VIVENS       | m.vivens@atoo-next.net     |
---
- Total Bages Service ici Membres du Service Client (id IN (4, 10, 13, 21, 6, 11, 15)) 
```
SELECT 
    u.id,
    u.firstname,
    u.lastname,
    COUNT(DISTINCT b.id) as badges_total
FROM mdl_user u
JOIN mdl_user_enrolments ue ON ue.userid = u.id
JOIN mdl_enrol e ON e.id = ue.enrolid
JOIN mdl_course c ON c.id = e.courseid
JOIN mdl_badge b ON b.courseid = c.id
WHERE u.id IN (4, 10, 13, 21, 6, 11, 15)  -- Remplacez par les ID des utilisateurs
AND c.visible = 1
GROUP BY u.id, u.firstname, u.lastname
ORDER BY u.lastname;
```
---
| id | firstname | lastname   | badges_total |
|---:|-----------|------------|-------------:|
|  4 | Emilie    | CARION     |           15 |
| 10 | Kareen    | GALLIGANI  |           15 |
| 13 | Cédric    | PIETTE     |           14 |
| 21 | Dimitri   | SPASOJEVIC |            8 |
|  6 | Test      | Support    |           15 |
| 11 | Guillaume | VERGIER    |           14 |
| 15 | Mickaël   | VIVENS     |           14 |
---
- Compétences validées par Membres du Service Client (id IN (4, 10, 13, 21, 6, 11, 15)) 
```
SELECT 
    u.id,
    u.firstname,
    u.lastname,
    COUNT(DISTINCT uc.competencyid) as skills_validated
FROM mdl_user u
LEFT JOIN mdl_competency_usercomp uc ON uc.userid = u.id AND uc.grade IS NOT NULL
WHERE u.id IN (4, 10, 13, 21, 6, 11, 15)  -- Remplacez par les ID des utilisateurs
GROUP BY u.id, u.firstname, u.lastname
ORDER BY u.lastname;
```
---
| id | firstname | lastname   | skills_validated |
|---:|-----------|------------|-----------------:|
|  4 | Emilie    | CARION     |               53 |
| 10 | Kareen    | GALLIGANI  |                7 |
| 13 | Cédric    | PIETTE     |                0 |
| 21 | Dimitri   | SPASOJEVIC |                0 |
|  6 | Test      | Support    |               34 |
| 11 | Guillaume | VERGIER    |               11 |
| 15 | Mickaël   | VIVENS     |               23 |
---
- . Compétences totales disponibles Membres du Service Client (id IN (4, 10, 13, 21, 6, 11, 15)) 
```
SELECT 
    u.id,
    u.firstname,
    u.lastname,
    COUNT(DISTINCT cc.competencyid) as skills_total
FROM mdl_user u
JOIN mdl_user_enrolments ue ON ue.userid = u.id
JOIN mdl_enrol e ON e.id = ue.enrolid
JOIN mdl_course c ON c.id = e.courseid
JOIN mdl_competency_coursecomp cc ON cc.courseid = c.id
WHERE u.id IN (4, 10, 13, 21, 6, 11, 15)  -- Remplacez par les ID des utilisateurs
AND c.visible = 1
GROUP BY u.id, u.firstname, u.lastname
ORDER BY u.lastname;
```
---
| id | firstname | lastname   | skills_total |
|---:|-----------|------------|-------------:|
|  4 | Emilie    | CARION     |           78 |
| 10 | Kareen    | GALLIGANI  |           78 |
| 13 | Cédric    | PIETTE     |           76 |
| 21 | Dimitri   | SPASOJEVIC |           56 |
|  6 | Test      | Support    |           78 |
| 11 | Guillaume | VERGIER    |           76 |
| 15 | Mickaël   | VIVENS     |           76 |
---
- Activités totales et complétées par les Membres du Service Client (id IN (4, 10, 13, 21, 6, 11, 15)) 
```
SELECT 
    u.id,
    u.firstname,
    u.lastname,
    COUNT(DISTINCT cm.id) as total_activities,
    COUNT(DISTINCT cmc.coursemoduleid) as completed_activities
FROM mdl_user u
JOIN mdl_user_enrolments ue ON ue.userid = u.id
JOIN mdl_enrol e ON e.id = ue.enrolid
JOIN mdl_course c ON c.id = e.courseid
JOIN mdl_course_modules cm ON cm.course = c.id
JOIN mdl_modules m ON m.id = cm.module
LEFT JOIN mdl_course_modules_completion cmc ON cmc.coursemoduleid = cm.id AND cmc.userid = ue.userid AND cmc.completionstate = 1
WHERE u.id IN (4, 10, 13, 21, 6, 11, 15)  -- Remplacez par les ID des utilisateurs
AND cm.visible = 1
AND m.visible = 1
GROUP BY u.id, u.firstname, u.lastname
ORDER BY u.lastname;
```
---
| id | firstname | lastname   | total_activities | completed_activities |
|---:|-----------|------------|-----------------:|---------------------:|
|  4 | Emilie    | CARION     |              166 |                   67 |
| 10 | Kareen    | GALLIGANI  |              166 |                   12 |
| 13 | Cédric    | PIETTE     |              158 |                    0 |
| 21 | Dimitri   | SPASOJEVIC |               92 |                    0 |
|  6 | Test      | Support    |              166 |                   56 |
| 11 | Guillaume | VERGIER    |              158 |                   13 |
| 15 | Mickaël   | VIVENS     |              158 |                   36 |
---
- Résumé global Membres Service Client (id IN (4, 10, 13, 21, 6, 11, 15))
```
SELECT 
    -- Badges
    (SELECT COUNT(*) FROM mdl_badge_issued WHERE userid IN (4, 10, 13, 21, 6, 11, 15)) as total_badges_obtained,
    (SELECT SUM(badges_count) FROM (
        SELECT COUNT(DISTINCT b.id) as badges_count
        FROM mdl_user u
        JOIN mdl_user_enrolments ue ON ue.userid = u.id
        JOIN mdl_enrol e ON e.id = ue.enrolid
        JOIN mdl_course c ON c.id = e.courseid
        JOIN mdl_badge b ON b.courseid = c.id
        WHERE u.id IN (4, 10, 13, 21, 6, 11, 15) AND c.visible = 1
        GROUP BY u.id
    ) t) as total_badges_total,
    -- Compétences
    (SELECT COUNT(*) FROM mdl_competency_usercomp WHERE userid IN (4, 10, 13, 21, 6, 11, 15) AND grade IS NOT NULL) as total_skills_validated,
    (SELECT SUM(skills_count) FROM (
        SELECT COUNT(DISTINCT cc.competencyid) as skills_count
        FROM mdl_user u
        JOIN mdl_user_enrolments ue ON ue.userid = u.id
        JOIN mdl_enrol e ON e.id = ue.enrolid
        JOIN mdl_course c ON c.id = e.courseid
        JOIN mdl_competency_coursecomp cc ON cc.courseid = c.id
        WHERE u.id IN (4, 10, 13, 21, 6, 11, 15) AND c.visible = 1
        GROUP BY u.id
    ) t) as total_skills_total,
    -- Activités
    (SELECT SUM(total) FROM (
        SELECT COUNT(DISTINCT cm.id) as total
        FROM mdl_user u
        JOIN mdl_user_enrolments ue ON ue.userid = u.id
        JOIN mdl_enrol e ON e.id = ue.enrolid
        JOIN mdl_course c ON c.id = e.courseid
        JOIN mdl_course_modules cm ON cm.course = c.id
        JOIN mdl_modules m ON m.id = cm.module
        WHERE u.id IN (4, 10, 13, 21, 6, 11, 15) AND cm.visible = 1 AND m.visible = 1
        GROUP BY u.id
    ) t) as total_activities,
    (SELECT SUM(completed) FROM (
        SELECT COUNT(DISTINCT cmc.coursemoduleid) as completed
        FROM mdl_user u
        JOIN mdl_user_enrolments ue ON ue.userid = u.id
        JOIN mdl_enrol e ON e.id = ue.enrolid
        JOIN mdl_course c ON c.id = e.courseid
        JOIN mdl_course_modules cm ON cm.course = c.id
        JOIN mdl_modules m ON m.id = cm.module
        LEFT JOIN mdl_course_modules_completion cmc ON cmc.coursemoduleid = cm.id AND cmc.userid = ue.userid AND cmc.completionstate = 1
        WHERE u.id IN (4, 10, 13, 21, 6, 11, 15) AND cm.visible = 1 AND m.visible = 1
        GROUP BY u.id
    ) t) as completed_activities
FROM dual;
```
---
|                      TOTAUX                   |
|------------------------|----------------------|
|  total_badges_obtained |   total_badges_total |
|                     19 |                   95 |
| total_skills_validated |   total_skills_total |
|                    128 |                  518 |
|   completed_activities |     total_activities |
|                    184 |                 1064 |




# A FAIRE
## Purge des Caches
/admin/purgecaches.php
/report/lpmonitoring/userreport.php?userid=4

## Modifier la localisation du Moodle
https://formation.emiliecarion.com/admin/settings.php?section=locationsettings
> Forcer France /Paris



### Compte Claude
WanderingBeyondTheStars
apple.barrack143@passfwd.com