synchro ax reparee
authorPascal Corpet <pascal.corpet@m4x.org>
Fri, 27 May 2005 14:14:41 +0000 (14:14 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 26 Jun 2008 21:29:03 +0000 (23:29 +0200)
git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-659

include/synchro_ax.inc.php
include/webservices/ax/client.inc [new file with mode: 0755]
include/webservices/ax/config.inc [new file with mode: 0755]
include/webservices/ax/dtd_ancien.dtd [new file with mode: 0755]

index 5c7876e..4317f1f 100644 (file)
@@ -26,8 +26,7 @@ require_once('user.func.inc.php');
 
 function get_user_ax($uid, $raw=false)
 {
-    require_once('webservices/manageurs.inc.php');
-    require_once('webservices/manageurs.client.inc.php');
+    require_once('webservices/ax/client.inc');
 
     global $globals;
 
@@ -37,93 +36,62 @@ function get_user_ax($uid, $raw=false)
           WHERE u.user_id = {?}", $uid);
     $matricule_ax = $res->fetchOneCell();
 
-    $array = get_annuaire_infos(2, $matricule_ax, 0);
+    $ancien = recupere_infos_ancien($matricule_ax);
 
     $userax = Array();
     $userax['matricule_ax'] = $matricule_ax;
     $userax['uid'] = $uid;
     
-    $ancien = $array['dump']['ancien'];
-    $userax['nom'] = $ancien[0];
-    // ancien1 = ?
-    $userax['nom_usage'] = ($ancien[2] != $ancien[0])?$ancien[2]:"";
-    // ancien3 = ?
-    $userax['prenom'] = $ancien[4];
-    $userax['sexe'] = ($ancien[5] != 'M')?1:0;
-    $userax['promo'] = $ancien[6];
-    // ancien7 = Type de membre à l'AX
-    // ancien8 = dernière année de cotisation
-    $userax['nationalite'] = $ancien[9];
+    $userax['nom'] = $ancien->Nom_patr();
+    $userax['nom_usage'] = $ancien->Nom_usuel();
+    if ($userax['nom_usage'] == $userax['nom']) $userax['nom_usage'] = '';
+    $userax['prenom'] = $ancien->Prenom();
+    $userax['sexe'] = ($ancien->Civilite() != 'M')?1:0;
+    $userax['promo'] = $ancien->Promo();
+    $userax['nationalite'] = $ancien->Nationalite();
     if ($userax['nationalite'] == 'F') $userax['nationalite'] = 'Français';
-    // ancien10 = ?
-    // ancine11 = ?
-    $userax['date'] = substr($ancien[12], 0, 10);
-    $userax['mobile'] = $array['cell'];
-    if ($ancien[13] == 'D' || $ancien[13] == 'Z') {
+    //$userax['date'] = substr($ancien[12], 0, 10);
+    $userax['mobile'] = $ancien->Mobile(0);
+    if ($ancien->Corps() == 'D' || $ancien->Corps() == 'Z') {
         $userax['applis_join'] = "pas un corps";
     } else {
-        $userax['applis_join'] = "Corps ".$ancien[13]." - ".$ancien[14];
+        $userax['applis_join'] = "Corps ".$ancien->Corps()." - ".$ancien->Grade();
     }
-    // ancien15 = login AX
-    // ancien16 = ?
-    // ancien17 = prenom.nom
-
     $userax['adr_pro'] = array();
-    if (is_array($array['dump']['pro'])) {
-        foreach ($array['dump']['pro'] as $job) {
-            // job0 = code identifiant de l'entreprise
-            $jobax['entreprise'] = $job[1];
-            // job2 = comme job1 (peut etre plus court pour les noms longs)
-            // job4 = sigle de l'entreprise
-            // job5 = maj de l'adresse pro
-            $jobax['fonction'] = $job[6];
-            // job7 = ? peut être id de l'adresse dans la base AX
-            // job8 = matricule AX
-            // job9 = type d'adresse PRO = professionelle
-            $jobax['adr1'] = $job[10];
-            $jobax['adr2'] = $job[11];
-            $jobax['adr3'] = $job[12];
-            $jobax['cp']   = $job[13];
-            $jobax['ville'] = $job[14];
-            // job15 = ?
-            // job16 = ?
-            $jobax['pays'] = $job[17];
-            // job18 = ?
-            $jobax['tel']  = $job[19];
-            $jobax['fax']  = $job[20];
-            // job21 = f ?
-            // job22 = ?
-            // job23 = date de mise à jour de l'adresse
-            // job24 = ?
-            $userax['adr_pro'][] = $jobax;
-        }
+    
+    for ($i = 0; $i < $ancien->Num_Activite(); $i++) {
+        $jobax = array();
+        $jobax['entreprise'] = $ancien->Entreprise($i);
+        $jobax['fonction'] = $ancien->Fonction($i);
+        $jobax['adr1'] = $ancien->Adresse_act_adresse1($i);
+        $jobax['adr2'] = $ancien->Adresse_act_adresse2($i);
+        $jobax['adr3'] = $ancien->Adresse_act_adresse3($i);
+        $jobax['cp']   = $ancien->Adresse_act_code_pst($i);
+        $jobax['ville'] = $ancien->Adresse_act_ville($i);
+        $jobax['region'] = $ancien->Adresse_act_etat_region($i);
+        $jobax['pays'] = $ancien->Adresse_act_pays($i);
+        $jobax['tel']  = $ancien->Adresse_act_tel($i);
+        $jobax['fax']  = $ancien->Adresse_act_fax($i);
+        $jobax['mobile'] = $ancien->Adresse_act_mobile($i);
+        $userax['adr_pro'][] = $jobax;
     }
 
     $userax['adr'] = array();
-    if (is_array($array['dump']['adresse'])) {
-        foreach ($array['dump']['adresse'] as $adr) {
-            // adr0 : ?
-            // adr1 = matricule ax
-            // adr2 = type d'adresse P = personnelle
-            $adrax['adr1'] = $adr[3];
-            $adrax['adr2'] = $adr[4];
-            $adrax['adr3'] = $adr[5];
-            $adrax['cp'] = $adr[6];
-            $adrax['ville'] = $adr[7];
-            // adr8 = ?
-            // adr9 = ?
-            $adrax['pays'] = $adr[10];
-            // adr 11 = ?
-            $adrax['tel'] = $adr[12];
-            $adrax['fax'] = $adr[13];
-            // adr 14 = t ?
-            // adr15 = ?
-            // adr 16 = date de mise a jour
-            $userax['adr'][] = $adrax;
-        }
+    foreach ($array['dump']['adresse'] as $adr) {
+        $adrax = array();
+        $adrax['adr1'] = $ancien->Adresse1($i);
+        $adrax['adr2'] = $ancien->Adresse2($i);
+        $adrax['adr3'] = $ancien->Adresse3($i);
+        $adrax['cp'] = $ancien->Code_pst($i);
+        $adrax['ville'] = $ancien->Ville($i);
+        $adrax['region'] = $ancien->Etat_region($i);
+        $adrax['pays'] = $ancien->Pays($i);
+        $adrax['tel'] = $ancien->Tel($i);
+        $adrax['fax'] = $ancien->Fax($i);
+        $userax['adr'][] = $adrax;
     }
     if ($raw) {
-        $userax['raw'] = $array;
+        $userax['raw'] = $ancien;
     }
 
     return $userax;
diff --git a/include/webservices/ax/client.inc b/include/webservices/ax/client.inc
new file mode 100755 (executable)
index 0000000..8a77c0a
--- /dev/null
@@ -0,0 +1,415 @@
+<?php\r
+\r
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker:\r
+    class Ancien {      \r
+        var $NOM_PATR; \r
+        var $PART_NOM;\r
+        var $PRENOM;\r
+        var $NOM_USUEL;\r
+        var $PART_NOMUS;\r
+        var $NOM_COMPLET;\r
+        var $CIVILITE;\r
+        var $GRADE;\r
+        var $CORPS;\r
+        var $PROMO;\r
+        var $NATIONALITE;\r
+        var $CORPS_LIBELLE;\r
+        var $EMAIL;     \r
+        var $ADRESSE = array();\r
+        var $NUM_ADRESSE = 0;\r
+        var $ACTIVITE = array();\r
+        var $NUM_ACTIVITE = 0;\r
+        var $FORMATION = array();\r
+        var $NUM_FORMATION = 0;        \r
+        var $Erreur;\r
+           \r
+    function Ancien ($aa) {\r
+       if ($aa<>'')\r
+       {\r
+        foreach ($aa as $k=>$v)\r
+           $this->$k = $aa[$k];\r
+       } \r
+    }   \r
+    function Ajout_adresse ($adresse,$i) {\r
+           $this->ADRESSE[$i] = $adresse; \r
+           $this->NUM_ADRESSE++;\r
+    }       \r
+    function Ajout_activite ($activite,$i) {\r
+           $this->ACTIVITE[$i] = $activite; \r
+           $this->NUM_ACTIVITE++;\r
+    }  \r
+    function Ajout_formation ($formation,$i) {\r
+           $this->FORMATION[$i] = $formation; \r
+           $this->NUM_FORMATION++;\r
+    }    \r
+        function Ajout_erreur ($erreur) {\r
+           $this->Erreur = $erreur; \r
+    }       \r
+    function Erreur() {\r
+        return $this->Erreur;\r
+    }   \r
+    function Nom_patr() {\r
+        return $this->NOM_PATR;\r
+    }\r
+    function Part_nom() {\r
+        return $this->PART_NOM;\r
+    }\r
+    function Prenom() {\r
+        return $this->PRENOM;\r
+    }\r
+    function Nom_usuel() {\r
+        return $this->NOM_USUEL;\r
+    }\r
+    function Part_nomus() {\r
+        return $this->PART_NOMUS;\r
+    }\r
+    function Nom_complet() {\r
+        return $this->NOM_COMPLET;\r
+    }       \r
+    function Civilite() {\r
+        return $this->CIVILITE;\r
+    }  \r
+    function Grade() {\r
+        return $this->GRADE;\r
+    }  \r
+    function Corps() {\r
+        return $this->CORPS;\r
+    }  \r
+    function Corps_Libelle() {\r
+        return $this->CORPS_LIBELLE;\r
+    }     \r
+    function Promo() {\r
+        return $this->PROMO;\r
+    }  \r
+    function Nationalite() {\r
+        return $this->NATIONALITE;\r
+    }    \r
+    function Email() {\r
+        return $this->EMAIL;\r
+    }        \r
+    function Adresse_type($i) {\r
+        return $this->ADRESSE[$i]->TYPE;\r
+    }  \r
+    function Adresse1($i) {\r
+        return $this->ADRESSE[$i]->ADRESS1;\r
+    }\r
+    function Adresse2($i) {\r
+        return $this->ADRESSE[$i]->ADRESS2;\r
+    }\r
+    function Adresse3($i) {\r
+        return $this->ADRESSE[$i]->ADRESS3;\r
+    }\r
+    function Code_pst($i) {\r
+        return $this->ADRESSE[$i]->CODE_PST;\r
+    }\r
+    function Ville($i) {\r
+        return $this->ADRESSE[$i]->VILLE;\r
+    }\r
+    function Zip_cedex($i) {\r
+        return $this->ADRESSE[$i]->ZIPCEDEX;\r
+    }\r
+    function Etat_region($i) {\r
+        return $this->ADRESSE[$i]->ETATREGION;\r
+    }\r
+    function Pays($i) {\r
+        return $this->ADRESSE[$i]->PAYS;\r
+    }\r
+    function Mobile($i) {\r
+        return $this->ADRESSE[$i]->MOBILE;\r
+    }\r
+    function Tel($i) {\r
+        return $this->ADRESSE[$i]->TEL;\r
+    }   \r
+    function Fax($i) {\r
+        return $this->ADRESSE[$i]->FAX;\r
+    }   \r
+    function Num_adresse() {\r
+        return $this->NUM_ADRESSE;\r
+    }   \r
+    function Entreprise($i) {\r
+        return $this->ACTIVITE[$i]->ENTREPRISE;;\r
+    }\r
+    function Raison_sociale($i) {\r
+        return $this->ACTIVITE[$i]->RAISON_SOCIALE;\r
+    }\r
+    function Fonction($i) {\r
+        return $this->ACTIVITE[$i]->FONCTION;\r
+    }           \r
+    function Adresse_act_type($i) {\r
+        return $this->ACTIVITE[$i]->TYPE;\r
+    }\r
+    function Adresse_act_adresse1($i) {\r
+        return $this->ACTIVITE[$i]->ADRESS1;\r
+    }\r
+    function Adresse_act_adresse2($i) {\r
+        return $this->ACTIVITE[$i]->ADRESS2;\r
+    }\r
+    function Adresse_act_adresse3($i) {\r
+        return $this->ACTIVITE[$i]->ADRESS3;\r
+    }\r
+    function Adresse_act_code_pst($i) {\r
+        return $this->ACTIVITE[$i]->CODE_PST;\r
+    }\r
+    function Adresse_act_ville($i) {\r
+        return $this->ACTIVITE[$i]->VILLE;\r
+    }\r
+    function Adresse_act_zip_cedex($i) {\r
+        return $this->ACTIVITE[$i]->ZIPCEDEX;\r
+    }\r
+    function Adresse_act_etat_region($i) {\r
+        return $this->ACTIVITE[$i]->ETATREGION;\r
+    }\r
+    function Adresse_act_pays($i) {\r
+        return $this->ACTIVITE[$i]->PAYS;\r
+    }\r
+    function Adresse_act_mobile($i) {\r
+        return $this->ACTIVITE[$i]->MOBILE;\r
+    }\r
+    function Adresse_act_tel($i) {\r
+        return $this->ACTIVITE[$i]->TEL;\r
+    }   \r
+    function Adresse_act_fax($i) {\r
+        return $this->ACTIVITE[$i]->FAX;\r
+    }                            \r
+    function Num_activite() {\r
+        return $this->NUM_ACTIVITE;\r
+    }    \r
+    function Formation($i) {\r
+        return $this->FORMATION[$i]->LIBELLE;\r
+    }                            \r
+    function Num_formation() {\r
+        return $this->NUM_FORMATION;\r
+    }                                                                               \r
+    }\r
+\r
+    class Adresse {     \r
+        var $TYPE; \r
+        var $ADRESS1;\r
+        var $ADRESS2;\r
+        var $ADRESS3;\r
+        var $CODE_PST;\r
+        var $VILLE;\r
+        var $ZIPCEDEX;\r
+        var $ETATREGION;\r
+        var $PAYS;\r
+        var $MOBILE;\r
+        var $TEL;\r
+        var $FAX;\r
+           \r
+    function Adresse ($aa) {\r
+       foreach ($aa as $k=>$v)\r
+           $this->$k = $aa[$k]; \r
+    }               \r
+  }\r
+  \r
+    class Activite {    \r
+        var $ENTREPRISE;\r
+        var $RAISON_SOCIALE;\r
+        var $FONCTION;\r
+        var $TYPE; \r
+        var $ADRESS1;\r
+        var $ADRESS2;\r
+        var $ADRESS3;\r
+        var $CODE_PST;\r
+        var $VILLE;\r
+        var $ZIPCEDEX;\r
+        var $ETATREGION;\r
+        var $PAYS;\r
+        var $MOBILE;\r
+        var $TEL;\r
+        var $FAX;\r
+           \r
+    function Activite ($aa) {\r
+       foreach ($aa as $k=>$v)\r
+           $this->$k = $aa[$k]; \r
+    }               \r
+  }  \r
+  \r
+    class Formation {    \r
+        var $LIBELLE;\r
+           \r
+    function Formation ($aa) {\r
+       foreach ($aa as $k=>$v)\r
+           $this->$k = $aa[$k]; \r
+    }               \r
+  }    \r
+      \r
+    function xml_get_children($vals, &$i) {\r
+        $children = array();\r
+        if (isset($vals[$i]['value'])) $children[] = $vals[$i]['value'];\r
+        \r
+        while (++$i < count($vals)) {\r
+       switch ($vals[$i]['type']) {\r
+       case 'cdata':\r
+           $children[] = $vals[$i]['value'];\r
+           break;\r
+\r
+       case 'complete':\r
+           $children[] = array(\r
+               'tag'        => $vals[$i]['tag'],\r
+               'attributes' => isset($vals[$i]['attributes'])?\r
+                               $vals[$i]['attributes'] : null,\r
+               'value'      => $vals[$i]['value'],\r
+           );\r
+           break;\r
+\r
+       case 'open':\r
+           $children[] = array(\r
+               'tag'        => $vals[$i]['tag'],\r
+               'attributes' => isset($vals[$i]['attributes'])?\r
+                               $vals[$i]['attributes'] : null,\r
+               'children'  => xml_get_children($vals, $i),\r
+           );\r
+           break;\r
+\r
+       case 'close':\r
+           return $children;\r
+       }\r
+       }\r
+    }\r
+\r
+    //fonction principale de récupération des données de l'ancien\r
+    //à indiquer: matricule de l'ancien\r
+    function recupere_infos_ancien($AX_MATRICULE)\r
+    {\r
+        include('config.inc');\r
+               \r
+        $id =13;//13 params persos ancien\r
+        $id_ad = 11; //12 params adresse\r
+        $id_ac = 14; //15 params adresse    \r
+        $id_fo = 1; //1 params fonction \r
+        \r
+        $erreur = "";\r
+        \r
+        // Génération d'un identifiant de "session" inter-serveurs\r
+        $id_session = md5 (uniqid (rand())); \r
+        \r
+        // Connexion au serveur pour lui fournir l'identifiant et lui demander un challenge\r
+        $challenge = file_get_contents ($nom_script_renvoi_challenge."?id_session=".urlencode($id_session));    \r
+        if ($challenge == 'ERROR') \r
+        {\r
+            $erreur = "Erreur lors de la demande du challenge";\r
+        }   \r
+        else\r
+        {\r
+          // On va relire la clé privée (codée)\r
+          $privkeypass = $phrase;\r
+          $pkey_txt = file_get_contents ($chemin_cle_privee);\r
+          if (($pkey_res = openssl_pkey_get_private($pkey_txt, $privkeypass)) == false) \r
+          {\r
+            $erreur = "Erreur lors de l'ouverture de la clé privée";\r
+          }\r
+          else\r
+          {\r
+            // Signature du challenge (cryptage avec clé privée)\r
+            if ( openssl_private_encrypt($challenge, $response, $pkey_res) == false ) \r
+            {\r
+             $erreur = "Erreur lors du cryptage du challenge avec la clé privée";\r
+            }\r
+            else\r
+            {\r
+              // Signature du login (cryptage avec clé privée)\r
+              if ( openssl_private_encrypt($AX_MATRICULE, $AX_MATRICULE_CRYPTE, $pkey_res) == false ) \r
+              {\r
+                 $erreur = "Erreur lors du cryptage du matricule avec la clé privée";\r
+              }\r
+              else\r
+              {\r
+                    // Envoi de la réponse au serveur avec l'identifiant de l'ancien dont on veut récupérer les infos\r
+                    $reponse_serveur .= file_get_contents ($nom_script_renvoi_infos."?id_session=".urlencode($id_session)."&AX_MATRICULE_CRYPTE=".urlencode($AX_MATRICULE_CRYPTE)."&response=".urlencode($response));\r
+                                        \r
+                    $parser = xml_parser_create();\r
+                    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);\r
+                    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE,  1);\r
+                    xml_parse_into_struct($parser, $reponse_serveur, $vals, $index);\r
+                    xml_parser_free($parser);\r
+            \r
+                    $tree = array();\r
+                    $tree[] = array(\r
+                       'tag'        => $vals[0]['tag'],\r
+                     'attributes' => isset($vals[0]['attributes'])?\r
+                                       $vals[0]['attributes'] : null,\r
+                    'children'  => xml_get_children($vals, $i = 0),\r
+                     );\r
+            \r
+                    for ($i=0; $i < $id; $i++)  \r
+                    {\r
+                        $val_ancien[$tree[0]['children'][0]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$i]['value'];         \r
+                    }                               \r
+       \r
+                   $Ancien_renvoye = new Ancien($val_ancien);   \r
+                                \r
+                    //adresse while pour nbre d'adresses\r
+                    $num_ad = 0;\r
+                    while ($tree[0]['children'][0]['children'][$id]['tag'] == 'ADRESSE')\r
+                    {\r
+                        for ($i=0; $i <= $id_ad; $i++)  \r
+                        {\r
+                            $val_adresse[$tree[0]['children'][0]['children'][$id]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['value'];          \r
+                        }                               \r
+                       \r
+                       $Adresse_renvoyee = new Adresse($val_adresse);\r
+                       $Ancien_renvoye->Ajout_adresse($Adresse_renvoyee,$num_ad);    \r
+                \r
+                        //prochaine adresse\r
+                        $num_ad = $num_ad + 1;\r
+                        $id = $id+1;\r
+                    }\r
+    \r
+                    //idem pour activité    \r
+                    $num_ac = 0;\r
+                    while ($tree[0]['children'][0]['children'][$id]['tag'] == 'ACTIVITE')\r
+                    {\r
+                        for ($i=0; $i <= $id_ac; $i++)  \r
+                        {\r
+                            $val_activite[$tree[0]['children'][0]['children'][$id]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['value'];         \r
+                           \r
+                            for ($j=0; $j <= $id_ad; $j++)  \r
+                            {\r
+                                $val_activite[$tree[0]['children'][0]['children'][$id]['children'][$i]['children'][$j]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['children'][$j]['value'];         \r
+                            }\r
+                        }      \r
+                \r
+                       $Activite_renvoyee = new Activite($val_activite);\r
+                       $Ancien_renvoye->Ajout_activite($Activite_renvoyee,$num_ac);                  \r
+                \r
+                        //prochaine activité\r
+                        $num_ac = $num_ac + 1;\r
+                        $id = $id+1;\r
+                    }\r
+                    //idem pour formation    \r
+                    $num_fo = 0;\r
+                    while ($tree[0]['children'][0]['children'][$id]['tag'] == 'FORMATION')\r
+                    {\r
+                        for ($i=0; $i <= $id_fo; $i++)  \r
+                        {\r
+                            $val_formation[$tree[0]['children'][0]['children'][$id]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['value'];         \r
+                        }      \r
+                \r
+                       $Formation_renvoyee = new Formation($val_formation);\r
+                       $Ancien_renvoye->Ajout_formation($Formation_renvoyee,$num_fo);                  \r
+                \r
+                        //prochaine formation\r
+                        $num_fo = $num_fo + 1;\r
+                        $id = $id+1;\r
+                    }                    \r
+              }\r
+            }\r
+          }\r
+        }\r
+        \r
+        //erreur indiquée\r
+        if ($erreur)  //erreur ici\r
+        {\r
+            $Ancien_renvoye = new Ancien('');\r
+            $Ancien_renvoye->Ajout_erreur($erreur); \r
+        }\r
+        else\r
+        { //renvoyée par le fichier serveur_renvoie_infos\r
+            $Ancien_renvoye->Ajout_erreur($tree[0]['children'][1]['value']);\r
+        }       \r
+        \r
+        return $Ancien_renvoye;\r
+    }\r
+   \r
+?>\r
diff --git a/include/webservices/ax/config.inc b/include/webservices/ax/config.inc
new file mode 100755 (executable)
index 0000000..88b9813
--- /dev/null
@@ -0,0 +1,13 @@
+<?php\r
+       \r
+       global $globals;\r
+        //chemin de stockage de la clé privée  A MODIFIER\r
+        $chemin_cle_privee = $globals->spoolroot."/configs/cle_privee_ax.pem";\r
+        //phrase cryptant la clé privée\r
+        $phrase = $globals->webservice->pass_ax;\r
+//     "Cryptage de la cle pour polytechnique.org";\r
+            \r
+        //paramètres serveurs  \r
+        $nom_script_renvoi_challenge = $globals->webservice->host_ax."serveur_genere_challenge.php";\r
+        $nom_script_renvoi_infos = $globals->webservice->host_ax."serveur_renvoie_infos_ancien_direct.php";\r
+?>\r
diff --git a/include/webservices/ax/dtd_ancien.dtd b/include/webservices/ax/dtd_ancien.dtd
new file mode 100755 (executable)
index 0000000..c3d1598
--- /dev/null
@@ -0,0 +1,35 @@
+       <!ELEMENT MESSAGE (CODE_RETOUR, ANCIEN)>\r
+       <!ELEMENT CODE_RETOUR (#PCDATA)>\r
+       <!ELEMENT ANCIEN (NOM_PATR, PART_NOM, PRENOM, NOM_USUEL, PART_NOMUS, NOM_COMPLET, CIVILITE, GRADE, CORPS, PROMO, NATIONALITE, CORPS_LIBELLE, EMAIL, ADRESSE, ACTIVITE, FORMATION)>\r
+       <!ELEMENT NOM_PATR (#PCDATA)>\r
+       <!ELEMENT PART_NOM (#PCDATA)>\r
+       <!ELEMENT PRENOM (#PCDATA)>\r
+       <!ELEMENT NOM_USUEL (#PCDATA)>\r
+       <!ELEMENT PART_NOMUS (#PCDATA)>\r
+       <!ELEMENT NOM_COMPLET (#PCDATA)>\r
+       <!ELEMENT CIVILITE (#PCDATA)>\r
+       <!ELEMENT GRADE (#PCDATA)>\r
+       <!ELEMENT CORPS (#PCDATA)>\r
+       <!ELEMENT PROMO (#PCDATA)>\r
+       <!ELEMENT NATIONALITE (#PCDATA)>        \r
+       <!ELEMENT EMAIL (#PCDATA)>              \r
+       <!ELEMENT CORPS_LIBELLE (#PCDATA)>      \r
+       <!ELEMENT ADRESSE (TYPE, ADRESS1, ADRESS2, ADRESS3, CODE_PST, VILLE, ZIPCEDEX, ETATREGION, PAYS, MOBILE,TEL,FAX)>\r
+       <!ELEMENT TYPE (#PCDATA)>\r
+       <!ELEMENT ADRESS1 (#PCDATA)>\r
+       <!ELEMENT ADRESS2 (#PCDATA)>\r
+       <!ELEMENT ADRESS3 (#PCDATA)>\r
+       <!ELEMENT CODE_PST (#PCDATA)>\r
+       <!ELEMENT VILLE (#PCDATA)>\r
+       <!ELEMENT ZIPCEDEX (#PCDATA)>\r
+       <!ELEMENT ETATREGION (#PCDATA)>\r
+       <!ELEMENT PAYS (#PCDATA)>\r
+       <!ELEMENT MOBILE (#PCDATA)>\r
+       <!ELEMENT TEL (#PCDATA)>\r
+       <!ELEMENT FAX (#PCDATA)>\r
+       <!ELEMENT ACTIVITE (ENTREPRISE, RAISON_SOCIALE, FONCTION, ADRESSE)>\r
+       <!ELEMENT ENTREPRISE (#PCDATA)>\r
+       <!ELEMENT RAISON_SOCIALE (#PCDATA)>\r
+       <!ELEMENT FONCTION (#PCDATA)>\r
+       <!ELEMENT FORMATION (LIBELLE)>\r
+       <!ELEMENT LIBELLE (#PCDATA)>
\ No newline at end of file