Class refactoring
From ClaroDevel
Refactoring de l'outil de Classes
Situation actuelle
Dans la version actuelle (1.7.2) de Claroline, bien qu'il soit possible d'inscrire une classe à un cours. aucune liaison n'existe en DB entre les classes et les cours. L'outil inscrit en fait un à un les utilisateurs de la classe au cours. Ce qui a pour conséquence qu'aucune trace n'est gardée de l'inscription de la classe au cours. L'outil dans sa version actuelle ne permet donc pas de 'désinscrire une classe', son seul usage efficace est de pouvoir inscrire en une fois une quantité importante d'utilisateurs à un cours.
Certaines modifications ont déjà porté sur la version de développement de Claroline (1.8) :
- les sous-classes sont maintenant prises en compte dans le décompte des utilisateurs d'un classe (et la liste des utilisateurs d'une classe en tient maintenant compte)
- l'inscription d'une classe inscrit aussi les sous-classes
Discussions relatives à ce sujet du forum :
- http://www.claroline.net/forum/viewtopic.php?t=4802
- http://www.claroline.net/forum/viewtopic.php?t=4786
- http://www.claroline.net/forum/viewtopic.php?t=11169
- http://www.claroline.net/forum/viewtopic.php?p=34824
- http://www.claroline.net/forum/viewtopic.php?t=11424
- http://www.claroline.net/forum/viewtopic.php?t=11731
- http://www.claroline.net/forum/viewtopic.php?t=11935
- http://www.claroline.net/forum/viewtopic.php?t=12237
- http://www.claroline.net/forum/viewtopic.php?t=13771
- http://www.claroline.net/forum/viewtopic.php?t=7280
- http://www.claroline.net/forum/viewtopic.php?t=13828
- http://www.claroline.net/forum/viewtopic.php?t=13851
- http://www.claroline.net/forum/viewtopic.php?t=13889
- http://www.claroline.net/forum/viewtopic.php?t=13503
Objectifs du refactoring
- Gardée une trace de l'inscription des classes au cours pour :
- Efficacement inscrire/désinscrire les classes aux cours
- Pouvoir gérer exclusivement les inscriptions des utilisateurs aux cours vià l'outil de classe. (plus besoin des inscriptions manuelles)
- Ne pas rendre l'usage des classes obligatoires, ce qui est déjà possible maintenant doit continuer à l'être!
- A l'inscription d'un utilisateur dans une classe, il est automatiquement inscrit dans les cours auquels est inscrit la classe
- Toutes les modifications (inscription, désinscription, etc..) doivent apparaitre en clair.
- Le droit de l'utilisateur pour l'inscription et la désinscription est prioritaire sur le reste
Cas de figure problématiques
- Si une personne est inscrite dans deux classes différentes toutes deux inscritent au même cours. En cas de désinscription de l'utilisateur à une des classes, que faut-il faire?
- On laisse l'utilisateur inscrit au cours
- Comment est il possible de savoir comment un utilisateur a été inscrit a un cours ( OU pour gérer la désinscription eventuelle par une classe)
- On rajoute un champ dans la table rel_cours_user qui indique (à rajouter dans la section "modification de la DB")
- "-1" si l'utilisateur c'est inscrit lui meme (pas de désinscription possible par un classe)
- Un nombre positif qui indique le nombre de classes qui l'a inscrit au cours (inscription +1 et désinscription -1)
- On rajoute un champ dans la table rel_cours_user qui indique (à rajouter dans la section "modification de la DB")
- Quelqu'un inscrit à une classe devrait automatiquement être inscrit à toutes les classes au dessus dans la hiérarchie. (là il faut voir si la solution actuellement codée sur la 1.8 suffira pour considérer qu'un utilisateur est inscrit à la classe) comment cela doit-il être représenté en DB ?
- Un utilisateur inscrit à un cours par une classe, doit il etre désinscrit de la classe lorsqu'il se désinscrit du cours ?
- Non, l'utilisateur reste inscrit au cours
Scripts à modifier
Librairies
Dans le dossier claroline/inc/lib
- class.lib.php : librairie de gestion des classes
- user.lib.php : librairie de gestion des utilisateurs
- claro_main.lib.php : librairie principale de claroline
function claro_sql_get_main_tbl() OK
{
...
// ajouter
'rel_class_course' => $mainDbName . '`.`' . $mainTblPrefix . 'rel_class_course',
...
}
Pour utiliser les tables dans les scripts :
$tbl_mdb_names = claro_sql_get_main_tbl(); $tbl_user = $tbl_mdb_names['user']; $tbl_class = $tbl_mdb_names['class']; $tbl_rel_class_user = $tbl_mdb_names['rel_class_user']; $tbl_rel_class_course = $tbl_mdb_names['rel_class_course'];
Administration
Dans le dossier claroline/admin
- admin_class_course_registered.php : la page de confirmation de l'inscription d'une classe à un cours. En fait, on inscrit une classe en passant par les mêmes scripts que l'inscription d'un user, la commande vient par /auth/courses.php, et l'opération est effectué dans admin_class_course_registered.php
- admin_class.php : Page de gestion des classes : page qui affiche l'arborescence des classes existantes.
- admin_class_register.php : Le script affiche la liste de tous les users de la plateforme et un lien pour inscrire/désinscri re un user.
- admin_class_user.php : Afficher les utilisateurs d'une classe appartenant à une classe donnée.
Outil utilisateur
Dans le dossier claroline/user
- class_add.php : Inscrire une classe à un cours
- user.php : Page principale de l'outil (liste des utilisateurs, inscription d'une classe au cours, ...)
- userInfo.php : Affiche les infos concernants l'utilisateur incrit au cours
Inscription à un cours
Dans le dossier claroline/auth
- courses.php : Affiche la page d'inscription/désinscription des cours d'un utilisateur
Fichiers de langues
Dans le dossier claroline/lang/
- english/complete.lang.php
- french/complete.lang.php
Installation
Dans le dossier claroline/install/
- createMainBase.inc.php : Création des tables de la base de données principales.
Modification apportée au code
Modification de install/createMainBase.inc.php
- Creation de la table rel_cours_class
- Ajout du champs registerby dans la table cours
Modification de inc/lib/claro_main_lib.php
- Ajout de rel_cours_class dans la fonction claro_sql_get_main_tbl
(Nouveau fichier) admin/admin_class_cours.php
Modification fichier admin/admin_class.php
- Ajout de la librairie user.lib.php
- Remplacement complet du code de "case 'del'"
- Remplacement complet du code de "case 'exMove'"
- Ajout de la colonne pour les cours dans l'entete du tableau
Modification fichier inc/lib/class.lib.php
- (Nouvelle fonction) delete_class
- (Nouvelle fonction) get_class_user_number
- (Nouvelle fonction) get_cours_user_number
- (Nouvelle fonction) get_sub_class
- (Nouvelle fonction) unregister_class_to_course
- (Nouvelle fonction) move_class
- Important changement dans le code de la fonction register_class_to_course
- Modification de la fonction display_tree_class_in_admin pour afficher la colonne des cours
- Modification de la fonction display_tree_class_in_user pour empecher d'inscrire deux fois une classe, un paramétre en plus
Modification du fichier inc/lib/user.lib.php
- (Nouvelle fonction) user_remove_to_class
- Modification de la fonction user_add_to_course pour ajouter le champs registerby, modification importante du code
- Modification de l'appel dans admin/admin/registeruser.php // register_by_class = false
- Modification de l'appel dans auth/courses.php // register_by_class = false
- Modification de l'appel dans inc/lib/class.lib.php // register_by_class = true
- Modification de l'appel dans user/AddCVSusers.php // register_by_class = false
- Modification de l'appel dans user/user.php // register_by_class = false
- Modification de la fonction user_remove_from_course pour ajouter le champs unregister_by_class, modification importante du code
- Modification de l'appel dans admin/admincoursesuse.php // unregister_by_class = false
- Modification de l'appel dans admin/adminusercourses.php // unregister_by_class = false
- Modification de l'appel dans admin/adminuserunregistered.php // unregister_by_class = false
- Modification de l'appel dans auth/courses.php // unregister_by_class = false
- Modification de l'appel dans user.php // unregister_by_class = false
- Modification de la fonction user_add_to_class pour l'inscrire au cours de la classe et au classe supérieur
Modification de admin/admin_class_user.php
- Suppression du lien "inscrire la classe à un cours" devenu obsoléte
- Remplacement complet du code de "case 'unsuscribe'"
- Ajout de la librairie user.lib.php
Modificationd de admin_class_register.php
- Remplacement complet du code de "case 'suscribe'"
- Remplacement complet du code de "case 'unsuscribe'"
- Ajout de la libraiire user.lib.php
Modification de admin.lib.inc.php
- Modification de la fonction deleteCourse pour effacer les infos de la table rel_cours_class
Modification de user/class_add.php
- remplacement du code de la case suscribe
- Ajout du code de la classe dans l'appel de la fonction display_tree_class_in_user
Séquence de test pour valider le dev
Suppression d'un Utilisateur
- Suppression de tous les liens dans "rel_class_user"
- dgarros : OK
- Suppression de tous les liens dans "cours_user"
- dgarros : OK
Suppression d'une Classe
- Suppression de tous les liens dans "rel_class_user"
- dgarros : OK
- Suppression de tous les liens dans "rel_course_class"
- dgarros : OK
- Désinscription de tous les étudiants de la classe aux cours associés
- dgarros : OK
- Suppression dans "Class"
- dgarros : OK
Suppression d'un cours
- Suppression de tous les liens dans "rel_cours_class"
- dgarros : OK
- Suppression de tous les liens dans "cours_user"
- dgarros : OK
- Suppression dans "cours"
- dgarros : OK
Ajout d'un utilisateur dans une classe
- Inscription à tous les cours associés
- dgarros : OK
- Inscription à toutes les classes de niveau supérieur
- dgarros : OK
Ajout d'un cours dans une classe
- Inscription des utilisateurs de la classe au cours
- dgarros : OK
Enlever un utilisateur d'une classe
- Désinscription de toutes les sous classes
- dgarros : OK
- Désinscription de tous les cours de la classe
- dgarros : OK
Enlever un cours d'une classe
- Désinscription de tous les éléves de la classe
- dgarros : OK
- Suppression de la relation dans "rel_course_class"
- dgarros : OK
Déplacer une classe
- Inscription de tous les éléves de la classe à toutes les nouvelles classes de rang sup
- dgarros :OK
Bugs constatés, en lien avec le developpement des classes
- A partir de la page d'administration, admin_class_cours.php. Le chemin affiché en haut de page n'est pas exact lorsqu'on inscrit la classe à un cours (probléme lié à la réutilisation de course.php)
Améliorations futures possibles
- Proposer à l'utilisateur de s'approprier le cours lorsqu'il a été inscrit par une classe
Modification apporté à la base de donnée
Ajout d'une nouvelle table (en anglais pour mieux l'ajouter à la [documentation de la DB (http://www.claroline.net/wiki/index.php/Claroline_Database_Structure)] lorsque ce sera fait):
cl_rel_course_class
Comments
Link between course and classes, any entry in this table represent the subscription of a class to a course.
Table
|
Field |
Type |
Null |
Default |
Comments |
| class_id |
int(11) |
No |
0 |
class id number |
| course_id |
int(11) |
No |
0 |
Course id number |
Index
Primary key: none
cl_cours_user
Table
News Field "registerby"
