encoding et petite modif
[platal.git] / include / webservices / ax / client.inc
1 <?php\r
2 \r
3 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker:\r
4     class Ancien {      \r
5         var $NOM_PATR; \r
6         var $PART_NOM;\r
7         var $PRENOM;\r
8         var $NOM_USUEL;\r
9         var $PART_NOMUS;\r
10         var $NOM_COMPLET;\r
11         var $CIVILITE;\r
12         var $GRADE;\r
13         var $CORPS;\r
14         var $PROMO;\r
15         var $NATIONALITE;\r
16         var $CORPS_LIBELLE;\r
17         var $EMAIL;     \r
18         var $ADRESSE = array();\r
19         var $NUM_ADRESSE = 0;\r
20         var $ACTIVITE = array();\r
21         var $NUM_ACTIVITE = 0;\r
22         var $FORMATION = array();\r
23         var $NUM_FORMATION = 0;        \r
24         var $Erreur;\r
25            \r
26     function Ancien ($aa) {\r
27        if ($aa<>'')\r
28        {\r
29         foreach ($aa as $k=>$v)\r
30            $this->$k = $aa[$k];\r
31        } \r
32     }   \r
33     function Ajout_adresse ($adresse,$i) {\r
34            $this->ADRESSE[$i] = $adresse; \r
35            $this->NUM_ADRESSE++;\r
36     }       \r
37     function Ajout_activite ($activite,$i) {\r
38            $this->ACTIVITE[$i] = $activite; \r
39            $this->NUM_ACTIVITE++;\r
40     }  \r
41     function Ajout_formation ($formation,$i) {\r
42            $this->FORMATION[$i] = $formation; \r
43            $this->NUM_FORMATION++;\r
44     }    \r
45         function Ajout_erreur ($erreur) {\r
46            $this->Erreur = $erreur; \r
47     }       \r
48     function Erreur() {\r
49         return $this->Erreur;\r
50     }   \r
51     function Nom_patr() {\r
52         return $this->NOM_PATR;\r
53     }\r
54     function Part_nom() {\r
55         return $this->PART_NOM;\r
56     }\r
57     function Prenom() {\r
58         return $this->PRENOM;\r
59     }\r
60     function Nom_usuel() {\r
61         return $this->NOM_USUEL;\r
62     }\r
63     function Part_nomus() {\r
64         return $this->PART_NOMUS;\r
65     }\r
66     function Nom_complet() {\r
67         return $this->NOM_COMPLET;\r
68     }       \r
69     function Civilite() {\r
70         return $this->CIVILITE;\r
71     }  \r
72     function Grade() {\r
73         return $this->GRADE;\r
74     }  \r
75     function Corps() {\r
76         return $this->CORPS;\r
77     }  \r
78     function Corps_Libelle() {\r
79         return $this->CORPS_LIBELLE;\r
80     }     \r
81     function Promo() {\r
82         return $this->PROMO;\r
83     }  \r
84     function Nationalite() {\r
85         return $this->NATIONALITE;\r
86     }    \r
87     function Email() {\r
88         return $this->EMAIL;\r
89     }        \r
90     function Adresse_type($i) {\r
91         return $this->ADRESSE[$i]->TYPE;\r
92     }  \r
93     function Adresse1($i) {\r
94         return $this->ADRESSE[$i]->ADRESS1;\r
95     }\r
96     function Adresse2($i) {\r
97         return $this->ADRESSE[$i]->ADRESS2;\r
98     }\r
99     function Adresse3($i) {\r
100         return $this->ADRESSE[$i]->ADRESS3;\r
101     }\r
102     function Code_pst($i) {\r
103         return $this->ADRESSE[$i]->CODE_PST;\r
104     }\r
105     function Ville($i) {\r
106         return $this->ADRESSE[$i]->VILLE;\r
107     }\r
108     function Zip_cedex($i) {\r
109         return $this->ADRESSE[$i]->ZIPCEDEX;\r
110     }\r
111     function Etat_region($i) {\r
112         return $this->ADRESSE[$i]->ETATREGION;\r
113     }\r
114     function Pays($i) {\r
115         return $this->ADRESSE[$i]->PAYS;\r
116     }\r
117     function Mobile($i) {\r
118         return $this->ADRESSE[$i]->MOBILE;\r
119     }\r
120     function Tel($i) {\r
121         return $this->ADRESSE[$i]->TEL;\r
122     }   \r
123     function Fax($i) {\r
124         return $this->ADRESSE[$i]->FAX;\r
125     }   \r
126     function Num_adresse() {\r
127         return $this->NUM_ADRESSE;\r
128     }   \r
129     function Entreprise($i) {\r
130         return $this->ACTIVITE[$i]->ENTREPRISE;;\r
131     }\r
132     function Raison_sociale($i) {\r
133         return $this->ACTIVITE[$i]->RAISON_SOCIALE;\r
134     }\r
135     function Fonction($i) {\r
136         return $this->ACTIVITE[$i]->FONCTION;\r
137     }           \r
138     function Adresse_act_type($i) {\r
139         return $this->ACTIVITE[$i]->TYPE;\r
140     }\r
141     function Adresse_act_adresse1($i) {\r
142         return $this->ACTIVITE[$i]->ADRESS1;\r
143     }\r
144     function Adresse_act_adresse2($i) {\r
145         return $this->ACTIVITE[$i]->ADRESS2;\r
146     }\r
147     function Adresse_act_adresse3($i) {\r
148         return $this->ACTIVITE[$i]->ADRESS3;\r
149     }\r
150     function Adresse_act_code_pst($i) {\r
151         return $this->ACTIVITE[$i]->CODE_PST;\r
152     }\r
153     function Adresse_act_ville($i) {\r
154         return $this->ACTIVITE[$i]->VILLE;\r
155     }\r
156     function Adresse_act_zip_cedex($i) {\r
157         return $this->ACTIVITE[$i]->ZIPCEDEX;\r
158     }\r
159     function Adresse_act_etat_region($i) {\r
160         return $this->ACTIVITE[$i]->ETATREGION;\r
161     }\r
162     function Adresse_act_pays($i) {\r
163         return $this->ACTIVITE[$i]->PAYS;\r
164     }\r
165     function Adresse_act_mobile($i) {\r
166         return $this->ACTIVITE[$i]->MOBILE;\r
167     }\r
168     function Adresse_act_tel($i) {\r
169         return $this->ACTIVITE[$i]->TEL;\r
170     }   \r
171     function Adresse_act_fax($i) {\r
172         return $this->ACTIVITE[$i]->FAX;\r
173     }                            \r
174     function Num_activite() {\r
175         return $this->NUM_ACTIVITE;\r
176     }    \r
177     function Formation($i) {\r
178         return $this->FORMATION[$i]->LIBELLE;\r
179     }                            \r
180     function Num_formation() {\r
181         return $this->NUM_FORMATION;\r
182     }                                                                               \r
183     }\r
184 \r
185     class Adresse {     \r
186         var $TYPE; \r
187         var $ADRESS1;\r
188         var $ADRESS2;\r
189         var $ADRESS3;\r
190         var $CODE_PST;\r
191         var $VILLE;\r
192         var $ZIPCEDEX;\r
193         var $ETATREGION;\r
194         var $PAYS;\r
195         var $MOBILE;\r
196         var $TEL;\r
197         var $FAX;\r
198            \r
199     function Adresse ($aa) {\r
200        foreach ($aa as $k=>$v)\r
201            $this->$k = $aa[$k]; \r
202     }               \r
203   }\r
204   \r
205     class Activite {    \r
206         var $ENTREPRISE;\r
207         var $RAISON_SOCIALE;\r
208         var $FONCTION;\r
209         var $TYPE; \r
210         var $ADRESS1;\r
211         var $ADRESS2;\r
212         var $ADRESS3;\r
213         var $CODE_PST;\r
214         var $VILLE;\r
215         var $ZIPCEDEX;\r
216         var $ETATREGION;\r
217         var $PAYS;\r
218         var $MOBILE;\r
219         var $TEL;\r
220         var $FAX;\r
221            \r
222     function Activite ($aa) {\r
223        foreach ($aa as $k=>$v)\r
224            $this->$k = $aa[$k]; \r
225     }               \r
226   }  \r
227   \r
228     class Formation {    \r
229         var $LIBELLE;\r
230            \r
231     function Formation ($aa) {\r
232        foreach ($aa as $k=>$v)\r
233            $this->$k = $aa[$k]; \r
234     }               \r
235   }    \r
236       \r
237     function xml_get_children($vals, &$i) {\r
238         $children = array();\r
239         if (isset($vals[$i]['value'])) $children[] = $vals[$i]['value'];\r
240         \r
241         while (++$i < count($vals)) {\r
242        switch ($vals[$i]['type']) {\r
243        case 'cdata':\r
244            $children[] = $vals[$i]['value'];\r
245            break;\r
246 \r
247        case 'complete':\r
248            $children[] = array(\r
249                'tag'        => $vals[$i]['tag'],\r
250                'attributes' => isset($vals[$i]['attributes'])?\r
251                                $vals[$i]['attributes'] : null,\r
252                'value'      => $vals[$i]['value'],\r
253            );\r
254            break;\r
255 \r
256        case 'open':\r
257            $children[] = array(\r
258                'tag'        => $vals[$i]['tag'],\r
259                'attributes' => isset($vals[$i]['attributes'])?\r
260                                $vals[$i]['attributes'] : null,\r
261                'children'  => xml_get_children($vals, $i),\r
262            );\r
263            break;\r
264 \r
265        case 'close':\r
266            return $children;\r
267        }\r
268        }\r
269     }\r
270 \r
271     //fonction principale de récupération des données de l'ancien\r
272     //à indiquer: matricule de l'ancien\r
273     function recupere_infos_ancien($AX_MATRICULE)\r
274     {\r
275         include('config.inc');\r
276                \r
277         $id =13;//13 params persos ancien\r
278         $id_ad = 11; //12 params adresse\r
279         $id_ac = 14; //15 params adresse    \r
280         $id_fo = 1; //1 params fonction \r
281         \r
282         $erreur = "";\r
283         \r
284         // Génération d'un identifiant de "session" inter-serveurs\r
285         $id_session = md5 (uniqid (rand())); \r
286         \r
287         // Connexion au serveur pour lui fournir l'identifiant et lui demander un challenge\r
288         $challenge = file_get_contents ($nom_script_renvoi_challenge."?id_session=".urlencode($id_session));    \r
289         if ($challenge == 'ERROR') \r
290         {\r
291             $erreur = "Erreur lors de la demande du challenge";\r
292         }   \r
293         else\r
294         {\r
295           // On va relire la clé privée (codée)\r
296           $privkeypass = $phrase;\r
297           $pkey_txt = file_get_contents ($chemin_cle_privee);\r
298           if (($pkey_res = openssl_pkey_get_private($pkey_txt, $privkeypass)) == false) \r
299           {\r
300             $erreur = "Erreur lors de l'ouverture de la clé privée";\r
301           }\r
302           else\r
303           {\r
304             // Signature du challenge (cryptage avec clé privée)\r
305             if ( openssl_private_encrypt($challenge, $response, $pkey_res) == false ) \r
306             {\r
307              $erreur = "Erreur lors du cryptage du challenge avec la clé privée";\r
308             }\r
309             else\r
310             {\r
311               // Signature du login (cryptage avec clé privée)\r
312               if ( openssl_private_encrypt($AX_MATRICULE, $AX_MATRICULE_CRYPTE, $pkey_res) == false ) \r
313               {\r
314                  $erreur = "Erreur lors du cryptage du matricule avec la clé privée";\r
315               }\r
316               else\r
317               {\r
318                     // Envoi de la réponse au serveur avec l'identifiant de l'ancien dont on veut récupérer les infos\r
319                     $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
320                                         \r
321                     $parser = xml_parser_create();\r
322                     xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);\r
323                     xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE,  1);\r
324                     xml_parse_into_struct($parser, $reponse_serveur, $vals, $index);\r
325                     xml_parser_free($parser);\r
326             \r
327                     $tree = array();\r
328                     $tree[] = array(\r
329                        'tag'        => $vals[0]['tag'],\r
330                      'attributes' => isset($vals[0]['attributes'])?\r
331                                        $vals[0]['attributes'] : null,\r
332                     'children'  => xml_get_children($vals, $i = 0),\r
333                      );\r
334             \r
335                     for ($i=0; $i < $id; $i++)  \r
336                     {\r
337                         $val_ancien[$tree[0]['children'][0]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$i]['value'];         \r
338                     }                               \r
339        \r
340                    $Ancien_renvoye = new Ancien($val_ancien);   \r
341                                 \r
342                     //adresse while pour nbre d'adresses\r
343                     $num_ad = 0;\r
344                     while ($tree[0]['children'][0]['children'][$id]['tag'] == 'ADRESSE')\r
345                     {\r
346                         for ($i=0; $i <= $id_ad; $i++)  \r
347                         {\r
348                             $val_adresse[$tree[0]['children'][0]['children'][$id]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['value'];          \r
349                         }                               \r
350                        \r
351                        $Adresse_renvoyee = new Adresse($val_adresse);\r
352                        $Ancien_renvoye->Ajout_adresse($Adresse_renvoyee,$num_ad);    \r
353                 \r
354                         //prochaine adresse\r
355                         $num_ad = $num_ad + 1;\r
356                         $id = $id+1;\r
357                     }\r
358     \r
359                     //idem pour activité    \r
360                     $num_ac = 0;\r
361                     while ($tree[0]['children'][0]['children'][$id]['tag'] == 'ACTIVITE')\r
362                     {\r
363                         for ($i=0; $i <= $id_ac; $i++)  \r
364                         {\r
365                             $val_activite[$tree[0]['children'][0]['children'][$id]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['value'];         \r
366                            \r
367                             for ($j=0; $j <= $id_ad; $j++)  \r
368                             {\r
369                                 $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
370                             }\r
371                         }      \r
372                 \r
373                        $Activite_renvoyee = new Activite($val_activite);\r
374                        $Ancien_renvoye->Ajout_activite($Activite_renvoyee,$num_ac);                  \r
375                 \r
376                         //prochaine activité\r
377                         $num_ac = $num_ac + 1;\r
378                         $id = $id+1;\r
379                     }\r
380                     //idem pour formation    \r
381                     $num_fo = 0;\r
382                     while ($tree[0]['children'][0]['children'][$id]['tag'] == 'FORMATION')\r
383                     {\r
384                         for ($i=0; $i <= $id_fo; $i++)  \r
385                         {\r
386                             $val_formation[$tree[0]['children'][0]['children'][$id]['children'][$i]['tag']] = $tree[0]['children'][0]['children'][$id]['children'][$i]['value'];         \r
387                         }      \r
388                 \r
389                        $Formation_renvoyee = new Formation($val_formation);\r
390                        $Ancien_renvoye->Ajout_formation($Formation_renvoyee,$num_fo);                  \r
391                 \r
392                         //prochaine formation\r
393                         $num_fo = $num_fo + 1;\r
394                         $id = $id+1;\r
395                     }                    \r
396               }\r
397             }\r
398           }\r
399         }\r
400         \r
401         //erreur indiquée\r
402         if ($erreur)  //erreur ici\r
403         {\r
404             $Ancien_renvoye = new Ancien('');\r
405             $Ancien_renvoye->Ajout_erreur($erreur); \r
406         }\r
407         else\r
408         { //renvoyée par le fichier serveur_renvoie_infos\r
409             $Ancien_renvoye->Ajout_erreur($tree[0]['children'][1]['value']);\r
410         }       \r
411         \r
412         return $Ancien_renvoye;\r
413     }\r
414    \r
415 ?>\r