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