Documents:Gepi

Un article de Wiki ESCO-Portail.

Sommaire

Intégration de GEPI à l'ENT

La version courante de GEPI utilisée sur l'ENT est l'archive gepi-2010-09-01-last.tgz

Les dernières évolutions sont :

  • Amélioration du module d'import ENT ==> Lors de l'étape d'affectation des professeurs à leurs enseignements, le module parvient maintenant à affecter beaucoup plus d'enseignants automatiquement (on tiens compte de leur classe).

Problèmes généraux rencontrés lors de l'intégration

Problèmes généraux (fonctionnalités non adaptés à l'ENT)

Le mécanisme d'authentification en mode multisites de GEPI ne fonctionnait pas parfaitement dans le cadre de notre ENT.

  • Le RNE n'était pas récupéré automatiquement lors du login de l'utilisateur, il fallait le passer en paramètre dans l'url (il fallait en fait le paramétrer)
  • Une fois le multisites activé, l'accès a l'url "/gepi/" redirigeait sur la page "login.php", qui affichait une erreur de connexion et proposait d'installer à nouveau la base.

De plus, pour intégrer GEPI dans le portail, en tant que canal, il faut une url d'accès. Cette URL d'accès dans le cas de GEPI nous posait problème.

Tous ces soucis sont détaillés par la suite :

Problème du RNE à passer en paramètre

Le fait de devoir passer le RNE en paramètre à la page "login_sso.php" ne nous convenait pas, puisque cela nous aurait forcé à créer un canal pour chaque GEPI de chaque établissement (puisque chaque GEPI aurait donc eu une url différente).

La récupération automatique du RNE sous GEPI était déjà existante, nous avons juste eu des difficultés à la paramétrer. Ce paramétrage s'effectue dans le fichier secure/config_ldap.inc.php. Attention aux valeurs des champs suivants :

  • $ldap_champ_login = "uid";
  • $ldap_champ_civilite = "personaltitle";
  • $ldap_champ_rne = "escouai";
  • $ldap_code_civilite_madame = "Mme";
  • $ldap_code_civilite_monsieur = "M";
  • $ldap_code_civilite_mademoiselle = "Mlle";

En effet, si l'une de ces valeurs n'est pas exacte, GEPI ne parviendra pas à récupérer dans l'annaire LDAP le profil de l'utilisateur et des erreurs apparaîtront.

De plus, attention, les noms des attributs LDAP doivent absolument être en minuscule (CF. Erreurs connues).

Problème de l'url du canal pour Uportal

Fonctionnant en mode multisites et sso, nous utilisions la page "login_sso.php" comme url du canal. Elle nous permettait de passer le RNE en paramètre, mais cela créait un effet de bord très gênant. En effet, à chaque fois que le canal se rechargeait (actualisation de la page, agrandissement ou reduction du canal), cette même url était rappelée, ce qui provoquait une perte de session. (GEPI n'autorise pas d'arriver sur la page login_sso.php avec une session déjà ouverte). L'effet à l'écran était l'affichage d'une erreur de timeout de session.

La mise en place du canal est expliquée par la suite : Mise en place du canal Uportal

Correction des bugs rencontrés

Problème de l'accès à l'url /gepi/ en multisites et cas

Lors de l'accès à "/gepi/", en mode multisites, nous étions redirigés vers la page login.php qui nous affichait une erreur de connexion et proposait de réinstaller la base de GEPI. (même si l'accès fonctionnait avec la page "login_sso.php")

Le bug a été corrigé en changeant dans le fichier "secure/connect.inc.php" le test sur le $_SERVER['SCRIPT_NAME'] :

/gepi/login.php

au lieu de

/login.php

Problème du timeout de session

Une fois la session tombée en timeout, il n'était plus possible de se reconnecter à GEPI.

Le problème a été résolu dans le fichier "connect.inc.php", en modifiant la ligne :

if (isset($RNE) AND ($RNE != 'RNE') AND $multisite == "y" AND $_SERVER["SCRIPT_NAME"] != "/gepi/login.php") {

la condition AND ($RNE != 'RNE') a été ajoutée, car après un timeout de session il semble que le RNE du cookie ait pour valeur "RNE", ce qui provoquait une erreur de connexion à la base de donnée. A présent, le RNE, comme il n'est pas trouvé, est récupéré sur l'utilisateur.

Correction du bug précédent (accès à /gepi/)

La correction du bug a été effectuée dans le fichier "secure/connect.inc.php" comme indiqué précédemment.

Correction d'un bug empêchant certaines erreurs de s'afficher

Un bug a été repéré dans le fonction "timeout" du fichier "Session.class.php". En effet, en l'état, si l'utilisateur n'est pas trouvé dans la base, la fonction renvoie "-1". Or, ce "-1" n'est pas un cas prévu par le code appelant.

Ce bug ce traduisait par exemple par l'affichage de l'erreur "Session timeout" à la place de l'erreur précise. (par exemple l'erreur 6, lorsque l'authentification a réussie mais que l'utilisateur n'est pas connu dans la base).

La modification est la suivante :

Dans le fichier "Session.class.php", à la ligne 75, il faut rajouter "== 1" au test sur le résultat de la fonction timeout().

Modifications intrusives dans l'application

Au maximum, les développements que nous avons réalisés pour GEPI sont non intrusifs, mais nos modules ont évidemment besoin d'un fichier de configuration particulier, que nous avons placé dans le dossier secure, et que nous avons nommé sur le même modèle que les fichiers de configuration GEPI : config_annuaire_federateur.inc.php

Déclaration sous GEPI de la configuration annuaire_federateur

Le module d'import des données de l'annuaire ENT développé pour GEPI a besoin d'un fichier de configuration particulier, donnant les informations de connexion à l'annuaire LDAP ENT, et précisant les attributs à utiliser.

Ce fichier a du être ajouté aux fichiers chargés par GEPI, afin que les informations soient disponibles à tout moment :

Une ligne a été ajoutée pour notre fichier "config_annuaire_federateur.inc.php"

// Pour les scripts situés à la racine de GEPI
if (isset($niveau_arbo) and ($niveau_arbo == "0")) {
  if (file_exists("./secure/config_lcs.inc.php"))
    include "./secure/config_lcs.inc.php";
  if (file_exists("./secure/config_annuaire_federateur.inc.php"))
    include "./secure/config_annuaire_federateur.inc.php";
// Pour les scripts situés dans un sous-répertoire à l'intérieur d'une sous-répertoire de GEPI
} else if (isset($niveau_arbo) and ($niveau_arbo == "2")) {
  if (file_exists("../../secure/config_lcs.inc.php"))
    include "../../secure/config_lcs.inc.php";
  if (file_exists("../../secure/config_annuaire_federateur.inc.php"))
    include "../../secure/config_annuaire_federateur.inc.php";
// Pour les scripts situés dans un sous-sous-répertoire à l'intérieur d'une sous-répertoire de GEPI
} else if (isset($niveau_arbo) and ($niveau_arbo == "3")) {
  if (file_exists("../../../secure/config_lcs.inc.php"))
    include "../../../secure/config_lcs.inc.php";
  if (file_exists("../../../secure/config_annuaire_federateur.inc.php"))
    include "../../../secure/config_annuaire_federateur.inc.php";
} else {
  if (file_exists("../secure/config_lcs.inc.php"))
    include "../secure/config_lcs.inc.php";
  if (file_exists("../secure/config_annuaire_federateur.inc.php"))
    include "../secure/config_annuaire_federateur.inc.php";
}

Ajout d'un lien pour le module d'import

Nous avons ajouté, dans la partie Gestion Générale / Outils d'Initialisation un lien nommé Initialisation à partir de l'Annuaire ENT.

La page modifiée est gestion/index.php

Modification du script de mise a jour GEPI

Le script de mise à jour de GEPI fait une remise à zéro des droits (la table droits) sur les pages.

Or, les droits ajoutés pour notre module d'import Annuaire ENT doivent être conservés.

Pour cela, le fichier utilitaires/updates/access_rights.inc.php a été modifié. (ajout des mêmes lignes de droits que dans sql/data_gepi.sql et nouvelle_base_gepi.sql sur le serveur de BD)

Modifications non intrusives de l'application

Plugin ChangeStatut

Dans le cadre de l'intégration de GEPI à l'ENT, nous avons besoin que certains professeurs (nos administrateurs locaux) puissent accéder à l'administration de GEPI, ce qui n'était pas possible nativement. Nous avons donc créé le plugin Change Statut qui permet à un professeur de passer temporairement administrateur. Pour savoir si un professeur est autorisé à passer administrateur, le plugin vérifie celui-ci est bien dans les groupes des administrateurs locaux de GEPI pour leur établissement.

Pour prendre ses droits d'administration, le professeur doit juste accéder au plugin (disponible sur son écran d'accueil), et cliquer sur le bouton "devenir temporairement administrateur". Il aura alors accès à l'interface administrateur et pourra effectuer ses opérations.

Une fois ses opérations terminées, il pourra :

  • soit revenir au plugin, et cliquer sur le bouton lui permettant de récupérer son statut initial,
  • soit se déconnecter de l'application. Au prochain login, il sera de toute façon revenu à son statut d'origine.

Pré-requis pour que le plugin fonctionne

Pour que le plugin fonctionne pour un établissement :

  • Il faut que le plugin soit déclaré dans la table plugins (et que ouvert ait la valeur y)
  • Il faut que la table plugins_autorisations soit correctement remplie
  • Il faut que les entrées nécessaires dans la table droits soient présentes

Certaines de ces opérations sont réalisées par la procédure d'installation et d'activation du plugin.

Module d'import ENT

gestion/index.php :

Ajout du lien vers le module d'importation via l'annuaire ENT.


init_annuaire/index.php : Affichage du SIREN de l'établissement pour vérifier que la connexion LDAP est bien disponible.

init_annuaire/etape_1_1.php :


init_annuaire/etape_1_1_action.php :


init_annuaire/etape_2_1.php :


init_annuaire/etape_2_1_action.php :



Mise en place du canal sous Uportal

Maintenant que le RNE est automatiquement récupéré par GEPI, l'url du canal à utiliser sous uportal est directement http://.../gepi/), et un seul canal suffit pour gérer les N établissements.

Déploiement de GEPI / Procédure d'install

Première installation

Créer un utilisateur spécial pour GEPI dans la BD, et lui donner les droits sur les futures bases.

  • Création de la base "main"
CREATE DATABASE `gepi` DEFAULT CHARACTER SET latin1;
  • Création de la base du premier établissement
CREATE DATABASE `gepi_0371418R` DEFAULT CHARACTER SET latin1;
  • Création des tables dans la base "main"
use gepi;
source nouvelle_base_gepi.sql
  • Création des tables dans la base du premier établissement
use gepi_<RNE> (avec <RNE> le RNE de l'établissement)
source nouvelle_base_gepi.sql

Paramétrage de GEPI

  • Paramétrage de config_cas.inc.php
  • Paramétrage de config_ldap.inc.php
  • Paramétrage de connect.inc.php
  • Paramétrage de multisite.ini

Ajout d'un nouvel établissement

Connexion en root à MySQL,

  • Ajout des droits pour localhost et pour la machine web :
GRANT ALL PRIVILEGES ON `gepi_0371418r`.* TO 'gepi'@'localhost';
GRANT ALL PRIVILEGES ON `gepi_0371418r`.* TO 'gepi'@'webhost';
  • Création de la base du nouvel établissement :
CREATE DATABASE `gepi_0371418R` DEFAULT CHARACTER SET latin1;
  • Placement dans la bonne BD :
use gepi_<RNE>;
// Avec <RNE> le RNE de l'établissement
  • Execution du script de peuplement des tables :
source /home/scripts_gepi/nouvelle_base_gepi.sql

Sur la machine web :

Editer le fichier multisite.ini de gepi, et ajouter l'établissement :

; Vaucansson
[0410017W]
nomhote         = myhost
mysqluser       = gepi
mysqlmdp        = ******
nombase         = gepi_0371418r
pathname        = /gepi


Dans GESTION GENERALE / MISE A JOUR DE LA BASE / Forcer la mise à jour (pour être certain d'avoir tous les nouveaux champs).

Ajout des premiers administrateurs pour un établissement

Appeler l'url : http://myhost/gepi/login_sso.php?rne=0371418R

Se connecter en Admin du portail

Dans GEPI, accéder à Gestion Générale, puis Initialisation à partir de l'annuaire ENT.

Cliquer Accéder à la première étape

Remarques diverses

L'accès aux pages dans GEPI est sécurisé via la base de données. Lorsqu'une nouvelle page est développée, il faut la déclarer dans la table droits.

Ajout du droit d'accès aux pages ajoutées dans GEPI

La table "droits" liste les différentes de l'applications et leur attribut des droits d'accès. Il faut donc ajouter chaque page que l'on a créé et lui définir ses droits d'accès.

insert into droits VALUES ('/init_annuaire/etape1.php','V','F','F','F','F','F','F','F','Initialisation annee scolaire via annuaire ENT', ' ');


insert into utilisateurs values ('F08002xa','POTIER','THIERRY','M',,Thierry.Potier@ac-orleans-tours.fr','no','professeur','actif','n','2006-01-01 00:00:00',,'0000-00-00 00:00:00',38,0,'F08002XA_YI71M5XWDri0390TA5INhwhe9XpJcv719sK9mM0CwZbB',,'sso')

Activation du plugin change_statut dans un établissement : INSERT INTO `plugins` VALUES (6,'change_statut','change_statut','Changement de statut d\'un utilisateur (permet de passer administrateur).','y');


Creation d'une base pour chaque etablissement : CREATE DATABASE `gepi_0371418R` DEFAULT CHARACTER SET latin1

Evolutions à faire

Création d'un dump "modele" pour la base de données GEPI

(fichier = "nouvelle_base_gepi.sql)

Les choses suivantes sont incluses dans le script de création RECIA des bases GEPI :

  • Autoriser les professeurs à saisir eux-mêmes leur emploi du temps.

==> Paramètre edt_remplir_prof de la table setting à y

  • Compte administrateur universel avec méthode d'authentification CAS,

==> Champ auth_mode positionné à sso

  • Plugin Change_Statut actif

==> Insertion de la ligne "6 | change_statut | change_statut | Changement de statut d'un utilisateur (permet de passer administrateur). | y" dans la table plugins ==> Table plugins_menu bien renseignée

  • Droits sur les pages du "Module ENT" et du plugin "Change_Statut"

==> Insertions dans la table droits (CF. script)

  • Mode Multisites activé

==> 1 paramètre dans la table setting :

multisite à y
  • Authentification CAS seule activée (Authentification Locale et LDAP désactivées)

==> 3 paramètres dans la table setting :

auth_locale à no
auth_ldap à no
auth_sso à cas
  • Champs "nom du lycée", "adresse du lycee"... etc. vides, afin que l'administrateur les remplisse
gepiSchoolName
gepiSchoolAdress1
gepiSchoolAdress2
gepiSchoolZipCode
gepiSchoolCity
gepiSchoolAcademie
gepiAdminAdress
gepiSchoolEmail
gepiSchoolFax
gepiSchoolPays
gepiSchoolRne
gepiSchoolTel
gepiAdminNom
gepiAdminPrenom
gepiAdminFonction
num_enregistrement_cnil

Activer la création automatique des comptes inexistants

Une variable nommée "may_import_user_profile" est présente dans la table setting. Si celle-ci est mise à "yes", le compte non présent dans la base sera automatiquement créé.

Erreurs connues et solutions

Erreur / ProblèmeSolution

Alors que la variable "multisite" est bien à "y" dans le fichier "secure/connect.inc.php", GEPI n'écrit toujours que dans la base principale. Les bases déclarées dans le fichier "secure/multisite.ini" ne se remplissent pas et ne sont pas prises en compte.

C'est que le code traitant le fichier "secure/multisite.ini" n'est pas dé-commenté dans le fichier "secure/connect.inc.php"

Alors que le mot de passe de la base de donnée est correct dans "secure/multisite.ini", il y a une erreur et la connexion à la base ne s'établit pas.

Apparemment GEPI ne supporte pas de caractère spécial comme le dollar dans ce fichier. Si vous avez un mot de passe avec un dollar, c'est surement l'origine du problème.

En se connectant en "Admin" (compte administrateur du portail) sous GEPI, on obtient une erreur.

C'est normal car admin ne possède pas de RNE, et que l'application n'a donc pas pu le récupérer. Si vous voulez utiliser le compte Admin du portail pour être administrateur sous GEPI, il faut accéder à GEPI de l'ancienne manière : c'est à dire qu'il faut appeler la page login_sso.php en passant en paramètre le RNE souhaité.

Certains champs du profil de l'utilisateur sont vides ou inexacts, ou des erreurs apparaissent lors du login, ou la session tombe directement en Timeout.

Une cause possible est un mauvais paramétrage dans le fichier secure/config_ldap.inc.php. En effet, il faut bien veillez à ce que les attributs soient impérativement en minuscules.

pages développeurs
pages "communauté ESCO"