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