Class refactoring

From ClaroDevel

Table of contents

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) :

  1. 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)
  2. l'inscription d'une classe inscrit aussi les sous-classes

Discussions relatives à ce sujet du forum :

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)
  • 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 

class id number

course_id 

int(11)

No 

Course id number

Index

Primary key: none

cl_cours_user

Table

News Field "registerby"