Projet

Général

Profil

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
Redmine Appliance - Powered by TurnKey Linux