Collège de la petite Camargue

Transformation des listes de comptes d’Adele2K au format CSV

Sommaire

Format d’exportation natifFormat CSV attenduMéthode de traitement en PHPRécupération des champsMise en forme des champs prénom et nomApplications
Le logiciel Adele2K — utilisé dans notre établissement pour la gestion des comptes d’utilisateurs du réseau pédagogique sous Microsoft® Windows® xp — ne sait exporter des listes complètes des comptes en question que sous un format très peu exploitable en l’espèce pour d’autres applications nécessitant une identification. Le script suivant — en PHP — permet d’obtenir des listes au format CSV, pour le coup très simples à manipuler.

^Format d’exportation natif

L’exportation des listes de comptes des professeurs fournit un fichier texte dont les données sont extrêmement malcommodes à manipuler 1. En effet, la présentation ayant primé sur la portabilité, le fichier se sert de l’espace, du retour à la ligne, du tiret de soulignement (underscore) et du point de manière non sémantique. Ainsi, les données d’un même compte sont réparties sur plusieurs lignes et les champs sont séparés par un nombre variable d’espaces et de points afin qu’il soient alignés verticalement. Les tirets de soulignement séparent les comptes.

Voici un exemple d’un tel fichier 2 :

______________________________________________________________

Publication de la liste des professeurs
______________________________________________________________

NOM.......... hugo                      LOG-IN....... hugo2
PRENOM....... victor                    MOT DE PASSE. 4gted

DOSSIER...... <profs\hugo.victor>
______________________________________________________________
NOM.......... barthes                   LOG-IN....... barthes
PRENOM....... roland                    MOT DE PASSE. re4hk

DOSSIER...... <profs\barthes.roland>
______________________________________________________________

^Format CSV attendu

Afin d’être aisément traitables, des données exportées devraient répondre au cahier des charges suivant :
─ une seule ligne par compte ;
─ séparation systématique des champs par un signe unique ;
─ ordre des champs immuable.

Au final, à partir des données ci-dessus, il faudrait obtenir le format suivant (l’ordre des champs important peu et le chemin vers le dossier de l’utilisateur n’étant pas intéressant puisque peu d’applications en ont besoin) :

prenom;nom;login;mot_de_passe

soient :


victor;hugo;hugo2;4gted;
roland;barthes;barthes;re4hk;

^Méthode de traitement en PHP

^Récupération des champs

En supposant un formulaire (de type textarea) passant par POST les données copicollées depuis le fichier d’exportation d’Adele2K dans une variable $_POST['liste_comptes'], le script suivant permet d’isoler les champs utiles 3 :


$liste_comptes = $_POST['liste_comptes'];

/* récupérer le login et l'intégrer à un tableau $liste_logins */
preg_match_all('/LOG-IN\.*?\s(.*)/', $liste_comptes, $liste_logins);

/* récupérer le mot de passe et l'intégrer à un tableau $liste_pass */
preg_match_all('/MOT\sDE\sPASSE\.*?\s(.*)/', $liste_comptes, $liste_pass);

/* récupérer le nom et l'intégrer à un tableau $liste_patronymes */
preg_match_all('/NOM\.*?\s(.*?)LOG-IN/', $liste_comptes, $liste_patronymes);

/* récupérer le prénom et l'intégrer à un tableau $liste_patronymes */
preg_match_all('/PRENOM\.*?\s(.*?)MOT\sDE\sPASSE/', $liste_comptes, $liste_prenoms);

/* parcours des tableaux et création de lignes contenant les données des champs */
for($i=0; $i<count($liste_logins[1]); $i++){

/* en cas de champ vide, ne pas afficher le compte */
        if(
        $liste_logins[1][$i] != "" &&
        $liste_pass[1][$i] != "" &&
        $liste_patronymes[1][$i] != "" &&
        $liste_prenoms[1][$i] != ""
        ){

/* afficher ligne par ligne en supprimant les espaces inutiles éventuellement
présentes. Les lignes sont séparées par un retour à la ligne, qui ne s'affichera
pas tel quel en HTML */
                echo(
                        trim($liste_logins[1][$i]).";"
                        .trim($liste_prenoms[1][$i]).";"
                        .trim($liste_patronymes[1][$i]).";"
                        .trim($liste_pass[1][$i]).";\n"
                );
        }
}

^Mise en forme des champs prénom et nom

Si l’on souhaite utiliser les champs prénom et nom, il est préférable de les formater quelque peu : en effet, ils sont pour l’instant en bas-de-casse. On peut améliorer quelque peu la situation (mais vu que l’exportation d’Adele2K ne prend pas en compte les éventuels diacritiques, on ne fera pas de miracles) en mettant au moins les majuscules nécessaires. Dans ce cas, on peut utiliser la fonction suivante :

function mettre_en_forme($donnee) {
/* on met tout en bas-de-casse */
        $donnee = strtolower($donnee);

/* on met en capitale la première lettre de chaque mot pour obtenir des majuscules et on traite :
d'éventuels noms dotés d'une apostrophe interne */
        $donnee = join("'", array_map('ucwords', explode("'", $donnee)));

/* les noms composés */
        $donnee = join("-", array_map('ucwords', explode("-", $donnee)));

/* le cas de la particule. Il n'est pas possible de distinguer entre la particule
<de> et <De> du néerlandais, du portugais ou de certains noms français */
        $donnee = preg_replace('/De /', 'de ', $donnee);

        return $donnee;
}

Pour mettre en œuvre cela, il suffit d’appeler la fonction au sein de la boucle créant les lignes CSV :

echo(
        trim($liste_logins[1][$i]).";"
        .mettre_en_forme(trim($liste_prenoms[1][$i])).";"
        .mettre_en_forme(trim($liste_patronymes[1][$i])).";"
        .trim($liste_pass[1][$i]).";\n"
);

Ainsi, avec les données suivantes :

______________________________________________________________

Publication de la liste des professeurs
______________________________________________________________

NOM.......... de saint-firmin           LOG-IN....... desaintfirmin
PRENOM....... jacques                   MOT DE PASSE. as12r

DOSSIER...... <profs\desaintfirmin.jacques>
______________________________________________________________
NOM.......... broutinoux                LOG-IN....... broutinoux
PRENOM....... marie-reine               MOT DE PASSE. aqf5u

DOSSIER...... <profs\broutinoux.marie-reine>
______________________________________________________________
NOM.......... chrysostome               LOG-IN....... chrysostome
PRENOM....... marcel                    MOT DE PASSE. er5io

DOSSIER...... <profs\chrysostome.marcel>
______________________________________________________________
NOM.......... renaulet-dandelion        LOG-IN....... gertrude
PRENOM....... veronique                 MOT DE PASSE. hgr5j

DOSSIER...... <profs\renaulet-dandelion.gertrude>
______________________________________________________________
NOM.......... o'brian                   LOG-IN....... obrian
PRENOM....... claire                    MOT DE PASSE. hg8rt

DOSSIER...... <profs\obrian.claire>
______________________________________________________________

on obtient :

desaintfirmin;Jacques;de Saint-Firmin;as12r;
broutinoux;Marie-Reine;Broutinoux;aqf5u;
chrysostome;Marcel;Chrysostome;er5io;
gertrude;Veronique;Renaulet-Dandelion;hgr5j;
obrian;Claire;O'Brian;hg8rt;

et sans mise en forme :

desaintfirmin;jacques;de saint-firmin;as12r;
broutinoux;marie-reine;broutinoux;aqf5u;
chrysostome;marcel;chrysostome;er5io;
gertrude;veronique;renaulet-dandelion;hgr5j;
obrian;claire;o'brian;hg8rt;

^Applications

Au collège, la synchronisation entre les comptes générés par Adele2K et le logiciel GLPI est assurée par un script de ce type, qui récupère les données des listes d’Adele2K et crée les comptes voulus dans la base de données MySQL de GLPI.

Notes

1.   On peut cependant exporter des listes d’élèves en CSV ainsi que des listes spécifiques mais incomplètes de professeurs dans ce format.

2.   Exemple fictif, bien entendu. Tous les prénoms, noms, logins et mots de passe de cet article sont inventés.

3.   Grâce à des expressions rationnelles.



rss | 2.1.2 [16017] | d’après eva-web 2.3 | Squelette | xhtml 1.0 valide ? (c’est-à-dire ?)