Protocole d'échange XML¶
Ce protocole permet l'échange de données entre le client (via le plugin) et le serveur.
Procole V1.0¶
Authentification¶
Se fait via un HTTP Auth classique
header('WWW-Authenticate: Basic realm="LeTerrier Authentication"'); header('HTTP/1.0 401 Unauthorized');
Envoi de log du plugin -> serveur¶
- partie login: la session globale
Url: /login.php?plug_domain=ledomaine&plug_application_protocol_version=1.0
L'appli se connecte, retour HTTP AUTH 401, saisie login/pass, envoie au serveur, vérifie et retourne une 2XX de validation avec la session globale de l'application.
retour erreur 426 Upgrade Required (Version de protocole invalide)
<session> edgblg6e4n8gq9c09qmuj451l0 </session>
Juste après l'application pousse au serveur * la version de l'application * l'OS * la version du protocole d'échange
Variables poussées par POST
URL: /version.php
plug_application_version= plug_application_os= plug_application_code= plug_application_ip_local= plug_application_ip_public= plug_application_hostname=
Retour HTTP 200 si ok, HTTP 500 si le code de l'application et la version n'existe pas.
La date est générée sur le serveur.
Valeur par défaut pour les tests (exercice name / skill / evaluation / level )
- 1ere partie: exercice: envoyé lorsque l'exercice est terminé
Via une requête POST
Url: /exercice.php
plug_exercice_session= (timestamp calculé par le plugin) plug_exercice_name= (multiplication) plug_exercice_level= plug_exercice_skill= plug_exercice_score= plug_exercice_nb_total_questions= plug_exercice_nb_printed_questions= plug_exercice_evalutation=
- et ensuite les questions
Via une requête POST
Url: /question.php
plug_exercice_session= (timestamp calculé par le plugin) plug_question_date= (timestamp 'now()') plug_question_question= plug_question_answer= plug_question_expected= plug_question_answer_time= plug_question_answer_intermediate= plug_question_proposed= plug_exercice_evalutation= (evaluation de la question, même si le nom n'est pas hyper parlant)
Récupération de log appli <- serveur¶
1. Mise en place du filtre
Liste des utilisateurs
Url: /filtre_utils.php
Retourne un flux XML
ex:
<xml version="1.0" encoding="utf-8"> <users> <id_0>Marc Lecointre (mlecointre)</id_0> <id_1>Matthieu Pascal (mpascal)</id_1> <id_2>Frederic Graft (fgraft)</id_2> <id_3>Isabelle Pink (ipink)</id_3> <id_4>Marie Red (mred)</id_4> </users> </xml>
id est la clef de l'utilisateur (récupérer l'entier)
Liste des groupes
Url: /filtre_groupes.php
<xml version="1.0" encoding="utf-8"> <groups> <cm1-a>CM1 (A) </cm1-a> </groups> </xml>
La balise représente la clef du groupe (slug)
Si il est administrateur du domaine on récupère l'ensemble des groupes du domaines
Si super admin on récupère tous les groupes avec en plus le nom de domaine (order by domaine et titre du groupe)
<xml version="1.0" encoding="utf-8"> <groups> <cm1-a>Ecole A CM1 (A)</cm1-a> <cm1-b>Ecole A CM1 (B)</cm1-b> <cm1-a-1>Ecole B CM1 (A)</cm1-a-1> <cm1-b-1>Ecole B CM1 (B)</cm1-b-1> </groups> </xml>
Liste des domaines
Url: /filtre_domaines.php
<xml version="1.0" encoding="utf-8"> <domaines> <domaine-a>domaine A</domaine-a> </domaines> </xml>
La balise représente la clef du groupe (slug)
Si super admin on récupère tous les domaines
Liste des applications
Url: /filtre_applications.php
<xml version="1.0" encoding="utf-8"> <applications> <id_3>test 1.0</id_3> <id_4>ryxeo 1.1</id_4> </applications> </xml>
Le contenu est le code de l'application et le numéro de version
id est la clef de l'application
Liste des skills
Url: /filtre_skills.php
<xml version="1.0" encoding="utf-8"> <skills> <id_163>ecrire entier inferieur 20 </id_163> <id_164>ecrire entier 20 a 70 </id_164> <id_165>ecrire entier 70 a 100 </id_165> <id_166>lire entier inferieur 20 </id_166> </skills> </xml>
Paramètre supplémentaire:
plug_application_id=Clef de l'application voir "Liste des applications" au-dessus
id est la clef du skill
Liste des exercices
Url: /filtre_exercices.php
<xml version="1.0" encoding="utf-8"> <exercices> <id_4>Exercice 1 </id_4> <id_5>Exercice 2 </id_5> <id_6>Exercice 3 </id_6> </exercices> </xml>
id est la clef de l'exercice
Liste des niveaux
Url: /filtre_niveaux.php
<xml version="1.0" encoding="utf-8"> <levels> <id_4>CM 1</id_4> <id_5>CM 2</id_5> </levels> </xml>
id est la clef du niveau
2. Liste des logs
Url: /get_log.php
Paramètres à envoyer pour filtrer la requete (ils sont tous facultatif)
plug_log_utilisateur = 4 plug_log_groupe = cm2-a plug_log_domaine = domaine-a plug_log_application = 3 plug_log_exercice = 3 plug_log_skill = 3 plug_log_exercice_session = identifiant de l'exercice de session plug_log_evaluation = A plug_log_type = 1 //1 seulement les logs exercice 0 seulement les logs question plug_log_datedebut = '2010-12-01' plug_log_datefin = '2010-12-20' plug_log_level = 2
La fonction renvoie un résultat en XML contenant tous les enregistrements de la requete
<xml version="1.0" encoding="utf-8"> <info> <nb_log>2</nb_log> </info> <logs> <log_1> <application>test</application> <sessionexercice>sv5sd6fsd4f5s</sessionexercice> <sfguard>Matthieu Pascal (mpascal)</sfguard> <skill>Skill 2</skill> <exercice>Exercice 2</exercice> <level>CM1 niv 2</level> <evaluation>Z</evaluation> <score>10</score> <nb_total_question>10</nb_total_question> <nb_printed_question>10</nb_printed_question> <question>sdfs fsd fsdfs dfsf</question> <answer>sdf sdf s</answer> <expected>sdf sdfs df</expected> <answer_time></answer_time> <answer_intermediate></answer_intermediate> <answer_proposed></answer_proposed> <date_question>2010-12-10 15:42:09</date_question> <date_created>2010-12-15 16:36:44</date_created> <date_updated>2010-12-15 16:36:44</date_updated> </log_1> <log_4> <application>ryxeo</application> <sessionexercice></sessionexercice> <sfguard>Frederic Graft (fgraft)</sfguard> <skill>Skill 2</skill> <exercice>Exercice 3</exercice> <level>CM2 niv 1</level> <evaluation>E</evaluation> <score></score> <nb_total_question></nb_total_question> <nb_printed_question></nb_printed_question> <question></question> <answer></answer> <expected></expected> <answer_time></answer_time> <answer_intermediate></answer_intermediate> <answer_proposed></answer_proposed> <date_question>2010-12-06 11:40:26</date_question> <date_created>2010-12-15 16:36:44</date_created> <date_updated>2010-12-15 16:36:44</date_updated> </log_4> </logs> </xml>
to become